我必须创建函数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^-3n
和z^-2n
的系数求和。
答案 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];