楊 峰沈三民譚 雯
(中北大學儀器科學與動態測試教育部重點實驗室,山西太原 030051)
二階廣義積分器(Second-Order Generalized Integrator,SOGI)常作為正交信號發生器(orthogonal signal generator,OSG),與基于Hilbert 變換的OSG、基于卡爾曼濾波器的OSG、基于全通濾波器的OSG、基于一階微分的OSG 和基于延時的OSG等[1-2]常用的方法相比,不僅可以濾除高次諧波,而且能夠實現頻率自適應[3]。在電網同步及電機轉子位置和轉速估計等領域應用廣泛[4-6]。
SOGI 數字實現過程中,量化誤差會影響輸出信號精度,甚至造成系統發散。因此詳細分析了其數字實現中量化誤差的影響,提出了運算過程中用舍入法替換截斷法的優化方法;同時根據其結構特點提出基于時分復用的數字實現。仿真結果表明,所提出的精度與資源優化方法,可以實現精度與資源的雙優化。
SOGI 是典型的二階結構,其結構框圖如圖1所示。

圖1 二階廣義積分器結構圖
SOGI 的特征傳遞函數如下:

式中:vin為輸入的正弦電壓信號,vout與qout是2 個相互正交的信號,k為系統的阻尼系數,ωn為系統的無阻尼自然角頻率。
令s=jω,分析系統頻率響應如下:

式中:|Hd(jω)|、|Hq(jω)|分別為2 個相互正交信號的幅值,φd(ω)、φq(ω)分別為2 個相互正交信號的相角。
由式(3)與式(4)可知,vout、qout的幅值和相位都隨著輸入信號的角頻率ω變化,但是qout始終滯后vout90°,當輸入信號的頻率ω等于ωn時,vout的幅值和相位都與輸入信號一致,qout的幅值與輸入一致,相位滯后90°。
采用FPGA 等硬件系統實現SOGI 算法時,ADC引入的輸入信號量化誤差,SOGI 傳遞函數的系數量化誤差,運算過程中的量化誤差,都將影響SOGI 的輸出信號精度,甚至造成系統發散。
量化誤差定義為量化后的值減去理論值,處理量化誤差時主要有舍入法和截斷法2 種,舍入法和截斷法的概率密度曲線如圖2 所示[7],q表示二進制數所能表示的最小單位。舍入法的均值為0,方差為q2/12;截斷法的均值為-q/2,方差為q2/12。

圖2 量化誤差的概率密度曲線
SOGI 兩個傳遞函數離散后的差分方程分別為式(5)和式(6),式中所有參量都是理論值。


一般ADC 采用的是舍入法,均值為0[7-8]。ADC 引入的輸入信號量化誤差可通過增加ADC 量化位數減小,但是增加量化位數也意味著增加計算量和資源消耗。所以ADC 量化位數選取一般滿足信噪比要求即可,且SOGI 的2 個傳遞函數分別是帶通和低通濾波器[9-10],delta-sigma ADC 可以將量化誤差頻譜移至高頻區域[8],則SOGI 能夠過濾ADC 引入的輸入信號量化誤差。因此接下來主要分析系數的量化誤差和運算過程中的量化誤差。
以式(5)為例,SOGI 采用整數實現,考慮系數與運算過程中的量化誤差后,數字實現過程中實際的差分方程如式(7)所示。


根據信噪比要求,選用16 位的delta-sigma ADC對10 MHz 的正弦信號進行欠采樣,采樣時鐘為9 MHz。SOGI 數字實現時的準確性,關鍵在于離散化方法的選擇。前向歐拉與后向歐拉法,實現簡單,但是最大增益頻率存在偏移以及輸出信號相位差并非理想的90°[12]。雙線性變換法在數字頻率與模擬頻率間存在嚴重的非線性畸變[7]。預畸變的雙線性變換法沒有最大增益頻率偏移的問題,輸出信號也是正交的,但是涉及三角函數及除法計算,硬件實時更新系數困難[13]。除此之外,還有一些復雜的非數值積分的方法,包括沖擊響應不變法、零極點匹配法和零階保持器法等[12,14]。
采用預畸變的雙線性變換法,采樣周期Ts=1/9 000 000 s,綜合考慮超調量與調整時間,阻尼系數k,系數量化以a0為2N、量化精度比ADC 的精度略高為準。利用SIMULINK 多次仿真不同量化位數下誤差值εv的大小,最終選取N=22,仿真結果如圖3 所示,仿真的輸入信號是幅值為1 V 的正弦電壓信號,圖中的標記值為標記點的誤差值,其中P表示峰值、V表示谷值。此時系統穩定后誤差值εv為10-7數量級,16 位ADC 的最低有效位(LSB)為10-5數量級,因此N=22 時系數的量化誤差對系統精度影響較小,同樣系數的量化誤差未造成系統不穩定。

圖3 量化位數為22 時的誤差值
Z域傳遞函數分別如式(10) 與式(11) 所示[14],式中的系數包含量化誤差,按圖4 所示的方式實現,其中乘法運算采用IP 核實現。為了避免使用除法IP 核消耗巨大的資源及造成大量的延時,除法運算采用對二進制補碼數右移N位近似實現,量化誤差處理采用截斷法。乘法運算之所以不用左移實現,是因為如果需要對系數實時更新,可由上位機在線計算系數然后下發到FPGA,采用IP 核可直接運算,而左移則需要對系數進行分解;采用乘法IP核實現時,還可通過割集重定時改變傳統框圖中延時單元的位置,改由乘法IP 核實現延時,則不需要額外的延時單元。


圖4 未時分復用的SOGI 數字實現
算法采用VHDL 語言實現,FPGA 型號選用Xilinx 公司的xc7a100tfgg484-2 芯片,仿真結果如圖5 所示,SOGI 的資源消耗情況如表2 所示。

圖5 未優化的SOGI 仿真結果圖

表1 采用截斷法結果
由圖4 可知,SOGI 的2 個傳遞函數僅零點系數不一致,因此提出基于時分復用的SOGI 實現,減少資源消耗,其數字實現如圖6 所示。數據在9 MHz的時鐘驅動下輸入給vin,零點系數通過9 MHz 時鐘的高低電平進行選擇。運算部分(即點畫線內)工作在18 MHz 的時鐘下,因此乘法器延時變成了未時分復用前的2 倍,以實現在9 MHz 的數據周期內,完成2 次計算。然后同樣通過9 MHz 時鐘的高低電平驅動數據分配器對計算結果進行分配,再經過時序同步處理即可得到一對正交信號。

圖6 基于時分復用的SOGI 數字實現
運算過程中右移實現除法時用舍入法替換截斷法,為便于硬件實現,選用與MATLAB 中nearest 函數一致的舍入規則[16]:計算結果向著最近的整數舍入,若舍去部分的數值,等于保留部分末位的一半時,則向著正無窮的方向舍入到最近的整數。
設一個M位的二進制補碼數X(M-1:0)除以2N(即右移N位),用選用的舍入規則進行處理,處理后的數據用Y表示,其程序流程圖如圖7 所示,通過判斷二進制補碼數的最高位和舍入部分的第1位,即可完成判斷。

圖7 舍入法流程圖
FPGA 仿真結果如圖8 所示,由于時序同步處理使得vout和qout相對于vin同時延時了1 個時鐘周期,但這并不影響vout和qout的正交性。時分復用后的SOGI 資源消耗如表2 所示,可以發現,基于時分復用的SOGI 實現方式在未選擇時分復用的基礎上,查找表(LUT)消耗減少了57.6%,乘法器(DSP)消耗減少了44.4%,但是由于增加了乘法器延時,觸發器(FF)的消耗增加了2.8 倍。總的來說,利用資源較豐富的觸發器換取查找表和乘法器的減少,實現了資源優化。

圖8 優化后的SOGI 仿真結果圖

表2 SOGI 時分復用前后資源消耗對比
運算過程中的量化誤差按舍入法處理后的數據與誤差分析列于表3 中,表中的參量定義與前文一致。對比表1,發現優化后vout與qout的誤差明顯減小,標準差從1.74 減小到0.17,減小了90.2%。

表3 采用舍入法結果
通過對ADC 引入的輸入信號量化誤差,SOGI傳遞函數的系數量化誤差及運算過程中的量化誤差,進行了詳細分析并得出結論。ADC 引入的輸入信號量化誤差會被SOGI 過濾。傳遞函數系數的量化誤差不能過大,否則輸出將嚴重偏離理論值甚至發散。運算過程中的量化誤差可以用舍入法替換截斷法進行優化,仿真結果表明,系統穩定后,輸出數據的標準差從1.74 減小到0.17,減小了90.2%。同時根據SOGI 的結構特點,提出基于時分復用的數字實現,仿真結果表明,觸發器的消耗增加了2.8倍,查找表消耗減少了57.6%,乘法器消耗減少了44.4%,實現了利用資源較豐富的觸發器換取查找表和乘法器的減少。綜上,提出的優化方法,可以實現精度與資源的雙優化。