使用 FFT/STFT 绘制的频谱分析会导致伪影

Plotted Spectrum Analysis with FFT/STFT causes artifacts

我正在尝试使用此 FFT 在其频域中简单地显示 WAV 文件。我尝试通过 Short-Time-Fourier-Transform 设置 Window 大小等

来完成此操作

输出是通过在 JFrame 上绘制像素来处理的(振幅越高,点越亮),我知道这是非常基本的。

我尝试绘制的信号是 10 秒内从 1000Hz 到 10000Hz 的线性调频信号,采样率为 44100Hz。输出应如下所示:

Chirp-Signal

但是我的输出是这样的:

Chirp-Signal with artifacts

这是对的..但正如您所看到的那样,存在某种噪声模式。这似乎不是随机的。 尝试的一件事是简单地减少像素的增益,但解决得不好:

Chirp-Signal with reduced gain

我使用了 here 中的 Hann-Filter。

也许我尝试做的方式有问题。所以请让我简要解释一下: 我有一个 WAV 文件 - 我删除了 header 以获取数据部分。一个 10 秒长的 44100Hz 信号应该给我 441000 个样本。 我按 2048 个样本的大小和一个 256 个样本的窗口步长读取了带有块的数组。 每一步都将 运行 通过 Hann-Filter,然后将 FFT 添加到像素阵列,然后绘制像素阵列。

是否有明显的我遗漏的东西可以通过屏幕截图看到? 我用的FFT算法不是"good enough"吗?

如果您需要更多信息或者我的解释不够好,请告诉我。提前谢谢你

你的对比度太高,或者色图范围太宽。尝试重新缩放并提高映射到黑色的最低 FFT 幅度,并降低 FFT 输出的增益,以便更少的部分映射到白色。这将消除数字和量化噪声(舍入等),并将一些被吹出的白色水平带回您的绘图中的灰度范围。