2011-09-16 29 views
1

我有2個100%相同的WAVE文件,我將其轉換爲FFT。重疊他們我得到一個完美的匹配。對齊FFT幀

但是如果我砍掉非幀大小的塊在數據然後的不匹配FFT(從端部對準)之一的開始。

我猜,這是因爲什麼頻率包含在框架之內。如果一個頻率在兩幀之間被分割,則與在一幀中集中的情況相比,它們在兩者中將顯示出較低的能量。

如何補償/繞過此效應?

+1

您不能 - FFT僅僅是輸入數據的變換表示 - 如果您更改輸入數據,則會更改數據的變換表示形式。也許這會更好,如果你解釋你是真的*試圖實現? –

+0

我真的想比較聲音。 「你不能」不是我將如何解決這個問題,雖然我有時會在我找到答案之前得到很多答覆。 :) –

+1

您需要了解*的特點*音樂是*時間變化*。如果你想以某種方式來表徵一首歌, Shazam的確如此,那麼你需要做的工作比採用FFT更多一些,因爲這並不能真正減少歌曲中*信息的總量。您需要找到減少信息量的巧妙方法,以便儘可能少的字節唯一地表徵歌曲,並且不會受到例如由於音樂引起的小改變的影響。不同的壓縮級別等。 –

回答

0

你爲什麼會想到傅立葉變換的結果,你切斷了樣本之一的部分後是相同的?我不確定你想要補償什麼,這是預期的行爲。

如果你比較兩個樣本,看看他們在「簽名」多少有所不同,那麼你可能要歸你DFT的結果。將每個頻率倉中的所有能量值相加,然後將每個倉中的值除以該總和,以便結果中所有能量的總和爲1.允許您比較兩個不同樣本的蘋果與蘋果,而不考慮長度。

注意,這是唯一的一個,也許是過於簡單化,標準化的DFT的方式。還有無數其他人。根據您的輸入數據以及您打算如何處理它,日誌規範化可能會比線性規範更好。

+0

我知道這是預期的行爲。如果數據改變,FFT會改變。但我需要以某種方式補償。例如計算3幀的平均值(N = -1,0,1)是否有效?我一直在嘗試理解FFT的重疊幀,但是我所有的嘗試似乎都會模糊頻率或導致不匹配。 –

+2

但是,你想補償*爲*?如果您對兩個不相同的音頻樣本執行DFT,結果將不會完全相同。沒有辦法使它們完全相同,並且仍然有工作的DFT。你想用DFT結果做什麼? – BishopRook

+0

我正在製作一個音頻搜索引擎/比較引擎。我正在識別用於對齊的峯值能量/熱點。從我所看到的FFT幀的轉換引起4096字節幀的顯着差異(猜測〜10%),所以一些「熱點」是不同的。這是由於我猜想幀之間的能量分配不同造成的。所以我想補償幀中的不同移位。 –

1

做到這一點的唯一準確的方法是IFFT你的數據(假設無損初始窗口),然後重新窗口它,它使用新的失調重新FFT。可能會更好地製作一組FFT幀,每幀都有不同的初始偏移量。

1

您可能想要在計算FFT之前應用窗函數。

http://www.google.com/search?q=windowing+fft

http://en.wikipedia.org/wiki/Discrete_Fourier_transform

「使用DFT意味着所分析的有限區段是一個無限擴展的週期信號中的一個 週期;如果這不是 實際上真的,一個窗口功能必須使用以降低頻譜 文物。「

我想你在正確的軌道上將信號分解爲重疊的幀,但你需要考慮你的匹配標準(找出一些啓發式方法,例如三個主要頻率),幀的大小(太小,你會錯過較低的頻率,太高,你有更少的分辨率)等做一些研究,我相信很多人已經解決了這個問題,並published papers