如何在三维空间中绘制传递函数的幅度(例如,检查图表上的极点和零点)? 假设这是我的传递函数:
我的代码:
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));
这是对的吗?我还想知道是否有可能在情节上标记单位圆?
答案 0 :(得分:1)
我认为这是正确的。但是,你计算的是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
答案 1 :(得分:0)
我一生都没有听说过3D传输功能,它没有意义。我认为你完全错了:z
并不代表一个复杂的数字,而是你的传递函数是一个离散的,而不是一个连续的(有关详细信息,请参阅Z transform)。 / p>
在MATLAB中执行此操作的正确方法是使用tf
函数,该函数需要控制系统工具箱(请注意,我假设您的离散采样时间为0.1秒,根据需要进行调整):
>> 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)