汪浩+管國云+陳學(xué)英
摘 要: 針對當(dāng)前測井儀器接收電路多通道、小體積、低功耗、高效率的設(shè)計要求,提出了一種基于FPGA的DPSD算法實(shí)現(xiàn)新方法。該方法采用一種簡化的正交DPSD處理方法,方便電路和算法的實(shí)現(xiàn);串行ADC采樣數(shù)據(jù)直接進(jìn)入運(yùn)算,無需串并轉(zhuǎn)換,在節(jié)省FPGA引腳的同時保證了算法效率;用移位累加操作代替乘法操作,極大地降低了算法對FPGA邏輯資源的消耗。在具體FPGA器件上的實(shí)現(xiàn)結(jié)果表明,該方法能夠在不影響算法效率的情況下減少對FPGA引腳占用和近一半的邏輯資源消耗,滿足預(yù)先的設(shè)計要求。
關(guān)鍵詞: 測井儀器; DPSD; FPGA資源消耗; 串行ADC; 移位累加
中圖分類號: TN402?34 文獻(xiàn)標(biāo)識碼: A 文章編號: 1004?373X(2015)16?0129?04
An new method for implementing of FPGA?based DPSD algorithm
WANG Hao, GUAN Guoyun, CHEN Xueying
(University of Electronic and Technology of China, Chengdu 610054, China)
Abstract: Aimed at the design requirements of multi?channel, small volume, low?power dissipation and high efficiency of the receiving circuits in logging instrument, an new method of implementing FPGA?based DPSD algorithm is proposed. A handling method of simplified orthorhombic DPSD algorithm is adopted in this method, which makes the implementation of circuit and algorithm easier. The serial ADC sampling data can be used in the operation directly and it is unnecessary to perform serial?parallel conversion, which guarantees the algorithm efficiency while taking less FPGA pins. The multiplication operation is replaced by the shift?accumulation operation, which greatly reduces the consumption of the logical resource in FPGA. The implementation result on a specific FPGA device shows that the method, keeping similar algorithm efficiency, can reduce the occupation of FPGA pins and save nearly half of the logical resource consumption, which satisfies the design requirements presented above.
Keywords: logging instrument; DPSD ; FPGA resource consumption; serial ADC; shift?accumulation
0 引 言
在醫(yī)療、軍事、測井等諸多領(lǐng)域都需要對微弱信號進(jìn)行測量[1?3]。對微弱信號測量的核心問題是在高噪聲背景下,當(dāng)待測信號有可能已被淹沒在噪聲中時,提取待測信號的幅度、相位等信息。以電法測井應(yīng)用為例,測井儀器通常需要通過信號的激勵發(fā)射、信號在地層中的響應(yīng)、響應(yīng)信號的檢波接收等3個過程,完成對地層信息的初步采集。受限于地層響應(yīng)的固有特性和儀器的發(fā)射功率,儀器接收到的響應(yīng)信號往往十分微弱,有時甚至?xí)椭翈譶V。此時,一般的檢波方式難以精確提取接收信號中的幅度、相位等信息。
相敏檢波利用互相關(guān)原理,能夠十分有效地從噪聲中提取出與參考信號具有相關(guān)性的待測信號的幅度和相位信息,同時忽略不相關(guān)的背景噪聲的干擾[4]。數(shù)字相敏檢波(DPSD)通過數(shù)字方式實(shí)現(xiàn)相敏檢波,避免了由乘法器和積分器組成的模擬相敏檢波器件的非線性和過載現(xiàn)象[5]。DPSD算法利用FPGA,DSP等數(shù)字器件實(shí)現(xiàn)互相關(guān)算法,因而具有無誤差、正交性好、諧波抑制能力強(qiáng)等優(yōu)點(diǎn);且電法測井儀器中發(fā)射端的激勵信號一般為幾個固定頻點(diǎn)[6],非常適合通過互相關(guān)算法對接收信號進(jìn)行檢波。鑒于上述諸多優(yōu)點(diǎn),DPSD算法目前在國內(nèi)外諸多測井儀器中都得到了廣泛的應(yīng)用[7]。
FPGA具有并行性、速度快、穩(wěn)定性高等優(yōu)點(diǎn),是實(shí)現(xiàn)DPSD算法的優(yōu)選平臺。DSP具有強(qiáng)大的浮點(diǎn)運(yùn)算能力和系統(tǒng)控制能力,與FPGA結(jié)合往往能夠最大限度地發(fā)揮兩者的優(yōu)勢,實(shí)現(xiàn)高效、高精度的DPSD算法。目前普遍的設(shè)計方式是采用并行或串行模/數(shù)轉(zhuǎn)換器(ADC)完成信號采樣,在FPGA中利用通用乘法器和累加器完成乘法和累加(乘累加)運(yùn)算,再在DSP中完成浮點(diǎn)數(shù)運(yùn)算和系統(tǒng)控制等操作。陳洋等提出了2種基于FPGA的DPSD算法架構(gòu)[8],能夠大大降低對DSP運(yùn)算能力的要求,具有較高的靈活性。然而隨著電法測井技術(shù)的不斷發(fā)展,測井儀器往往會面臨更高的測量速度和精度,更多的測量信號通道,以及更加嚴(yán)格的功耗控制等問題。以三分量感應(yīng)測井儀為例,由于線圈系結(jié)構(gòu)復(fù)雜,儀器往往需要同時對多路線圈信號進(jìn)行測量。當(dāng)面臨多路信號的運(yùn)算時,并行ADC勢必會帶來FPGA引腳資源的極大消耗,而更高引腳數(shù)的FPGA芯片封裝往往又意味著更大的功耗;串行ADC需要在FPGA內(nèi)部完成串/并轉(zhuǎn)換操作,這會占用FPGA時鐘資源,降低數(shù)據(jù)吞吐速率;并且FPGA實(shí)現(xiàn)多路通用乘法器會造成較大的邏輯資源消耗,分時復(fù)用同樣會對數(shù)據(jù)吞吐速率造成不良影響。為此,本文提出了一種基于FPGA的DPSD算法實(shí)現(xiàn)新方法。該算法采用移位累加器取代乘法器,無需對AD數(shù)據(jù)進(jìn)行串/并轉(zhuǎn)換,因而可以在獲得較高的數(shù)據(jù)吞吐率的同時大大減少對FPGA引腳和內(nèi)部邏輯等資源的消耗。endprint
1 DPSD算法原理
1.1 相敏檢波原理
傳統(tǒng)的模擬相敏檢波利用模擬乘法器和積分器實(shí)現(xiàn)待測信號和參考信號的互相關(guān)算法,如圖1所示。
圖1 相敏檢波流程圖
圖1中,[xt]為待測信號[st]與系統(tǒng)噪聲[nt]的疊加,表達(dá)式為:
[x(t)=s(t)+n(t)=Ascos(ωt+θ)+n(t);]
[rt]為與待測信號[st]同頻率的參考信號,在[rt]與[st]的相位關(guān)系不明確的情況下,欲測得[st]的幅度[As]和相位差[θ],需要采用兩組正交的參考信號[r1t]和[r2t]同時完成圖1中相敏檢波流程。這里假設(shè)參考信號幅度為1,相位為0,即:
[r1(t)=cos(ωt), r2(t)=sin(ωt)]
[xt]與[r1t]進(jìn)行互相關(guān)運(yùn)算,即:
[R1=1T0Tx(t)r1(t)dt=1T0Ts(t)r1(t)+n(t)r1(t)dt]
若認(rèn)為噪聲為隨機(jī)噪聲,與參考信號無相關(guān)性,則只要積分時間T足夠長,上式中系統(tǒng)噪聲[nt]的影響可以被消除,得:
[R1=limT→∞1T0Ts(t)r1(t)dt=As2cosθ]
同理,得:
[R2=limT→∞1T0Ts(t)r2(t)dt=-As2sinθ]
顯然,結(jié)合[R1]和[R2]即可求得待測信號的幅度[As]與相位[θ]。
1.2 DPSD算法實(shí)現(xiàn)
DPSD是上述模擬相敏檢波的數(shù)字實(shí)現(xiàn)方式。用數(shù)字方式描述互相關(guān)算法的表達(dá)式為:
[R=1Nn=1Nxnrn]
從式中可以看出,DPSD算法需要對待測信號進(jìn)行模/數(shù)(A/D)轉(zhuǎn)換后再完成兩者的乘法和累加操作。在這個過程中,諸多因素都可能對DPSD算法的精度造成影響。張新發(fā)等分析了測量時間對DPSD算法精度的影響[5],得出的結(jié)論為算法輸出信噪比與測量時間成正比,且在滿足乃奎斯特采樣率的前提下,采樣頻率對信噪比無直接影響。但若考慮到電路中帶通濾波器性能和采樣率不足可能帶來頻譜混疊,和高采樣率對抑制ADC量化誤差的積極作用[9],適當(dāng)提高采樣率對DPSD算法精度不無裨益;同樣地,更大的A/D轉(zhuǎn)換位寬也能降低量化噪聲,有助于提高算法精度。
綜合上述因素,本設(shè)計采用16倍待測信號頻率的采樣率實(shí)現(xiàn)算法設(shè)計,待測信號頻率為20 kHz,ADC有效量化位寬為14 b。
2 基于FPGA的DPSD新算法實(shí)現(xiàn)
和模擬相敏檢波一樣,DPSD算法通常也需要采用正交化的實(shí)現(xiàn)方式來測得待測信號的幅度值和相位差?;贔PGA的正交DPSD算法的實(shí)現(xiàn)方式雖然有多種[2,10?11],但其無一例外地均需要在FPGA內(nèi)部采用乘法器和累加器來實(shí)現(xiàn)DPSD算法的乘累加操作。本節(jié)著重分析了一般DPSD算法中乘累加操作實(shí)現(xiàn)方式的不足,并提出了一種改進(jìn)的實(shí)現(xiàn)方式。
2.1 基于通用乘法器、累加器的DPSD算法實(shí)現(xiàn)
如前所述,一般基于FPGA的DPSD算法都是采用在FPGA內(nèi)部實(shí)現(xiàn)通用乘法器和累加器的方式來進(jìn)行乘累加操作。
圖2分別給出了在使用并行和串行ADC時,F(xiàn)PGA內(nèi)部實(shí)現(xiàn)乘累加算法的原理框圖。不難看出采用并行ADC時,算法的效率更高,但會占用更多的FPGA引腳資源。尤其是當(dāng)需要實(shí)現(xiàn)多路信號的測量時;并行ADC接口對FPGA引腳的占用量往往是電路難以承受的。若采用更多引腳的FPGA芯片又可能會導(dǎo)致電路體積、功耗的增加等問題。串行ADC能夠大大減少對FPGA引腳資源的消耗,但FPGA內(nèi)部的串/并轉(zhuǎn)換過程會占用系統(tǒng)時鐘周期,影響算法效率。最主要的是,上述兩種實(shí)現(xiàn)方式都需要在FPGA內(nèi)部采用通用乘法器實(shí)現(xiàn)采樣數(shù)據(jù)的乘法操作,而在FPGA中綜合通用乘法器會消耗較多的邏輯資源。如何兼顧并行A/D算法效率高和串行A/D引腳占用少的優(yōu)點(diǎn),同時減少對FPGA邏輯資源的消耗,正是接下來要解決的問題。
圖2 并/串行AD接口乘累加框圖
2.2 改進(jìn)的串行乘累加算法
本文提出了一種新的串行正交DPSD算法,并著重對采用串行ADC接口是FPGA內(nèi)部的乘累加算法進(jìn)行了改進(jìn)。具體地:
(1) 待測信號和參考信號直接與FPGA內(nèi)部正、余弦函數(shù)表完成正交的DPSD算法,計算結(jié)果再通過DSP等浮點(diǎn)運(yùn)算設(shè)備完成信號幅度值和相位差的計算;
(2) 在上一點(diǎn)的基礎(chǔ)上,采用查找表結(jié)合移位累加算法替代通用乘法器完成乘法運(yùn)算,減少了FPGA邏輯資源的消耗;
(3) 每一位A/D串行數(shù)據(jù)都可以獨(dú)立參與運(yùn)算,無需對串行A/D數(shù)據(jù)進(jìn)行串/并轉(zhuǎn)換,在節(jié)省FPGA引腳占用的同時提高了算法效率。
如圖3所示,A/D采樣數(shù)據(jù)x[n]高位在前,串行輸入FPGA內(nèi)部移位累加器模塊,完成與內(nèi)部sin(正弦)和cos(余弦)函數(shù)表的乘法運(yùn)算。具體實(shí)現(xiàn)方式為:x[n]當(dāng)前某一位數(shù)據(jù)對sin和cos系數(shù)進(jìn)行選擇,x[n]當(dāng)前位為0則忽略,為1則按當(dāng)前位數(shù)對sin和cos系數(shù)進(jìn)行加權(quán)處理(移位);不同位數(shù)權(quán)值不同,加權(quán)處理后的sin和cos系數(shù)相加,當(dāng)最后一位x[n]的串行數(shù)據(jù)輸入完成后即得到完整結(jié)果(累加)。上述過程可表示為:
[xn×sin=D13D12???D0×sin=i=130Di×sin×2i]
圖3 算法結(jié)構(gòu)框圖
本設(shè)計采用ACTEL公司型號為A3P250的FPGA作為算法實(shí)現(xiàn)平臺。該FPGA芯片基于FLASH架構(gòu),具有掉電不易失、功耗低、上電啟動速度快等優(yōu)點(diǎn)。并且FLASH架構(gòu)較SRAM架構(gòu)而言在高溫和復(fù)雜電磁環(huán)境下具有更高的可靠性,因而被廣泛地應(yīng)用于軍工、航天、測井等領(lǐng)域。
A3P250內(nèi)部具有大小為1 Kb的FLASHROM可供用戶自行配置。本設(shè)計將sin和cos函數(shù)表存儲在內(nèi)部FLASHROM中,有利于充分利用FPGA硬件資源,進(jìn)一步減少對可編程邏輯資源的消耗。具體實(shí)現(xiàn)時,AD轉(zhuǎn)換時鐘CNVST在FPGA內(nèi)部經(jīng)過計數(shù)后,其計數(shù)結(jié)果對FLASHROM進(jìn)行尋址;FLASHROM輸出對應(yīng)的sin和cos系數(shù)到移位累加模塊,進(jìn)而完成與A/D串行數(shù)據(jù)的乘法運(yùn)算。SCLK為ADC轉(zhuǎn)換數(shù)據(jù)的串行輸出時鐘,可以通過系統(tǒng)時鐘分頻得到。圖4描述了更加具體的移位累加模塊內(nèi)部流程圖。
圖4 移位累加模塊流程圖
圖4中,移位累加模塊同時完成x[n]與sin,cos系數(shù)的移位乘法,SCLK同時作為時鐘信號輸入到移位累加模塊。data_sec模塊為同步數(shù)據(jù)選擇模塊,當(dāng)x[n]當(dāng)前位為1時,模塊將對應(yīng)的sin和cos系數(shù)鎖存到模塊輸出端;反之,輸出為零。數(shù)據(jù)選擇模塊結(jié)果輸入到同步加法模塊,加法模塊與一位左移模塊完成圖中所示的迭代結(jié)構(gòu)。SCLK同時輸入SCLK_CNT模塊進(jìn)行計數(shù),當(dāng)計數(shù)值達(dá)到ADC串行數(shù)據(jù)位數(shù)時,模塊輸出“移位累加完成”信號shift_done,此時加法器的相加結(jié)構(gòu)即為多次移位累計運(yùn)算的完整結(jié)果。圖4中,x[n]分別與sin,cos系數(shù)完成上述移位乘法,得到兩組正交的運(yùn)算結(jié)果I和Q。在圖3中可以看到,I和Q分別送入累加器,最終完成正交DPSD算法中的乘累加操作。如前所述,DSP具有強(qiáng)大的浮點(diǎn)運(yùn)算能力,與FPGA結(jié)合可以同時發(fā)揮兩者的優(yōu)勢,提高算法效率。本設(shè)計中的I和Q數(shù)據(jù)送入DSP中完成浮點(diǎn)運(yùn)算,最終計算出待測信號的幅值和相位。
3 實(shí)驗(yàn)結(jié)果
本算法結(jié)構(gòu)最大的優(yōu)勢在于大大減少DPSD算法了對FPGA邏輯資源的消耗;并且由于不需要先完成ADC數(shù)據(jù)的串并轉(zhuǎn)換再進(jìn)行乘累加運(yùn)算,理論上算法的吞吐率可以達(dá)到ADC串行時鐘速率和FPGA系統(tǒng)時鐘速率兩者之間的較大值。本設(shè)計在A3P250上分別用第2.1節(jié)“通用乘法器+累加器”的實(shí)現(xiàn)方式和第2.2節(jié)中改進(jìn)的串行移位累加法實(shí)現(xiàn)了一路正交的DPSD運(yùn)算,軟件設(shè)計平臺為Libero IDE v9.1,并著重對比了兩者對FPGA邏輯資源的消耗情況,如表1所示。
表1 FPGA實(shí)現(xiàn)結(jié)果
從表1中可以看出,同樣實(shí)現(xiàn)一路正交的DPSD運(yùn)算,本文提出的實(shí)現(xiàn)方法較傳統(tǒng)在FPGA邏輯資源消耗方面具有很大優(yōu)勢,節(jié)省了近一半的邏輯資源。在某三分量感應(yīng)測井儀的實(shí)際應(yīng)用中,測控電路中FPGA芯片為上述A3P250,改儀器需要同時完成5路ADC數(shù)據(jù)的DPSD算法。此時,采用傳統(tǒng)方式實(shí)現(xiàn)方式的FPGA邏輯資源已經(jīng)無法滿足設(shè)計需求,而采用本文提出的實(shí)現(xiàn)方式則可很好地應(yīng)對這種情況。
4 結(jié) 語
本文結(jié)合當(dāng)前電法測井儀器的發(fā)展現(xiàn)狀,有針對性地提出了一種基于FPGA的DPSD算法實(shí)現(xiàn)新方法。該方法可以對串行ADC的輸出數(shù)據(jù)直接進(jìn)行運(yùn)算,無需在FPGA內(nèi)部完成串/并轉(zhuǎn)換,提高了算法效率;采用移位累加的處理方式實(shí)現(xiàn)乘法操作,省去了通用乘法器,使得FPGA邏輯資源消耗節(jié)省了近一半;使用內(nèi)部FLASHROM存儲sin和cos函數(shù)表,充分利用FPGA芯片硬件資源的同時進(jìn)一步減少了邏輯資源的消耗。
需要指出的是,本設(shè)計采用的sin和cos系數(shù)為數(shù)值范圍從-1~+1的有符號數(shù),這使得移位累加的過程實(shí)際上較圖4所示更為復(fù)雜。如對sin和cos函數(shù)表添加直流偏置,使得系數(shù)為全正的無符號數(shù),運(yùn)算過程可得到簡化。由DPSD算法原理可知,這樣并不會影響運(yùn)算結(jié)果,并且算法的資源消耗應(yīng)該會較表1有進(jìn)一步減少。
綜上所述,本文提出新方法能夠在提高測井儀器接收電路DPSD算法效率的同時節(jié)省FPGA引腳和內(nèi)部邏輯等資源,對其他涉及基于FPGA的DPSD算法實(shí)現(xiàn)的領(lǐng)域同樣具有借鑒意義。
參考文獻(xiàn)
[1] 王曉俊,周杏鵬,王毅.精密阻抗分析儀中數(shù)字相敏檢波技術(shù)研究與實(shí)現(xiàn)[J].儀器儀表學(xué)報,2006,27(6):592?595.
[2] 何為,何傳紅,劉斌.電阻抗成像中高速高精度數(shù)字相敏檢波器設(shè)計[J].重慶大學(xué)學(xué)報:自然科學(xué)版,2009,32(11):1274?1290.
[3] 劉升虎,邢亞敏.DPSD技術(shù)再隨鉆電阻率測井中的應(yīng)用[J].測井技術(shù),2008,32(1):69?71.
[4] 孫志斌,陳佳佳.鎖相放大器的新進(jìn)展[J].實(shí)驗(yàn)技術(shù),2006,35(10):879?884.
[5] 張新發(fā).DPSD算法性能研究及參數(shù)選擇[J].吉林工業(yè)大學(xué)學(xué)報,1998,28(3):40?45.
[6] 盧濤,朱柯斌,孫向陽.隨鉆電磁波測井寬帶信號設(shè)計和測井響應(yīng)分析[J].測井技術(shù),2014,38(1):80?85.
[7] 管國云,汪浩,聶在平,等.一種消除感應(yīng)測井直耦信號的自動調(diào)節(jié)裝置:中國,103885090[P].2014?06?25.
[8] 陳陽,聶在平.DPSD算法的FPGA高效實(shí)現(xiàn)[J].測井技術(shù),2013,37(4):421?425.
[9] AZIZ P M, SORENSEN H V, VN DER SPIEGEL J. An overview of sigma?delta converters [J]. IEEE Journals & Magazines, 1996, 13(1): 61?84.
[10] 楊平.一種新的數(shù)字式正交相位檢波器[J].上海航天,1994(3):14?17.
[11] 梁世盛,喬鳳斌,張燕.基于FPGA的數(shù)字相敏檢波算法實(shí)現(xiàn)[J].自動化儀表,2013,34(11):13?16.