使用matlab对给定系统 H(z)=0.2z/(z2+0.8), (1) 求出 H(z)的幅频响应和相频响应; (2) 绘制极零点图; (3) 求出并绘出该系统的单位抽样响应; (4) 令 x(n)=u(n),求出并绘出系统的单位阶跃响应 y(n)。
时间: 2024-10-21 15:11:06 浏览: 64
在MATLAB中处理这个线性系统的过程可以分为几个步骤:
1. **幅频响应和相频响应**:
要计算H(z)的幅频响应,首先需要将传递函数转换成极坐标形式(极点和零点)。对于给定的H(z) = -0.2z / (z^2 + 0.8),我们有两个复数极点(根式解),它们分别是`p1 = sqrt(0.8)` 和 `p2 = -sqrt(0.8)`。幅频响应 |H(e^(jω))| 可以通过模长计算得出,相频响应 ϕ(ω) 则是极角减去π/2(因为实数部分对应的是-90度或-π/2角)。MATLAB中可以使用`bode`函数来完成此操作。
2. **绘制极零点图**:
使用`zp2pole`函数将零点和极点转换为极点格式,然后使用`fvtool`或`plotzero`函数画出极点零点图。假设极点是`[p1, p2]`,零点是`[]`(无零点),则命令可能是`fvtool(p1, p2)`。
3. **单位抽样响应**:
对于离散系统,单位抽样响应可以用Z变换表示为`Y(z) = X(z) * Zeros(H(z),1)`,其中X(z)是输入序列Z变换。在这个例子中,X(z) = z^(-1)(单位脉冲序列)。先计算`Zeros(H(z),1)`得到延拓后的系统,再用`impz`函数求解 impulse response(即单位抽样响应)。
4. **单位阶跃响应**:
单位阶跃响应 y(n) 可以通过系统函数与单位阶跃信号 u(n) 相乘得到。即`y(n) = H(z) * U(z)`,其中U(z) = 1。同样地,使用`conv`函数结合之前的`impulse`结果计算y(n)。
以下是示例MATLAB代码片段(请注意,你需要安装Control System Toolbox才能运行这些函数):
```matlab
% 系统传递函数系数
num = [-0.2];
den = [1 0 0.8];
% 转换到极坐标并绘制Bode图
[H, w] = bode(num, den);
semilogx(w, abs(H))
grid on
title('幅频响应')
xlabel('频率')
ylabel('幅值')
% 极零点图
[z_poles, z_zeros] = roots(den);
[poles, zeros] = zp2pole(z_poles, z_zeros);
fvtool(poles, zeros)
% 单位抽样响应
sys = tf(num, den);
impulse(sys)
title('单位抽样响应')
% 单位阶跃响应
u_z = zpower([], -1); % 单位阶跃序列
y_imp = conv(u_z, impz(sys));
stem(y_imp, 'filled', 'MarkerSize', 8)
title('单位阶跃响应')
```
请记得检查是否有Control System Toolbox可用,并注意运行上述代码前的数据类型转换可能需要(如将复数极点转换为标量形式)。运行完以上代码后,你应该能看到相应的图形展示各个响应特性。
阅读全文