频域响应分析

目录

用MATLAB绘制伯徳图

 用MATLAB绘制奈奎斯特图

 用MATLAB绘制尼科尔斯图。

相角裕度和增益裕度

用MATLAB获取増益裕度、相角裕度、相角穿越频率和增益穿越频率。

 用MATLAB求取谐振峰值、谐振频率和带宽的方法。


MATLAB绘制伯徳图

bode命令可以计算连续线性时不变(定常)系统频域响应的幅值和相角。

MATLAB中输入指令bode(不带左端参数),屏幕上就会画出伯德图,图中的幅值单位 为分贝(dB)。最常用的bode命令形式有

bode(num,den)

bode(num,den,w)

bode(A,B,C,D)

bode(A,B,C,D,w)

bode(A, B,C,DZ iu,w)

bode(sys) 

 在使用左端参数时,例如采用

                                                [mag,phase,w] = bode(num,den,w)

时,bode只将系统频域响应的数值赋予矩阵变量mag.phasew,而不在屏幕上绘制伯德图。 矩阵magphase分别包含系统频率响应在指定频率点上算得的幅值和相角。相角的单位为 度(。)。幅值可以通过如下语句转换为分贝值:

magdB = 20*log10(mag)

 带左端参数的bode命令的常用形式有

[mag,phase,w] = bode(num,den)

[mag,phase,w] = bode(num,den,w)

[mag,phase,w] = bode(A,BCD)

[mag,phase, w] = bode(A,B,C,D,w)

[mag,phase,w] = bode(A, B,C,D, iu,w)

[mag,phase, w] = bode(sys)

 需指定频率范围,可使用命令logspae(d1, d2)或logspace(d1,de, n)。命令logspace (d1, d2)可以在十倍频程10^d1和10^d2内生成一个包含50个点的、呈对数均匀分布的向量(这50个 频率点包含起点和终点;在起点和终点之间有48个点)。为了在频率0.100 rad/s之间产生 50个点,可以输入如下命令:

                                        w = Iogspace(-1,2)

在绘制伯德图时,如果需要采用用户指定的频率点,那么bode命令必须像命令bode

(num, den, w)[mag, phase, w] =bode(A, B, C, D, w)那样包含频率向量 w。

                        

>> num = [25];
>> den = [1 4 25];
>> bode(num,den)

绘制伯德图为:

 对于这个系统:

如果需要在0.01 ~1000rad/s频率范围内绘制伯德图,可以输入命令

w = logspace(—2,3,100)

该命令在0.01 -1000 rad/s范围内产生100个对数均匀分布的频率点(注意:向量w指定了计算频率响应的频率,其单位为rad/s)。

 如果使用命令

bode(num,den,w)

绘制伯德图,则频率范围将和用户指定的相同,但频率响应的幅值范围和相角范围将会由

MATLAB自动设定。

>> num = [9 1.8 9];
>> den = [1 1.2 9 0];
>>  w = logspace(-2,3,100);
>>  bode(num,den,w)
>> grid
>> title('Bode Diagram of C(s) = 9(sA2 + 0.2s + 1 )/[s(s^2 + 1.2s + 9)]')

对于系统             

                                 \dot{x}=Ax+Bu

        ​​​​​​​        ​​​​​​​        ​​​​​​​         y=Cx+Du

该系统的伯德图可通过输入命令

bode(A,B,C,D)

或本小节开始所列的其他命令获得。

命令bode(A, B, C, D)可以绘制与每个系统输入相对应的一系列伯德图,其频率范围是自 动设定的(当系统响应变化很快时,会采用较多的频率点来绘制伯德图)。

命令bode(A, B, C, D, iu)可以绘制从输入iu到该系统的所有输出(为y1,y2,…,)的伯德图,其中iu为系统的第i个输入。伯德图的频率范围是自动设定的(标量iu是系统输入的下标,它指定采用哪个输入来绘制伯德图)。假设控制信号向量u3个输入,即

\begin{bmatrix} u1\\ u2\\u3 \end{bmatrix}

那么iu就必须设定为1, 23

果该系统仅有一个输入",那么命令 bode(A,B,C,D)

bode(A,B,C,D,1)

都可以用来绘制伯德图。

 可以分别求出四个传递函数,也可以直接采用命令:

>> A=[0 1;-25 -4];
>> B=[1 1;0 1];
>> C=[1 0;0 1];
>> D=[0 0;0 0];
>> bode(A,B,C,D)
>> grid

仿真图为:

 MATLAB绘制奈奎斯特图

正如伯德图一样,奈奎斯特图也常用于描述线性时不变反馈控制系统的频域响应。奈奎斯特图是极坐标图,而伯德图是直角坐标图。

关于奈奎斯特稳定性的分析,在此不再赘述。

MATLAB命令nyquist可以计算线性时不变连续系统的频域响应。如果在调用时不带左端 参数,nyquist就在屏幕上绘制奈奎斯特图。

命令

nyquist(num,den)

绘制传递函数。

其他常用nyquist命令还有

nyquist(num,den,w)

nyquist(A,B,C,D)

nyquist(A, B,C, D,w)

nyquist(A, B, C, D, iu, w)

nyquist(sys)

当命令中包含了用户指定的频率向量w时,例如

nyquist(numz,den,w)

MATLAB就计算系统在以rad/s为单位的指定频率上的响应。

在使用带左端参数的命令时,例如

[re,im,w] = nyquist(num,den)

[re,im,w] = nyquist(num,den,w)

[re,im,w] = nyquist(A,B,C,D)

[re,im,w] = nyquist(A, B,C,D,w)

[re,im,w] = nyquist(A,B,C,D,iu,w)

[re,im,w] = nyquist(sys)

MATLAB将系统的频域响应的数值赋予矩阵re,imw,但不在屏幕上绘制奈奎斯特图。矩阵reim分别为系统在由向量w给定的频率点上的频域响应的实部和虚部。应当注意的是, reim的列数与系统输出的数目相同,其每一行对应于w的一个元素。若要绘制奈奎斯特图,则可以使用plot指令。

代码如下:

>> num = [1 ];
>> den = [1 0.8 1];
>> nyquist(num,den)

 

 

如果希望依据自行设定的实轴和虚轴范围绘制奈奎斯特图,例如实轴和虚轴的范围均为 从-2+2,就可以输入命令

v= [-2 2 -2 2];

                axis(v);

或者将以上两条命令合并为

axis([-2 2 -2 2]);

 

注意事项。在绘制奈奎斯特图时,如果MATLAB运算涉及“Divided by zein”(被零除), 所绘制的奈奎斯特图就可能是错误的,或者不适合进一步分析的需要。举例来说,如果传递 函数为

G(s)=\frac{1}{s(s+1)}

那么MATLAB指令

                num = [1];

den = [1 1 0];
nyquist(num,den)

就绘制出图5.14所示的一幅不合要求的奈奎斯特图。如果计算机上出现了这类图形,则可以 通过指定axis(v)来修正图形。例如,在程序中输入命令

v = [-2 2 -5 5]; axis(v)

就能获得一个正确的奈奎斯特图。

不正确的奈奎斯特图

 

正确的奈奎斯特图 

代码如下:

>> num = [1];
>> den = [1 1 0];
>> nyquist(num,den)
>>  v = [-2 2 -5 5]; axis(v)

如果只需要频率为正的部分所对应的曲线,就需要使用命令

[re,im,w]=nyquist(num,den,w)

将频率区间划分为几个具有不同增量因子的区间。

具体实现代码如下:

num = [20 20 10];
den = [1 11 10 0];
w1 = 0.1:0.1:10;w2 = 10:2:100; w3 = 100:10:500;
w = [w1 w2 w3];
[re,im,w] = nyquist(num,den,w);
plot(re,im)
v = [-3 3 -5 1]; axis(v)
grid
title('Nyquist Plot of G(s) = 20(s^2 + s + 0.5)/[s(s + 1)(s + 10)]')
xlabel('Real Axis')
ylabel('Imaginary Axis')

 

 上述例程中,可以用ww = logspace(—1,2,100)代替

w1 = 0.1:0.1:10;w2 = 10:2:100; w3 = 100:10:500;
w = [w1 w2 w3];

 再看一个例子:

 附上源程序:

>> num = [20 20 10];
>> den = [1 11 10 0];
>> ww = logspace(-1,2,100);
>> [re,im,ww] = nyquist (num,den,ww);
>> plot(re,im)
>>  v = [-2 3 -5 0]; axis(v)
>>  grid
>> title('Nyquist Diagram')
>>  xlabel('Real Axis')
>> ylabel('Imaginary Axis')
>> hold
>> w = [0.2 0.3 0.5 1 2 6 10 20];
>>  [re,im,w] = nyquist(num,den,w);
>>  plot(re,im,'o')
>>  text(1.1,-4.8,'w = 0.2')
>> text(1.1,-3.1,'w = 0.3')
>> text(1.25,-1.7,'0.5')
>> text(1.37,-0.4,'1')
>> text(1.8,-0.3,'2')
>> text(1.4,-1.1,'6')
>> text(0.77,-0.8,'10')
>> text(0.037,-0.8,'20')
>> [mag,phase,w] = bode(num,den,w);
>> [w mag phase]

运行结果为:

ans =

    0.2000    4.9176  -78.9571
    0.3000    3.2426  -72.2244
    0.5000    1.9975  -55.9925
    1.0000    1.5733  -24.1455
    2.0000    1.7678  -14.4898
    6.0000    1.6918  -31.0946
   10.0000    1.4072  -45.0285
   20.0000    0.8933  -63.4385

 用MATLAB绘制尼科尔斯图。

用于绘制尼科尔斯图的MATLAB命令有

nichols(num,den)

nichols(num,den,w)

nichols(A,B,C,D)

nichols(A,B,C,D,w)

nichols(A, B,C, D, iu,w)

nichols(sys)

[mag,phase,w]=nichols(num,den)

[mag,phase,w]=nichols(num,den,w)

[mag,phase,w]=nichols(A,B,C,D)

[mag,phase,w]=nichols(A,B,C,D,w)

[mag,phase,w]=nichols(A, B,C, D, iu,w)

[mag, phase, w]=nichols(sys)

 以上任一个命令都能绘制尼科尔斯图。使用方法与前面大同小异。如果所用的尼科尔斯命令没有涉及任何左端参数,就 会自动生成尼科尔斯图。如果带有左端参数,这些命令就不绘制尼科尔斯图,而是返回幅值和 相角(单位为度)的数值。为了绘制曲线,必须使用plot命令。命令ngrid可用于添加尼科尔斯线图网格线。

相角裕度和增益裕度

下图给出了 G(jw)3种不同开环增益K下的极坐标图。对于较大的增益K,系统不 稳定。当增益降低到一定数值时,G(js)轨迹穿越-1+j0点。这意味着当增益取该数值时, 系统濒临不稳定边缘,表现为持续振荡。对于较小的增益K,系统是稳定的。

 一般而言,G(js)的轨迹离-1+j0点越近,系统响应就越振荡。G(jw)轨迹与- 1 +j0点 的接近程度可以作为系统稳定裕度的度量(不过,这并不适用于条件稳定系统)。通常用相角 裕度和增益裕度来描述这种接近程度。

 关于相角裕度和增益裕度的概念不再赘述,可以参考自动控制原理课本。

对于稳定的最小相位系统,增益裕度表明增益要增加多少才会使系统变得不稳定。对于 不稳定系统,增益裕度表明增益要下降多少才能使系统变得稳定。

一阶或二阶系统的增益裕度为无穷大,这是因为这些系统的极坐标图不穿越负实轴。

因此,从理论上讲,一阶或二阶系统不可能不稳定(但值得注意的是,所谓的-一阶或二阶系统仅仅是实际系统的近似,因为在推导系统方程时忽略了一些小的时延。如果考虑小的时延,这些 一阶或二阶系统就可能变得不稳定)。

条件稳定系统有两个或更多的相角穿越频率,一些具有复杂动态特性的高阶系统可能有两个或更多的增益穿越频率。对于有两个或更多增益穿越 频率的稳定系统,相角稳定裕度应在最高增益穿越频率点加以测量。

MATLAB获取増益裕度、相角裕度、相角穿越频率和增益穿越频率。

MATLAB可以通过

如下命令方便地求取增益裕度、相角裕度、相角穿越频率和增益穿越频率:

[Gm, Pm, wcp, wcg] = margin(sys)

其中Gm是增益裕度,Pm是相角裕度,wcp是相角穿越频率,wcg是增益穿越频率,下例给出了该指令的详细使用方法。

>>  num = [20 20];
>>  den = conv([1 5 0],[1 2 10]);
>> sys = tf(num,den);
>>  w = logspace(-1,2,100);
>> bode(sys,w)
>>  grid;
>> [Gm, Pm,wcp,wcg] = margin(sys);
>>  GmdB = 20*log10(Gm);
>> [GmdB Pm wcp wcg]

运行结果为:

ans =

    9.9301  103.6573    4.0132    0.4426

 MATLAB求取谐振峰值、谐振频率和带宽的方法。

谐振峰值是闭环系统频域响应幅值(以分贝为单位)的最大值。谐振频率是产生该最大幅值的频率点。以下MATLAB命令可用于 获取谐振峰值和谐振频率:

[mag,phase,w] = bode(num,den,w); [mag,phase,w] = bode(sys,w);

[Mp,k] = max(mag);

resonant_peak = 20*log10(Mp);

resonant_frequency = w(k)

 可以输入如下几行语句来求取带宽:

n = 1;

while 20*log10(mag(n)) > = -3; n = n + 1;

end

bandwidth = w(n)

 下面给出一个具体的MATLAB程序:

>> num = [1];
>>  den = [0.5 1.5 1 0];
>>  sys1 = tf(num,den);
>> sys = feedback(sys1,1);
>> w = logspace(-1,1);
>> bode(sys,w);
>> grid
>> [imag,phase,w] = bode(sys,w);
>> [Mp,k] = max(mag);
>> [Mp,k] = max(mag);
>>  resonant_peak = 20*log10(Mp)

 变量值为:

 

我是小韩每天进步一点点,一名研0的研究生,刚开始写博客。希望和大家多多交流,一起进步!

求朋友点赞、收藏、关注哈,鼓励一下新人博主,或者提出建议。

参考资源链接:[Matlab核心与专业工具箱详解:英汉对照](https://wenku.youkuaiyun.com/doc/6412b5f2be7fbd1778d44f4c?utm_source=wenku_answer2doc_content) 时域和频域响应分析是控制系统设计中的重要环节,Matlab的控制系统工具箱为此提供了强大的支持。为了更深入地理解这一过程,推荐您查阅《Matlab核心与专业工具箱详解:英汉对照》,其中包含了控制系统工具箱的详细使用方法和理论解释。 在Matlab中,进行时域分析,通常会用到step函数和impulse函数来获取系统的阶跃响应和脉冲响应。以下是使用控制系统工具箱进行时域分析的代码示例: ```matlab % 定义系统的传递函数 sys = tf([1], [1 3 2]); % 阶跃响应分析 figure; step(sys); title('系统阶跃响应'); % 脉冲响应分析 figure; impulse(sys); title('系统脉冲响应'); ``` 频域分析中,最常用的函数是bode函数,它可以用来绘制系统的Bode图。同样地,nyquist函数和Nichols图也可以用来分析系统的频率特性。下面是相应的代码示例: ```matlab % Bode图分析 figure; bode(sys); title('系统Bode图'); % Nyquist图分析 figure; nyquist(sys); title('系统Nyquist图'); ``` 这些函数不仅绘制出响应曲线,还提供了系统稳定性和性能指标的直观理解。通过这些图示,我们可以观察到系统在不同频率下的增益和相位特性,从而对系统进行精确的分析和设计。 在掌握了时域和频域分析的基础之后,您还可以进一步探索控制系统工具箱中的其他高级功能,如极点配置、系统的稳定性分析等。为了全面提升您的Matlab应用能力,建议在了解了这些基础应用后,继续深入学习《Matlab核心与专业工具箱详解:英汉对照》,这将有助于您在控制系统的理论与实践中都能更加得心应手。 参考资源链接:[Matlab核心与专业工具箱详解:英汉对照](https://wenku.youkuaiyun.com/doc/6412b5f2be7fbd1778d44f4c?utm_source=wenku_answer2doc_content)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值