本文主要介紹如何利用MATLAB編程或者Simulink工具繪製伯德圖和奈奎斯特圖
一、用程序繪製伯德圖和奈奎斯特圖
1、conv()函數的介紹
conv()函數可用於計算兩個向量卷積,簡單理解其實就是可以用來計算多項式乘法。我們用conv()函數可以很方便的對傳遞環數的分子或者分母進行計算, 舉個例子比如系統的傳遞函數如下(本文以此傳遞函數介紹如何繪製圖像):
我們可以利用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) %沒有輸出變量時繪製奈奎斯特曲線
繪製的圖像如下(完整的圖像):
採用如下方法可以簡單地繪製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);
繪製的圖像如下:
爲了便於觀察和分析,我們可以加上網格線,畫出實軸和虛軸,代碼如下:
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 %打開網格線,便於觀察和分析
繪製的圖像如下:
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 %打開網格線,便於觀察和分析
繪製的圖像如下:
二、利用Simulink工具繪製伯德圖和奈奎斯特圖
同樣以如下傳遞函數爲例:
1、Simulink仿真模型的搭建
對於Simulink模塊不熟悉的可以參考博文:PID控制器—MATLAB/Simulink仿真以及性能比較與分析 的第一部分,搭建的模型如下(本文的例子比較簡單,就是一個傳遞函數,對於一個系統而言,就會複雜很多,所以呢個人感覺用Simulink工具來繪製要簡單的多):
2、利用Simulink自帶的Linear Analysis Tool繪製伯德圖和奈奎斯特圖,因matlab版本的不同Linear Analysis Tool所在的位置可能也不同,我用的matlab 2019b,位置如下:
在Simulink界面點擊Apps如圖所示
點擊如圖所示的工具,就打開Linear Analysis Tool工具了
我們選擇Anaysis I/Os如下圖所示