0

给定一个微分方程: y[n] - 0.9y[n-1] + 0.81y[n-2] = x[n] - x[n-2]

一个。找到h[n], n=0,1,2使用递归的脉冲响应。

湾。使用 MATLAB 命令过滤器查找脉冲响应。

4

2 回答 2

5

我知道这是家庭作业,所以我会尽量为您提供指导,但不会完全放弃答案:

使用递归

这实际上很简单,因为微分方程几乎完全包含递归函数的主体:y[n] = 0.9y[n-1] - 0.81y[n-2] + x[n] - x[n- 2]

粗体部分实际上是递归调用!您需要做的是构建一个函数(我们称之为func),它接收xn,并计算y[n]

function y = func(x, n)
   if (n < 0)
      %# Handling for edge case n<0
      return 0
   else if (n == 0)
      %# Handling for edge case n=0
      return x(0)
   else
      %# The recursive loop
      return 0.9 * func(x, n-1) - 0.81 * func(x, n-2) + x(n) - x(n-2)
   end

请注意,它是伪代码,因此您仍然必须检查边缘情况并处理索引(MATLAB 中的索引以 1 而不是 0 开头!)。

使用过滤器

数字滤波器的响应实际上是您正在寻找的 y[n]。正如您可能从课程中知道的那样,该滤波器的系数将是微分方程中指定的系数。MATLAB 有一个内置函数filter可以模拟这一点,所以如果你写:

B = [1, 0, 1];        %# Coefficients for x
A = [1, 0.9, -0.81];  %# Coefficients for y
y = filter(B, A, x);

你会得到一个输出向量,它包含 y[n] 的所有值。

于 2012-05-19T14:39:12.827 回答
-1
a=[1 -0.9 0.81]
b=[1 -1]
impz(b,a,50)
于 2018-11-28T13:49:24.523 回答