版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度魚塘承包與漁業(yè)生態(tài)旅游合作合同4篇
- 2025年度LED節(jié)能燈具采購與安裝一體化合同范本3篇
- 二零二五年度木材加工設(shè)備租賃合同樣本2篇
- 二零二五年度農(nóng)機(jī)行業(yè)人才引進(jìn)與培養(yǎng)合同4篇
- 二零二五年度大摩退出中金項(xiàng)目合同終止倒計(jì)時(shí)通知2篇
- 2025年度南京家庭裝修工程竣工驗(yàn)收備案合同4篇
- 2025年度個(gè)人光伏發(fā)電貸款擔(dān)保合同3篇
- 2025版文化娛樂場所租賃及活動(dòng)策劃服務(wù)合同模板4篇
- 2025版儲(chǔ)罐泄漏檢測與預(yù)防措施合同范本3篇
- 2025版農(nóng)民合作社農(nóng)村農(nóng)村電商扶貧項(xiàng)目融資合同3篇
- 2024年09月2024興業(yè)銀行總行崗測評筆試歷年參考題庫附帶答案詳解
- 山東省煙臺市招遠(yuǎn)市2024-2025學(xué)年九年級上學(xué)期期末考試英語(筆試)試題(含答案)
- 駱駝祥子讀書筆記一至二十四章
- 2025年方大萍安鋼鐵招聘筆試參考題庫含答案解析
- 2024年醫(yī)師定期考核臨床類考試題庫及答案(共500題)
- 2025年電力工程施工企業(yè)發(fā)展戰(zhàn)略和經(jīng)營計(jì)劃
- 2022年公務(wù)員多省聯(lián)考《申論》真題(安徽C卷)及答案解析
- 大型活動(dòng)保安培訓(xùn)
- 2024年大學(xué)本科課程教育心理學(xué)教案(全冊完整版)
- 信息系統(tǒng)運(yùn)維服務(wù)類合同6篇
- 江蘇省七市2025屆高三最后一卷物理試卷含解析
評論
0/150
提交評論