2015-11-13 42 views
-1

我有一個具有48個特徵值的SISO系統(以tf形式),我想找到主導極點(比方說,將其減少到一階或二階)。我需要知道他們近似計算我的系統的阻尼和帶寬。我不想依賴來自時間響應的識別,我不想看pzmap(因爲我必須多次)。有沒有人有想法解決它?預先感謝您的幫助。Matlab - 以編程方式找到主導極點

+0

您可以通過查看零極點地圖...或者只是極...並找到那些最接近找到最主導極點到虛軸。除非我看到你寫的一些代碼,否則我不能再告訴你。 – rayryeng

+0

這就是我現在所做的......但是因爲我必須多次(比如說超過30次),我正在尋找一個編程解決方案... –

+0

我給它一個鏡頭。看一看。 – rayryeng

回答

0

如果您已經獲得了傳遞函數,您可以做的是分析極點並根據它們的實際值進行排序。極點或復極點對是穩定的(即在複平面的左側)和最接近到虛軸將是最主要的極點,你會選擇。

像這樣的東西出現在腦海,因爲你的傳遞函數存儲在一個TF對象,我們稱之爲T

%// Get numerator and denominator data 
[num,den] = tfdata(T, 'v'); 

%// Get the poles 
pl = roots(den); 

%// Get the stable poles only 
pl_stable = pl(real(pl) < 0); 

%// Determine the closest real location to the imaginary axis 
[~,ind] = min(abs(real(pl_stable))); 

%// Find all poles that share this same real location 
tol = 1e-10; 
ind_final = find(abs(real(pl_stable - pl_stable(ind))) <= tol); 
final_poles = pl_stable(ind_final); 

這段代碼的第一部分找到分子和您的傳遞函數的分母系數分別存儲在numden中。之後,我們通過找出分母的根來得到傳遞函數的極點。之後,我們通過搜索所有真實分量爲負數的極點來隔離出穩定的極點。

一旦我們將這些極點隔離出來,我們通過使用min並使用第二個輸出來確定最小極點的位置來確定最接近極點的想象訪問。

之後,我們希望找到所有極點誰共享這相同的最小實分量通過搜索所有極小的容差這個最小的實際值。我將此容差設置爲1e-10。一旦我們找到這些位置,我們將索引到穩定的極點數組中,並提取我們需要的數據。


這裏有一個小例子:

>> T = tf([1 1], [1 3 2 1]) 

T = 

      s + 1 
    --------------------- 
    s^3 + 3 s^2 + 2 s + 1 

Continuous-time transfer function. 

檢查出兩極,我們得到:

>> pl 

pl = 

    -2.3247 + 0.0000i 
    -0.3376 + 0.5623i 
    -0.3376 - 0.5623i 

正如你可以看到,有一對主導極點,其實際成分是-0.3376而另一個真正的杆位於-2.3247。我們需要從s = -0.3376 +/- 0.5623i那裏得到一對兩極。

通過上面的代碼運行,我們得到:

>> final_poles 

final_poles = 

    -0.3376 + 0.5623i 
    -0.3376 - 0.5623i