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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于DSP Builder的正弦信號源優(yōu)化設(shè)計

          基于DSP Builder的正弦信號源優(yōu)化設(shè)計

          作者: 時間:2009-03-30 來源:網(wǎng)絡(luò) 收藏

            實現(xiàn)信號源常用的方法是頻率合成法,其中法是繼直接頻率合成法和間接頻率合成法之后,隨著電子技術(shù)迅速發(fā)展的第三代頻率合成技術(shù)。DDS是一種全數(shù)字技術(shù),它從相位概念出發(fā)直接合成所需頻率,它具有頻率轉(zhuǎn)換時間短,頻率分辨率高,相位變化連續(xù),低相位噪聲和低漂移,易于集成、調(diào)整、實現(xiàn)正交輸出等優(yōu)點。近年來,DDS技術(shù)在頻率合成、通信、雷達(dá)、電子對抗、儀器測試等領(lǐng)域均有廣泛的應(yīng)用。目前專用的DDS芯片產(chǎn)生的信號波形、功能和控制方式固定,常不能滿足具體需要。(FPGA)器件具有規(guī)模大、工作速度快及可編程的硬件特點,并且開發(fā)周期短,易于升級,因此非常適用于實現(xiàn)DDS。

            l DDS的基本原理

            DDS的結(jié)構(gòu)由相位累加器,相位調(diào)制器,波形存儲ROM和D/A轉(zhuǎn)換器組成,是Tierney,Rader和Gold于1971年提出。一個正弦信號發(fā)成器結(jié)構(gòu)圖如圖1所示。相位累加器是整個DDS的核心,完成相位累加運(yùn)算,它輸入的是相位增量B△θ。相位累加器每溢出一次,就代表輸出ROM內(nèi)的一個完整波形。相位調(diào)制器接收相位累加器的相位輸出。加上一個相位偏移量,用于信號的相位調(diào)制。正弦ROM查找表完成相位到幅度的轉(zhuǎn)換,它的輸入是相位調(diào)制器的輸出,也就是ROM的地址。

          正弦信號發(fā)成器結(jié)構(gòu)圖

            fo為輸出頻率,fo的值由fclk和B△θ共同決定:fo=fclk×B△θ/2N。根據(jù)Nyquist采樣定律,最高的輸出頻率是時鐘頻率的一半,即fo=fclk/2。實際應(yīng)用中,一般取fo≤40%fclk。DDS的頻率分辨率△f用頻率輸入值步進(jìn)一個最小間隔對應(yīng)的頻率輸出變化量來衡量,即△f=fclk/2N(默認(rèn)情況下,ROM存儲整個周期信號波形)??梢姡鱢越小,DDS輸出精度越高。

            2 DDS精度改進(jìn)方案

            ROM查找表實際上是一個存儲了正弦信號抽樣點幅度編碼的只讀存儲器,將輸入的序列轉(zhuǎn)換為正弦信號的幅度編碼。ROM查找表地址位數(shù)M越靠近相位累加器的位數(shù)N,相位尋址時舍去的位數(shù)就越小,相位舍位誤差也就越小,但ROM表的大小會隨地址位數(shù)M的增加成指數(shù)遞增關(guān)系。因此,為了使用較小的ROM而滿足信號性能,必須采用優(yōu)化方法壓縮ROM。

            2.1 正弦波特點

            已知正弦波存在下面的關(guān)系:

          公式

            可見,[π,2π]區(qū)間的波形可以通過[0,π]區(qū)間波形轉(zhuǎn)化得到。進(jìn)一步,由于[O,π/2]和[π/2,π]區(qū)間波形關(guān)于α=π/2對稱,則[π/2,π],[π,3π/2],[3π/2,2π]三個區(qū)間波形都可以通過[0,π/2]區(qū)間的波形轉(zhuǎn)化得到。

            2.2 基于DSP Builder的ROM優(yōu)化方案

            從上面對正弦波特點的分析可得出,查找表ROM中只存儲[O,π]或[0,π/2]區(qū)間的波形就可得完整周期的正弦信號。這樣就有效地利用了ROM存儲完間,提高了存儲效率。對于ROM中存儲[O,π]區(qū)間波形的情況,可以利用相位調(diào)制器輸出的最高位作為符號位,將正弦波合成到[0,2π]區(qū)間。而對于ROM中存儲[0,π/2]區(qū)間波形的情形,利用相位調(diào)制器輸出的次高位判斷象限,將正弦波合成到[O,π]區(qū)間;最高位作為符號位,將正弦波合成到[0,2π]區(qū)間。圖2給出了ROM中存儲[O,2π],[0,π],[O,π/2]區(qū)間波形時,用DSP Builder實現(xiàn)正弦信號發(fā)生器的系統(tǒng)模型。

            其中,PWORD為相位字輸入,其值設(shè)置為O;FWORD為頻率字輸入,其值設(shè)置為9000000;AWORD為幅度控制輸入,其值設(shè)置為50;adder為相位累加器;adderl為相位調(diào)制器。LUTl,LUT2,LUT3分別為存儲[O,2 π],[O,π],[0,π/2]區(qū)間正弦信號的具有相同存儲空間的ROM,它們模塊參數(shù)“MATLAB Array”分別設(shè)置為:

          公式

            另外,需注意的是,子系統(tǒng)controller的作用是,判斷象限,將LUT3中正弦波合成到[0,π]范圍。

            2.3 仿真分析

            圖3給出了圖2系統(tǒng)模型中3個輸出OUTl,OUT2,OUT3的波形。由圖3可見,OUT2的頻率是OUTl的1/2,而OUT3的頻率是OUT2的1/2。這表明,OUT3的頻率分辨率最高,0UT2次之,OUTl最低。由此可得出,有著相同地址輸入的ROM,在存儲空間大小相同情況下,存儲正弦波區(qū)間越小,輸出正弦信號的頻率分辨率越高,即輸出精度越高。所以,用相同的ROM,當(dāng)存儲1/4周期正弦信號時,合成的正弦信號有著較高的精度。

          3個輸出OUTl

            3 信號源的FPGA實現(xiàn)

            Matlab/Simulink對設(shè)計好的DDS系統(tǒng)進(jìn)行編譯,通過調(diào)用DSP Builder的SignalCompiler工具可直接生成QuartusⅡ的工程文件,再調(diào)用QuartusⅡ完成綜合、網(wǎng)表生成和適配,直至完成FPGA的配置下載過程。

            本設(shè)計方案采用的FPGA芯片是APEX20K系列器件EP20K200FC484。所得結(jié)果中的數(shù)字輸出可以輸出到SRAM芯片中,然后上載到計算機(jī)進(jìn)行數(shù)字信號分析,模擬輸出則通過HP示波器測試。圖4給出了用QuartusII的仿真結(jié)果。圖中,clock為系統(tǒng)時鐘,sclrp為高電平復(fù)位信號,PWORD,F(xiàn)WORD,AWORD的值分別設(shè)為十進(jìn)制數(shù)0,9000000和50。仿真得到的3個輸出OUTl,OUT2和OUT3與Matlab/Simulink中的仿真結(jié)果在相位、頻率和幅度上基本一致。實驗表明,利用FPGA所計設(shè)的DDS在滿足性能的條件下,節(jié)約了芯片資源,提高了輸出的精度。

          用QuartusII的仿真結(jié)果

            4 結(jié)語

            本文介紹了一種改進(jìn)了的基于DSP Builder的正弦信號發(fā)生器設(shè)計方法,應(yīng)用APEX20K系列FPGA芯片實現(xiàn)。繼承了傳統(tǒng)DDS設(shè)計中調(diào)頻、調(diào)相迅速的優(yōu)點,同時,采用了查找表壓縮方案,使芯片在節(jié)約資源的基礎(chǔ)上達(dá)到了較高的輸出精度。



          評論


          相關(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); })();