基于FPGA的FFT算法優(yōu)化及其在磁共振譜儀中的應(yīng)用
摘要:提出了一種基于FPGA的依據(jù)核磁共振譜儀雙通道頻譜圖對(duì)其信號(hào)增益和相位差不平衡進(jìn)行調(diào)節(jié)的設(shè)計(jì)方案,詳細(xì)闡述了FFT算法在FPGA中的設(shè)計(jì)與實(shí)現(xiàn)方法。該模塊中的FFT處理器通過(guò)多個(gè)64點(diǎn)并行FFT模塊復(fù)用實(shí)現(xiàn),復(fù)數(shù)乘法全部采用移位相加來(lái)完成,大大降低了功耗,可移植性很強(qiáng);并通過(guò)優(yōu)化措施有效地降低了由于有限字長(zhǎng)效應(yīng)引入的噪聲。結(jié)果表明,該設(shè)計(jì)大大提高了譜儀信號(hào)檢測(cè)的準(zhǔn)確性與使用的方便性。
關(guān)鍵詞:核磁共振譜儀;頻譜分析;FPGA;FFT處理器
0 引言
核磁共振(Nuclear Magnetic Resonance,NMR)自從1946年首次觀測(cè)以來(lái)已經(jīng)成功地應(yīng)用到物理、化學(xué)、生物和醫(yī)學(xué)等諸多領(lǐng)域。與此同時(shí),核磁共振儀器技術(shù)也得到了不斷的發(fā)展,其中核磁共振譜儀被廣泛用于化合物的結(jié)構(gòu)測(cè)定,定量分析和動(dòng)物學(xué)研究等方面。
核磁共振譜儀通過(guò)短時(shí)間的高功率射頻脈沖激發(fā)原子核體系使之偏離平衡狀態(tài),然后檢測(cè)該體系在恢復(fù)平衡過(guò)程中產(chǎn)生的自由感應(yīng)衰減信號(hào),經(jīng)過(guò)FFT處理后得到相關(guān)的譜信息。目前NMR譜儀普遍使用的檢測(cè)信號(hào)的方法是正交檢波技術(shù),它需要兩路相檢波來(lái)區(qū)分正負(fù)頻率,然而當(dāng)兩通道的增益與相位存在微小的不平衡時(shí),譜圖上就會(huì)產(chǎn)生鏡像峰,解決的有效方法是采用相位循環(huán)。但對(duì)于長(zhǎng)期使用、老化或故障造成增益或相位差與理想值偏離較大的儀器,即使采用相位循環(huán)也不足以解決問題,這時(shí)需要通過(guò)手動(dòng)調(diào)節(jié),然而調(diào)節(jié)到什么程度往往只能憑借經(jīng)驗(yàn)。
本文提出了一種依據(jù)雙通道的頻譜圖給出調(diào)節(jié)依據(jù)的方法。系統(tǒng)結(jié)構(gòu)框圖如圖1所示,通過(guò)ADC模塊對(duì)雙通道進(jìn)行采樣,要在頻域?qū)π盘?hào)進(jìn)行分析,需要得到信號(hào)的頻域信息,因此在采樣之后通過(guò)FPGA對(duì)信號(hào)做FFT變換,然后將得到的頻域信息存入DDR2RAM,以便主機(jī)通過(guò)PCIE接口將數(shù)據(jù)讀入主機(jī)內(nèi)存并進(jìn)行顯示。在調(diào)節(jié)的時(shí)候,可根據(jù)頻譜圖顯示的譜峰把I通道的增益和相位適當(dāng)?shù)恼{(diào)小或者對(duì)應(yīng)的調(diào)節(jié)Q通道(如圖2所示),直到譜峰消失。
1 正交檢波原理
如圖2所示,正交檢波系統(tǒng)由兩路檢波通道(I通道和Q通道)組成,譜儀接收到的核磁共振信號(hào)V(t),首先經(jīng)過(guò)混頻器或模擬乘法器與參考信號(hào)相乘,對(duì)于I,Q通道來(lái)說(shuō)參考信號(hào)是相位相差90°的等幅射頻信號(hào),分別將兩者的乘積作為兩通道的輸出。
對(duì)于分子中只有一種質(zhì)子的簡(jiǎn)單情況,根據(jù)Bloch方程接收到的核磁共振信號(hào)如下式:
V(t)=Acos(ω0+φ)exp(-t/T2) (1)
I通道的參考信號(hào)為cosωt,經(jīng)過(guò)混頻器與輸入信號(hào)相乘后為:
得到的乘積為兩項(xiàng):第一項(xiàng)為和頻分量,經(jīng)過(guò)后面的低通濾波器被濾除掉;第二項(xiàng)為差頻分量作為I通道的輸出。綜上所述I通道的輸出為:
對(duì)于Q通道,輸入為V(t),參考信號(hào)為sinωt,通過(guò)類似方法可以計(jì)算出Q通道的輸出為:
然后經(jīng)過(guò)模/數(shù)轉(zhuǎn)換分別將I通道和Q通道的數(shù)據(jù)作為復(fù)數(shù)的實(shí)部和虛部存儲(chǔ)下來(lái)。
2 FFT算法實(shí)現(xiàn)
FFT算法在FPGA上實(shí)現(xiàn)的過(guò)程中,信號(hào)的值、系統(tǒng)的系數(shù)和運(yùn)算中的結(jié)果都存儲(chǔ)在有限字長(zhǎng)的存儲(chǔ)單元中,從而導(dǎo)致了設(shè)計(jì)時(shí)的無(wú)限精度轉(zhuǎn)變成實(shí)現(xiàn)時(shí)的有限精度,必將產(chǎn)生相對(duì)于原設(shè)計(jì)系統(tǒng)的誤差,嚴(yán)重時(shí)會(huì)將由于雙通道不平衡產(chǎn)生的鏡像峰湮滅,從而使整個(gè)設(shè)計(jì)失去意義。
為了實(shí)現(xiàn)FFT實(shí)時(shí)運(yùn)算,基于FPGA的FFT信號(hào)處理模塊是關(guān)鍵,并且要求此模塊能在頻率至少為210 MHz的系統(tǒng)時(shí)鐘下穩(wěn)定工作。同時(shí)又因?yàn)椴⑿械腇FT設(shè)計(jì)需要占用大量的資源,資源使用率過(guò)大會(huì)制約布局布線后的時(shí)序收斂。為了平衡資源與速度間的矛盾,整個(gè)設(shè)計(jì)通過(guò)64點(diǎn)FFT并行模塊的復(fù)用來(lái)實(shí)現(xiàn)。
2.1 有限字長(zhǎng)效應(yīng)及其優(yōu)化措施
在FFT算法中,采用蝶形計(jì)算,如圖3所示。
對(duì)于基2時(shí)間抽選FFT算法,蝶形公式如下:
式中:N為FFT點(diǎn)數(shù);Nm和P為兩個(gè)同迭代次數(shù)m有關(guān)的量;Xm-1為ADC輸出信號(hào)經(jīng)過(guò)m-2級(jí)蝶形運(yùn)算得到的計(jì)算結(jié)果;旋轉(zhuǎn)因子由式(7)給出,每個(gè)蝶形包含兩個(gè)復(fù)數(shù)乘法。
由于存儲(chǔ)單元有限,必須對(duì)計(jì)算結(jié)果截取,進(jìn)行定點(diǎn)化,但是同時(shí)又會(huì)引入舍入誤差en,這種現(xiàn)象即為有限字長(zhǎng)效應(yīng)??紤]到每個(gè)復(fù)數(shù)乘法相當(dāng)于4個(gè)實(shí)數(shù)乘法,因此有限字長(zhǎng)時(shí)復(fù)數(shù)乘法的實(shí)際乘積可以表示為:
式中e1,e2,e3,e4分別為其對(duì)應(yīng)的實(shí)數(shù)乘法的舍入誤差。因此可進(jìn)一步建立如圖4所示的蝶形計(jì)算舍入誤差模型。
如果用一般的定點(diǎn)計(jì)算,信噪比下降,噪聲會(huì)將產(chǎn)生的鏡像峰湮滅,因此必須采取一定的措施減小由定點(diǎn)化產(chǎn)生的誤差。考慮到在64點(diǎn)FFT并行模塊里點(diǎn)數(shù)是固定的,進(jìn)行蝶形運(yùn)算時(shí)旋轉(zhuǎn)因子是常數(shù),因此可以根據(jù)系數(shù)的特點(diǎn)對(duì)定點(diǎn)化時(shí)的階碼做動(dòng)態(tài)調(diào)整,在保證無(wú)溢出的條件下最大程度的減小噪聲。
如圖5所示,對(duì)比在Matlab中的仿真結(jié)果,在沒有采取動(dòng)態(tài)調(diào)整措施前進(jìn)行定點(diǎn)化的噪聲量級(jí)達(dá)到±1(見圖5(a)),進(jìn)行動(dòng)態(tài)調(diào)整后下降到10-3(見圖5(b)),可見采用動(dòng)態(tài)調(diào)整進(jìn)行定點(diǎn)化可以有效地降低由于有限字長(zhǎng)效應(yīng)引起的噪聲。
圖6為進(jìn)行動(dòng)態(tài)調(diào)整后在FPGA硬件運(yùn)行的仿真結(jié)果,與軟件自帶的FFT IP相比誤差很小,在輸入正弦波的時(shí)候可以明顯地觀察到尖峰,這樣的結(jié)果足以滿足NMR譜儀的信號(hào)檢測(cè)要求。
2.2 64點(diǎn)FFT并行模塊資源優(yōu)化
由于64點(diǎn)FFT模塊并行實(shí)現(xiàn),所占用的FPGA邏輯資源太多,在一般的FPGA中難以實(shí)現(xiàn),因此有必要對(duì)其進(jìn)行優(yōu)化減少所占用的資源。該設(shè)計(jì)中N是確定的,旋轉(zhuǎn)因子都是常數(shù),蝶形運(yùn)算中的復(fù)數(shù)乘法為常系數(shù)乘法,根據(jù)這個(gè)特點(diǎn),可對(duì)使用資源進(jìn)行優(yōu)化。
如式(9)所示,64點(diǎn)FFT可分解為384個(gè)蝶形運(yùn)算單元。
n=Nlog N (9)
式中:N為FFT點(diǎn)數(shù);n為所需的蝶形運(yùn)算單元的個(gè)數(shù)。
式(5)和(6)各包含1個(gè)復(fù)數(shù)加法運(yùn)算和1個(gè)復(fù)數(shù)乘法運(yùn)算,需要2個(gè)加法器和4個(gè)乘法器實(shí)現(xiàn)。但經(jīng)過(guò)如式(10)所示的運(yùn)算后的復(fù)數(shù)乘法可用三乘法器實(shí)現(xiàn),因此綜合后的資源先比四乘法器架構(gòu)優(yōu)化了25%,
(A1+B1i)(A2+B2i)=(A1A2-B1B2)(A1B2-A2B1)i=A1(A2+B2)=B2(A1+B1)+[A1(A2+B2)-A2(A1+B1)] (10)
旋轉(zhuǎn)因子WN的二進(jìn)制表示可看作是若干項(xiàng)2次冪數(shù)相加組合而成的數(shù),那么一個(gè)數(shù)與WN相乘即可通過(guò)在移位操作的基礎(chǔ)上執(zhí)行相應(yīng)的加法操作來(lái)實(shí)現(xiàn)。根據(jù)正弦函數(shù)與余弦函數(shù)的對(duì)稱性,第5階與第6階與相乘所占用的乘法器完全可以省略。
如式(11)所示,在WN的二進(jìn)制序列中,在不引入噪聲的基礎(chǔ)上把N個(gè)移位寄存器和N-1個(gè)加法器的運(yùn)算用2個(gè)移位寄存器和1個(gè)減法器來(lái)實(shí)現(xiàn)。這樣不僅可以大大減少硬件資源的消耗,最大的優(yōu)點(diǎn)是不消耗RAM和乘法器資源,因此速度很快。
2.3 FPGA邏輯資源與性能分析
該設(shè)計(jì)中的64點(diǎn)并行FFT模塊通過(guò)在不同系列芯片綜合仿真后,系統(tǒng)時(shí)鐘最高可達(dá)285 MHz,完全滿足設(shè)計(jì)要求。所占用的FPGA邏輯資源和性能與Xilinx FFT IPcore比較如表1所示。
Xilinx公司的ISE集成開發(fā)環(huán)境可以提供成熟的FFT IP核,但是由于占用大量的DSP Slices,可移植性很差,但該設(shè)計(jì)中由于沒有用到DSP Slices,可移植性很強(qiáng)。圖7為64點(diǎn)并行FFT模塊的時(shí)序圖,圖中運(yùn)算器的數(shù)據(jù)處理時(shí)間為1個(gè)時(shí)鐘周期,數(shù)據(jù)處理的延時(shí)Tlatency為37個(gè)時(shí)鐘周期,使得整個(gè)運(yùn)算器的數(shù)據(jù)處理吞吐率高達(dá)656 Gb/s,而數(shù)據(jù)延時(shí)時(shí)間僅為0.129 μs,與Xilinx公司和Altera公司已經(jīng)成熟的FFT處理器相比時(shí)延大大減少,提高了FFT處理器實(shí)時(shí)處理性能。
3 結(jié)語(yǔ)
該設(shè)計(jì)通過(guò)對(duì)64點(diǎn)并行FFT進(jìn)行改進(jìn),大大提高了信號(hào)處理的實(shí)時(shí)性,所占用的FPGA邏輯資源和有限字長(zhǎng)效應(yīng)引起的噪聲也得到了優(yōu)化,可移植性大大增強(qiáng)。該設(shè)計(jì)已經(jīng)完成了硬件電路的設(shè)計(jì)與調(diào)試,結(jié)果證明通過(guò)雙通道頻譜圖對(duì)由于增益與相位不平衡產(chǎn)生的鏡像峰進(jìn)行調(diào)節(jié),可大大提高譜儀信號(hào)檢測(cè)的準(zhǔn)確性,也使譜儀的應(yīng)用更加方便。