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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 用插值查找表實(shí)現(xiàn)FPGA的DSP功能

          用插值查找表實(shí)現(xiàn)FPGA的DSP功能

          作者: 時(shí)間:2011-03-08 來(lái)源:網(wǎng)絡(luò) 收藏

            內(nèi)插步驟見(jiàn)圖3。“Reinterpret”模塊在不改變二進(jìn)制表示法的情況下,可改變dx=x-x0信號(hào)。其重置了二進(jìn)制小數(shù)點(diǎn)(從 UFix_6_0到UFix_6_6格式),并輸出nx-nb位二進(jìn)制數(shù)的一個(gè)分?jǐn)?shù),從而計(jì)算出 (x-x0)/2-nb 的值。

            

          System Generator for DSP的線性?xún)?nèi)插圖

            圖3 System Generator for DSP的線性?xún)?nèi)插圖

            從硬件角度來(lái)看,這些模塊什么都不占用??偟膩?lái)說(shuō)(且根據(jù)我們通過(guò)ILUT方法應(yīng)用的函數(shù)類(lèi)型),如果y1=0且y0=0,我們可以強(qiáng)制y1- y0=1,這樣我們就可以得到1/2-nb而不是0。我們采用Mux、Rational、Constant和Constant1模塊來(lái)執(zhí)行這項(xiàng)工作。剩下的Mult、Add和Sub模塊則執(zhí)行線性?xún)?nèi)插公式。在本例中,我強(qiáng)制Mult模塊的輸出信號(hào)為17位分辨率,而非理論上要求的23位,因?yàn)榭傮w數(shù)值精度對(duì)本試驗(yàn)來(lái)說(shuō)已經(jīng)足夠。此外,由于y-sqrt(x) 函數(shù)呈單調(diào)遞增,因此所有結(jié)果都無(wú)符號(hào)。換句話(huà)說(shuō),不同的函數(shù)需要對(duì)數(shù)據(jù)類(lèi)型進(jìn)行不同的精心調(diào)整,但不會(huì)與圖3所示的原理相去甚遠(yuǎn)。

            假定我們以Spartan-3E 1200(fg320-4)為目標(biāo)器件,現(xiàn)使用ISE設(shè)計(jì)套件和System Generator for DSP 10.1 SP3版工具對(duì)其進(jìn)行布局和布線,結(jié)果其所占用的FPGA資源的總體情況如下:

            

          程序

            該設(shè)計(jì)完全流水線作業(yè),可以在任何一個(gè)時(shí)鐘周期提供新的輸出。時(shí)延為10個(gè)時(shí)鐘周期,最大數(shù)據(jù)速率達(dá)194.70MSPS(每秒百萬(wàn)采樣數(shù))。從數(shù)值精度來(lái)說(shuō),對(duì)1000或2000字ILUT而言,參考浮點(diǎn)結(jié)果與System Generator for DSP定點(diǎn)輸出的量化誤差之間的比值,即信噪比分別為 71.94dB或77.95dB。

            除ILUT外,我們還可應(yīng)用賽靈思System Generator for DSP提供的Reference Math Blockset(參考數(shù)學(xué)模塊組)中的CORDIC SQRT模塊。在本例中,總時(shí)延為37個(gè)時(shí)鐘周期,最大數(shù)據(jù)速率達(dá)115.18 MSPS,區(qū)域資源占用為940片觸發(fā)器,總共有885個(gè)四輸入LUT,560個(gè)占用的芯片以及兩個(gè)MULT 18x18嵌入式乘法器。信噪比為40.64dB。這些結(jié)果顯示CORDIC是實(shí)施定點(diǎn)數(shù)學(xué)運(yùn)算的理想方法,但I(xiàn)LUT在許多方面更加出色。

          線性化非線性傳感器

            目前許多企業(yè)在工業(yè)控制系統(tǒng)中使用“智能傳感器”,以滿(mǎn)足低占用面積、低功耗、高性能、最低成本以及最短開(kāi)發(fā)時(shí)間等要求。通用智能傳感器可視為一個(gè)由傳感器及其信號(hào)控制線路、模數(shù)轉(zhuǎn)換器 (ADC) 、帶或不帶嵌入式處理器的相關(guān)DSP子系統(tǒng)組成的功能組件,所有這些功能塊都集成在的同一器件上,如圖4所示。

            

          智能傳感器的方框圖

            圖4. 智能傳感器的方框圖

            智能傳感器的目的是將物理量(如電機(jī)中的電流)轉(zhuǎn)化為數(shù)字電路能夠處理的數(shù)字信號(hào)。構(gòu)建這類(lèi)傳感器所采用的技術(shù)及組件的某些特性通常會(huì)導(dǎo)致諸如失調(diào)、增益和非線性等誤差,進(jìn)而導(dǎo)致總體傳遞函數(shù)呈非線性。

            一般來(lái)說(shuō),客戶(hù)會(huì)校正他們產(chǎn)品中運(yùn)行的DSP子系統(tǒng)所出現(xiàn)的上述誤差。如果 y=f(x) 是來(lái)自傳感器和ADC級(jí)聯(lián)的數(shù)字輸出信號(hào),那么DSP必須執(zhí)行其反函數(shù)g(y)=f-1(y) 來(lái)補(bǔ)償非線性函數(shù),這樣總體輸出z即為:

            

          公式

            這是直線方程,其斜率為m,縱截距為b。

            最簡(jiǎn)單的線性化方法是LUT法,采用存儲(chǔ)在ROM中的傳感器校準(zhǔn)點(diǎn)。不過(guò),對(duì)16位的ADC來(lái)說(shuō),ROM顯得過(guò)大了,且需要64個(gè)BRAM單元。而內(nèi)插LUT則不然,是一個(gè)良好的解決方案。

            舉例來(lái)說(shuō),我們假定非線性傳遞函數(shù)是一條拋物線。下一 MATLAB分段碼說(shuō)明了如何生成最終直線的m和b參數(shù),以及如何計(jì)算 g(y)(即 f(x) 的反函數(shù))。圖5用三種顏色顯示了三條不同曲線。請(qǐng)注意在計(jì)算 f(x) 的反函數(shù) g(y) 過(guò)程中會(huì)丟失一些值。這是因?yàn)橛袔讉€(gè)y值相同的點(diǎn)對(duì)應(yīng)著不同的x點(diǎn)。因此,需要對(duì) g(y) 進(jìn)行平滑化,填補(bǔ)所有缺失的點(diǎn)。(為精確起見(jiàn),我沒(méi)有把這部分運(yùn)算包括在MATLAB分段碼中)

            

          程序

            

          程序

            

          三種顏色顯示了三條不同曲線

            圖5.黑色拋物線表示非線性傳感器傳遞函數(shù)f(x) 的曲線;綠色直線表示線性化DSP子系統(tǒng)獲得的最終線性傳感器傳遞函數(shù)曲線;藍(lán)色拋物線則表示反函數(shù)g(y) 的曲線。

            我采用非常類(lèi)似于圖1-3的設(shè)計(jì),在System Generator for DSP中運(yùn)行基于定點(diǎn)周期的仿真,在非線性傳感器的總體輸出范圍內(nèi)得到了92.48dB的信噪比。



          關(guān)鍵詞:

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();