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

          新聞中心

          EEPW首頁 > 電源與新能源 > 設(shè)計應(yīng)用 > 用MAXQ結(jié)合MAC進(jìn)行控制和數(shù)字信號處理

          用MAXQ結(jié)合MAC進(jìn)行控制和數(shù)字信號處理

          ——
          作者:Maxim北京辦事處 時間:2007-01-26 來源:《世界電子元器件》 收藏

          maxq簡介

          maxq系列微控制器是高性能的16位risc器件,專門為低噪聲操作而設(shè)計,是用電池供電的混合信號應(yīng)用的理想器件。maxq將高精度的模擬功能與數(shù)字元件集成在一起,減少了設(shè)計中的芯片數(shù)目。maxq采用harvard存儲器結(jié)構(gòu),將數(shù)據(jù)、代碼與寄存器空間安排在不同的總線上。這種存儲器結(jié)構(gòu)的主要優(yōu)點(diǎn)是具有靈活的字長,系統(tǒng)與外設(shè)寄存器可以是8位或16位。由于maxq的指令字是16位的,微控制器通常具有16位指令總線。harvard結(jié)構(gòu)的另一個優(yōu)點(diǎn)是始終利用寄存器來訪問存儲器,這樣便可以用直接存取的方式訪問外設(shè),例如模數(shù)轉(zhuǎn)換器(adc)與硬件協(xié)處理器等。maxq2000是maxq系列微控制器中的第一款產(chǎn)品,它集成了16位cpu、64kb閃存、2kb sram和4 36字段的lcd控制器。

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


          對控制應(yīng)用和數(shù)字信號處理都有要求時出現(xiàn)的難題

          傳統(tǒng)微控制器(mcu)與數(shù)字信號處理器(dsp)通常被認(rèn)為是微型計算機(jī)領(lǐng)域中兩個互不兼容的機(jī)種。mcu適用于需要對非同步過程實(shí)現(xiàn)低延遲響應(yīng)的控制應(yīng)用,dsp則在高強(qiáng)度數(shù)學(xué)計算方面表現(xiàn)卓越。當(dāng)然,也可以用mcu進(jìn)行紛繁復(fù)雜的算術(shù)運(yùn)算,但是由于絕大多數(shù)mcu的算術(shù)邏輯單元(alu)每次執(zhí)行一項運(yùn)算,其運(yùn)算速度與dsp相比大大減慢。同理,因?yàn)閮?nèi)部架構(gòu)的原因,dsp也不適用于控制應(yīng)用。

          隨著在控制應(yīng)用中增加少量信號處理功能的實(shí)際應(yīng)用越來越多,在dsp與傳統(tǒng)mcu之間進(jìn)行選擇變得越來越困難。在此類應(yīng)用中,將dsp代碼嵌入到mcu中的解決方法具有一定的吸引力。但是采用這種方法后,應(yīng)用程序的大部分時間都花在執(zhí)行dsp函數(shù)上了,而控制應(yīng)用不得不有所犧牲。maxq架構(gòu)的出現(xiàn),解決了這個問題。在模塊化的maxq架構(gòu)中,可以很容易地集成乘法-累加單元(mac)。使用了硬件mac后,16 16位的乘法-累加運(yùn)算可在一個周期內(nèi)實(shí)現(xiàn),而不影響控制處理器上的任務(wù)執(zhí)行。下面舉例說明如何使用maxq微控制器中的mac模塊解決實(shí)際問題。


          mac模塊與maxq結(jié)合使用

          對dsp來說,最基本的應(yīng)用是對模擬信號進(jìn)行濾波。在濾波應(yīng)用中,將經(jīng)過適當(dāng)調(diào)制的模擬信號提供給adc,在數(shù)字域中對采樣得到的數(shù)據(jù)流進(jìn)行濾波。常規(guī)濾波器的執(zhí)行過程可以用如下公式實(shí)現(xiàn):

          式中bi和ai分別是系統(tǒng)前饋與反饋響應(yīng)的特征值。根據(jù)ai和bi的值,可以將數(shù)字濾波器分成有限沖擊響應(yīng)(fir)濾波器和無限沖擊響應(yīng)(iir)濾波器兩大類。當(dāng)系統(tǒng)不包含任何反饋元素時(即所有ai=0),濾波器為fir型,其方程為:

          而當(dāng)ai和bi的元素都不為0時,濾波器為iir型。

          由公式(2)知,fir型濾波器的主要數(shù)學(xué)運(yùn)算是將每個采樣輸入與常數(shù)相乘,然后將每個乘積累加,共進(jìn)行n次,可以用如下c語言程序段來說明:

          y[n]=0;
          for(i=0;i小于n;i++)
          y[n]+=x[i]*b[i]

          對帶乘法器單元的微處理器,可以根據(jù)以下偽碼來實(shí)現(xiàn):

          move ptr0, #x ;primary data pointer -> samples
          move ptr1, #b ;secondary dp -> coefficients
          move ctr, #n ;loop counter gets number of samples
          move result, #0 ;clear result register

          acc_loop:

          move acc, @ptr0 ;get a sample
          mul @ptr1 ;multiply by coefficient
          add result ;add to previous result
          move result, acc ;...and save the result back
          inc ptr0 ;point to next sample
          inc ptr1 ;point to next coefficient
          dec ctr ;decrement loop counter
          jump nz, acc_loop ;jump if there are more samples
          end

          這樣,盡管有一個乘法器,乘法與累加的循環(huán)也需要12條指令以及(假定是單周期運(yùn)行的單元與乘法器)4+ 8n個周期。而在maxq的乘法-累加單元中完成相同的操作,代碼空間從12個字縮減到9個字,運(yùn)行時間從4+ 8n個周期減少到4 +5n個周期,其代碼實(shí)現(xiàn)如下:

          move dp[0], #x ; dp[0] -> x[0]
          move dp[1], #b ; dp[1] -> b[0]
          move lc[0], #loop_cnt ; lc[0] -> number of samples
          move mcnt, #init_mac ; initialize mac unit

          mac_loop:

          move dp[0], dp[0] ; activate dp[0]
          move ma, @dp[0]++ ; get sample into mac
          move dp[1], dp[1] ; activate dp[1]
          move mb, @dp[1]++ ; get coeff into mac and multiply
          djnz lc[0], mac_loop

          需要注意的是,在maxq乘法-累加單元中,當(dāng)?shù)诙€操作數(shù)裝入該單元時,請求的運(yùn)算自動執(zhí)行,其結(jié)果存儲在mc寄存器中。還應(yīng)當(dāng)注意的是,在傳統(tǒng)方法中每個基本運(yùn)算后都必須進(jìn)行溢出檢測,而mc寄存器的長度是40位,在溢出前可以累加大量32位的乘法計算結(jié)果,這是對傳統(tǒng)方法的改善。為了說明如何在信號處理流程中高效使用mac,現(xiàn)列舉一個用于雙音多頻(dtmf)收發(fā)器的簡單應(yīng)用。


          dtmf概述

          dtmf(dual tone multitre-quency)雙音多頻是用于電話網(wǎng)絡(luò)中的信令技術(shù),用來從網(wǎng)絡(luò)終端(電話或其他設(shè)備)向交換機(jī)傳送地址信息。其機(jī)理是使用兩組各四路獨(dú)立音調(diào),互相之間沒有諧波相關(guān)關(guān)系,例如“低頻組”(低于1 khz)與“高頻組”(高于1 khz)。電話鍵盤上的每個數(shù)字都剛好可以用一路低頻組音調(diào)和一路高頻組音調(diào)來表示。圖1給出了這些音調(diào)的分配。

          dtmf收發(fā)器的音調(diào)編碼器

          dtmf收發(fā)器的編碼器部分簡單明了,即需要兩個數(shù)字正弦振蕩器,每個振蕩器都可以調(diào)諧到四個低頻組頻率或高頻組頻率之一。

          解決數(shù)字合成正弦波問題的方法很多。

          產(chǎn)生正弦波的方法之一是完全避免數(shù)字合成問題,只對端口引腳產(chǎn)生的方波進(jìn)行較強(qiáng)的濾波。盡管這種方法在很多應(yīng)用中都比較有效,但是該技術(shù)達(dá)不到bellcore(貝爾通信研究所)對正弦波頻譜純度的要求。第二種方法是利用速查表來產(chǎn)生正弦波。在這種方法中,將一路正弦波的1/4存儲在一張rom表中,這張表根據(jù)預(yù)先計算的間隔采樣來生成所需要的波形。不過,要生成一個分辨率足夠高、能夠滿足頻譜要求的1/4正弦表,需要很大的存儲量,所以這種方法通常不被采用。另外一個相對較好的方法就是使用遞歸數(shù)字諧振器來產(chǎn)生正弦波。

          遞歸數(shù)字諧振器產(chǎn)生的正弦波如圖2所示。該諧振器用雙極點(diǎn)濾波器來實(shí)現(xiàn),可用以下差分方程描述:


          其中k為常數(shù),其定義為:

          由于dtmf撥號盤只需要少量音調(diào),k的8個數(shù)值可以預(yù)先計算,并存儲在rom中。例如,在8 khz的采樣速率下產(chǎn)生行頻為770 hz音調(diào)所需的常數(shù)為:

          還有一個數(shù)值必須計算,即振蕩器開始運(yùn)行所需的初始脈沖。很明顯,若xn-1與xn-2都為0,隨后的每個xn都將為0。為了啟動振蕩器,將xn-1設(shè)置為0,并將xn-2設(shè)置為:

          在本例中,假定需要單位正弦波,則(6)式可簡化為:

          很容易將上述過程用代碼表示:初始化兩個中間變量x1、 x2。x1初始化為0,而x2裝入初始激勵數(shù)值(以上(7)式已計算)啟動振蕩。執(zhí)行以下操作產(chǎn)生正弦波的一次采樣:

          x0=k*x1-x2;
          x2=x1;
          x1=x0;

          每個新的正弦值都用一次乘法與一次減法來計算。使用maxq微控制器上的單周期硬件mac,正弦波可以用如下代碼產(chǎn)生:

          move dp[0], #x1 ; dp[0] -> x1
          move mcnt, #init_mac ; initialize mac unit
          move ma, #k ; ma=k
          move mb, @dp[0]++ ; mb=x1, mc=k*x1, point to x2
          move ma, #-1 ; ma=-1
          move mb, @dp[0]-- ; mb=x2, mc=k*x1-x2, point to x1
          nop ; wait for result
          move @--dp[0], mc ; store result at x0

          dtmf音調(diào)的檢測

          由于只需要檢測少量頻率,因此可以使用改進(jìn)的goertzel算法。該goertzel算法比一般的dft(離散式傅立葉變換)機(jī)制更有效,并提供對頻段內(nèi)信號的可靠檢測。圖3是用簡單二階濾波器實(shí)現(xiàn)goertzel算法的示意圖。

          為了用goertzel算法檢測特定頻率的音調(diào),必須先計算常數(shù)k。對dtmf檢測器,該常數(shù)可以在編譯時計算,所有的音調(diào)頻率都已明確指定。k值可按公式(4)計算。

          首先,將三個中間變量(d0、d1與d2)初始化為0?,F(xiàn)在,對接收到的每個采樣值x,按以下公式計算:

          在獲得了足夠數(shù)量的采樣值后(若采樣速率為8 khz,通常為205),使用最新計算出的d1與d2計算下式:

          這樣p中就包含了輸入信號x中測試頻率的平方冪(d12與d22)。為了解碼全部四列dtmf,每個采樣將通過8個濾波器完成。每個濾波器將有自己的k值和一組中間變量。由于每個變量都是16位的,整個算法將需要48個字節(jié)的中間存儲。

          一旦計算了不同音調(diào)頻率的p值,高頻組與低頻組中的一路音調(diào)將比其他音調(diào)的數(shù)值高出兩倍以上,而通常其幅度高出一個數(shù)量級。圖4是提供給解碼器的采樣輸入信號,x的值分別為852 hz和1 336 hz。圖5給出了goertzel算法的檢測結(jié)果。若信號頻譜達(dá)不到這個標(biāo)準(zhǔn),有兩種可能情況,要么是信號中沒有dtmf能量,要么是噪聲太大阻斷了信號。

          說明該算法的電子表格以及配備了mac的maxq處理器的實(shí)例代碼在網(wǎng)站www.maxim-ic.com/maxq_dtmf上有說明。

          結(jié)論

          maxq微控制器與其mac單元相結(jié)合,在傳統(tǒng)mcu與dsp之間架起了橋梁,很好地解決了控制應(yīng)用與需要少量信號處理并存系統(tǒng)的技術(shù)問題。添加了硬件mac之后,maxq微控制器將過去16位微控制器的信號處理能力提高到了新水平。單周期的mac還提供了常用函數(shù),使實(shí)時信號處理成為可能。



          關(guān)鍵詞:

          評論


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