Matlab 3D传递函数幅度图

时间:2014-01-21 17:22:47

标签: matlab signal-processing

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

Transfer function

我的代码:

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));

这是对的吗?我还想知道是否有可能在情节上标记单位圆?

2 个答案:

答案 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.

要绘制传递函数,请使用bodebodeplot函数:

bode(sys)

对于极点和零点,只需使用polezero函数。