已知因果离散系统的系统函数为H(z)=(z^2-2*z+4)/(z^2-0.5*z+0.25)。利用Matlab计算系统函数的零点、极点,在z平面画出其零、极点分步,并分析系统的稳定性。求出系统的单位序列响应和频率响应,并用subplot绘制波形。
时间: 2024-12-06 13:23:05 浏览: 26
首先,我们来看如何在MATLAB中操作这个问题:
```matlab
% 定义系统函数 H(z)
H_z = @(z) (z.^2 - 2.*z + 4) ./ (z.^2 - 0.5.*z + 0.25);
% 计算零点(根)
zeros_H = roots(H_z(zeros(1, 200)));
% 计算极点(特征值)
poles_H = roots(poly(H_z, 'coeff')); % 注意系数逆序
% 绘制Z平面上的零点和极点图
figure;
plot(poles_H, 'ro', 'MarkerSize', 8, 'DisplayName', 'Poles');
hold on;
plot(zeros_H, 'bo', 'MarkerSize', 8, 'DisplayName', 'Zeros');
title('Z-Plane Plot of System Function H(z)');
xlabel('z');
ylabel('Magnitude');
legend;
% 判断稳定性
stability = all(abs(poles_H) < 1);
if stability
disp('The system is stable.');
else
disp('The system is unstable.');
end
% 系统函数的单位序列响应
step_response = impulse(H_z);
stem(step_response);
% 频率响应
freq_response = freqs(H_z, [0 1]);
semilogx(freq_response(:,1), abs(freq_response(:,2)), 'b');
% 绘制频率响应波形
figure;
subplot(2,1,1);
plot(freq_response(:,1), phase(freq_response(:,2)));
title('Frequency Response Magnitude and Phase');
xlabel('Frequency (rad/sample)');
ylabel('Response');
subplot(2,1,2);
stem(freq_response(:,1), real(freq_response(:,2)), 'r', 'markerfacecolor', 'r');
title('Real Part of Frequency Response');
xlabel('Frequency (rad/sample)');
```
这段代码首先定义了系统函数H(z),然后分别计算零点和极点,以及它们在Z平面上的分布。接下来判断系统的稳定性,如果是稳定的,则显示相应的消息。接着计算并可视化单位序列响应和频率响应。
请注意,`impulse()` 和 `freqs()` 函数需要MATLAB Control Systems Toolbox才能运行,如果没有这个工具箱,部分功能将无法完成。同时,由于零点和极点的计算可能存在精度问题,实际应用中可能需要适当调整计算条件。
阅读全文