Java 使用FFT/STFT绘制频谱分析会导致伪影
我试图用这个简单地在它的频域中显示一个WAV文件。我尝试通过设置窗口大小的短时傅里叶变换来实现这一点 输出是通过在JFrame上绘制像素来处理的(振幅越高,点越亮),这是我所知道的最基本的 我试图绘制的信号是在10秒内用44100Hz采样器从1000Hz到10000Hz的啁啾。输出应如下所示: 但是,我的输出如下所示: 这是一种权利。。但正如你所看到的,这里有某种噪音模式。这似乎不是随机的。 尝试过的一件事是简单地降低像素的增益,但这很难解决问题: 我用了一个汉恩过滤器 也许我尝试的方式是错误的。因此,请让我简单解释一下: 我有一个WAV文件-我删除了头,只是得到数据部分。一个10秒长、频率为44100Hz的信号应该能提供441000个样本。 我读取了2048个样本大小的块和256个样本大小的windowstep数组。 每一步都将经过Hann滤波器,然后是FFT,FFT被添加到像素阵列中,然后被绘制 是否有一些明显的我遗漏的东西可以通过截图看到? 我使用的FFT算法是否“不够好”Java 使用FFT/STFT绘制频谱分析会导致伪影,java,signal-processing,fft,spectrum,Java,Signal Processing,Fft,Spectrum,我试图用这个简单地在它的频域中显示一个WAV文件。我尝试通过设置窗口大小的短时傅里叶变换来实现这一点 输出是通过在JFrame上绘制像素来处理的(振幅越高,点越亮),这是我所知道的最基本的 我试图绘制的信号是在10秒内用44100Hz采样器从1000Hz到10000Hz的啁啾。输出应如下所示: 但是,我的输出如下所示: 这是一种权利。。但正如你所看到的,这里有某种噪音模式。这似乎不是随机的。 尝试过的一件事是简单地降低像素的增益,但这很难解决问题: 我用了一个汉恩过滤器 也许我尝试的方式是
如果你需要更多的信息或者我的解释不够好,请告诉我。提前感谢您您的对比度太高,或者颜色贴图范围太宽。尝试重新缩放并提高映射到黑色的最低FFT幅度,并降低FFT输出上的增益,以便较少的FFT幅度映射到白色。这将消除数字和量化噪声(舍入等),并将一些放大到白色的级别恢复到绘图中的灰度范围。对比度太高,或者颜色贴图范围太宽。尝试重新缩放并提高映射到黑色的最低FFT幅度,并降低FFT输出上的增益,以便较少的FFT幅度映射到白色。这将消除数字和量化噪声(舍入等),并将一些放大到白色的级别恢复到绘图中的灰度范围。非常感谢-这真的很有帮助!非常感谢-这真的很有帮助!