<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 基于FPGA的高速自適應(yīng)濾波器的實(shí)現(xiàn)

          基于FPGA的高速自適應(yīng)濾波器的實(shí)現(xiàn)

          作者: 時(shí)間:2011-09-02 來源:網(wǎng)絡(luò) 收藏

          現(xiàn)代通信信號(hào)處理發(fā)展到3G、4G時(shí)代后,每秒上百兆比特處理速度的要求對(duì)于自適應(yīng)處理技術(shù)是一個(gè)極大的挑戰(zhàn)。使用具有高度并行結(jié)構(gòu)的實(shí)現(xiàn)自適應(yīng)算法以及完成相應(yīng)的調(diào)整和優(yōu)化,相比于在DSP芯片上的算法實(shí)現(xiàn)可以達(dá)到更高的運(yùn)行速度。本文分析了自適應(yīng)LMS算法及其在上的實(shí)現(xiàn),并進(jìn)行算法結(jié)構(gòu)的改進(jìn)優(yōu)化,利用DSP Builder在Altera DE2-70平臺(tái)的芯片上實(shí)現(xiàn)相應(yīng)自適應(yīng)算法并下載到目標(biāo)板上進(jìn)行板級(jí)測(cè)試。
          1 自適應(yīng)LMS算法[1-2]
          的特點(diǎn)在于濾波器參數(shù)可以自動(dòng)地根據(jù)某種準(zhǔn)則調(diào)整到相應(yīng)的最優(yōu)濾波情況。其基本框圖如圖1所示。

          本文引用地址:http://www.ex-cimer.com/article/191028.htm

           圖中,X(n)為輸入信號(hào),y(n)為濾波信號(hào),d(n)為期望信號(hào),e(n)為誤差信號(hào),用來調(diào)整自適應(yīng)濾波權(quán)系數(shù)。自適應(yīng)濾波函數(shù)H(z)的濾波參系數(shù)是通過一定的自適應(yīng)算法,根據(jù)誤差信號(hào)e(n)進(jìn)行自動(dòng)調(diào)整,目的是使得誤差e(n)的模值越來越小。
          自適應(yīng)LMS算法表述如下:

          2 算法的仿真和FPGA實(shí)現(xiàn)
          本設(shè)計(jì)使用的工具DSP Builder是Altera公司推出的基于Altera FPGA芯片的系統(tǒng)級(jí)(算法級(jí))設(shè)計(jì)工具,它架構(gòu)在多個(gè)軟件工具之上,并把系統(tǒng)級(jí)和RTL級(jí)兩個(gè)設(shè)計(jì)領(lǐng)域的設(shè)計(jì)工具連接起來,最大程度地發(fā)揮了兩種工具的優(yōu)勢(shì)[3]。它依賴于Matlab/Simulink進(jìn)行建模和仿真,可以把建模設(shè)計(jì)文件轉(zhuǎn)換為硬件描述語言文件。
          考慮橫向LMS算法的FPGA實(shí)現(xiàn)時(shí),有兩種拓?fù)浣Y(jié)構(gòu)可以選擇。一種是直接型FIR結(jié)構(gòu),另一種是轉(zhuǎn)置型FIR結(jié)構(gòu)。從算法效果上來說,這兩種結(jié)構(gòu)是一致的,但是轉(zhuǎn)置型結(jié)構(gòu)的濾波部分的關(guān)鍵路徑會(huì)更短,能夠綜合出更高主頻的電路[4]。故在Simulink中利用DSP Builder采用轉(zhuǎn)置型LMS結(jié)構(gòu)(Transpose Form-LMS)進(jìn)行建模,模型參數(shù)為8階16位定點(diǎn)格式。
          對(duì)于收斂步長(zhǎng)因子的選取采用二進(jìn)制移位的方式,只改變數(shù)據(jù)的連線,不會(huì)增加系統(tǒng)資源消耗和計(jì)算時(shí)間消耗。這里將迭代處理部分左移動(dòng)10位,即收斂步長(zhǎng)因子為2-10,約為0.001。Simulink中,仿真信號(hào)為模值等于1的正弦波疊加方差為0.01的高斯白噪聲,建立自適應(yīng)噪聲對(duì)消模型,濾波情況如圖2所示。

          利用Signal Compiler工具將模型轉(zhuǎn)換成硬件描述語言。用Quartus對(duì)轉(zhuǎn)換后的HDL進(jìn)行綜合、布線布局,得到52.02 MHz(19.223 ns)的系統(tǒng)頻率表現(xiàn)。對(duì)EP2C70-F896C6芯片上單個(gè)乘法器進(jìn)行測(cè)試,得到一個(gè)乘法運(yùn)算需要的時(shí)間滯后為13.8 ns??紤]上面的LMS算法,一次迭代過程至少消耗28 ns以上的時(shí)間。這說明,該LMS系統(tǒng)只能運(yùn)行在35.7 MHz(28 ns)以下。如果頻率超過35.7 MHz,雖不會(huì)造成器件時(shí)序違規(guī),但在運(yùn)行時(shí)序上就不會(huì)滿足標(biāo)準(zhǔn)LMS算法。
          3 算法的改進(jìn)和FPGA實(shí)現(xiàn)
          3.1 馳豫超前流水線優(yōu)化

          通過馳豫超前流水線技術(shù)改進(jìn)的TFLMS算法稱為TFDLMS(TF-Delay-LMS)算法,改進(jìn)的算法結(jié)構(gòu)如下[4]:

          改進(jìn)結(jié)構(gòu)的特點(diǎn)是,在式(6)權(quán)系數(shù)更新中,誤差與輸入都不使用當(dāng)前時(shí)刻的數(shù)據(jù),而是采用過去的數(shù)據(jù)來馳豫近似計(jì)算。式(5)和式(6)在這種情況下可以同時(shí)進(jìn)行流水計(jì)算,斬?cái)嗔嗽却械年P(guān)鍵路徑,提高了效率。對(duì)馳豫寄存器m的個(gè)數(shù)需要合理的選取,若m太大,則對(duì)原系統(tǒng)影響較大;若太小則不易后續(xù)時(shí)序重構(gòu)的優(yōu)化,這里取m=4進(jìn)行Matlab仿真。仿真結(jié)果如圖3所示。

          如圖3所示,TFDLMS算法在收斂初期由于誤差e隨著濾波的進(jìn)行改變一般比較大,所以在收斂過程中的性能會(huì)稍次于TFLMS算法。在穩(wěn)態(tài)的時(shí)候,由于誤差e在此刻一般比較小,所以近似手段對(duì)穩(wěn)態(tài)的影響會(huì)比較小??紤]到改進(jìn)后TFDLMS的高度并行的處理結(jié)構(gòu),在收斂以及穩(wěn)態(tài)表現(xiàn)上的微小影響的代價(jià)是值得的。
          在Simulink中建模,將TFDLMS模型轉(zhuǎn)換為HDL,在Quartus中綜合布線布局,得到122.79 MHz的頻率表現(xiàn)。由于TFDLMS采用馳豫流水計(jì)算,已經(jīng)是近似計(jì)算,因此無需考慮標(biāo)準(zhǔn)LMS算法的嚴(yán)格串行計(jì)算時(shí)間問題,此時(shí)的系統(tǒng)工作頻率可以認(rèn)為是采樣吞吐頻率。顯然,改進(jìn)后的算法結(jié)構(gòu)系統(tǒng)吞吐頻率有很大的提高。
          3.2 時(shí)序重構(gòu)優(yōu)化
          時(shí)序重構(gòu)又稱重定時(shí)(Retiming),是一種在保持系統(tǒng)功能不變的前提下改變系統(tǒng)延遲數(shù)目和分布的方法[5]。時(shí)序重構(gòu)的映射等式定義為:


          上一頁 1 2 下一頁

          關(guān)鍵詞: FPGA 自適應(yīng)濾波器

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();