新聞中心

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

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

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

maxq簡(jiǎn)介

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

本文引用地址:http://m.butianyuan.cn/article/20626.htm


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

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

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


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

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

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

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

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

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

對(duì)帶乘法器單元的微處理器,可以根據(jù)以下偽碼來(lái)實(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

這樣,盡管有一個(gè)乘法器,乘法與累加的循環(huán)也需要12條指令以及(假定是單周期運(yùn)行的單元與乘法器)4+ 8n個(gè)周期。而在maxq的乘法-累加單元中完成相同的操作,代碼空間從12個(gè)字縮減到9個(gè)字,運(yùn)行時(shí)間從4+ 8n個(gè)周期減少到4 +5n個(gè)周期,其代碼實(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ù)诙€(gè)操作數(shù)裝入該單元時(shí),請(qǐng)求的運(yùn)算自動(dòng)執(zhí)行,其結(jié)果存儲(chǔ)在mc寄存器中。還應(yīng)當(dāng)注意的是,在傳統(tǒng)方法中每個(gè)基本運(yùn)算后都必須進(jìn)行溢出檢測(cè),而mc寄存器的長(zhǎng)度是40位,在溢出前可以累加大量32位的乘法計(jì)算結(jié)果,這是對(duì)傳統(tǒng)方法的改善。為了說(shuō)明如何在信號(hào)處理流程中高效使用mac,現(xiàn)列舉一個(gè)用于雙音多頻(dtmf)收發(fā)器的簡(jiǎn)單應(yīng)用。


dtmf概述

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

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

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

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

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

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


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

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

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

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

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

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

每個(gè)新的正弦值都用一次乘法與一次減法來(lái)計(jì)算。使用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)的檢測(cè)

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

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

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

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

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

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

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

結(jié)論

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



關(guān)鍵詞:

評(píng)論


相關(guān)推薦

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

關(guān)閉