Matlab中FIR滤波器的计算系数

时间:2014-10-09 13:17:47

标签: matlab signal-processing

我必须创建函数G(z) = [3*H^2(z)-2H^3(z)]*(z^-2),它将滤波器 H(z)的脉冲响应作为输入,并输出 G(z)的脉冲响应

我假设 H(z)是通用FIR滤波器

b = fir1(10,0.5); 
h = impz(b); 
t = impzlength(b);

其中h是脉冲响应的值。 我认为H^2(z) = h(n).*z(-2n)H^3(z) = h(n).*z^(-3n); H(z)是过滤器的传递函数。

我现在必须计算等式的num和den的系数,但我被卡住了。 我首先想到使用coeffs和for循环,但我还需要零系数,而coeffs只提供非零系数。

现在我认为可能有一个解决方法来获得系数:基本上我只需要选择h的某些值。 例如,仅为z^-3n获取系数:

n = 3; 
y = h(n:n:end);  % = 3 6 9 12 ...

但现在我无法弄清楚如何恰当地对z^-3nz^-2n的系数求和。

1 个答案:

答案 0 :(得分:1)

除非您使用的是非标准符号,否则H^2(z)不是h(n).*z(-2n),而是多项式与系数h的乘法。这可以通过以下方式计算:

H2 = conv(h, h);

同样,H^3(z)可以使用:

计算
H3 = conv(H2, h);

然后,将多项式求和归结为对系数求和,只需捕获H2,以便两个系数向量具有相同的大小:

H2 = [H2 zeros(1,length(H3)-length(H2))];
S  = 3*H2 -2*H3;

z^(-2)的最终乘法(可由多项式系数[0 0 1]表示)可以使用conv以相同的方式实现:

G = conv(S, [0 0 1 zeros(1,length(Sum)-3)]);

或者,您可能会发现乘以单项多项式基本上等于移位系数:

G = [0 0 S];