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