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

下載本文檔

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

文檔簡介

第8章DSP應用程序設計舉例本章內(nèi)容提要

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

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

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

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

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

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

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

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

對稱性:WkN

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

周期性:WkN

=WNk+N。

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

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

FFT算法

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

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

假定序列x(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點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點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實現(xiàn)1.FFT運算序列的存儲分配(了解或者不要求)

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

(1)

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

sine1

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

E200┇

E3FF余弦系數(shù)表fft_prg

E400┇

E4A2程序代碼┇

.vectors

FF80┇FFFF復位向量和中斷向量表

(2)

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

0000┇005F

存儲映像寄存器.bss

006000610062

暫存單元stack

0063┇006C

堆棧┇

sine

0400┇05FF

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

cosine

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

┇d_input

8000┇87FF

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

8800┇8FFF

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

fft_out

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

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

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

41000011

510110156110011371111117正向進位與反向進位

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

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

第一級蝶形運算(2點)

第二級蝶形運算(4點)

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

,每級由N/2個碟形運算組成。每個蝶形運算可由基本迭代運算完成。設蝶形的輸入為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ù)。為了避免運算結(jié)果的溢出,對每個蝶形的運算結(jié)果右移一位。FFT運算中的旋轉(zhuǎn)因子WN是一個復數(shù),可表示:為了實現(xiàn)旋轉(zhuǎn)因子WN的運算,在存儲空間分別建立正弦表和余弦表,每個表對應從0度到180度,采用循環(huán)尋址來對正弦表和余弦表進行尋址。(3)功率譜的計算用FFT計算x(n)的頻譜,即計算:

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

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

●rfft_task:主調(diào)用子程序,用來調(diào)用其他子程序,實現(xiàn)統(tǒng)一的接口?!馼it_rev:位碼倒置子程序,用來實現(xiàn)輸入數(shù)據(jù)的比特反轉(zhuǎn)。●fft:FFT算法子程序,用來完成N點FFT運算。分為三個功能塊:第一級蝶形運算、第二級蝶形運算、第三級至log2N級蝶形運算?!駊ower:功率譜計算子程序。實數(shù)FFT的DSP算法1)2N點實數(shù)->N點復數(shù)2)N點復數(shù)FFT運算;3)FFT結(jié)果(2N點復數(shù))->N點實數(shù)(結(jié)果)FFT的DSPC程序設計#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個通用目的的信號處理程序,全部由匯編語言編寫,并可由C語言調(diào)用,方便C語言與匯編語言混合編程。這些程序用在計算強度大、執(zhí)行速度重要的實時運算中。通過使用這些程序,可以取得較用C語言編寫的相關(guān)程序快得多的運行速度,另外通過使用現(xiàn)成的程序可以使開發(fā)速度大大加快。DSPLIB可進行的運算有:FFT運算、濾波與卷積運算、自適應濾波運算、相關(guān)運算、數(shù)學函數(shù)運算、三角函數(shù)運算、矩陣運算等。實數(shù)FFT算法的函數(shù)表達式: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ù)實現(xiàn)FFT算法#include<math.h>#include<tms320.h>/*調(diào)用庫*/#include<dsplib.h>#defineNX256/*FFT運算的長度*/shortscale=1;/*歸一化*/shortnoscale=0;/*非歸一化*/shortx[512];/*數(shù)據(jù)大小*/voidmain(void){

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

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

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

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

◆本節(jié)主要討論FIR濾波器的基本結(jié)構(gòu)、設計方法和DSP實現(xiàn)方法。(1)FIR濾波器的應用環(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濾波器主要特點:

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

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

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

10ffc高通濾波

fc110ffc1帶通濾波

fc2fc110ffc1帶阻濾波

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

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

MATLAB中的工具箱(Toolbox)包含了許多實用程序,它提供了2個函數(shù)來計算濾波器的系數(shù):1)fir1:標準頻率響應設計法2)fir2:任意頻率響應設計法。參考文獻:鄒彥等,DSP原理及其應用,電子工業(yè)出版社,2005,第6章用來設計標準頻率響應的基于窗函數(shù)的FIR濾波器,可實現(xiàn)加窗線性相位FIR數(shù)字濾波器的設計。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:用來決定濾波器的類型,當ftype=high時,可設計高通濾波器;當ftype=stop時,可設計帶阻濾波器。Window:用來指定濾波器采用的窗函數(shù)類型,其默認值為漢明(Hamming)窗。【例8.1.1】采用Hamming窗設計一個48階FIR帶通濾波器,通帶為0.35<w<0.65。

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

b=fir1(48,[0.350.65

]);

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

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

FIR濾波器的輸出表達式:

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

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

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

緩沖區(qū)底部最老樣本←ARx頂部為低地址單元,存放最新樣本;底部為高地址單元,存放最老樣本;指針ARx指向緩沖區(qū)底部。緩沖區(qū):①對N階FIR濾波器,在數(shù)據(jù)存儲器中開辟一個N單元的緩沖區(qū)(滑窗),用來存放最新的N個輸入樣本;③讀完最后一個樣本后,輸入最新樣本并存入緩沖區(qū)的頂部。②從最老樣本開始取數(shù),每取一個數(shù)后,樣本值移動到下一個單元;數(shù)據(jù)存儲器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ù)、移位和運算:①以ARx為指針,按x(n-7)……x(n)的順序取數(shù),每取一次數(shù)后,數(shù)據(jù)向下移一位,并完成一次乘法累加運算;②當經(jīng)過8次取數(shù)、移位和運算后,得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

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

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

②可以使用SARAM存儲器。

*ARx+%

*ARx-%

*ARx+0%

*ARx-0%

*+ARx(1K)%

循環(huán)尋址指令:實現(xiàn)循環(huán)緩沖區(qū)N個單元循環(huán)尋址,可用BK寄存器按模間接尋址來實現(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)的值進行取模,使指針ARx指向緩沖區(qū),實現(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ù)的移動◆RPT:重復執(zhí)行相同的操作●輸入的樣值x(n)和濾波系數(shù)bi必須合理存放;●正確初始化存儲塊和塊指針。2.FIR濾波器的實現(xiàn)(1)用線性緩沖區(qū)實現(xiàn)FIR濾波器

設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ù)存儲器暫存y(n)x(n)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n-6)程序存儲器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)程序存儲器

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ù)存儲器暫存y(n)x(n)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n-6)程序存儲器

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ù)乘法

;設置AR2

;設置復位值AR0=6

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

;輸入x(n)

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

;7次乘法累加和移位

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

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

修改AR2=AR2+AR0

(2)

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

設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;源文件標題

;定義MMR寄存器符號名

;定義模塊

;給y保留1個空間

y;給xn段保留7個空間

xn;給b0段保留7個空間

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ù)乘法

;AR1指向b0

;設置重復次數(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→;設置緩沖區(qū)長度;設置雙操作數(shù)增量;設置頁指針;輸入x(n)x(n);A清0,設置迭代次數(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;存儲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}

;選定的目標文件

;生成FIR4的輸出文件

;生成FIR4的存儲器映像文件

;定義源程序的入口地址

;定義目標存儲器空間

;第0頁:程序存儲器

;EPROM的起始地址:E000h

長度:4K

;VECS的起始地址:FF80h

長度:0080h

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

;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};在存儲器中定義輸出段的位置;text段定位在程序存儲器即源程序位于程序存儲器;系數(shù)區(qū)定義在程序存儲器

;bss段定義在暫存器

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

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

ws=0.4。

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

f=[00.350.41];

m=[1100];

b=fir2(39,f,m)

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

freqz(b,512,1000)

濾波器的頻率特性:

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

2.匯編源程序

.title“FIR.ASM”.mmregs.bssy,1K_FIR_BFFR.set40PA0.set0PA1.set1FIR_COFF_TABLE.usect“FIR_COFF”,40;定義數(shù)據(jù)存儲空間D_DATA_BUFFER.usect“FIR_BFR”,40;定義數(shù)據(jù)存儲空間.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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論