使用 Matlab 绘制 zplot

Plotting a zplot using Matlab

我正在尝试在 Matlab 中绘制一个 zplot,它显示一个以 0 为中心的单位圆以及绘图的极点和零点。我不允许使用任何其他 matlab 函数(例如 zplane 或 pzplot)来执行此操作。到目前为止,我可以很好地绘制一个单位圆,但我无法让我的绘图显示更多的轴而不扭曲我的圆。我也听说过找到函数的极点和零点,以及如何在我的绘图上将极点显示为小 x,将零点显示为小 o。任何帮助将不胜感激!我的作业看起来像这样并且必须正确处理

等情况

zplot([0 1 1], [0 1]); zplot([0 1 1], [0 0 1]);

function zplot(b, a)

% ZPLOT Plot a zero-pole plot.

                                              -1 -nb
              B(z) b(1) + b(2)z + .... + b(nb+1)z

     H(z) = ---- = ---------------------------------

                                              -1 -na
              A(z) a(1) + a(2)z + .... + a(na+1)z

% zplot(b, a) plots the zeros and poles which determined by vectors b and a

% The plot includes the unit circle and axes for reference, plotted in black.

% Each zero is represented with a blue 'o' and each pole with a red 'x' on the 
%plot.

xmin;   
xmax;

ymin;   
ymax; 

% vector of angles at which points are drawn

angle = 0:2*pi/100:2*pi;            

% Unit radius

R = 1;               

% Coordinates of the circle

x = R*cos(angle);  
y = R*sin(angle);  

% Plot the circle

plot(x,y);                             
axis ([xmin, xmax, ymin, ymax]);

grid on;

end

给定传递函数 G,您可以使用 pzplot() 命令并向其添加一个圆。

G = tf([1 4 1],[1 2 1]);

angle = [0:0.1:2*pi+0.1];
xp = cos(angle);
yp = sin(angle);

figure(1)
hold on
pzplot(G);
plot(xp,yp);
axis equal;

这应该为您提供零极点图,其中 x 表示极点,o 表示零点,单位圆。

这是结果。

如果你不会使用 pzplot() 也不难。这里有一个提示:

num = [1 4 1];%numerator coefficients of transfer function
den = [1 2 1];%denominator coefficients

z = roots(num)%zeros
p = roots(den)%poles

angle = 0:2*pi/100:2*pi;
xp = cos(angle);
yp = sin(angle);

figure(1)
scatter(z,zeros(length(z),1),'o');
hold on
scatter(p,zeros(length(p),1),'x');
plot(xp,yp);
axis equal

输出

请注意,我在此示例中没有处理虚数 poles/zeros。您需要为给定的虚极或零计算正确的 x,y 坐标。 (本例中的poles/zeros都是实数,不是虚数)