哈工大智能車 | 新一屆培訓開始啦
時間:2021-10-14 17:36:48
手機看文章
掃描二維碼
隨時隨地手機看文章
[導讀]簡介:根據學生提出的如何使用C語言來實現系統(tǒng)函數的問題,給出了利用MATLAB,Python對連續(xù)時間系統(tǒng)函數進行離散化的方法。繼而可以進行C語言實現。關鍵詞:系統(tǒng)函數,離散化,MATLAB01如何實現傳遞函數???卓晴老師,請教一下,傳遞函數環(huán)節(jié)用C需要編寫,該怎么編寫?在ma...
簡 介: 根據學生提出的如何使用C語言來實現系統(tǒng)函數的問題,給出了利用MATLAB,Python對連續(xù)時間系統(tǒng)函數進行離散化的方法。繼而可以進行C語言實現。關鍵詞
: 系統(tǒng)函數,離散化,MATLAB
01 如何實現傳遞函數?
??卓晴老師,請教一下,傳遞函數環(huán)節(jié)用C
需要編寫,該怎么編寫?在matlab
中他能簡單的表述,但是在利用C
語言,該咋辦呢???例如寫進單片機中。類似于寫一個傳遞函數通式,想實現各種環(huán)節(jié)。matlab
中他有很好的封裝,卻不好理解matlab
怎么做到的,simulink
中一個時域信號輸入傳遞模塊輸出還是時域信號,逐步仿真我認為這個傳遞模塊中封裝著一個復雜表達式,想知道用C
語言咋能實現,這樣以后對信號處理想加個濾波環(huán)節(jié),一階延時,可以利用這種方法直接解決。??好的,感謝卓大大,最好給出一個G/TS 1
這種的一個C
代碼的例子,然后我就可以仿照思路寫出更多高階的。02 什么是傳遞函數?
??要回答前面同學提出的“如何使用C編程語言實現傳遞函數?”,則需要先了解什么是系統(tǒng)傳遞函數?為什么引入系統(tǒng)傳遞函數?一、線性時不變系統(tǒng)
??下面兩個由線性R,C組成的電路網絡,它們的共同之處都屬于 線性時不變系統(tǒng)[1] ,不同之處在于左邊的電路輸入輸出之間是一個比例關系,??這類系統(tǒng)被稱為即時系統(tǒng)。
??這種帶有儲能器件的電路,當前的輸出不僅與當前的輸入有關系,還和之前時間輸入有關系。這類系統(tǒng)被稱為動態(tài)系統(tǒng),顯然動態(tài)系統(tǒng)比即使系統(tǒng)復雜,但功能更強大。即使系統(tǒng)可以看成一類特殊的動態(tài)系統(tǒng)。
二、系統(tǒng)函數
??既然兩個電路都屬于線性時不變系統(tǒng),可否將它們的輸入輸出關系都簡化成比例關系,這樣分析與求解就比較方便了???答案是可以的,只不過需要把輸入輸出信號都進行某種變換,比如 傅里葉變換[2] , 拉普拉斯變換[3] ,這時變換后的系統(tǒng)輸入輸出之間就是一個比例關系了。這個比值就被稱為線性時不變分析對象的系統(tǒng)函數。??在拉普拉斯變換下,上面的電阻分壓電路對應的系統(tǒng)函數為:??阻容低通濾波電路對應的系統(tǒng)函數為:??如果拋開這些變換概念背后的數學基礎,從工程應用角度也可以將上述系統(tǒng)函數看成對描述線性時不變系統(tǒng)輸入輸出關系之間的微分方程的另外一種表示方式。??借助于系統(tǒng)函數的概念,就把線性時不變系統(tǒng)的分析、設計都可以進行簡化。
三、離散時間系統(tǒng)函數
??計算機的普及使得離散時間系統(tǒng)應用增加,系統(tǒng)可以通過軟件編程來實現。如果實現對于輸入信號進行低通濾波,也可以在對信號進行采樣之后利用下面離散時間系統(tǒng)來進行處理。from?headm?import?*
t?=?linspace(0,?10,?1000)
sint?=?sin(t)
data?=?sint? ?random.rand(len(t))
def?filter_1(data,?a):
????yn?=?data[0]
????newd?=?[yn]
????for?d?in?data[1:]:
????????yn?=?d*(1-a)? ?a?*?yn
????????newd.append(yn)
????return?newd
data_filter?=?filter_1(data,?0.99)
plt.plot(t,?data,?label='origin')
plt.plot(t,?data_filter,?label='filter?data')
plt.xlabel("t")
plt.ylabel("data")
plt.grid(True)
plt.legend(loc='upper?right')
plt.tight_layout()
plt.show()
??線性時不變動態(tài)離散時間系統(tǒng)可以使用差分方程來刻畫,經過簡單的一項便可成寫出的迭代方程形式,即由輸入信號以及以前的輸出信號計算出當前系統(tǒng)輸出值,這是利用軟件編程實現的基礎。??同樣,在對于系統(tǒng)的輸入輸出信號進行 Z-變換[4] ,那么系統(tǒng)的零狀態(tài)輸出信號比上輸入信號也是一個常量,定義為離散時間系統(tǒng)的系統(tǒng)函數。上述一階低通離散時間系統(tǒng)對應的系統(tǒng)函數為:??同樣,如果拋開z變換背后的數學原理,僅僅把看成對于信號的延遲操作,那么上面的系統(tǒng)函數也可以看成差分方程另外一種描述方法。可以看到系統(tǒng)函數所對應的有理分式的分子多項式系數對應著差分方程輸入信號前的系數;分母多項式的系數對應差分方程輸出信號前的系數。
03 如何將H(s)轉換成H(z)?
??本文一開始同學詢問,如果知道了一個連續(xù)時間系統(tǒng)的傳遞函數,怎么使用C語言編程實現系統(tǒng)功能?這個問題就轉換成如何將連續(xù)時間系統(tǒng)函數轉換成對應的離散時間系統(tǒng)函數的問題了。這個過程也稱為連續(xù)時間系統(tǒng)的離散化。一、連續(xù)系統(tǒng)函數離散化
1、離散化方法
??將連續(xù)時間系統(tǒng)轉換成對應的離散時間系統(tǒng)的過程常常用在模擬設計-離散實現的設計過程中。通常使用的方法包括:- 沖激響應不變法:這種方法可以保持離散時間系統(tǒng)的單位沖激響應是對應連續(xù)時間系統(tǒng)的采樣;
- 變量替換法:包括前向差分(Euler方法)、后向差分、雙線性法,也稱梯形方法;
2、舉例
??比如使用雙線性方法,它是基于把代表位移算子的所對應的連續(xù)系統(tǒng)函數近似展開成有理分式:??以一個一階低通濾波器為例:??使用雙線性方法轉換成離散系統(tǒng)函數:
二、使用MATLAB離散化系統(tǒng)函數
??利用MATLAB內部函數 ?c2d[6] ,可以很方便將連續(xù)時間系統(tǒng)函數轉換成對應的離散時間系統(tǒng)函數。1、命令語法
??MATLAB 中給出了一下四種常用到離散系統(tǒng)函數命令形式:sysd?=?c2d(sysc,Ts)
sysd?=?c2d(sysc,Ts,method)
sysd?=?c2d(sysc,Ts,opts)
[sysd,G]?=?c2d(___)
??第一種方法利用了零階保持方法完成系統(tǒng)函數離散化,如果希望指明離散化具體方法,可以使用2,3兩種命令形式。1、轉換舉例
(1)連續(xù)時間系統(tǒng)函數
??將如下帶有延時環(huán)節(jié)的二階連續(xù)時間系統(tǒng)進行離散化:$$H\left( s \right) = e{ - 0.25s} {{10} \over {s2 ? 3s 10}} $$(2)轉換命令
h?=?tf(10,[1?3?10],'IODelay',0.25);?
hd?=?c2d(h,0.1)
hd?=
?
???????????0.01187?z^2? ?0.06408?z? ?0.009721
??z^(-3)?*?----------------------------------
?????????????????z^2?-?1.655?z? ?0.7408
?
Sample?time:?0.1?seconds
Discrete-time?transfer?function.
(3)系統(tǒng)仿真
??通過以下指令,可以對比連續(xù)時間系統(tǒng)與離散時間系統(tǒng)單位沖激響應波形。step(h,'--',hd','-')
※ 問題總結 ※
??使用嵌入式系統(tǒng)實現信號處理算法、控制算法,比起利用連續(xù)時間系統(tǒng)(或者模擬電路)實現具有很大的優(yōu)點。在一些模擬設計(仿真)-數字化實現的場景中,將連續(xù)時間系統(tǒng)函數轉換成對應的離散時間系統(tǒng)函數是編程實現控制算法的第一步。??離散化系統(tǒng)函數的方法有很多種,在MATLAB中可以利用相關的命令完成這些轉換,并進行系統(tǒng)仿真測試。??在 control.TransferFunction[7] 中給出了利用 Python 中的 control 開發(fā)包進行連續(xù)時間系統(tǒng)離散化相關指令。??下面示例給出了給出了將系統(tǒng)函數:轉換成對應的離散時間系統(tǒng)函數:import?control
sys?=?control.TransferFunction(1,[1,1])
sysd?=?sys.sample(0.5,?method='bilinear')
參考資料
[1]線性時不變系統(tǒng): https://baike.baidu.com/item/線性時不變系統(tǒng)/2474061[2]傅里葉變換: https://mathworld.wolfram.com/FourierTransform.html#::text=The smoother a function (i.e., the larger the,Fourier transform is also symmetric since implies .[3]拉普拉斯變換: https://byjus.com/maths/laplace-transform/#::text=The Laplace transform is a well established mathematical,to calculate the solution to the given problem.[4]Z-變換: https://faculty.ksu.edu.sa/sites/default/files/dsp_cen352_ch5_z.pdf#:~:text=Definition of z-transform: The z-transform is a very,filter design and frequency analysis of digital signals.[5]Continuous: https://ww2.mathworks.cn/help/control/ug/continuous-discrete-conversion-methods.html[6]c2d: https://ww2.mathworks.cn/help/control/ref/lti.c2d.html#mw_53fc4689-2099-41d0-93b3-de1e51a174c1[7]control.TransferFunction: https://python-control.readthedocs.io/en/0.8.3/generated/control.TransferFunction.html新一屆培訓開始啦
新一屆的培訓開始啦,希望卓大大規(guī)則也可以今早出臺奧。
為祖國獻禮,祝我們的祖國生日快樂,繁榮富強!