频谱图 - 计算错误

时间:2014-01-17 20:54:04

标签: audio signal-processing fft

好的,基本上,我正在实施以下算法:

1)切片信号的大小为256,重叠为128

2)将每个块与Hanning窗口相乘

3)获得DFT

4)计算abs值sqrt(re*re+im*im)

将这些值绘制为imshow,我得到以下结果:

enter image description here

这看起来还不错,它清楚地显示出一些差异,即信号具有最大振幅的尖峰显示出来。但是,在Python中我得到了这个结果:

enter image description here

我知道我正在做正确的事情,但也做错了什么。我似乎无法找出哪个让我觉得我没有正确地完成它。

对于我可能在哪里出错的任何粗略想法?我的意思是,这里是否正确地绘制abs值?

enter image description here

由于

编辑:

夹紧后的结果..

enter image description here

更新:

代码:

for(unsigned j=0; (j < stft_temp[i].size()/2); j++)
    {
        double v = 10 * log10(stft_temp[i][j].re * stft_temp[i][j].re + stft_temp[i][j].im * stft_temp[i][j].im);

        double pixe = 1.5 * (v + 100);

        STFT[i][j] = (int) pixe; 
    }

1 个答案:

答案 0 :(得分:0)

通常,您可能希望使用对数幅度,然后缩放到所需范围,通常为0..255。在伪代码中:

mag_dB = 10 * log10(re * re + im * im);      // get log magnitude (dB)

pixel_intensity = 1.5 * (mag_dB + 100);      // offset and scale

pixel_intensity = min(pixel_intensity, 255); // clamp to 0..255
pixel_intensity = max(pixel_intensity, 0);