本文主要介紹如何利用MATLAB編程實現系統傳遞函數的構建以及它們之間進行串聯、並聯、反饋時的構建方法
一、傳遞函數的構建方法
首先 ,我們把想要構建的傳遞函數分子和分母的係數按照階次從高到低(缺項補零)分別保存在一個向量中,然後調用tf()函數進行構建,tf函數用來建立實部或複數傳遞函數模型或將狀態方程、或零級增益模型轉化成傳遞函數形式。比如構建如下傳遞函數的代碼如下:
s3+2s2+s1
num=[1];
den=[1 2 1 0];
G=tf(num,den)
運行結果如下:
G =
1
---------------
s^3 + 2 s^2 + s
如果我們拿到的傳遞環數是以零極點的形式表示的,而我們又不想手動的去展成多項式形式,可以採用如下的方式構建傳遞函數,我們把傳遞函數的零點z,極點p,增益k,分別放到一個向量中,然後再調用zpk()函數進行構建,如構建如下傳遞環數的代碼如下:
s(s+1)21
z=[];
p=[0 -1 -1];
k=[1];
G=zpk(z,p,k)
運行結果如下:
G =
1
---------
s (s+1)^2
其實以上兩種模型之間可以相互轉化,轉化代碼如下:
num_1=[1];
den_1=[1 2 1 0];
G_1=tf(num_1,den_1)
[z,p,k]=tf2zp(num_1,den_1);
G_2=zpk(z,p,k)
[num_3,den_3]=zp2tf(z,p,k);
G_3=tf(num_3,den_3)
運行結果如下:
G_1 =
1
---------------
s^3 + 2 s^2 + s
G_2 =
1
---------
s (s+1)^2
G_3 =
1
---------------
s^3 + 2 s^2 + s
二、多個傳遞環數間串聯、並聯、反饋的構建方法
本部分我們用如下兩個傳遞函數爲例,就他們之間進行串聯,並聯,反饋的模型搭建方法進行介紹。
s3+2s2+s1和s2+2s+11
1、串聯
方法一:先根據第一部分的介紹搭建兩個傳遞函數,然後利用用series函數計算兩個傳遞函數的串聯形式,代碼如下:
num_1=[1];
den_1=[1 2 1 0];
G_1=tf(num_1,den_1);
num_2=[1];
den_2=[1 2 1 ];
G_2=tf(num_2,den_2);
[num_c,den_c]=series(G_1,G_2);
G_c=tf(num_c,den_c)
這種方法呢有時會出現輸出參數太多 (InputOutputModel)的錯誤,爲了簡潔性和不易錯性,推薦大家採用以下的第二種方法,並聯和反饋也將採用如下方法介紹:
num_1=[1];
den_1=[1 2 1 0];
num_2=[1];
den_2=[1 2 1 ];
[num_c,den_c]=series(num_1,den_1,num_2,den_2);
G_c=tf(num_c,den_c)
運行結果如下:
G_c =
1
-------------------------------
s^5 + 4 s^4 + 6 s^3 + 4 s^2 + s
2、並聯
採用parallel()函數可以計算兩個傳遞函數的並聯形式,代碼如下:
num_1=[1];
den_1=[1 2 1 0];
num_2=[1];
den_2=[1 2 1 ];
[num_b,den_b]=parallel(num_1,den_1,num_2,den_2);
G_b=tf(num_b,den_b)
運行結果如下:
G_b =
s^3 + 3 s^2 + 3 s + 1
-------------------------------
s^5 + 4 s^4 + 6 s^3 + 4 s^2 + s
3、反饋
採用feedback()函數可以計算兩個傳遞函數的反饋形式,相比於前兩種情況,feedback()多了最後一個參數,爲1時爲正反饋,爲-1時爲負反饋,缺省時爲負反饋,代碼如下:
num_1=[1];
den_1=[1 2 1 0];
num_2=[1];
den_2=[1 2 1 ];
[num_f,den_f]=feedback(num_1,den_1,num_2,den_2,-1);
G_f=tf(num_f,den_f)
運行結果如下:
G_f =
s^2 + 2 s + 1
-----------------------------------
s^5 + 4 s^4 + 6 s^3 + 4 s^2 + s + 1