2014-03-02 226 views
0

如果此問題非常基本,我很抱歉。重疊添加信號合成

我使用FFT將音頻信號(當前是純正弦波)從時域變換到頻域,然後返回到時域以比較差異與原始信號。

當前我在做:
- 採用非重疊幀(例如每幀1024個採樣)。
- FFT該幀
- IFFT的頻率域信息
- 發送輸出到揚聲器

EDIT(1):
這似乎現在的工作(見圖像不具有和具有一個窗口,在這裏輸入=棕色,輸出=藍色)。
enter image description here
enter image description here
END EDIT(1)

現在我要執行的overlapp相加法:
- 以具有50%重疊的幀(樣品0-1023,512-1535,1024至2047年...)
- 應用漢寧窗對ecah幀
- FFT
- IFFT
- ???這是我的問題!

所以在我的iFFT結束時,我有1024個樣本的輸出幀。這是否意味着我需要將前512個採樣發送到揚聲器,而其他512個採樣(512-1023)應該保存在緩衝區中以添加到下一幀的前512個採樣中?那麼簡單,還是我誤解了一些東西?

謝謝!

+0

爲什麼你會期望輸出是原始正弦波的質量差的副本(除了你沒有看到它的事實)? – jaket

+0

@jaket我附上了一張圖片。輸入聽起來像連續的,而輸出聽起來像是短脈衝。根據我的理解,輸出因頻譜泄漏而不同,輸入頻率並不完全匹配任何FFT頻率倉。 – Merlevede

+0

您的代碼中存在一個錯誤。未經修改的複雜FFT結果的IFFT應返回確切的原始數據(減去微小的數字舍入問題)。所以你在搗毀你的數據。例如:扔掉相位信息將極大地扭曲你的結果。 – hotpaw2

回答

1

通常情況下,當你進行重疊加法時,你在FFT之前零填充數據,並保存剩下的尾部以便稍後添加到下一個處理的幀的結果中。

您最初的「質量不好」問題可能是由於某些缺乏FFT和IFFT之間的精確相位信息(完整複雜的FFT結果)的錯誤。你將不得不解決這個問題,無論你是否重疊 - 添加或重疊 - 保存快速卷積或其他處理。

+0

你(和另一個用戶)對錯誤是正確的。謝謝!我不瞭解零填充,如果我抽取1024個樣本,那麼填充什麼? – Merlevede