葉品勇,吳銀福,邵宗衛(wèi),關繼勇,陳新之,周兆慶
(1.南京電研電力自動化股份有限公司,南京 210000;2.南京國電南自自動化有限公司,南京 211100)
隨著智能電網(wǎng)的推進和相關技術研究的深入,對繼電保護及自動化設備的精度和動態(tài)響應的考核要求越來越高,因此需要一款能夠模擬電壓、電流輸出信號的信號發(fā)生裝置。該裝置應具備調頻、調相、調幅、采樣率可調以及諧波疊加等各項繼電保護測試儀的功能,同時還應具備輸出信號可編程功能。
現(xiàn)場可編程邏輯門陣列(FPGA)因靈活性、可靠性和集成度高而逐漸受人矚目。由于計算精度與存儲容量的矛盾,在存儲資源有限的FPGA芯片中,常用的查找表實現(xiàn)余弦函數(shù)離散值的方法已沒有優(yōu)勢[1-8]。因此,本文提出了一種查找表與拉格朗日插值相結合的算法,結合兩者的優(yōu)勢,在保證精度的前提下優(yōu)化了算法的輸出時延和資源消耗。
連續(xù)余弦函數(shù)常見的表達式為F=Acos(ωt+φ)=Acos(2πft+φ),式中:A為幅值;f為頻率;φ為初相角。在數(shù)字系統(tǒng)中需要對連續(xù)函數(shù)進行離散化處理,離散余弦函數(shù)常見的表達式為
k=0,1,2,…。
(1)
式中:s為采樣率,即每秒采樣點數(shù);k為采樣序號。
根據(jù)式(1)可直接計算每點對應的采樣點數(shù)據(jù),然而這種方式需要消耗大量的FPGA邏輯資源且計算延時長。采用查表法,如果查找表顆粒度太粗,則精度不夠,顆粒度太細,則需要建立一個龐大的查找表,占用大量的FPGA存儲資源。鑒于此,為了在FPGA中實現(xiàn)余弦函數(shù)離散值生成器,綜合考慮邏輯資源和運算速度,采用查表插值法是一種較合適的方法。
首先,建立一個整周波查找表,為了減少FPGA邏輯資源消耗,在滿足精度的前提下采用定點數(shù)表示。將F=32 768 cosθ均勻分割成1 024份,每份偏移角度為 2π/1 024,按四舍五入取,形成查表插值法的基準查找表,見表1。將基準查找表中1 024個采樣點按順序排列,波形如圖1所示。
表1 余弦函數(shù)基準查找表Tab.1 Cosine function reference lookup
圖1 余弦函數(shù)基準采樣點波形Fig.1 Waveform at cosine function reference sampling point
其次,需要計算出弧度落在基準查找表的哪個區(qū)間及在區(qū)間中的偏移位置。將式(1)中的弧度除以基準表最小步長2π/1 024,得到式(2)。
(2)
另外,為采用定點數(shù)處理,將兩個基準點之間的步長均分為1 024等份,即將式(2)分子分母均乘以1 024得到式(3)。
k=0,1,2,…。
(3)
k=0,1,2,…。
(4)
計算式(4)所得商即為基準查找表的左區(qū)間序號,商加1即為基準查找表的右區(qū)間序號,余數(shù)為區(qū)間內的相對偏移位置。
令n為式(4)的商,r為式(4)的余數(shù),由于余弦函數(shù)為周期性函數(shù),且基準查找表只記錄1個周波的數(shù)值(分為1 024個基準點),因此需要對n進行求模運算,令n′=n%1 024,則離散值插值區(qū)間為[n′,n′+1]。
根據(jù)以上計算可獲知余弦函數(shù)離散值對應的插值區(qū)間和插值偏移位置,采用一階線性插值算法再乘以幅值A,可計算出余弦函數(shù)離散值
(5)
由以上算法推演過程可見,實現(xiàn)一項諧波輸出需要配置4個參數(shù),分別為采樣率s(單位Hz)、頻率f′(單位Hz/1 024,如:頻率50.01 Hz表示為51 210)、初相角φ′(單位π/1 024,如:初相角1.5 π表示為1 536)和幅值A??稍贔PGA內部維護多組配置信息,分別計算出相應的諧波分量,相加后可實現(xiàn)多項諧波分量疊加信號輸出。
為了提高FPGA運算速度和簡化FPGA運算邏輯,上述運算過程盡量避免除法運算而采用移位來實現(xiàn)。式(4)求商運算可簡化為右移10位實現(xiàn),求余數(shù)運算可簡化為取數(shù)值低10位數(shù)據(jù)實現(xiàn);同理,對n進行求模運算也可簡化為取數(shù)值低10位數(shù)據(jù)來實現(xiàn)。需要注意,式(4)中1 024f′/s無法避免除法運算,但該數(shù)值只與配置項有關,因此,只需在初始時刻和配置項改變時刻計算一次,后期無需重復計算。
綜上所述,實現(xiàn)余弦函數(shù)離散值生成器的計算流程如圖2所示。
查表插值算法中采用了一階線性插值,由此會引進誤差,如圖3所示。
由拉格朗日插值多項式插值余項可知,一階線性插值誤差為
R1(x)=f(x)-L1(x)=
ξ∈(xn,xn+1) 。
(6)
圖4 算法驗證波形Fig.4 Algorithm validation waveform
圖2 余弦函數(shù)離散值生成器計算流程Fig.2 Computational flow of cosine function discrete value generator
圖3 插值誤差示意Fig.3 Schematic of interpolation error
由于式(6)是一個誤差區(qū)間,不方便誤差估算,因此采用最大誤差進行估算。
可見,算法精度很高,且算法精度不受諧波頻率的影響,遠遠超過了目前智能電網(wǎng)對信號發(fā)生測試裝置精度的要求。
為了驗證算法的正確性,在Xilinx公司的Artix7芯片上進行了板級驗證,通過調用Vivado的Debug調試工具,將關鍵信號添加到信號觀察窗口,以判斷算法是否執(zhí)行正確,如圖4所示。
該驗證程序占用 331 Flip-Flop (觸發(fā)器)、152LUT(查找表)、2 048字節(jié)Block-RAM、6 DSP48。系統(tǒng)時鐘頻率為125 MHz,每11個時鐘周期(即88 ns)完成一次離散值計算。
可見,實際測試中本文提出的算法是正確可行的,具有占用FPGA資源少、響應速度快的優(yōu)點。
圖5 余弦函數(shù)離散值幅頻特性Fig.5 Amplitude-frequency characteristic of cosine function discrete value
本文提出了基于查找表與拉格朗日插值的用于實現(xiàn)余弦函數(shù)離散值的方法,該方法結合了兩者的優(yōu)勢,具有占用FPGA資源少、響應速度快、精度高、配置靈活等優(yōu)點,可以很好地滿足智能電網(wǎng)繼電保護測試儀的功能需求。