正弦信号FFT原理疑问:修改序列末值为何未观测到频谱泄露
未观测到FFT频谱泄露的核心原因
最普遍场景:线性刻度无法识别低幅度泄露
仅修改单采样点引入的信号不连续性极低,对应的频谱泄露幅度远低于主瓣峰值,在线性纵轴下完全不可见:
- N点正弦信号的总能量为
N * A²/2(A为信号幅值) - 仅修改最后1个点引入的误差能量最大为
A²(仅当该点原值为±A时),误差能量占比仅为2/N - 若采样点数N≥1000,误差占比不到0.2%,对应旁瓣幅度比主瓣低至少27dB,线性刻度下会被主瓣完全覆盖,视觉上没有任何差异
- 切换为对数(dB)纵轴绘制即可观测到旁瓣明显抬升,也就是预期的频谱泄露现象
其他需排查的低概率情况
- 代码逻辑错误:修改时域序列后未重新执行FFT计算,直接复用了之前的计算结果,输出自然完全一致
- 无效修改:原始序列的最后一个点本身取值就是0,修改操作没有改变信号本身,FFT结果不变
- 绘图参数限制:纵轴范围设置过大,像素级的幅度差异无法被观测到
快速验证方案
你可以通过两个小测试快速定位原因:
- 用dB刻度绘制FFT幅度:
20 * np.log10(np.abs(fft(y)) / np.max(np.abs(fft(y)))),归一化后可以清晰看到修改前后的旁瓣差异 - 放大修改操作的影响:将序列最后10%的采样点都设为0,再用线性刻度绘制即可直接观测到明显的频谱泄露
内容的提问来源于stack exchange,提问作者Joshua
相关产品推荐
相关产品推荐

