繁体   English   中英

Matlab 3D传递函数幅度图

[英]Matlab 3D Plot of transfer function magnitude

如何在三个维度上绘制传递函数的幅度(例如,检查图上的极点和零点)? 假设这是我的传递函数:

转换功能

我的代码:

b = [6 -10 2];
a = [1 -3 2];

[x, y] = meshgrid(-3:0.1:3);
z = x+y*j;

res = (polyval(b, z))./(polyval(a,z));
surf(x,y, abs(res));

这是正确的吗? 我也想知道是否可以在绘图上标记单位圆?

我认为是正确的。 但是,您正在计算的是H(z ^ -1),而不是H(z)。 那是你想做的吗? 对于H(z),只需将a的条目从左向右反转(使用fliplr ),然后对b进行相同操作:

res = (polyval(fliplr(b), z))./(polyval(fliplr(a),z));

要绘制单位圆,可以使用rectangle 说真的:-)它具有'Curvature'属性,可以将其设置为生成圆。

最好是使用imagesc而不是surf使圆圈清晰可见。 您将从上方看到一个视图,其中颜色表示高度(abs(H)的值):

imagesc(-3:0.1:3,-3:0.1:3, abs(res));
hold on
rectangle('curvature', [1 1], 'position', [-1 -1 2 2], 'edgecolor', 'w');
axis equal

我一生中从未听说过3D传递功能,这没有道理。 我认为您是完全错误的: z并不代表复数,而是您的传递函数是离散的而不是连续的一个事实(有关更多详细信息,请参见Z变换 )。

在MATLAB中执行此操作的正确方法是使用tf函数,该函数需要使用Control System Toolbox(请注意,我假设您的离散采样时间为0.1s,请根据需要进行调整):

>> b = [6 -10 2];
a = [1 -3 2];
>> sys = tf(b,a,0.1,'variable','z^-1')

sys =

  6 - 10 z^-1 + 2 z^-2
  --------------------
  1 - 3 z^-1 + 2 z^-2

Sample time: 0.1 seconds
Discrete-time transfer function.

要绘制的传递函数,使用bodebodeplot功能:

bode(sys)

对于极点和零点,只需使用polezero功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM