Mar*_*kar 0 math matlab differential-equations
给定一个微分方程:
y[n] - 0.9y[n-1] + 0.81y[n-2] = x[n] - x[n-2]
一种。找到h[n], n=0,1,2使用递归的脉冲响应。
湾 使用 MATLAB 命令滤波器查找脉冲响应。
我知道这是作业,所以我会尽量给你指导,而不是完全给出答案:
这实际上很简单,因为微分方程几乎完全包含递归函数的主体: 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
Run Code Online (Sandbox Code Playgroud)
请注意,它是伪代码,因此您仍然需要检查边缘情况并处理索引(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);
Run Code Online (Sandbox Code Playgroud)
你会得到一个包含 y[n] 的所有值的输出向量。