【问题标题】:Computing coefficients of FIR filter in MatlabMatlab中计算FIR滤波器的系数
【发布时间】:2014-10-09 13:17:47
【问题描述】:

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

我假设 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 的系数求和

【问题讨论】:

  • conv 是你的朋友。

标签: matlab signal-processing


【解决方案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];

【讨论】:

  • 非常感谢您的回答!你是对的 H^2(z) 是 conv(h,h) ,我不知道为什么我犯了这么愚蠢的错误,你真的拯救了我的一天。
猜你喜欢
  • 1970-01-01
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多