如何在同一时间应用多个过滤器?

问题描述:

我需要同时应用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; 
    } 

与多个堆叠的卷积过滤器的问题(如你的滤波器程序实施建议)是每次穿过,你(理论上)需要访问所有对以前的过滤器传递的影响值。

为了说明这一点,考虑以下示例:

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) 
... 

因此,通过组合这两个滤波器,可以使得函数变得更加复杂,因为每个通道都依赖于比前一个更多的原始输入。您可以预先计算系数,但需要一些手动工作。

编辑:我没有考虑任何缩放比例。如果单个过滤器通道的比例因子始终相同,则当然可以将其分解并应用于最终结果。