我一直在玩FFT的Exocortex實現,但我遇到了一些問題。DSP-通過FFT在頻域進行濾波
無論何時在調用iFFT之前修改頻率點的振幅,結果信號包含一些點擊和彈出,特別是當信號中存在低頻(如鼓或貝司)時。但是,如果我用相同的因子衰減所有的垃圾箱,這種情況就不會發生。
讓我把一個4樣本FFT的輸出緩衝器的一個例子:
// Bin 0 (DC)
FFTOut[0] = 0.0000610351563
FFTOut[1] = 0.0
// Bin 1
FFTOut[2] = 0.000331878662
FFTOut[3] = 0.000629425049
// Bin 2
FFTOut[4] = -0.0000381469727
FFTOut[5] = 0.0
// Bin 3, this is the first and only negative frequency bin.
FFTOut[6] = 0.000331878662
FFTOut[7] = -0.000629425049
輸出由對浮體,每個代表一個單個倉的實部和imaginay零件。因此,bin 0(數組索引0,1)將表示DC頻率的實部和虛部。正如你所看到的,箱1和箱3都具有相同的值(除了Im部分的符號),所以我認爲箱3是第一個負頻率,並且最後指標(4,5)將是最後的正數頻率箱。
然後衰減頻率段1這是我做的:
// Attenuate the 'positive' bin
FFTOut[2] *= 0.5;
FFTOut[3] *= 0.5;
// Attenuate its corresponding negative bin.
FFTOut[6] *= 0.5;
FFTOut[7] *= 0.5;
對於我使用1024的長度FFT的實際測試中,我總是提供所有的樣本,以便不填充0是需要。
// Attenuate
var halfSize = fftWindowLength/2;
float leftFreq = 0f;
float rightFreq = 22050f;
for(var c = 1; c < halfSize; c++)
{
var freq = c * (44100d/halfSize);
// Calc. positive and negative frequency indexes.
var k = c * 2;
var nk = (fftWindowLength - c) * 2;
// This kind of attenuation corresponds to a high-pass filter.
// The attenuation at the transition band is linearly applied, could
// this be the cause of the distortion of low frequencies?
var attn = (freq < leftFreq) ?
0 :
(freq < rightFreq) ?
((freq - leftFreq)/(rightFreq - leftFreq)) :
1;
// Attenuate positive and negative bins.
mFFTOut[ k ] *= (float)attn;
mFFTOut[ k + 1 ] *= (float)attn;
mFFTOut[ nk ] *= (float)attn;
mFFTOut[ nk + 1 ] *= (float)attn;
}
顯然我做錯了什麼,但不知道是什麼。
我不想使用FFT輸出作爲生成一組FIR係數的手段,因爲我試圖實現一個非常基本的動態均衡器。
在頻域中過濾的正確方法是什麼?我錯過了什麼?
另外,是否真的需要衰減負頻率呢?我見過一個FFT實現,其中neg。頻率值在合成之前歸零。
在此先感謝。
您似乎認爲高通濾波是通過採用加窗DFT,將係數相乘並進行逆變換(「resyntehsis」)完成的。那麼,這不是通常的方式。您應該先閱讀數字信號處理的基礎知識,或者詢問更具體的問題。 http://www.dspguide.com/pdfbook.htm – leonbloy 2010-05-31 14:21:35
我並沒有特別考慮高通濾波器的特性,而是在頻域濾波,我認爲這只是一個例子。另外,不是'通常的方式'不會使我的問題無效。我所要求的只是一些解釋,爲什麼我在綜合後會出現這些奇怪的扭曲現象,這在本書中沒有解釋,這就是我在這裏問的原因。我認爲這不值得贊成,真的。 – Trap 2010-05-31 16:27:02
你的問題是合理的,但你的疑惑是概念性的,與編程(甚至是Matlab編程)無關,但與DSP和DFT的基本原理有關。要回答它,應該複製 - 粘貼任何數字信號處理書的兩三章。 – leonbloy 2010-06-01 16:43:03