低通滤波后下采样,为何频谱图仍出现高于100Hz的信号?
解析频谱图出现高于100Hz信号的原因
我来帮你拆解这个问题,出现这种情况大概率是低通滤波器的过渡带特性或者下采样环节的细节导致的,咱们一步步分析:
1. 5阶Butterworth滤波器的过渡带不够陡峭
你使用的是5阶Butterworth低通滤波器,这类滤波器并非理想的“一刀切”滤波——它在截止频率(100Hz)处仅衰减3dB,100Hz以上的信号不会被完全滤除,只是逐渐衰减。比如:
- 110Hz的信号经过5阶Butterworth滤波后,衰减大约只有5-6dB(还保留约50%的幅度)
- 120Hz的信号衰减也仅约10dB(保留约30%的幅度)
这些未被完全滤除的100-125Hz区间的信号,在下采样到250Hz后(此时奈奎斯特频率是125Hz),不会发生混叠,会直接出现在频谱图中,这是核心原因之一。
2. 下采样环节的抗混叠滤波器无法完全弥补过渡带残留
你分两次调用ss.decimate进行下采样:
updated_array=ss.decimate(filtered_array, 12, ftype = 'fir') newarray = ss.decimate(updated_array,10, ftype = 'fir')
scipy.signal.decimate的fir类型滤波器默认会添加抗混叠滤波器,截止频率为0.8*(新采样率/2):
- 第一次下采样到2500Hz时,抗混叠截止是
0.8*1250=1000Hz,远高于你的100Hz低通,不会产生冲突 - 第二次下采样到250Hz时,抗混叠截止是
0.8*125=100Hz,和你的低通截止一致,但它只能补充滤波,无法完全消除你之前低通滤波器过渡带残留的信号。
3. 频谱图的高分辨率放大了残留信号
你生成频谱图时使用了nfft=sampling_rate*4(即1000点),频率分辨率为250/1000=0.25Hz,这意味着频谱图的频率轴精度足够,原本在过渡带的微弱残留信号会被清晰显示出来,容易被误认为是“高于100Hz的有效信号”。
解决建议
- 提高滤波器阶数:把Butterworth滤波器的阶数从5提高到10甚至15,过渡带会更陡峭,100Hz以上的信号衰减会更明显
- 调整截止频率:考虑把低通截止频率设为90Hz(低于下采样后的奈奎斯特频率125Hz),给过渡带留出足够空间,确保100Hz以上的信号被充分衰减
- 合并下采样步骤:直接一次调用
ss.decimate(filtered_array, 120, ftype='fir')(30000/250=120),减少多次滤波的潜在问题 - 验证滤波器幅频响应:用
freqz函数绘制你的低通滤波器幅频曲线,直观查看100Hz以上的衰减情况:b, a = butter_lowpass(100, 30000, order=5) w, h = freqz(b, a, worN=8000) plt.plot((30000/(2*np.pi))*w, 20*np.log10(np.abs(h))) plt.title('Butterworth Lowpass Filter Frequency Response') plt.xlabel('Frequency [Hz]') plt.ylabel('Amplitude [dB]') plt.grid(True) plt.show()
内容的提问来源于stack exchange,提问作者T.Tran
相关产品推荐
相关产品推荐

