第8章DSP應(yīng)用系統(tǒng)設(shè)計(jì)舉例_第1頁
第8章DSP應(yīng)用系統(tǒng)設(shè)計(jì)舉例_第2頁
第8章DSP應(yīng)用系統(tǒng)設(shè)計(jì)舉例_第3頁
第8章DSP應(yīng)用系統(tǒng)設(shè)計(jì)舉例_第4頁
第8章DSP應(yīng)用系統(tǒng)設(shè)計(jì)舉例_第5頁
已閱讀5頁,還剩79頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第8章DSP應(yīng)用程序設(shè)計(jì)舉例本章內(nèi)容提要

本章結(jié)合數(shù)字信號處理和通信中最常見、最具有代表性的應(yīng)用,介紹通用數(shù)字信號處理算法的DSP實(shí)現(xiàn)方法,主要包括:◆快速傅里葉變換(FFT)DSP設(shè)計(jì)實(shí)現(xiàn)◆有限沖激響應(yīng)(FIR)數(shù)字濾波器DSP設(shè)計(jì)實(shí)現(xiàn)快速傅立葉變換(FFT)的DSP實(shí)現(xiàn)P266

◆傅里葉變換是將信號從時(shí)域變換到頻域的一種變換形式。

◆離散傅里葉變換(DFT)是連續(xù)傅里葉變換在離散系統(tǒng)中的表現(xiàn)形式。

◆快速傅里葉變換(FFT)是快速計(jì)算DFT的一種高效方法,可以明顯地降低運(yùn)算量,大大地提高DFT的運(yùn)算速度,從而使DFT得到了廣泛的應(yīng)用。

◆DSP芯片的出現(xiàn)使FFT的實(shí)現(xiàn)變得更加方便。由于多數(shù)的DSP芯片都能在單指令周期內(nèi)完成乘法—累加運(yùn)算,而且還提供了專門的FFT指令使得FFT算法在DSP芯片上實(shí)現(xiàn)的速度更快。

8.1.1FFT算法的簡介1.離散傅氏變換DFT對于長度為N的有限長序列x(n),它的離散傅里葉變換為:k=0,1,…,N-1WN=e-j2/N,稱為旋轉(zhuǎn)因子,或蝶形因子。在x(n)為復(fù)數(shù)序列的情況下,計(jì)算X(k):

對某個(gè)k值,需要N次復(fù)數(shù)乘法、(N-1)次復(fù)數(shù)加法;對所有N個(gè)k值,需要N2次復(fù)數(shù)乘法和N(N-1)次復(fù)數(shù)加法。

2.快速傅氏變換FFT旋轉(zhuǎn)因子WN的特性:

對稱性:WkN

=-WNk+N/2;(對稱點(diǎn)相距N/2)

周期性:WkN

=WNk+N。

FFT的算法:將長序列的DFT分解成短序列的DFT。

例如:當(dāng)N為偶數(shù)時(shí),其算法:將N點(diǎn)的DFT分解為兩個(gè)N/2點(diǎn)的DFT,使復(fù)數(shù)乘法減少一半;將每個(gè)N/2點(diǎn)的DFT分解成N/4點(diǎn)的DFT,使復(fù)數(shù)乘法又減少一半,繼續(xù)進(jìn)行分解直到分解為2點(diǎn)DFT,這樣可以大大減少計(jì)算量。

FFT算法

DITFFT算法:是在時(shí)域內(nèi)將每一級輸入序列依次按奇/偶分成2個(gè)短序列進(jìn)行計(jì)算。

按時(shí)間抽取的FFT——DITFFT按頻率抽取的FFT——DIFFFTDIFFFT算法:是在頻域內(nèi)將每一級輸入序列依次按奇/偶分成2個(gè)短序列進(jìn)行計(jì)算。

假定序列x(n)的點(diǎn)數(shù)N是2的冪,按照DITFFT算法可分解為:

偶序列:x(0),x(2),x(4),…,x(N-2)即x1(r)=x(2r),r=0,1,…,奇序列:x(1),x(3),x(5),…,x(N-1)即x2(r)=x(2r+1),r=0,1,…,N點(diǎn)X(k)可分為兩部分:前半部分:X(k)=X1(k)+WNkX2(k)k=0,1,…N/2-1后半部分:X(k+N/2)=X1(k)-WNkX2(k)k=0,1,…N/2-1WNk-1xm-1(p)xm-1(q)xm(p)xm(q)由于WN2=[e-j(2/N)]2=[e-j2/(N/2)]=WN/2,與對稱性WN-1pqx1x22點(diǎn)FFT算法:X1=p+q*WNX2=p-q*WN信號流程如圖:x(0)x(4)x(2)x(6)x(1)x(5)x(3)x(7)WN0X(7)X(6)X(5)X(4)X(3)X(2)X(1)X(0)-1-1-1WN0WN0WN0-1-1WN0WN2WN0WN2-1-1-1WN0WN1WN2WN3-1-1-1-1輸入是經(jīng)過比特反轉(zhuǎn)的倒位序列——位碼倒置。排列順序:x(0)、x(4)、x(2)、x(6)、x(1)、x(5)、x(3)、x(7)輸出是按自然順序排列。排列順序:X(0)、X(1)、X(2)、X(3)、X(4)、X(5)、X(6)、X(7)FFT算法的DSP實(shí)現(xiàn)1.FFT運(yùn)算序列的存儲(chǔ)分配(了解或者不要求)

FFT運(yùn)算時(shí)間是衡量DSP芯片性能的一個(gè)重要指標(biāo),在用DSP芯片實(shí)現(xiàn)FFT算法時(shí),合理地安排好所使用的存儲(chǔ)空間是十分重要的。下面以8~1024復(fù)數(shù)點(diǎn)FFT算法為例,介紹用DSP芯片實(shí)現(xiàn)的方法。1.FFT運(yùn)算序列的存儲(chǔ)分配

(1)

程序空間的分配E000h~E1FFh:正弦系數(shù)表E200h~E3FFh:余弦系數(shù)表E400h~E4A2h:程序代碼FF80h~FFFFh:復(fù)位向量和中斷向量表程序存儲(chǔ)器

sine1

E000┇E1FF正弦系數(shù)表cosine1

E200┇

E3FF余弦系數(shù)表fft_prg

E400┇

E4A2程序代碼┇

.vectors

FF80┇FFFF復(fù)位向量和中斷向量表

(2)

數(shù)據(jù)空間的分配數(shù)據(jù)存儲(chǔ)器

0000┇005F

存儲(chǔ)映像寄存器.bss

006000610062

暫存單元stack

0063┇006C

堆棧┇

sine

0400┇05FF

正弦系數(shù)表數(shù)據(jù)存儲(chǔ)器

cosine

0800┇09FF余弦系數(shù)表

┇d_input

8000┇87FF

輸入數(shù)據(jù)┇fft_data

8800┇8FFF

FFT結(jié)果(實(shí)部、虛部)

fft_out

9000┇93FFFFT結(jié)果(功率譜)

(3)I/O空間的配置PA0——輸出口;PA1——輸入口。用匯編程序?qū)崿F(xiàn)FFT算法主要分為四步:(1)實(shí)現(xiàn)輸入數(shù)據(jù)的比特反轉(zhuǎn)(2)實(shí)現(xiàn)N點(diǎn)復(fù)數(shù)FFT(3)功率譜的計(jì)算(4)輸出FFT結(jié)果2.FFT運(yùn)算的實(shí)現(xiàn)(1)實(shí)現(xiàn)輸入數(shù)據(jù)的比特反轉(zhuǎn)輸入數(shù)據(jù)的比特反轉(zhuǎn)是將輸入數(shù)據(jù)進(jìn)行位碼倒置,以便在整個(gè)運(yùn)算后的輸出序列是一個(gè)自然序列。在用匯編指令進(jìn)行位碼倒置時(shí),使用位倒序?qū)ぶ房梢源蟠筇岣叱绦驁?zhí)行速度和使用存儲(chǔ)器的效率。

在這種尋址方式下,AR0存放的整數(shù)N是FFT點(diǎn)的一半,用一個(gè)輔助寄存器指向一個(gè)數(shù)據(jù)存放的單元。當(dāng)AR0加到輔助寄存器時(shí),地址將以位碼倒置的方式產(chǎn)生。位倒序?qū)ぶ吩蛟刂肺坏剐蚝蟮刂肺坏剐?0000000100110042010010230111106

41000011

510110156110011371111117正向進(jìn)位與反向進(jìn)位

100100+100+100————————1000010位倒序?qū)ぶ?教材P61)AR0=N/2=100AR2=000按AR2尋址后,將AR0加給AR2,反向進(jìn)位如:原來的輸入存放在x緩沖區(qū)中,實(shí)現(xiàn)位倒序后的結(jié)果存放在y緩沖區(qū)中,程序如下:如:.bssX,8.bssY,8STM#4AR0STM#XAR2STM#YAR3RPT#7MVDD*AR2+0B*AR3+(2)實(shí)現(xiàn)N點(diǎn)復(fù)數(shù)FFT

N點(diǎn)復(fù)數(shù)FFT算法的實(shí)現(xiàn)可分為三個(gè)功能塊:

第一級蝶形運(yùn)算(2點(diǎn))

第二級蝶形運(yùn)算(4點(diǎn))

第三級至log2N級蝶形運(yùn)算(8點(diǎn)到2M點(diǎn))對于任何一個(gè)2的整數(shù)冪N=2M,N點(diǎn)復(fù)數(shù)FFT算法總可以通過M次分解成為2點(diǎn)的DFT計(jì)算。通過這樣的M次分解,可構(gòu)成M級迭代計(jì)算(M=log2N)

,每級由N/2個(gè)碟形運(yùn)算組成。每個(gè)蝶形運(yùn)算可由基本迭代運(yùn)算完成。設(shè)蝶形的輸入為xm-1(p)和xm-1(q),輸出為xm(p)和xm(q),則有xm(p)=xm-1(p)+xm-1(q)WNk

xm(q)=xm-1(p)-xm-1(q)WNk

m為第m列迭代,p和q為數(shù)據(jù)所在的行數(shù)。為了避免運(yùn)算結(jié)果的溢出,對每個(gè)蝶形的運(yùn)算結(jié)果右移一位。FFT運(yùn)算中的旋轉(zhuǎn)因子WN是一個(gè)復(fù)數(shù),可表示:為了實(shí)現(xiàn)旋轉(zhuǎn)因子WN的運(yùn)算,在存儲(chǔ)空間分別建立正弦表和余弦表,每個(gè)表對應(yīng)從0度到180度,采用循環(huán)尋址來對正弦表和余弦表進(jìn)行尋址。(3)功率譜的計(jì)算用FFT計(jì)算x(n)的頻譜,即計(jì)算:

X(k)是由實(shí)部XR(k)和虛部XI(k)組成的復(fù)數(shù):X(k)=XR(k)+jXI(k)

計(jì)算功率譜時(shí)只需將FFT變換好的數(shù)據(jù),按照實(shí)部XR(k)和虛部XI(k)求它們的平方和,然后對平方和進(jìn)行開平方運(yùn)算。3.匯編語言程序程序主體由四個(gè)子程序組成:

●rfft_task:主調(diào)用子程序,用來調(diào)用其他子程序,實(shí)現(xiàn)統(tǒng)一的接口。●bit_rev:位碼倒置子程序,用來實(shí)現(xiàn)輸入數(shù)據(jù)的比特反轉(zhuǎn)?!駀ft:FFT算法子程序,用來完成N點(diǎn)FFT運(yùn)算。分為三個(gè)功能塊:第一級蝶形運(yùn)算、第二級蝶形運(yùn)算、第三級至log2N級蝶形運(yùn)算?!駊ower:功率譜計(jì)算子程序。實(shí)數(shù)FFT的DSP算法1)2N點(diǎn)實(shí)數(shù)->N點(diǎn)復(fù)數(shù)2)N點(diǎn)復(fù)數(shù)FFT運(yùn)算;3)FFT結(jié)果(2N點(diǎn)復(fù)數(shù))->N點(diǎn)實(shí)數(shù)(結(jié)果)FFT的DSPC程序設(shè)計(jì)#definePI3.1415926536voiddft(floatXin[],floatXout[]){intn,k,j;floatangle;floatXr[N],Xi[N];floatWn[2];for(k=0;k<N;k++)

{Xr[k]=0;Xi[k]=0;for(j=0,n=0;n<N;n++){angle=(2.0*PI*k*n)/N;W[0]=cos(angle);W[1]=sin(angle);

Xr[k]=Xr[k]+Xin[j]*W[0]+Xin[j+1]*W[1];Xi[k]=Xi[k]+Xin[j+1]*W[0]-Xin[j]*W[1];j+=2;}Xout[n++]=Xr[k];Xout[n++]=Xi[k];}}常用DSPLIB庫函數(shù)TMS320C54X系列函數(shù)庫(DSPLIB)是對C語言編程可調(diào)用優(yōu)化的DSP函數(shù)庫,它含有50個(gè)通用目的的信號處理程序,全部由匯編語言編寫,并可由C語言調(diào)用,方便C語言與匯編語言混合編程。這些程序用在計(jì)算強(qiáng)度大、執(zhí)行速度重要的實(shí)時(shí)運(yùn)算中。通過使用這些程序,可以取得較用C語言編寫的相關(guān)程序快得多的運(yùn)行速度,另外通過使用現(xiàn)成的程序可以使開發(fā)速度大大加快。DSPLIB可進(jìn)行的運(yùn)算有:FFT運(yùn)算、濾波與卷積運(yùn)算、自適應(yīng)濾波運(yùn)算、相關(guān)運(yùn)算、數(shù)學(xué)函數(shù)運(yùn)算、三角函數(shù)運(yùn)算、矩陣運(yùn)算等。實(shí)數(shù)FFT算法的函數(shù)表達(dá)式:voidrfft#(DATA*x,shortscale)該函數(shù)定義于(C:\ti\c5400\dsplib\54x_src)rfft#.asm,其中#=16,32,64,128,256,512,1024常用形式:voidrfft(DATA*x,#,shortscale)DSPLIB庫函數(shù)實(shí)現(xiàn)FFT算法#include<math.h>#include<tms320.h>/*調(diào)用庫*/#include<dsplib.h>#defineNX256/*FFT運(yùn)算的長度*/shortscale=1;/*歸一化*/shortnoscale=0;/*非歸一化*/shortx[512];/*數(shù)據(jù)大小*/voidmain(void){

cbrev(x,x,NX);/*輸入數(shù)據(jù)倒序*/

cfft(x,NX,scale);/*256點(diǎn)復(fù)數(shù)FFT*/}詳細(xì)使用方法見實(shí)驗(yàn)指導(dǎo)書相關(guān)內(nèi)容FIR濾波器的DSP實(shí)現(xiàn)(P254)8.2FIR濾波器的DSP實(shí)現(xiàn)

◆2種數(shù)字濾波器:(1)有限沖激響應(yīng)濾波器FIR;(2)和無限沖激響應(yīng)濾波器IIR。

◆2種濾波器性能的比較;

◆本節(jié)主要討論FIR濾波器的基本結(jié)構(gòu)、設(shè)計(jì)方法和DSP實(shí)現(xiàn)方法。(1)FIR濾波器的應(yīng)用環(huán)境8.2.1

FIR濾波器的基本結(jié)構(gòu)

(2)FIR濾波器的差分方程:

x(n):輸入序列,

y(n):輸出序列,

bi:濾波器系數(shù),

N:濾波器的階數(shù)。(3)FIR濾波器的結(jié)構(gòu):z-1z-1+x(n)y(n)x(n-1)x(n-N+1)b0b1bN-2bN-1z-1(4)FIR濾波器主要特點(diǎn):

FIR濾波器無反饋回路,其輸出等于前N個(gè)樣本值的線性疊加,是一種無條件穩(wěn)定系統(tǒng);②

FIR濾波器可以設(shè)計(jì)成具有線性相位特性(要求系數(shù)對稱)。

低通濾波; 高通濾波; 帶通濾波; 帶阻濾波。(5)濾波器的種類:4種1fc0f低通濾波

10ffc高通濾波

fc110ffc1帶通濾波

fc2fc110ffc1帶阻濾波

fc2fc28.2.2FIR濾波器系數(shù)的計(jì)算

MATLAB工具用來計(jì)算濾波器的系數(shù)。

MATLAB中的工具箱(Toolbox)包含了許多實(shí)用程序,它提供了2個(gè)函數(shù)來計(jì)算濾波器的系數(shù):1)fir1:標(biāo)準(zhǔn)頻率響應(yīng)設(shè)計(jì)法2)fir2:任意頻率響應(yīng)設(shè)計(jì)法。參考文獻(xiàn):鄒彥等,DSP原理及其應(yīng)用,電子工業(yè)出版社,2005,第6章用來設(shè)計(jì)標(biāo)準(zhǔn)頻率響應(yīng)的基于窗函數(shù)的FIR濾波器,可實(shí)現(xiàn)加窗線性相位FIR數(shù)字濾波器的設(shè)計(jì)。1.fir1函數(shù)

語法:

b=fir1(n,Wn)

b=fir1(n,Wn,‘ftype’)

b=fir1(n,Wn,Window)

b=fir1(n,Wn,‘ftype’,Window)

n:濾波器的階數(shù);Wn:濾波器的截止頻率;ftype:用來決定濾波器的類型,當(dāng)ftype=high時(shí),可設(shè)計(jì)高通濾波器;當(dāng)ftype=stop時(shí),可設(shè)計(jì)帶阻濾波器。Window:用來指定濾波器采用的窗函數(shù)類型,其默認(rèn)值為漢明(Hamming)窗?!纠?.1.1】采用Hamming窗設(shè)計(jì)一個(gè)48階FIR帶通濾波器,通帶為0.35<w<0.65。

解:采用fir1函數(shù)的程序格式:

b=fir1(48,[0.350.65

]);

用來設(shè)計(jì)有任意頻率響應(yīng)的各種加窗FIR濾波器。2.fir2函數(shù)使用方法:見前面介紹的參考文獻(xiàn)濾波器輸入信號:A/D采樣得到的樣本系列

8.2.3FIR濾波器的DSP實(shí)現(xiàn)

FIR濾波器的輸出表達(dá)式:

y(n)=b0x(n)+b1x(n-1)+…

+bn-1x(n-N+1)bi為濾波器系數(shù),y(n)為n時(shí)刻的輸出;x(n)為濾波器在n時(shí)刻的輸入;x(n-1)為經(jīng)過z-1延時(shí)后的值,即延時(shí)一個(gè)采樣周期的采樣值(即前一個(gè)周期的采樣值);基本算法:采用乘法累加運(yùn)算。即不斷地輸入樣本x(n),經(jīng)過z-1延時(shí)后,再進(jìn)行乘法-累加,最后輸出濾波結(jié)果y(n)。

z-1算法的實(shí)現(xiàn)實(shí)現(xiàn)Z-1算法(即求延時(shí)一個(gè)采樣周期的采樣值)有2種: 線性緩沖區(qū)法; 循環(huán)緩沖區(qū)法。(1)線性緩沖區(qū)法又稱延遲線法,方法是將連續(xù)N個(gè)采樣周期的采樣值保存起來,存放在一個(gè)緩沖區(qū)內(nèi)(見圖)。具體方法如下:數(shù)據(jù)存儲(chǔ)器緩沖區(qū)頂部最新樣本

緩沖區(qū)底部最老樣本←ARx頂部為低地址單元,存放最新樣本;底部為高地址單元,存放最老樣本;指針ARx指向緩沖區(qū)底部。緩沖區(qū):①對N階FIR濾波器,在數(shù)據(jù)存儲(chǔ)器中開辟一個(gè)N單元的緩沖區(qū)(滑窗),用來存放最新的N個(gè)輸入樣本;③讀完最后一個(gè)樣本后,輸入最新樣本并存入緩沖區(qū)的頂部。②從最老樣本開始取數(shù),每取一個(gè)數(shù)后,樣本值移動(dòng)到下一個(gè)單元;數(shù)據(jù)存儲(chǔ)器ARx→x(n)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n-6)x(n-7)b0b1b2b3b4b5b6b7濾波器系數(shù)求y(n)的過程:舉例N=8算法:取數(shù)、移位和運(yùn)算:①以ARx為指針,按x(n-7)……x(n)的順序取數(shù),每取一次數(shù)后,數(shù)據(jù)向下移一位,并完成一次乘法累加運(yùn)算;②當(dāng)經(jīng)過8次取數(shù)、移位和運(yùn)算后,得y(n);③求得y(n)后,輸入新樣本x(n+1),存入緩沖區(qū)頂部單元;④修改指針ARx,指向緩沖區(qū)的底部。x(n)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n-6)x(n-7)x(n+2)x(n+1)x(n)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n+1)x(n)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n-6)*ARx*ARx*ARxPORTPORT求y(n)求y(n+1)求y(n+2)PORTPORT求y(n)的過程:DELAYSmem;(Smem)

Smem+1DELAY*AR3-

;AR3指向源地址

LD+DELAY→

LTDMAC+DELAY→MACD

實(shí)現(xiàn)Z-1運(yùn)算的指令:延時(shí)指令:即將數(shù)據(jù)存儲(chǔ)器中的數(shù)據(jù)向較高地址單元移位來進(jìn)行延時(shí)。指令:將延時(shí)指令與其他指令結(jié)合使用,可在同樣的機(jī)器周期內(nèi)完成這些操作。例如:實(shí)例:教材P257(N=7)①在數(shù)據(jù)存儲(chǔ)器中開辟一個(gè)N個(gè)單元的緩沖區(qū)(滑窗),用來存放最新的N個(gè)輸入樣本;②從最新樣本開始取數(shù);③讀完最老樣本后,輸入最新樣本來代替最老樣本,而其他數(shù)據(jù)位置不變;④用BK寄存器對緩沖區(qū)進(jìn)行間接尋址,使緩沖區(qū)地址首尾相鄰。(2)循環(huán)緩沖區(qū)法數(shù)據(jù)存儲(chǔ)器x(n)x(n-7)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n-6)ARx→ARx→系數(shù)b0b7b1b2b3b4b5b6算法(N=7):取數(shù)順序:x(n)……x(n-7);每取一次數(shù),進(jìn)行一次乘法累加,然后使ARx指向下一個(gè)單元;8次取數(shù)后,算出y(n),然后將x(n+1)取代x(n-7).①求y(n):ARx指向最新樣本單元。底層為高地址單元,存放最老樣本;系數(shù)b0b7b1b2b3b4b5b6數(shù)據(jù)存儲(chǔ)器x(n)x(n+1)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n-6)ARx→②求y(n+1):取數(shù)順序:x(n+1)……x(n-6);每取一次數(shù),進(jìn)行一次乘法累加,然后使ARx指向下一個(gè)單元;8次取數(shù)后,算出y(n+1),然后將x(n+2)取代x(n-6)。即將最老的樣本換掉,用最新的樣本替代。數(shù)據(jù)存儲(chǔ)器x(n)x(n+1)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n+2)ARx→b0b7b1b2b3b4b5b6系數(shù)表③求y(n+2):取數(shù)順序:x(n+2)……x(n-5);每取一次數(shù),進(jìn)行一次乘法累加,然后使ARx指向下一個(gè)單元;8次取數(shù)后,算出y(n+2)。循環(huán)緩沖區(qū)的優(yōu)點(diǎn):

①緩沖區(qū)數(shù)據(jù)不需要移動(dòng);

②可以使用SARAM存儲(chǔ)器。

*ARx+%

*ARx-%

*ARx+0%

*ARx-0%

*+ARx(1K)%

循環(huán)尋址指令:實(shí)現(xiàn)循環(huán)緩沖區(qū)N個(gè)單元循環(huán)尋址,可用BK寄存器按模間接尋址來實(shí)現(xiàn),使指針始終指向緩沖區(qū)。常用指令:;增量、按模修正ARxaddr=ARx,ARx=circ(ARx+1);減量、按模修正ARxaddr=ARx,ARx=circ(ARx-1);增AR0、按模修正ARxaddr=ARx,ARx=circ(ARx+AR0);減AR0、按模修正ARxaddr=ARx,ARx=circ(ARx-AR0);加(1K)、按模修正ARxaddr=circ(ARx+1K),ARx=circ(ARx+1K)circ是根據(jù)BK寄存器中的緩沖區(qū)長度,對(ARx+1)、(ARx-1)、(ARx+AR0)、(ARx-AR0)和(ARx+1k)的值進(jìn)行取模,使指針ARx指向緩沖區(qū),實(shí)現(xiàn)循環(huán)緩沖區(qū)首尾相鄰。第一次尋址后,AR1指向0061h單元;第二次尋址后,AR1指向0062h單元;…………第八次尋址后,AR1指向0068h單元;將BK按8取模,AR1回到0060h單元。例如:(BK)=N=8,(AR1)=0060h,用*AR1+%間接尋址。循環(huán)尋址指令使用的主要指令;◆MAC:乘法累加◆DELAY:完成數(shù)據(jù)的移動(dòng)◆RPT:重復(fù)執(zhí)行相同的操作●輸入的樣值x(n)和濾波系數(shù)bi必須合理存放;●正確初始化存儲(chǔ)塊和塊指針。2.FIR濾波器的實(shí)現(xiàn)(1)用線性緩沖區(qū)實(shí)現(xiàn)FIR濾波器

設(shè)N=7,F(xiàn)IR濾波器的算法:

y(n)=b0x(n)+b1x(n-1)+…+b5x(n-5)+b6x(n-6)雙操作數(shù)尋址指令:MACD*AR1-,B,A功能:A=A+(AR1)×(B),AR1-1→AR1數(shù)據(jù)存儲(chǔ)器暫存y(n)x(n)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n-6)程序存儲(chǔ)器b6b5b4b3b2b1b0AAR1→x(n-6)x(n-6)程序清單:

.title“FIR1.ASM”.mmregs.defstartx.usect“x”,8PA0.set0PA1.set1.dataCOEF:.word1*32768/10.word2*32768/10.word-4*32768/10.word3*32768/10.word-4*32768/10.word2*32768/10.word1*32768/10

;自定義數(shù)據(jù)空間x暫存y(n)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n-6)程序存儲(chǔ)器

COEFb6

;定義b6=0.1

;定義b5=0.2

;定義b4=-0.4

;定義b3=0.3

;定義b2=-0.4

;定義b1=0.2

;定義b0=0.1b5b4b3b2b1b0x(n)x數(shù)據(jù)存儲(chǔ)器暫存y(n)x(n)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n-6)程序存儲(chǔ)器

COEFb6b5b4b3b2b1b0程序清單:.textstart:SSBXFRCTSTM#x+7,AR2STM#6,AR0LD#x+1,DPPORTRPA1,@x+1FIR1:RPTZA,#6

MACD*AR2-,COEF,ASTHA,*AR2PORTW*AR2+,PA0

BDFIR1

PORTRPA1,*AR2+0.end;設(shè)置小數(shù)乘法

;設(shè)置AR2

;設(shè)置復(fù)位值A(chǔ)R0=6

;設(shè)置緩沖區(qū)首地址

;輸入x(n)

;A清0,設(shè)置迭代次數(shù)

;7次乘法累加和移位

;暫存y(n);輸出y(n),修改AR2

;循環(huán);輸入最新數(shù)據(jù),

修改AR2=AR2+AR0

(2)

用循環(huán)緩沖區(qū)實(shí)現(xiàn)FIR濾波器

設(shè)N=7,F(xiàn)IR濾波器的算法:ARx首先指向頂部,系數(shù)指針也在頂部

DARAMy(n)x(n)x(n-1)x(n-2)x(n-3)x(n-4)…x(n-5)x(n-6)DARAMb0b1b2b3b4b5b6yb0xny(n)=b0x(n)+b1x(n-1)+…+b5x(n-5)+b6x(n-6)程序清單:.title“FIR2.ASM”.mmregs.defstart.bssy,1xn.usect“xn”,7b0.usect“b0”,7PA0.set0PA1.set1.datatable:.word1*32768/10.word2*32768/10.word3*32768/10.word4*32768/10.word5*32768/10.word6*32768/10.word7*32768/10DARAMy(n-1)x(n)x(n-1)x(n-2)x(n-3)x(n-4)…b0b1b2b3b4…x(n-5)x(n-6)b5b6;源文件標(biāo)題

;定義MMR寄存器符號名

;定義模塊

;給y保留1個(gè)空間

y;給xn段保留7個(gè)空間

xn;給b0段保留7個(gè)空間

b0;PA0賦值為0

;PA1賦值為1

;從ROM的table定義數(shù)據(jù);定義b0=0.1;定義b1=0.2;定義b2=0.3;定義b3=0.4;定義b4=0.5;定義b5=0.6;定義b6=0.7ROMtable0.10.20.30.40.50.60.7.textstart:SSBXFRCTSTM#b0,AR1RPT#6MVPDtable,*AR1+STM#xn+6,AR2STM#b0+6,AR3STM#7,BKSTM#-1,AR0LD#xn,DPPORTRPA1,@xnFIR2:RPTZA,#6

MAC*AR2+0%,*AR3+0%,ASTHA,@yPORTW@y,PA0BDFIR2PORTRPA1,*AR2+0%.end;設(shè)置小數(shù)乘法

;AR1指向b0

;設(shè)置重復(fù)次數(shù)

ROMtable0.10.20.30.40.50.60.7;系數(shù)傳輸至數(shù)據(jù)區(qū)

0.10.20.30.40.50.6AR1→0.7;AR2指向x(n-6)單元

;AR3指向b6單元AR3→;設(shè)置緩沖區(qū)長度;設(shè)置雙操作數(shù)增量;設(shè)置頁指針;輸入x(n)x(n);A清0,設(shè)置迭代次數(shù);雙操作數(shù)乘法累加x(n-6)0.7x(n-5)0.6x(n-4)0.5x(n-3)0.4x(n-2)0.3x(n-1)0.2x(n)0.1;存儲(chǔ)y(n)y(n);輸出y(n);循環(huán);輸入最新x(n+1),修正AR2x(n-6)b0yAR2xnDARAM鏈接命令文件:

FIR2.objvectors.obj-oFIR2.out-mFIR2.map-estartMEMORY{PAGE

0:EPROM:org=0E000h,len=1000hVECS:org=0FF80h,len=0080hPAGE

1:SPRAM:org=0060h,len=0020hDARAM:org=0080h,len=1380h}

;選定的目標(biāo)文件

;生成FIR4的輸出文件

;生成FIR4的存儲(chǔ)器映像文件

;定義源程序的入口地址

;定義目標(biāo)存儲(chǔ)器空間

;第0頁:程序存儲(chǔ)器

;EPROM的起始地址:E000h

長度:4K

;VECS的起始地址:FF80h

長度:0080h

;第1頁:數(shù)據(jù)存儲(chǔ)器

;SPRAM的起始地址:0060h

長度:0020h

;DARAM的起始地址:0080h

長度:1380h

0E0000EFFF0FF800FFEFROMRAMEPROM…………EPROM…4kVECS……VECS80hSPRAM………SPRAM006020h007FDARAM………DARAM……00801380h13EF鏈接命令文件:

SECTIONS{.text:>EPROMPAGE0.data:>EPROMPAGE0.bss:>SPRAMPAGE1xn:align(8){}>DARAMPAGE1b0:align(8){}>DARAMPAGE1.vections:VECSPAGE0};在存儲(chǔ)器中定義輸出段的位置;text段定位在程序存儲(chǔ)器即源程序位于程序存儲(chǔ)器;系數(shù)區(qū)定義在程序存儲(chǔ)器

;bss段定義在暫存器

;從xn起8個(gè)單元定義在DARAM;從b0起8個(gè)單元定義在DARAM;vections定義在VECS區(qū)8.2.4

FIR濾波器的設(shè)計(jì)實(shí)例設(shè)計(jì)一個(gè)FIR低通濾波器,其設(shè)計(jì)參數(shù):濾波器階數(shù):N=40;截止頻率:wp=0.35,

ws=0.4。

根據(jù)給定的設(shè)計(jì)參數(shù),濾波器系數(shù)可由MATLAB中的fir2函數(shù)產(chǎn)生,函數(shù)調(diào)用格式:1.由給定的設(shè)計(jì)參數(shù)確定濾波器的系數(shù)

f=[00.350.41];

m=[1100];

b=fir2(39,f,m)

利用freqz函數(shù)可繪制濾波器的幅頻、相頻特性,其格式:

freqz(b,512,1000)

濾波器的頻率特性:

1.由給定的設(shè)計(jì)參數(shù)確定濾波器的系數(shù)采用循環(huán)緩沖區(qū)實(shí)現(xiàn)FIR濾波器的源程序如下:

2.匯編源程序

.title“FIR.ASM”.mmregs.bssy,1K_FIR_BFFR.set40PA0.set0PA1.set1FIR_COFF_TABLE.usect“FIR_COFF”,40;定義數(shù)據(jù)存儲(chǔ)空間D_DATA_BUFFER.usect“FIR_BFR”,40;定義數(shù)據(jù)存儲(chǔ)空間.dataCOFF_FIR_START:.word-7*32768/10000,3*32768/10000

;b0,b1

.word14*32768/10000,10*32768/10000;b2,b3……….wo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論