FIR滤波器长度是作为系数包括的截距? - Matlab

时间:2017-11-02 20:13:56

标签: matlab signal-processing terminology moving-average

我对FIR系统的术语和模拟有些困惑。我将非常感谢帮助纠正错误并告知错误。

假设FIR滤波器具有系数数组A=[1,c2,c3,c4]。元素的数量为L,因此过滤器的长度为L,但顺序为L-1

混淆1:截距1是否被视为系数?它总是1吗?

困惑2:我的理解是否正确,对于给定的示例,长度为L= 4order=3

Confusion3:在数学上,我可以把它写成:

x[n] = \sum_{l=0}^{L-1}A_l u[n-l]

其中u是输入数据,l从零开始。然后为了模拟上面的等式,我做了以下卷积。这是正确的吗?:

N =100; %number of data
A = [1, 0.1, -0.5, 0.62];
u = rand(1,N);
x(1) = 0.0;
x(2) = 0.0;
x(3) = 0.0;
x(4) = 0.0;
for n = 5:N
    x(n) = A(1)*u(n) + A(2)*u(n-1)+ A(3)*u(n-3)+ A(4)*u(n-4);
end

1 个答案:

答案 0 :(得分:1)

  

混淆1:截距1是否被视为系数?它总是1吗?

是的,它被认为是一个系数,并且不是总是1.通过将所有系数相乘(即,将滤波器的输入或输出与系数进行缩放),在系数阵列中包含全局比例因子是很常见的。 [1,c1,c2,c2] K相当于使用系数为[K,K*c1,K*c2,K*c3]的过滤器。另请注意,许多FIR滤波器设计技术会生成系数,其幅度峰值接近系数阵列的中间,并在开始和结束时逐渐减小。

  

困惑2:我的理解是否正确,对于给定的示例,长度L= 4和订单= 3?

是的,这是正确的

  

混乱3: [...] 然后为了模拟上面的等式,我做了以下卷积。这是对的吗? [...]

几乎,但不完全。以下是您需要解决的一些问题。

  1. 在主for循环中,应用公式,您将增加A的索引,并将每个术语的u索引减1,因此您实际得到{{ 1}}
  2. 您实际上可以在x(n) = A(1)*u(n) + A(2)*u(n-1)+ A(3)*u(n-2)+ A(4)*u(n-3)
  3. 开始此循环
  4. 前几个输出仍然应该使用公式,但是删除n=4 u(n-k)的条件n-k将小于1.因此,对于x(3),您将丢弃1术语,对于x(2),您将丢弃2个术语,对于x(1),您将丢弃3个术语。
  5. 修改后的代码如下所示:

    x(1)=A(1)*u(1);
    x(2)=A(1)*u(2) + A(2)*u(1);
    x(3)=A(1)*u(3) + A(2)*u(2) + A(3)*u(1);
    for n = 4:N
      x(n) = A(1)*u(n) + A(2)*u(n-1)+ A(3)*u(n-2)+ A(4)*u(n-3);
    end