確定,所以基本上,我在執行下面的算法:譜圖 - 計算是錯誤的
1)切片與128
2的重疊大小256
的信號)乘以每個塊與海寧窗
3)獲取DFT
4)計算值ABS sqrt(re*re+im*im)
PL奧廷這些值,爲imshow
我得到以下結果:
這看起來不錯,它清楚地顯示出一定的差異,即在信號具有最振幅節目秒殺。然而,在Python我得到這樣的結果:
我知道我在做正確的事情,但是,也做錯了什麼。我似乎無法找出哪些因素使我不認爲自己做得正確。
任何粗略的想法,我可能會在這裏出錯?我的意思是,在這裏繪製abs
價值是否正確?
感謝
編輯:夾緊後
結果..
UPDATE:
代碼:
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;
}
通常你會轉換爲對數幅度(即dB)而不是線性幅度,所以它會像'10 * log10(re * re + im * im)'。 –
@PaulR請使用您建議的公式查看我的更新後的帖子。它看起來不正確。有很多負值,並且Y軸也是錯誤的。繪製頻率(maxBin_index * Fs/size)通過信號給出相同的結果。有什麼建議麼?將不勝感激。 – Phorce
您可能需要對這些值進行偏移/縮放以使其看起來合理 - dB值可能介於-100到+20之間,並且您可能需要顏色或強度值從0到255,因此您需要偏移和相應地縮放(也可以限制最大/最小值)。 –