怎样用MATLAB计算一个传递函数的幅值和相角?

如题,求实例代码,多谢

楼主你好,我们讲频域法,常用s域中的传递函数,令s=jw来求得A(w)=|G(jw)|,fai(w)=fai(G(jw))
具体到本题,将s用jw代换,有G(jw)=(1+jw)/(2+jw),这是一个复数
由复数乘积(商)的幅值等于各因子幅值的乘积(商),那么|G(jw)|=|1+jw|/|2+jw|
一个复数的模值M=√(Re^2+Im^2),或者说从原点到这个复数的点的距离
那么|1+jw|=√(1+w^2),而|2+jw|=√(4+w^2),故|G(jw)|=√[(1+w^2)/(4+w^2)],这就是你结果的前面一部分,即幅值部分
而复数的乘积(商)的相角等于各因子相角的和(差),那么fai(w)=fai(1+jw)-fai(2+jw)
对于相角的求法,各个象限有不同,不过对1象限(或者说系统稳定时的零极点),还是很容易的
如1+jw,将这个复数与原点0+j0相连,容易知道这条线的幅角为arctan(w/1)=arctanw
同时2+jw的幅角为arctan(w/2)
因此fai(w)=arctanw-arctan(w/2),这就是结果的后一部分,即相角部分还是很行的吧哈哈追问

谢谢,那请问MATLAB中有直接计算传递函数的幅值和相角的命令吗?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-06

没找到答案,自己终于摸索出来了。这里以求取w=100pi rad/s处的幅值和相位为例

首先,这个提问有问题。应该是:怎样用MATLAB求取一个传递函数在某频率(角频率)处的幅值和相角。matlab代码如下:

w=logspace(2.4969,2.4972);  %%选取逼近w=100pi rad/s的角频率上下限,对应(314,314.2)
H= freqresp(sys,w);         %%计算周边频率的频率响应数据点,默认50个,数据为复数格式
abs(H(:,:,25))                  %%计算中间点的幅值,作为w=100pi rad/s处的幅值
angle(H(:,:,25))*180/pi    %%计算中间点的相位,作为w=100pi rad/s处的相位

一句话概括上述方法:求取无限逼近w=100pi rad/s 周边角频率对应的幅值和相位,并选取这些值的中间值作为w=100pi rad/s 的幅值和相位。

角频率上下限的确定方法,100pi在(314,314.2)之间。(314,314.2)≈(10e2.4969,10e2.4972)

类似插值方法,有点拗口,不过方法确实可行!

相似回答