楊 峰沈三民譚 雯
(中北大學(xué)儀器科學(xué)與動(dòng)態(tài)測試教育部重點(diǎn)實(shí)驗(yàn)室,山西太原 030051)
二階廣義積分器(Second-Order Generalized Integrator,SOGI)常作為正交信號發(fā)生器(orthogonal signal generator,OSG),與基于Hilbert 變換的OSG、基于卡爾曼濾波器的OSG、基于全通濾波器的OSG、基于一階微分的OSG 和基于延時(shí)的OSG等[1-2]常用的方法相比,不僅可以濾除高次諧波,而且能夠?qū)崿F(xiàn)頻率自適應(yīng)[3]。在電網(wǎng)同步及電機(jī)轉(zhuǎn)子位置和轉(zhuǎn)速估計(jì)等領(lǐng)域應(yīng)用廣泛[4-6]。
SOGI 數(shù)字實(shí)現(xiàn)過程中,量化誤差會(huì)影響輸出信號精度,甚至造成系統(tǒng)發(fā)散。因此詳細(xì)分析了其數(shù)字實(shí)現(xiàn)中量化誤差的影響,提出了運(yùn)算過程中用舍入法替換截?cái)喾ǖ膬?yōu)化方法;同時(shí)根據(jù)其結(jié)構(gòu)特點(diǎn)提出基于時(shí)分復(fù)用的數(shù)字實(shí)現(xiàn)。仿真結(jié)果表明,所提出的精度與資源優(yōu)化方法,可以實(shí)現(xiàn)精度與資源的雙優(yōu)化。
SOGI 是典型的二階結(jié)構(gòu),其結(jié)構(gòu)框圖如圖1所示。
圖1 二階廣義積分器結(jié)構(gòu)圖
SOGI 的特征傳遞函數(shù)如下:
式中:vin為輸入的正弦電壓信號,vout與qout是2 個(gè)相互正交的信號,k為系統(tǒng)的阻尼系數(shù),ωn為系統(tǒng)的無阻尼自然角頻率。
令s=j(luò)ω,分析系統(tǒng)頻率響應(yīng)如下:
式中:|Hd(jω)|、|Hq(jω)|分別為2 個(gè)相互正交信號的幅值,φd(ω)、φq(ω)分別為2 個(gè)相互正交信號的相角。
由式(3)與式(4)可知,vout、qout的幅值和相位都隨著輸入信號的角頻率ω變化,但是qout始終滯后vout90°,當(dāng)輸入信號的頻率ω等于ωn時(shí),vout的幅值和相位都與輸入信號一致,qout的幅值與輸入一致,相位滯后90°。
采用FPGA 等硬件系統(tǒng)實(shí)現(xiàn)SOGI 算法時(shí),ADC引入的輸入信號量化誤差,SOGI 傳遞函數(shù)的系數(shù)量化誤差,運(yùn)算過程中的量化誤差,都將影響SOGI 的輸出信號精度,甚至造成系統(tǒng)發(fā)散。
量化誤差定義為量化后的值減去理論值,處理量化誤差時(shí)主要有舍入法和截?cái)喾? 種,舍入法和截?cái)喾ǖ母怕拭芏惹€如圖2 所示[7],q表示二進(jìn)制數(shù)所能表示的最小單位。舍入法的均值為0,方差為q2/12;截?cái)喾ǖ木禐?q/2,方差為q2/12。
圖2 量化誤差的概率密度曲線
SOGI 兩個(gè)傳遞函數(shù)離散后的差分方程分別為式(5)和式(6),式中所有參量都是理論值。
一般ADC 采用的是舍入法,均值為0[7-8]。ADC 引入的輸入信號量化誤差可通過增加ADC 量化位數(shù)減小,但是增加量化位數(shù)也意味著增加計(jì)算量和資源消耗。所以ADC 量化位數(shù)選取一般滿足信噪比要求即可,且SOGI 的2 個(gè)傳遞函數(shù)分別是帶通和低通濾波器[9-10],delta-sigma ADC 可以將量化誤差頻譜移至高頻區(qū)域[8],則SOGI 能夠過濾ADC 引入的輸入信號量化誤差。因此接下來主要分析系數(shù)的量化誤差和運(yùn)算過程中的量化誤差。
以式(5)為例,SOGI 采用整數(shù)實(shí)現(xiàn),考慮系數(shù)與運(yùn)算過程中的量化誤差后,數(shù)字實(shí)現(xiàn)過程中實(shí)際的差分方程如式(7)所示。
根據(jù)信噪比要求,選用16 位的delta-sigma ADC對10 MHz 的正弦信號進(jìn)行欠采樣,采樣時(shí)鐘為9 MHz。SOGI 數(shù)字實(shí)現(xiàn)時(shí)的準(zhǔn)確性,關(guān)鍵在于離散化方法的選擇。前向歐拉與后向歐拉法,實(shí)現(xiàn)簡單,但是最大增益頻率存在偏移以及輸出信號相位差并非理想的90°[12]。雙線性變換法在數(shù)字頻率與模擬頻率間存在嚴(yán)重的非線性畸變[7]。預(yù)畸變的雙線性變換法沒有最大增益頻率偏移的問題,輸出信號也是正交的,但是涉及三角函數(shù)及除法計(jì)算,硬件實(shí)時(shí)更新系數(shù)困難[13]。除此之外,還有一些復(fù)雜的非數(shù)值積分的方法,包括沖擊響應(yīng)不變法、零極點(diǎn)匹配法和零階保持器法等[12,14]。
采用預(yù)畸變的雙線性變換法,采樣周期Ts=1/9 000 000 s,綜合考慮超調(diào)量與調(diào)整時(shí)間,阻尼系數(shù)k,系數(shù)量化以a0為2N、量化精度比ADC 的精度略高為準(zhǔn)。利用SIMULINK 多次仿真不同量化位數(shù)下誤差值εv的大小,最終選取N=22,仿真結(jié)果如圖3 所示,仿真的輸入信號是幅值為1 V 的正弦電壓信號,圖中的標(biāo)記值為標(biāo)記點(diǎn)的誤差值,其中P表示峰值、V表示谷值。此時(shí)系統(tǒng)穩(wěn)定后誤差值εv為10-7數(shù)量級,16 位ADC 的最低有效位(LSB)為10-5數(shù)量級,因此N=22 時(shí)系數(shù)的量化誤差對系統(tǒng)精度影響較小,同樣系數(shù)的量化誤差未造成系統(tǒng)不穩(wěn)定。
圖3 量化位數(shù)為22 時(shí)的誤差值
Z域傳遞函數(shù)分別如式(10) 與式(11) 所示[14],式中的系數(shù)包含量化誤差,按圖4 所示的方式實(shí)現(xiàn),其中乘法運(yùn)算采用IP 核實(shí)現(xiàn)。為了避免使用除法IP 核消耗巨大的資源及造成大量的延時(shí),除法運(yùn)算采用對二進(jìn)制補(bǔ)碼數(shù)右移N位近似實(shí)現(xiàn),量化誤差處理采用截?cái)喾ā3朔ㄟ\(yùn)算之所以不用左移實(shí)現(xiàn),是因?yàn)槿绻枰獙ο禂?shù)實(shí)時(shí)更新,可由上位機(jī)在線計(jì)算系數(shù)然后下發(fā)到FPGA,采用IP 核可直接運(yùn)算,而左移則需要對系數(shù)進(jìn)行分解;采用乘法IP核實(shí)現(xiàn)時(shí),還可通過割集重定時(shí)改變傳統(tǒng)框圖中延時(shí)單元的位置,改由乘法IP 核實(shí)現(xiàn)延時(shí),則不需要額外的延時(shí)單元。
圖4 未時(shí)分復(fù)用的SOGI 數(shù)字實(shí)現(xiàn)
算法采用VHDL 語言實(shí)現(xiàn),F(xiàn)PGA 型號選用Xilinx 公司的xc7a100tfgg484-2 芯片,仿真結(jié)果如圖5 所示,SOGI 的資源消耗情況如表2 所示。
圖5 未優(yōu)化的SOGI 仿真結(jié)果圖
表1 采用截?cái)喾ńY(jié)果
由圖4 可知,SOGI 的2 個(gè)傳遞函數(shù)僅零點(diǎn)系數(shù)不一致,因此提出基于時(shí)分復(fù)用的SOGI 實(shí)現(xiàn),減少資源消耗,其數(shù)字實(shí)現(xiàn)如圖6 所示。數(shù)據(jù)在9 MHz的時(shí)鐘驅(qū)動(dòng)下輸入給vin,零點(diǎn)系數(shù)通過9 MHz 時(shí)鐘的高低電平進(jìn)行選擇。運(yùn)算部分(即點(diǎn)畫線內(nèi))工作在18 MHz 的時(shí)鐘下,因此乘法器延時(shí)變成了未時(shí)分復(fù)用前的2 倍,以實(shí)現(xiàn)在9 MHz 的數(shù)據(jù)周期內(nèi),完成2 次計(jì)算。然后同樣通過9 MHz 時(shí)鐘的高低電平驅(qū)動(dòng)數(shù)據(jù)分配器對計(jì)算結(jié)果進(jìn)行分配,再經(jīng)過時(shí)序同步處理即可得到一對正交信號。
圖6 基于時(shí)分復(fù)用的SOGI 數(shù)字實(shí)現(xiàn)
運(yùn)算過程中右移實(shí)現(xiàn)除法時(shí)用舍入法替換截?cái)喾?,為便于硬件?shí)現(xiàn),選用與MATLAB 中nearest 函數(shù)一致的舍入規(guī)則[16]:計(jì)算結(jié)果向著最近的整數(shù)舍入,若舍去部分的數(shù)值,等于保留部分末位的一半時(shí),則向著正無窮的方向舍入到最近的整數(shù)。
設(shè)一個(gè)M位的二進(jìn)制補(bǔ)碼數(shù)X(M-1:0)除以2N(即右移N位),用選用的舍入規(guī)則進(jìn)行處理,處理后的數(shù)據(jù)用Y表示,其程序流程圖如圖7 所示,通過判斷二進(jìn)制補(bǔ)碼數(shù)的最高位和舍入部分的第1位,即可完成判斷。
圖7 舍入法流程圖
FPGA 仿真結(jié)果如圖8 所示,由于時(shí)序同步處理使得vout和qout相對于vin同時(shí)延時(shí)了1 個(gè)時(shí)鐘周期,但這并不影響vout和qout的正交性。時(shí)分復(fù)用后的SOGI 資源消耗如表2 所示,可以發(fā)現(xiàn),基于時(shí)分復(fù)用的SOGI 實(shí)現(xiàn)方式在未選擇時(shí)分復(fù)用的基礎(chǔ)上,查找表(LUT)消耗減少了57.6%,乘法器(DSP)消耗減少了44.4%,但是由于增加了乘法器延時(shí),觸發(fā)器(FF)的消耗增加了2.8 倍??偟膩碚f,利用資源較豐富的觸發(fā)器換取查找表和乘法器的減少,實(shí)現(xiàn)了資源優(yōu)化。
圖8 優(yōu)化后的SOGI 仿真結(jié)果圖
表2 SOGI 時(shí)分復(fù)用前后資源消耗對比
運(yùn)算過程中的量化誤差按舍入法處理后的數(shù)據(jù)與誤差分析列于表3 中,表中的參量定義與前文一致。對比表1,發(fā)現(xiàn)優(yōu)化后vout與qout的誤差明顯減小,標(biāo)準(zhǔn)差從1.74 減小到0.17,減小了90.2%。
表3 采用舍入法結(jié)果
通過對ADC 引入的輸入信號量化誤差,SOGI傳遞函數(shù)的系數(shù)量化誤差及運(yùn)算過程中的量化誤差,進(jìn)行了詳細(xì)分析并得出結(jié)論。ADC 引入的輸入信號量化誤差會(huì)被SOGI 過濾。傳遞函數(shù)系數(shù)的量化誤差不能過大,否則輸出將嚴(yán)重偏離理論值甚至發(fā)散。運(yùn)算過程中的量化誤差可以用舍入法替換截?cái)喾ㄟM(jìn)行優(yōu)化,仿真結(jié)果表明,系統(tǒng)穩(wěn)定后,輸出數(shù)據(jù)的標(biāo)準(zhǔn)差從1.74 減小到0.17,減小了90.2%。同時(shí)根據(jù)SOGI 的結(jié)構(gòu)特點(diǎn),提出基于時(shí)分復(fù)用的數(shù)字實(shí)現(xiàn),仿真結(jié)果表明,觸發(fā)器的消耗增加了2.8倍,查找表消耗減少了57.6%,乘法器消耗減少了44.4%,實(shí)現(xiàn)了利用資源較豐富的觸發(fā)器換取查找表和乘法器的減少。綜上,提出的優(yōu)化方法,可以實(shí)現(xiàn)精度與資源的雙優(yōu)化。