本節(jié)主要對(duì)計(jì)算機(jī)電路分析理論進(jìn)行概要講解,并結(jié)合實(shí)際濾波器電路分析,最后使用Matlab實(shí)現(xiàn)了一個(gè)通用梯形濾波器Mini仿真引擎(GitHub免費(fèi)下載)。
電路分析基礎(chǔ)
從電磁現(xiàn)象被人們發(fā)現(xiàn)以來,人們不斷探索先后發(fā)現(xiàn)了庫倫定律(Coulomb's law, 1785年,通過實(shí)驗(yàn)得出靜電力遵循平方反比規(guī)律)、畢奧-薩伐爾定律(Biot-Savart Law, 1820年,表明電生磁)、安培環(huán)路定律(Ampère's circuital law, 1826年,表明電生磁,并且磁)、法拉第電磁感應(yīng)定律(Faraday's law of electromagnetic induction, 1831~1845年,表明磁生電),依據(jù)這些定律,麥克斯韋(Maxwell's equations)于1864年提出了著名的麥克斯韋方程組,于是統(tǒng)一了電和磁。
都說麥克斯韋統(tǒng)一了電和磁,那么我們從麥克斯韋方程組出發(fā)是否能夠推導(dǎo)得到電路分析的相關(guān)理論來嗎?這一節(jié)我們就麥克斯韋方程組的理論框架下來理解電路分析相關(guān)理論。
在電路分析領(lǐng)域,有三大法寶: 歐姆定律 ,KCL和 KVL 。
查閱相關(guān)文獻(xiàn)資料發(fā)現(xiàn)比較遺憾的是麥克斯韋方程組并不能導(dǎo)出如歐姆定律(Ohm's law) ,歐姆定律是獨(dú)立于麥克斯韋方程組的,也就是所謂媒質(zhì)的本構(gòu)關(guān)系(Constitutive equation) 。歐姆定律是歐姆基于一系列的實(shí)驗(yàn)所獲得的結(jié)果,并在1827年發(fā)表在《直流電路的數(shù)學(xué)研究》(The galvanic Circuit investigated mathematically)一文中。
那么歐姆定律如何來推導(dǎo)呢?現(xiàn)在比較廣泛的推導(dǎo)是使用德魯?shù)履P?Drude model),也即使用微觀自由電子氣模型來推導(dǎo) 。
基爾霍夫定律(Kirchhoff Circuit Laws, 1845年)是可以使用麥克斯韋方程組來推導(dǎo)的,基爾霍夫第一定律也即基爾霍夫電流定律(KCL)可以由電場(chǎng)散度為0求得;基爾霍夫第二定律也即基爾霍夫電壓定律(KVL)可以由靜電場(chǎng)旋度為0求得。電路理論是電磁場(chǎng)理論在一定條件下的近似結(jié)果,器件必須在準(zhǔn)靜態(tài)范圍內(nèi)工作,即工作波長(zhǎng)遠(yuǎn)大于電路尺寸 。
有了歐姆定律和基爾霍夫定律我們就可以進(jìn)行電路分析和計(jì)算。
梯形電路網(wǎng)絡(luò)方程
下面以無源梯形網(wǎng)絡(luò)設(shè)計(jì)舉例來實(shí)現(xiàn)電路分析步驟。由于這種網(wǎng)絡(luò)結(jié)構(gòu)屬于平面結(jié)構(gòu),而且結(jié)構(gòu)相對(duì)簡(jiǎn)單,所以不必使用關(guān)聯(lián)矩陣(Incidence Matrix),可以直接使用網(wǎng)孔法(Mesh Analysis)列方程來進(jìn)行電路分析。
上圖電路結(jié)構(gòu)可以用來分析所有梯形濾波器,濾波器階數(shù)為 。若需要構(gòu)造 型結(jié)構(gòu)濾波器,則可以令 ;若需要構(gòu)造偶數(shù)階濾波器,則可以令 ,這時(shí)濾波器階數(shù)為 。
為了適應(yīng)不同的濾波器類型和適應(yīng)實(shí)際器件模型(參考電容等效和電感等效),特定義阻抗節(jié)類型(Type)如下:
有了上述電路矩陣方程,我們可以依據(jù)s參數(shù)求解出AC特性,只需要求解方程:
接下來就是各路仿真軟件的核心--線性方程組的稀疏矩陣(Sparse Matrix)求解。
稀疏矩陣求解
由上節(jié)得到的電路Z矩陣大部分元素為0,屬于稀疏矩陣,常用的直接計(jì)算機(jī)解法是矩陣的高斯消元(Gauss elimination)、UL分解(LU factorization)、科列斯基分解(Cholesky decomposition) 或其改進(jìn)的LDLT算法,UL分解在早期電路分析中使用特別多,優(yōu)化算法在如何減小存儲(chǔ)量和計(jì)算量這個(gè)方向上努力(算法會(huì)破壞矩陣的稀疏性,或者改變矩陣結(jié)構(gòu)),尤其是UL算法可以在不怎么增加額外的存儲(chǔ)空間情況下直接在源矩陣上計(jì)算,無需額外存儲(chǔ)開銷,這樣可以求解大型電路方程 。
對(duì)稀疏矩陣進(jìn)行數(shù)值求解的另外一條路也非常不錯(cuò),即稀疏矩陣迭代計(jì)算,這種方法的好處是利用了前一次計(jì)算結(jié)果,可以通過有限步計(jì)算快速將求解誤差收斂到指定范圍內(nèi),并且此算法并不會(huì)破壞矩陣的稀疏性,迭代計(jì)算在非線性電路分析、電路優(yōu)化、靈敏度分析、參數(shù)掃描中非常適用。迭代計(jì)算方法有雅克比(Jacobi)迭代求解、高斯-賽德爾(GS, Gauss-Seidel)迭代求解、超松弛(SOR, Successive Over-Relax)迭代求解、共軛梯度(CG, Conjugate Gradient, 1951)迭代求解 ,這幾種方法層層遞進(jìn),Jacobi方法最原始,GS只是每步都利用前一次計(jì)算的值,SOR提供了一個(gè)可選的因子可以調(diào)整迭代步長(zhǎng),CG提供了每次迭代的最佳步長(zhǎng)。
本想著此次主要針對(duì)小程序電路分析不需要這么大費(fèi)周章的將矩陣求解這部分深入太多,但是考慮到后續(xù)電路優(yōu)化,有必要將CG迭代算法做深入研究。CG迭代算法將一次函數(shù)運(yùn)算轉(zhuǎn)化為構(gòu)造的二次函數(shù)的極小值的運(yùn)算,二次函數(shù)極值計(jì)算就可以使用梯度下降法來求解了,CG迭代算法可以說是進(jìn)階版本的梯度下降算法,他不是用最小梯度方向搜索到終點(diǎn),而是用共軛梯度方向搜索到終點(diǎn)。CG迭代算法文末有參考學(xué)習(xí)文章,寫得通俗易懂,有興趣的同學(xué)可以移步到參考文獻(xiàn) 。
CG迭代算法步驟如下:
上圖之字形藍(lán)色曲線是梯度下降法迭代過程,紅色線是共軛梯度法迭代過程,從中可以看到CG迭代收斂速度遠(yuǎn)遠(yuǎn)優(yōu)于梯度下降法的。有人可能會(huì)問,為什么不直接從初始點(diǎn)直接一步到最終點(diǎn)呢,對(duì),之前的高斯消元法等等就是這里的一步迭代法。
從計(jì)算復(fù)雜度上來講,CG迭代算法的計(jì)算復(fù)雜度是 ,高斯消元法約為 ,所以從計(jì)算復(fù)雜度上來說CG迭代算法并沒有優(yōu)勢(shì)。CG迭代法每迭代一次可以將整個(gè)矩陣計(jì)算一次,能夠從全局計(jì)算出出一個(gè)近似的結(jié)果,對(duì)于很多實(shí)際問題,我們只要控制好精度,就只需要較少的迭代次數(shù)就可以達(dá)到工程要求,最終可以使得迭代法實(shí)際計(jì)算復(fù)雜度遠(yuǎn)遠(yuǎn)小于直接法。高斯消元法在稀疏矩陣的應(yīng)用中會(huì)遇到0元素的填充問題,這會(huì)給編程帶來非常大的不便,而且影響矩陣的稀疏性。
對(duì)于濾波器軟件設(shè)計(jì),其中很重要的頻率響應(yīng),頻率響應(yīng)的計(jì)算需要使用到頻率掃描,若掃描點(diǎn)比較密集,假設(shè)是N,那么我們使用高斯消元法對(duì)每個(gè)頻率點(diǎn)進(jìn)行計(jì)算是獨(dú)立的,這樣計(jì)算量就非常大。但是若使用CG迭代計(jì)算,那么我們可以利用前一點(diǎn)計(jì)算的結(jié)果,可以大大減小后續(xù)點(diǎn)的迭代次數(shù),計(jì)算量會(huì)響應(yīng)減小。
實(shí)際仿真中發(fā)現(xiàn)若使用CG迭代來進(jìn)行濾波器仿真計(jì)算,那么你將得到的是錯(cuò)誤的結(jié)果,梯形網(wǎng)絡(luò)矩陣計(jì)算并不收斂!這是由于CG只針對(duì)對(duì)稱正定矩陣(symmetric and positive-definite)才有效,而電路方程是復(fù)數(shù)方程,其Z矩陣為一個(gè)非厄米特矩陣(Non-Hermitian矩陣),需要使用雙共軛梯度法(BiCG, Biconjugate Gradient,1976) 來對(duì)其進(jìn)行求解,BiCG迭代算法可以支持計(jì)算非對(duì)稱正定矩陣,由于BiCG算法并不穩(wěn)定 ,所以后人又提出了CGS(Conjugate Gradient Squared, 1989) , BiCG-Stab(Biconjugate Gradient Stabilized, 1992) 算法,這樣才真正將CG算法走上了實(shí)用。
另外,對(duì)矩陣的預(yù)處理(Precondition)也非常重要,因?yàn)樗兄暗乃惴ǘ紩?huì)存在一個(gè)矩陣不能讓結(jié)果收斂到給定精度。對(duì)線性系統(tǒng)迭代計(jì)算算法匯總文檔請(qǐng)參考 。
直接法(UL分解)計(jì)算和BiCG迭代計(jì)算對(duì)比的Matlab代碼都上傳至GitHub上 [https://github.com/etools361/SolveSystemOfLinearEquations.git]。
梯形電路網(wǎng)絡(luò)仿真引擎
由電路方程節(jié)的方法,按順序定義器件類型和值,比如3階Butterworth濾波器網(wǎng)表定義如下(上圖是PI結(jié)構(gòu),下圖是T結(jié)構(gòu)):
從上圖可以看出,我們只需要在內(nèi)存中存儲(chǔ)Type和Value這兩列數(shù)據(jù)即可還原梯形結(jié)構(gòu)。
由上述網(wǎng)表結(jié)構(gòu)可以構(gòu)造出Z矩陣,然后使用線性方程組計(jì)算即可得到仿真值。
程序輸入是電路網(wǎng)表、AC參數(shù)設(shè)置,輸出為幅頻傳輸特性曲線。
使用matlab實(shí)現(xiàn)一個(gè) 通用梯形網(wǎng)絡(luò)仿真引擎 (代碼已經(jīng)上傳GitHub,有興趣的童鞋可以去下載 [https://github.com/etools361/LadderNetworkSimEngine.git]),實(shí)際運(yùn)行結(jié)果如下:
- 兩端接載情況, 3階巴特沃斯低通濾波器
- 一端接載情況, 3階巴特沃斯低通濾波器:
- 7階切比雪夫高通濾波器:
評(píng)論