写出完整实验代码:写出matlab实验代码:利用函数impz和stepz求离散系统f(n)=y(n)+3y(n-1)+2y(n-2)的单位序列响应h(k)和单位阶跃响应g(k),并与其理论值比较
时间: 2024-12-08 07:18:14 浏览: 35
在MATLAB中,你可以使用`impz`和`stepz`函数来计算离散系统的 impulse 和 step 响应。首先,你需要定义系统函数的传递函数矩阵(Transfer Function Matrix)。对于给定的线性递归差分方程 (LRE):
\[ f(n) = y(n) + 3y(n-1) + 2y(n-2) \]
它的Z变换表示为:
\[ H(z) = \frac{Y(z)}{X(z)} = \frac{1}{1 - 3z^{-1} - 2z^{-2}} \]
现在,我们将编写MATLAB代码来完成这个任务:
```matlab
% 定义系统传递函数
num = [1];
den = [1, -3, -2];
% 使用impz计算单位脉冲响应h(k)
[h, k] = impz(num, den);
h_theory = [1 3 2]; % 理论上,h(k) 应该等于系数
% 使用stepz计算单位阶跃响应g(k)
[g, k] = stepz(num, den);
% 比较理论值和实际结果
disp("单位脉冲响应理论值: ");
disp(h_theory);
disp("单位脉冲响应数值值: ");
disp(h);
error_impulse = norm(h - h_theory, 'inf'); % 计算误差
disp("单位阶跃响应理论值: ");
disp([1 Inf Inf]); % 理论上,g(k) 应该开始于1然后逐渐衰减
disp("单位阶跃响应数值值: ");
disp(g);
error_step = norm(g(1:end-1) - [1 Inf Inf], 'inf'); % 不包括无穷大部分
% 输出比较结果和误差
disp(['Impulse response error: ', num2str(error_impulse)]);
disp(['Step response error: ', num2str(error_step)]);
%
阅读全文