本文主要嘗試回答以下三個(gè)問(wèn)題:
(1)系數(shù)已知的傳遞函數(shù)怎么求其零極點(diǎn)?
(2)系數(shù)為變量的傳遞函數(shù)怎么求其零極點(diǎn)表達(dá)式?
(3)只知道一組節(jié)點(diǎn)方程,如何推導(dǎo)系統(tǒng)傳遞函數(shù)?
01
系數(shù)已知的傳遞函數(shù)怎么求其零極點(diǎn)?
1.1 問(wèn)題
如果我們拿到了一個(gè)傳遞函數(shù),其所有系數(shù)是已知的,怎么計(jì)算其零極點(diǎn)?
1.2 解決方法
Matlab可通過(guò)兩種模型描述系統(tǒng)的傳遞函數(shù),這兩種模型是:傳遞函數(shù)模型、零極點(diǎn)模型。它們之間是可以互相轉(zhuǎn)化的。如果一個(gè)系統(tǒng)傳遞函數(shù)的所有系數(shù)已知的,我們只要將其描述成傳遞函數(shù)模型,接著將其轉(zhuǎn)換成零極點(diǎn)模型。一旦完成轉(zhuǎn)換,我們就可以觀察到系統(tǒng)的零極點(diǎn)大小。此外,我們還可以畫(huà)出傳遞函數(shù)的零極點(diǎn)圖,更加直觀的看到零極點(diǎn)的分布位置。
EG1:如果a=1,求解G=(2*s+1)/(a*s^2+2*a*s+1)的零極點(diǎn),Matlab代碼如下:
圖↑ 代碼
圖↑ 轉(zhuǎn)換為了零極點(diǎn)模型
圖↑ 零極點(diǎn)MAP圖
1.3 寫(xiě)在最后
Matlab默認(rèn)的傳遞函數(shù)模型一定是拉普拉斯形式的,它的輸入一般包括直接輸入和矩陣輸入。如果使用直接輸入的方式,需要在輸入之前定義Laplace算子,只有這樣Matlab才能視其為傳遞函數(shù)模型。
step( )、bode( )等分析方式只對(duì)傳遞函數(shù)模型有效
Laplace變換和其反變換只能針對(duì)符號(hào)表達(dá)式進(jìn)行。也就是說(shuō),你對(duì)一個(gè)時(shí)域函數(shù)進(jìn)行Laplace變換后得到的Lalace表達(dá)式,雖然在我們看來(lái)就是傳遞函數(shù),但Matlab并不會(huì)視其為傳遞函數(shù)模型(除非定義Laplace算子后重新輸入一遍L(zhǎng)place表達(dá)式)
02
系數(shù)為變量的傳遞函數(shù)怎么求其零極點(diǎn)表達(dá)式?
2.1 問(wèn)題
你有沒(méi)有面臨過(guò)這樣一種情況:當(dāng)你設(shè)計(jì)一個(gè)OP時(shí),為了計(jì)算出它準(zhǔn)確的傳遞函數(shù),你首先畫(huà)出包含各種寄生電容效應(yīng)的小信號(hào)模型圖,然后經(jīng)過(guò)了艱難的計(jì)算,終于讓你算出了傳遞函數(shù)的表達(dá)式。為了穩(wěn)定性設(shè)計(jì),你需要知道它的零極點(diǎn)分布情況。這時(shí)候你需要接著對(duì)傳遞函數(shù)進(jìn)行第二次的求解,目的是為了求得零極點(diǎn)表達(dá)式。只有這樣你才能清楚地知道零極點(diǎn)和哪些參數(shù)相關(guān),來(lái)指導(dǎo)你在設(shè)計(jì)上實(shí)現(xiàn)優(yōu)化。
但有時(shí)候,零極點(diǎn)表達(dá)式的計(jì)算是很困難。
基于上述的問(wèn)題,尤其是當(dāng)一個(gè)傳遞函數(shù)包含未知參數(shù)(多于1個(gè))時(shí),我們有沒(méi)有可能借助Matlab工具計(jì)算出零極點(diǎn)公式呢?回答是:如果傳遞函數(shù)是二階的,利用Matlab求零極點(diǎn)表達(dá)式是容易實(shí)現(xiàn)的。但對(duì)于更高階的系統(tǒng)而言,想通過(guò)Matlab來(lái)求得解析解是極其困難的。
我們通常求解傳遞函數(shù)的零極點(diǎn),其實(shí)就是求解傳遞函數(shù)其分子或分母的根,那么該問(wèn)題本質(zhì)上就是一個(gè)求方程解的問(wèn)題。該問(wèn)題或可借助Matlab工具輔助解決。
Matlab的符號(hào)運(yùn)算工具箱提供了一個(gè)solve()函數(shù),該函數(shù)可以用于一般線(xiàn)性或非線(xiàn)性方程的解析求解,可以用來(lái)試著解決我們所關(guān)心的問(wèn)題。
2.2 solve()函數(shù)簡(jiǎn)介
solve的調(diào)用形式:
solve(eq)
solve(eq, var)
solve(eq1, eq2, …, eqn)
solve(eq1, eq2, …, eqn, var1, var2, …, varn)
eq為符號(hào)表達(dá)式,var為指定的要求解的變量。如果不聲明要求解的變量(第一和第三種形式),則matlab自動(dòng)按默認(rèn)變量進(jìn)行求解。
下面試著以一個(gè)通用一元二次方程的求解例子來(lái)理解solve( )函數(shù)。
EG2:試對(duì)一個(gè)典型的一元二次方程y=a*x^2+b*x+c進(jìn)行求解。Matlab的實(shí)現(xiàn)代碼和結(jié)果如下:
圖↑ 程序及結(jié)果
程序計(jì)算得到的結(jié)果是一元二次方程的通解,對(duì)于該結(jié)果我們應(yīng)該是相當(dāng)熟悉的。
2.3實(shí)際傳遞函數(shù)根的求解
EG3:下圖為拉扎維書(shū)上一個(gè)共源極放大器的例子,給出了該電路的精確傳遞函數(shù)。
我們先觀察該傳遞函數(shù),發(fā)現(xiàn)它是一個(gè)二階系統(tǒng)。由于所有二階傳遞函數(shù)的分母的其實(shí)都是a*x^2+b*x+c的形式,表達(dá)式中的各個(gè)電阻、電容可以申明為變量。如此一來(lái),此例的實(shí)現(xiàn)和EG2并沒(méi)有什么不同。令分母等于0,求解的結(jié)果便是系統(tǒng)的極點(diǎn)了。此例中零點(diǎn)可以直接觀察得出。
圖↑ 拉扎維書(shū)上的內(nèi)容
思考這樣一個(gè)問(wèn)題:我們真的需要借助Matlab對(duì)諸如此類(lèi)的二階系統(tǒng)求零極點(diǎn)表達(dá)式嗎?
如前所述,我們很清楚一個(gè)二階方程a*x^2+b*x+c=0的通解是什么,那么就可以直接應(yīng)用該公式進(jìn)行極點(diǎn)求解,這時(shí)候用Matlab就有點(diǎn)多余了。
那么對(duì)于更高階的方程,比如三次方程,Matlab能夠勝任解析求解嗎?答案是不能。因?yàn)橐粋€(gè)通用的一元三次方程是沒(méi)有通解的,因此想通過(guò)簡(jiǎn)單申明變量、借助Matlab求其解析解的想法注定難以實(shí)現(xiàn)。需要注意的是,雖然三階方程沒(méi)有通解,但并不代表其沒(méi)有解,它的解是根據(jù)判別式的不同而不同的。而如果明確知道這個(gè)判別式,便可以將其作為一個(gè)新的約束方程,和傳遞函數(shù)進(jìn)行方程聯(lián)解,這時(shí)候是有可能求出結(jié)果的。
在實(shí)際模擬電路的設(shè)計(jì)中,我們通常會(huì)通過(guò)“假設(shè)-保證假設(shè)成立”的方式來(lái)簡(jiǎn)化方程求解。剛才說(shuō)到的“判別式”像極了我們電路設(shè)計(jì)時(shí)的種種假設(shè)條件,所有的計(jì)算都有賴(lài)于這個(gè)前提的成立。關(guān)于eg2,在書(shū)中拉扎維不就假定主極點(diǎn)遠(yuǎn)遠(yuǎn)小于次極點(diǎn)來(lái)簡(jiǎn)化零極點(diǎn)計(jì)算的么。倘若這種假設(shè)是合理的,這將為快速估算提供新的途徑。但是,這種堪稱(chēng)宇宙無(wú)敵的假設(shè)法,一般人是用不了的,比如我就經(jīng)常碰到這樣的問(wèn)題:自認(rèn)為完美的假設(shè),在一圈計(jì)算下來(lái)之后才發(fā)現(xiàn)前提是不成立的。兩種假設(shè)之間的差別或許就代表著我和大神之間的距離,這多少有點(diǎn)打擊自信心。
至此可以做個(gè)小結(jié):
對(duì)于包含變量的傳遞函數(shù),如果其是二階的,利用Matlab求零極點(diǎn)表達(dá)式是容易實(shí)現(xiàn)的。但對(duì)于更高階的系統(tǒng)而言,想通過(guò)Matlab來(lái)求得解析解是極其困難的。
Matlab解出的表達(dá)式即使是準(zhǔn)確的,仍需要我們自己去對(duì)公式進(jìn)行近似?;蛟S近似的公式不絕對(duì)準(zhǔn)確,但卻可以用于指導(dǎo)設(shè)計(jì)。
2.4寫(xiě)在最后
對(duì)于電路系統(tǒng):
對(duì)于一個(gè)電路系統(tǒng),它有可能是單輸入、單輸出的,也有可能是多輸入、多輸出的。對(duì)于前者,其傳遞函數(shù)是一個(gè)一元方程;而對(duì)于后者,其傳遞函數(shù)通常是一個(gè)方程組。但無(wú)論是哪種情況,都可以使用solve()函數(shù)嘗試對(duì)其求解 。
關(guān)于Matlab的符號(hào)計(jì)算:
計(jì)算精確:符號(hào)計(jì)算基于數(shù)學(xué)公式、定理并通過(guò)一系列推理、演繹得到方程的解或者數(shù)學(xué)表達(dá)式的值,對(duì)操作對(duì)象不進(jìn)行離散化和近似化處理;
應(yīng)用范圍有限:實(shí)際科研和生產(chǎn)中遇到的問(wèn)題絕大多數(shù)都無(wú)法獲得精確的符號(hào)解,這時(shí)我們不得不求助數(shù)值計(jì)算;
對(duì)符號(hào)計(jì)算態(tài)度:用其來(lái)完成公式推導(dǎo)和解決簡(jiǎn)單的對(duì)計(jì)算時(shí)效性要求不高的問(wèn)題,綜合符號(hào)計(jì)算和數(shù)值計(jì)算各自的優(yōu)點(diǎn),視問(wèn)題特點(diǎn)混合使用符號(hào)計(jì)算和數(shù)值計(jì)算。
關(guān)于solve():
solve()函數(shù)適用于單變量方程(比如只有x一個(gè)未知數(shù) )或多變量方程(比如本文例子中有a,b,c,x,y多個(gè)變量)的求解。但該函數(shù)能求解的前提是求解對(duì)象確實(shí)存在解析解,如果沒(méi)有,那么只能求解數(shù)值解,但數(shù)值解需要傳遞函數(shù)的各系數(shù)已知。
03
只知道一組節(jié)點(diǎn)方程,如何推導(dǎo)系統(tǒng)傳遞函數(shù)?
3.1 問(wèn)題
針對(duì)一個(gè)小信號(hào)模型,如果我們只能根據(jù)KCL/KVL列出節(jié)點(diǎn)方程,因此可以得到一組節(jié)點(diǎn)方程。我們能否借助Matlab工具根據(jù)節(jié)點(diǎn)方程組推導(dǎo)出傳遞函數(shù)呢?
3.2 解決方法
圖↑ 書(shū)上的一個(gè)例子
如上圖,這是拉扎維書(shū)上的一個(gè)例子,我們?cè)囍帉?xiě)程序,看看能否利用兩個(gè)節(jié)點(diǎn)方程推導(dǎo)出傳遞函數(shù)。
程序如下:
圖↑ 代碼
運(yùn)行結(jié)果:
圖↑ 運(yùn)行結(jié)果
直接求出的H1結(jié)果是正確的,但式中還帶有變量Vx,雖然上下式中都有,可以化簡(jiǎn)掉,但該結(jié)果總是不那么理想。因此對(duì)H1進(jìn)行合并同類(lèi)項(xiàng)后得到H2,可以看到H2完全按照降冪排列,且已經(jīng)化除了Vx,表達(dá)式和書(shū)上的完全一樣。
看來(lái),利用Matlab是可以實(shí)現(xiàn)傳遞函數(shù)的推導(dǎo)的!
3.3 寫(xiě)在最后
其實(shí)推導(dǎo)傳遞函數(shù)本身并沒(méi)有什么難度,即使手算無(wú)非也就是多花點(diǎn)時(shí)間,Matlab只是能讓我們偷個(gè)懶而已,況且你是否敢完全相信軟件的推導(dǎo)結(jié)果呢?
更有意義的是如何面對(duì)一個(gè)傳遞函數(shù),比如了解它的零極點(diǎn)分布,了解怎樣在參數(shù)之間取舍才能得到一個(gè)穩(wěn)定的系統(tǒng)。而這,軟件似乎無(wú)能為力。
審核編輯:黃飛
-
模擬電路
+關(guān)注
關(guān)注
125文章
1553瀏覽量
102620 -
matlab
+關(guān)注
關(guān)注
181文章
2960瀏覽量
230022 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4277瀏覽量
62323
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論