如何从传递函数计算脉冲响应

信息处理 冲动反应 转换功能
2022-01-24 23:00:05

假设我有一个传递函数,例如:

H(z)=11+0.1z30

如何计算脉冲响应

(这只是一个例子,重要的是它是封闭的符号形式!)

如果我理解正确,如果我可以将中的某个多项式(通过使用泰勒展开式),我就可以读出系数。H(z)z1

但是还有其他方法吗?

2个回答

您的过滤器是全极 IIR,这简化了一些事情。通常你可以编写如下形式的传递函数:

H(z)=i=0Pbizij=0Qajzj

回到离散时域,您将得到:

y[n]=1a0(i=0Pbix[ni]j=1Qajy[nj])

因此,在您的情况下,它是:

y[n]=x[n]0.1y[n30]

可以通过将 Kronecker delta 输入系统([1 0 0 0 0 0 0 ...] 信号)来计算特定值。基本上,您会观察到每 30 个样本就会发生一些事情;)您可以在 MATLAB/Octave 中轻松生成绘图,只需记住您的滤波器具有以下系数:

b=[1]
a=[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.1]

通过调用impz(b,a)函数,您将获得类似的图(前 100 个样本): 在此处输入图像描述

如果您的问题实际上是关于实现此传递函数,那么您不想使用它的脉冲响应。只需执行 jolek 答案中正确给出的差分方程:

(1)y[n]=x[n]0.1y[n30],y[30]=y[29]==y[1]=0

只有 FIR 滤波器通常直接使用它们的(有限)脉冲响应来实现。IIR 滤波器通过递归实现,如 (1) 所示。