You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python从FFT生成的PSD频谱图提取第二高峰值及find_peaks问题咨询

原因说明

  1. 直接对全量PSD降序取第二位的方法,得到的通常是最高峰周边的邻近采样点,并非独立的第二高峰,因此结果不符合预期。
  2. find_peaks返回大量无效峰是因为未设置幅度/显著度过滤阈值,函数会将所有局部微小波动判定为峰值;另外之前绘制峰值时x轴传入的peaks是PSD数组的下标而非实际频率值,会导致峰值显示位置错误。

实现代码

from scipy.signal import find_peaks
import numpy as np

# 识别独立峰值:prominence参数设置峰与周边基线的最小落差,过滤背景噪声产生的微峰值
peaks, _ = find_peaks(PSD_A[L_A], prominence=np.max(PSD_A[L_A]) * 0.01)
# 提取所有峰值的PSD和对应频率
peak_psd_list = PSD_A[L_A][peaks]
peak_freq_list = freq_A[L_A][peaks]
# 按PSD值降序排序
sorted_peak_idx = np.argsort(peak_psd_list)[::-1]
# 提取第二高峰对应的频率,转为实数值
second_peak_frequency = np.real(peak_freq_list[sorted_peak_idx[1]])
# 如需要第二高峰的PSD值,可使用:second_peak_psd = np.real(peak_psd_list[sorted_peak_idx[1]])

如果你的场景中噪声幅度固定,也可以把prominence替换为height参数,直接设置峰值的最小PSD阈值,过滤效果更直接。


内容的提问来源于stack exchange,提问作者lqope54

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:09:04