哈工大智能車?|?新一屆培訓(xùn)開始啦
時間:2021-10-09 15:01:10
手機看文章
掃描二維碼
隨時隨地手機看文章
[導(dǎo)讀]簡介:根據(jù)學(xué)生提出的如何使用C語言來實現(xiàn)系統(tǒng)函數(shù)的問題,給出了利用MATLAB,Python對連續(xù)時間系統(tǒng)函數(shù)進行離散化的方法。繼而可以進行C語言實現(xiàn)。關(guān)鍵詞:系統(tǒng)函數(shù),離散化,MATLAB01如何實現(xiàn)傳遞函數(shù)???卓晴老師,請教一下,傳遞函數(shù)環(huán)節(jié)用C需要編寫,該怎么編寫?在ma...
簡 介: 根據(jù)學(xué)生提出的如何使用C語言來實現(xiàn)系統(tǒng)函數(shù)的問題,給出了利用MATLAB,Python對連續(xù)時間系統(tǒng)函數(shù)進行離散化的方法。繼而可以進行C語言實現(xiàn)。關(guān)鍵詞
: 系統(tǒng)函數(shù),離散化,MATLAB
01 如何實現(xiàn)傳遞函數(shù)?
??卓晴老師,請教一下,傳遞函數(shù)環(huán)節(jié)用C
需要編寫,該怎么編寫?在matlab
中他能簡單的表述,但是在利用C
語言,該咋辦呢???例如寫進單片機中。類似于寫一個傳遞函數(shù)通式,想實現(xiàn)各種環(huán)節(jié)。matlab
中他有很好的封裝,卻不好理解matlab
怎么做到的,simulink
中一個時域信號輸入傳遞模塊輸出還是時域信號,逐步仿真我認(rèn)為這個傳遞模塊中封裝著一個復(fù)雜表達式,想知道用C
語言咋能實現(xiàn),這樣以后對信號處理想加個濾波環(huán)節(jié),一階延時,可以利用這種方法直接解決。??好的,感謝卓大大,最好給出一個G/TS 1
這種的一個C
代碼的例子,然后我就可以仿照思路寫出更多高階的。02 什么是傳遞函數(shù)?
??要回答前面同學(xué)提出的“如何使用C編程語言實現(xiàn)傳遞函數(shù)?”,則需要先了解什么是系統(tǒng)傳遞函數(shù)?為什么引入系統(tǒng)傳遞函數(shù)?一、線性時不變系統(tǒng)
??下面兩個由線性R,C組成的電路網(wǎng)絡(luò),它們的共同之處都屬于 線性時不變系統(tǒng)[1] ,不同之處在于左邊的電路輸入輸出之間是一個比例關(guān)系,??這類系統(tǒng)被稱為即時系統(tǒng)。
??這種帶有儲能器件的電路,當(dāng)前的輸出不僅與當(dāng)前的輸入有關(guān)系,還和之前時間輸入有關(guān)系。這類系統(tǒng)被稱為動態(tài)系統(tǒng),顯然動態(tài)系統(tǒng)比即使系統(tǒng)復(fù)雜,但功能更強大。即使系統(tǒng)可以看成一類特殊的動態(tài)系統(tǒng)。
二、系統(tǒng)函數(shù)
??既然兩個電路都屬于線性時不變系統(tǒng),可否將它們的輸入輸出關(guān)系都簡化成比例關(guān)系,這樣分析與求解就比較方便了???答案是可以的,只不過需要把輸入輸出信號都進行某種變換,比如 傅里葉變換[2] , 拉普拉斯變換[3] ,這時變換后的系統(tǒng)輸入輸出之間就是一個比例關(guān)系了。這個比值就被稱為線性時不變分析對象的系統(tǒng)函數(shù)。??在拉普拉斯變換下,上面的電阻分壓電路對應(yīng)的系統(tǒng)函數(shù)為:??阻容低通濾波電路對應(yīng)的系統(tǒng)函數(shù)為:??如果拋開這些變換概念背后的數(shù)學(xué)基礎(chǔ),從工程應(yīng)用角度也可以將上述系統(tǒng)函數(shù)看成對描述線性時不變系統(tǒng)輸入輸出關(guān)系之間的微分方程的另外一種表示方式。??借助于系統(tǒng)函數(shù)的概念,就把線性時不變系統(tǒng)的分析、設(shè)計都可以進行簡化。
三、離散時間系統(tǒng)函數(shù)
??計算機的普及使得離散時間系統(tǒng)應(yīng)用增加,系統(tǒng)可以通過軟件編程來實現(xiàn)。如果實現(xiàn)對于輸入信號進行低通濾波,也可以在對信號進行采樣之后利用下面離散時間系統(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)可以使用差分方程來刻畫,經(jīng)過簡單的一項便可成寫出的迭代方程形式,即由輸入信號以及以前的輸出信號計算出當(dāng)前系統(tǒng)輸出值,這是利用軟件編程實現(xiàn)的基礎(chǔ)。??同樣,在對于系統(tǒng)的輸入輸出信號進行 Z-變換[4] ,那么系統(tǒng)的零狀態(tài)輸出信號比上輸入信號也是一個常量,定義為離散時間系統(tǒng)的系統(tǒng)函數(shù)。上述一階低通離散時間系統(tǒng)對應(yīng)的系統(tǒng)函數(shù)為:??同樣,如果拋開z變換背后的數(shù)學(xué)原理,僅僅把看成對于信號的延遲操作,那么上面的系統(tǒng)函數(shù)也可以看成差分方程另外一種描述方法。可以看到系統(tǒng)函數(shù)所對應(yīng)的有理分式的分子多項式系數(shù)對應(yīng)著差分方程輸入信號前的系數(shù);分母多項式的系數(shù)對應(yīng)差分方程輸出信號前的系數(shù)。
03 如何將H(s)轉(zhuǎn)換成H(z)?
??本文一開始同學(xué)詢問,如果知道了一個連續(xù)時間系統(tǒng)的傳遞函數(shù),怎么使用C語言編程實現(xiàn)系統(tǒng)功能?這個問題就轉(zhuǎn)換成如何將連續(xù)時間系統(tǒng)函數(shù)轉(zhuǎn)換成對應(yīng)的離散時間系統(tǒng)函數(shù)的問題了。這個過程也稱為連續(xù)時間系統(tǒng)的離散化。一、連續(xù)系統(tǒng)函數(shù)離散化
1、離散化方法
??將連續(xù)時間系統(tǒng)轉(zhuǎn)換成對應(yīng)的離散時間系統(tǒng)的過程常常用在模擬設(shè)計-離散實現(xiàn)的設(shè)計過程中。通常使用的方法包括:- 沖激響應(yīng)不變法:這種方法可以保持離散時間系統(tǒng)的單位沖激響應(yīng)是對應(yīng)連續(xù)時間系統(tǒng)的采樣;
- 變量替換法:包括前向差分(Euler方法)、后向差分、雙線性法,也稱梯形方法;
2、舉例
??比如使用雙線性方法,它是基于把代表位移算子的所對應(yīng)的連續(xù)系統(tǒng)函數(shù)近似展開成有理分式:??以一個一階低通濾波器為例:??使用雙線性方法轉(zhuǎn)換成離散系統(tǒng)函數(shù):
二、使用MATLAB離散化系統(tǒng)函數(shù)
??利用MATLAB內(nèi)部函數(shù) ?c2d[6] ,可以很方便將連續(xù)時間系統(tǒng)函數(shù)轉(zhuǎn)換成對應(yīng)的離散時間系統(tǒng)函數(shù)。1、命令語法
??MATLAB 中給出了一下四種常用到離散系統(tǒng)函數(shù)命令形式:sysd?=?c2d(sysc,Ts)
sysd?=?c2d(sysc,Ts,method)
sysd?=?c2d(sysc,Ts,opts)
[sysd,G]?=?c2d(___)
??第一種方法利用了零階保持方法完成系統(tǒng)函數(shù)離散化,如果希望指明離散化具體方法,可以使用2,3兩種命令形式。1、轉(zhuǎn)換舉例
(1)連續(xù)時間系統(tǒng)函數(shù)
??將如下帶有延時環(huán)節(jié)的二階連續(xù)時間系統(tǒng)進行離散化:$$H\left( s \right) = e{ - 0.25s} {{10} \over {s2 ? 3s 10}} $$(2)轉(zhuǎn)換命令
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)單位沖激響應(yīng)波形。step(h,'--',hd','-')
※ 問題總結(jié) ※
??使用嵌入式系統(tǒng)實現(xiàn)信號處理算法、控制算法,比起利用連續(xù)時間系統(tǒng)(或者模擬電路)實現(xiàn)具有很大的優(yōu)點。在一些模擬設(shè)計(仿真)-數(shù)字化實現(xiàn)的場景中,將連續(xù)時間系統(tǒng)函數(shù)轉(zhuǎn)換成對應(yīng)的離散時間系統(tǒng)函數(shù)是編程實現(xiàn)控制算法的第一步。??離散化系統(tǒng)函數(shù)的方法有很多種,在MATLAB中可以利用相關(guān)的命令完成這些轉(zhuǎn)換,并進行系統(tǒng)仿真測試。??在 control.TransferFunction[7] 中給出了利用 Python 中的 control 開發(fā)包進行連續(xù)時間系統(tǒng)離散化相關(guān)指令。??下面示例給出了給出了將系統(tǒng)函數(shù):轉(zhuǎn)換成對應(yīng)的離散時間系統(tǒng)函數(shù):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新一屆培訓(xùn)開始啦
新一屆的培訓(xùn)開始啦,希望卓大大規(guī)則也可以今早出臺奧。
為祖國獻禮,祝我們的祖國生日快樂,繁榮富強!