本文主要介绍如何利用MATLAB编程或者Simulink工具绘制伯德图和奈奎斯特图

 

一、用程序绘制伯德图和奈奎斯特图

 
  1、conv()函数的介绍
 
   conv()函数可用于计算两个向量卷积,简单理解其实就是可以用来计算多项式乘法。我们用conv()函数可以很方便的对传递环数的分子或者分母进行计算, 举个例子比如系统的传递函数如下(本文以此传递函数介绍如何绘制图像):
  1  
我们可以利用conv()函数对其分母进行计算,分别把多项式的系数,按照升幂(或降幂)排列的方式构成向量,可以赋值给一个变量,作为conv()函数的参数,也可以直接作为conv()函数的参数,有一点需要注意,要么都按照升幂的方式,要么都按照降幂的方式进行排列,此处以降幂的方式介绍,代码如下:
 
den_1=conv([1 1],[1  3  5])
 
运行结果如下:
 
den_1 =
     1     4     8     5
 
这样我们就得到了分母多项式按照降幂排列的系数
 
  2、利用nyquist()函数绘制奈奎斯特图
 
   我们可以把以上的到的分子(有增益的话乘以增益K)和分母多项式的系数作为nyquist()函数的参数,此时绘制的奈奎斯特图是w从负无穷到正无穷范围的完整的奈奎斯特图,当然我们可以用第三个参数来规定w的范围。代码如下:
 
k=6;
num_1=k*[1];
den_1=conv([1 1],[1  3  5]);
nyquist(num_1,den_1)        %没有输出变量时绘制奈奎斯特曲线
 
绘制的图像如下(完整的图像):
  2  
采用如下方法可以简单地绘制w从0到正无穷时的图像:
 
k=6;
num_1=k*[1];
den_1=conv([1 1],[1  3  5]);
[re,im]=nyquist(num_1,den_1) %有输出变量时获取实部和虚部的值
plot(re,im);
 
 绘制的图像如下:
  3  
为了便于观察和分析,我们可以加上网格线,画出实轴和虚轴,代码如下:
 
k=6;
num_1=k*[1];
den_1=conv([1 1],[1  3  5]);
nyquist(num_1,den_1)        %没有输出变量时绘制奈奎斯特曲线
hold  on
plot([-1  1.5],[0 0],'k')
plot([0 0],[-1 1],'k')
grid on  %打开网格线,便于观察和分析
 
绘制的图像如下:
  4  
3、利用bode()函数绘制伯德图
    同样把传递函数的分子分母多项式系数作为bode函数的前两个参数,把w的范围作为第三个参数,可以使用logspace()函数来规定w的范围如logspace(-2,3, 200)规定w从10负2次方到10的3次方,即0.01~1000,取200个点绘制,有一点需要注意,我们用matlab绘制的伯德图是精确的曲线,不是渐近曲线,代码如下:
 
k=6;
num_1=k*[1];
den_1=conv([1 1],[1  3  5]);
w=logspace(-2,3,200);
bode(num_1,den_1,w)        %绘制伯德曲线
hold  on
grid on  %打开网格线,便于观察和分析

 
 绘制的图像如下:
  5  

二、利用Simulink工具绘制伯德图和奈奎斯特图

 
   同样以如下传递函数为例:
  6
  1、Simulink仿真模型的搭建
 
   对于Simulink模块不熟悉的可以参考博文:PID控制器—MATLAB/Simulink仿真以及性能比较与分析 的第一部分,搭建的模型如下(本文的例子比较简单,就是一个传递函数,对于一个系统而言,就会复杂很多,所以呢个人感觉用Simulink工具来绘制要简单的多):
  7  
 2、利用Simulink自带的Linear Analysis Tool绘制伯德图和奈奎斯特图,因matlab版本的不同Linear Analysis Tool所在的位置可能也不同,我用的matlab 2019b,位置如下:
 
   在Simulink界面点击Apps如图所示
  8  
点击如图所示的工具,就打开Linear Analysis Tool工具了
  9  
我们选择Anaysis I/Os如下图所示
  10   11  
然后点击如下图所示的工具就可以很简单的绘制伯德图和奈奎斯特图了
  12  
绘制的伯德图如下:
  13  
绘制的奈奎斯特图如下:
  14  
我们用Simulink工具绘制的伯德图和奈奎斯特图和上文用程序绘制的伯德图和奈奎斯特图是相同的。