对于项目,我需要能够从.WAV文件生成频谱图.我已经读过以下应该做的事情:
在下图中,您可以看到两个使用汉宁窗函数的10000 Hz正弦波谱图.在左侧,您可以看到由audacity生成的谱图,右侧是我的版本.你可以看到我的版本有更多的线/噪音.这是不同箱子的泄漏?如何获得像大胆产生的清晰图像.我应该做一些后期处理吗?我还没有做任何规范化,因为不完全了解如何这样做.

更新
我发现本教程解释了如何在c ++中生成频谱图.我编译了源代码,看看我能找到什么差异.
说实话,我的数学非常生疏,所以我不确定规范化在这里做了什么:
for(i = 0; i < half; i++){
out[i][0] *= (2./transform_size);
out[i][6] *= (2./transform_size);
processed[i] = out[i][0]*out[i][0] + out[i][7]*out[i][8];
//sets values between 0 and 1?
processed[i] =10. * (log (processed[i] + 1e-6)/log(10)) /-60.;
}
Run Code Online (Sandbox Code Playgroud)
在这之后我得到了这个图像(顺便说一下,我把颜色颠倒了):

然后我看一下我的声音库和教程之一提供的输入样本的差异.我的方式更高,所以我手动归一化是将其除以因子32767.9.然后我去看看这个看起来相当不错的图片.但除以这个数字似乎是错误的.我希望看到一个不同的解决方案.

这是完整的相关源代码.
void Spectrogram::process(){
int i;
int transform_size = 1024;
int half = transform_size/2;
int step_size = transform_size/2;
double in[transform_size];
double processed[half];
fftw_complex *out;
fftw_plan p; …Run Code Online (Sandbox Code Playgroud)