2014-01-09 59 views
0

這個問題主要與這個答案有關:Here如果@Paul R有機會看它,那麼這將是理想的。計算STFT的赫茲

我有一個信號,我已經計算了STFT。 NFFT的大小爲256,重疊爲128.這產生了包含輸出的21個獨立塊。

因此,我想將其轉換爲赫茲,以查看信號中這些點的每個不同的赫茲。我已經用下面的公式計算幅度:

sqrt(output[i][j].re * output[i][j].re + output[i][j].im * output[i][j].im) 

這將產生以下:

enter image description here

我主要混淆如何在接下來的部分作品。例如,我基本上有一個2D矢量,其中包含來自STFT的所有塊(每個塊的大小均爲256)。因此,我是否要計算塊內每個點的幅值,計算幅值的最大值,然後使用公式freq = i_max * Fs/N

如果是這樣,它看起來像以下的(一個例子,而不是實際數據):

D0 = {0.23 + 1.58, 
     1.05 + 0.56, 
     0.58 + 1.38, 
     ....., 
     0.58 + 87.6} 
     = mag[0] = sqrt(0.23 * 0.23 + 1.58 * 1.58), 
     .... 
     .... 

這將繼而產生量值的向量對於每個STFT輸出的。從那裏,我可以計算出這是最高的(假設7),然後我可以計算如下:

freq = 7 * 44100/4 

其中44100 =採樣率和STFT塊4 =大小。

這會給我每個塊的頻率。

這是正確的,還是,我完全錯過了這一點?

回答

1

你混淆了一些東西,你的輸出圖像似乎是21×256 = 5376點的所有21塊(FFT),它真的沒有什麼幫助!

你需要找到使用每個塊的基頻(N FFT = 256):

freq = MaxMagnitudeFromThisBlockFFT * Fs/NFFT 

對於您的情況:

freq = MaxMagnitudeFromThisBlockFFT * 44100/256 

在最後你會發現21次的頻率爲每個塊FFT

PS:

你NFFT爲256,你的採樣速率爲44100,然後你的頻率分辨率是44100/256 = 172,265625,如果你想要更準確的嘗試NFFT = 2048或4096.

+0

嗨,事情是。對於STFT,我將使用譜圖,這似乎已經發現了幅度。 '10 * log10(sqrt(re * re + im * im)'所以我只需要計算這些箱的最高數,然後計算htz?例如,可以使用頻譜圖的結果/ – Phorce

+0

I從來沒有使用光譜圖來計算它,我總是使用magnetude方程** sqrt(re * re + im * im)**,這是正確的方法,現在您需要的只是從上半部分獲取最大值結果... – ederwander

+0

謝謝你的工作!只是不使用光譜圖來計算?得到它了 :)!我很可能會看到從塊的htz變化?即如果一個塊比另一個塊低,我認爲頻率反而會增加? – Phorce