2011-05-01 60 views
1

我需要同時應用FIR低通,高通和陷波濾波器。每個濾波器都有自己的一組係數。全部使用以下算法。我可以添加或平均三種輸出嗎?還是有更好的方法?如何在同一時間應用多個過濾器?

SAMPLE fir_basic(SAMPLE input, int ntaps, const SAMPLE FIRcoefficient[], delay[])  
    { 
     int ii; 
     SAMPLE accum; 

     /* store input at the beginning of the delay line */ 
     delay[0] = input; 

     /* calc FIR */ 
     accum = 0; 
     for (ii = 0; ii < ntaps; ii++) { 
      accum += FIRcoefficient[ii] * delay[ii]; 
     } 

     /* shift delay line */ 
     for (ii = ntaps - 2; ii >= 0; ii--) { 
      delay[ii + 1] = delay[ii]; 
     } 

     return accum; 
    } 

回答

1

與多個堆疊的卷積過濾器的問題(如你的濾波器程序實施建議)是每次穿過,你(理論上)需要訪問所有對以前的過濾器傳遞的影響值。

爲了說明這一點,考慮以下示例:

Input: abcdefghijk 
Filter 1: 121 
Filter 2: 1210121 

對於通1,將得到以下輸出:

a: 2a+b 
b: a+2b+c 
c: b+2c+d 
d: c+2d+e 
e: d+2e+f 
... 

在通2,通常使用已經由通處理的數據1作爲一個整體:

a: b+2c+d 
b: a+c+2d+e 
c: 2a+b+d+2e+f 
d: a+2b+c+e+2f+g 

如果將二者結合起來:

a: (a+2b+c)+2(b+2c+d)+(c+2d+e) 
b: (2a+b)+(b+2c+d)+2(c+2d+e)+(d+2e+f) 
... 

因此,通過組合這兩個濾波器,可以使得函數變得更加複雜,因爲每個通道都依賴於比前一個更多的原始輸入。您可以預先計算係數,但需要一些手動工作。

編輯:我沒有考慮任何縮放比例。如果單個過濾器通道的比例因子始終相同,則當然可以將其分解並應用於最終結果。

相關問題