[英]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.
bode(sys)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.