给出微分方程:
y[n] - 0.9y[n-1] + 0.81y[n-2] = x[n] - x[n-2]
一个。使用递归查找h[n], n=0,1,2
的脉冲响应。
湾使用MATLAB命令过滤器找到脉冲响应。
答案 0 :(得分:4)
我知道这是家庭作业,所以我会尝试给你指导,而不是完全放弃答案:
这实际上非常简单,因为微分方程几乎完全包含递归函数体:y [n] = 0.9y [n-1] - 0.81y [n -2] + x [n] - x [n-2]
粗体部分实际上是递归调用!你需要做的是建立一个接收func
和x
的函数(我们称之为n
),并计算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]的所有值。
答案 1 :(得分:-1)
a=[1 -0.9 0.81]
b=[1 -1]
impz(b,a,50)