好的,基本上,我正在实施以下算法:
1)切片信号的大小为256
,重叠为128
2)将每个块与Hanning窗口相乘
3)获得DFT
4)计算abs值sqrt(re*re+im*im)
将这些值绘制为imshow
,我得到以下结果:
这看起来还不错,它清楚地显示出一些差异,即信号具有最大振幅的尖峰显示出来。但是,在Python中我得到了这个结果:
我知道我正在做正确的事情,但也做错了什么。我似乎无法找出哪个让我觉得我没有正确地完成它。
对于我可能在哪里出错的任何粗略想法?我的意思是,这里是否正确地绘制abs
值?
由于
编辑:
夹紧后的结果..
更新:
代码:
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;
}
答案 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);