如何通過時域的輸入輸出波形,求出系統的傳遞函數?

假如知道時域里的一個輸入是階躍信號,輸出也是時域信號,如何通過這兩種時域信號求出系統的傳遞函數呢?


變換到頻域一除不就完事了


看了下題主的背景,微電轉電力電子。

理論上的思路大概是 @周蕾 和 @巴斯光年 所給的。

1.傻瓜式

在MATLAB中,直接用工具箱(新版本應該叫app更確切)。下圖中前兩個都可以解決你的問題,即PID Tunner和 System Identification這倆APP。

至於怎麼使用這些apps,MATLAB官網有視頻教程,比如:

Transfer Functions in Simulink, Part 2: Extracting Transfer Functions

即使你的Simulink Model中有ZOH和非線性環節,也可以求出等效的傳遞函數。不過這裡,需要你設定一個Plant Structure。

如果你能在實驗中做出近似階躍響應波形,那就把示波器的數據導入Simulink,濾波之後用上面的工具箱處理即可。2.

實際中,尤其強電相關的,一般很難做階躍響應,而且弄不好很容易損壞硬體,再危險點,有可能把自己送進醫院。

實際中,一般是用掃頻的方法,來求幅頻特性曲線。

下面給出一個用在電力電子上(Bi-Directional Buck Boost Converter)的實際例子,

Texas Instruments做的一個用戶產品,官網有用戶手冊和程序代碼。鏈接你自己找吧,我只給出名字。

(1)."Online Frequency Response Analysis: A Powerful Plug-in Tool for Compensation Design Health Assessment of Digitally Controlled Power Converters" 這篇是相應的論文。

(2)."C2000? Software Frequency Response Analyzer (SFRA) Library and Compensation Designer Users Guide" ( Literature Number: SPRUHZ5A) 這個是用戶手冊,非常詳細,比知乎的答案靠譜多了。


這不是標準的系統辨識問題么,講白了就是參數估計問題,隨手Google一下就有一大堆論文。

簡單來說就是:

你得假設系統的結構是什麼樣子,比如是線性還是非線性,非線性的話有哪些基本的element,線性的話模型是不是strictly proper,還有多少階,甚至要考慮是LTV還是LTI。

以上的信息可以猜測,可以從你對此物理系統的了解得到,也可以從 @周蕾同學說的方法得到(大致可以看出模型的Gain是多少,是正是負,以及零極點大略分布)。

之後就可以構造regressor,最後用各種estimation theory求解系統參數

======================================

@鵪鶉我同學不知道你科研方向和背景是什麼,但是你的回答略顯年輕和幼稚啊,我不茲瓷!

system identification toolbox是系統辨識領域大牛Ljung教授親自領導開發的工具,小白入門,工程師現場簡單調參的不二之選,比你那啥FFT再除一下高得不知道哪裡去了。

直接把輸入輸出load進去,調幾個參數,一個大致的系統就能被辨識,你還可以比較各個結構的好壞,得出最好的結果。

這麼好的工具放那兒不用,真是殺牛用雞刀


如果是實際數據的話,幾個關鍵:結構的確定包括有無時延等環節和階數的確定等,雜訊的處理,誤差準則的確定,等等吧~


最簡單的辦法是先轉換成衝擊響應:impulse(t) = step(t) - step(t+1) 然後做傅里葉逆變換。雜訊可能有點大。

也可以用correlation。求R_{u}(	au)R_{yu}(	au)然後用Wiener Hopf eq.

還可以用power spectrum。算出後輸出除輸入一下就好了不過這樣沒有相位信息。

建議用第二個。


請搜索 系統辨識 System Identification


推薦閱讀:

安卓突變臉!傳Android9.0允許運營商屏蔽信號值

TAG:MATLAB | 信號與系統 |