版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第五章 數(shù)字信號處理應用程序設計一、FFT運算的DSP實現(xiàn)二、數(shù)字濾波器的DSP實現(xiàn)三、工程問題的DSP實現(xiàn)1一、FFT運算的DSP實現(xiàn)1、DFT與FFTDFT:離散傅立葉變換FFT:一種高效實現(xiàn)離散傅立葉變換的算法。 作為一個非常重要的工具經常使用,甚至成為DSP運算能力 的一個考核標準。傅立葉變換2 時域 頻域 離散信號 周期譜 周期信號 離散譜 離散周期信號 離散周期譜34DFT的定義56DFT和FFT計算量對比72、N點蝶2FFTx1n = x2nx2n = x2n+1將N點的序列分為兩個N/2點的序列89上式的最后一步是因為10我們已經將一個N點的DFT分解成為兩個N/2點的DFT。
2、但是,X(k)有N點,但X1(k)和X2(k)都只有N/2點,因此,前面計算的只是X(k)的前一半項的結果。11對于后一半X(k),有這是因為12 這樣,只要計算出(0,N/2-1)區(qū)間的X1(k)和X2(k),也就可以很方便地計算整個(0,N-1)區(qū)間的全部X(k),從而大大地節(jié)省了運算量。13將N點DFT分為兩個N/2點DFT14將N/2點DFT分為兩個N/4點DFT152點DFT168點蝶2FFT17按頻率抽?。―IF) x1n = xn x2n = xn+N/2 n=0,1,N/2-11819DIT與DIF對比 DIT輸入是混序的,頻域的輸出是順序的; DIF輸入是順序的,頻域的輸出是
3、混序的。 DIT的復數(shù)乘法出現(xiàn)在加減之前; DIF的復數(shù)乘法出現(xiàn)在加減之后。20 21定點DSP計算1024點FFT的時間 DSP 時間(ms) TMS320C25 10.9 TMS320C6201 0.067 DSP56001 1.6522浮點DSP計算1024點FFT的時間 DSP 時間(ms) TMS320C30 3.87 TMS320C40 1.02 ADSP21060 0.46 DSP96001 0.6 ADSP21160 0.45s23順序、混序與位倒序DIT與DIF總有一邊是混序的;所有DSP都提供了位倒序(bit reverse)尋址指令; 溢出問題無論是C語言,還是DSP匯編
4、語言的FFT程序都有現(xiàn)成的程序可用。243、FFT運算的DSP實現(xiàn)主要內容:1 基二實數(shù)FFT運算的算法2 FFT運算模擬信號的產生及輸入3 實序列FFT匯編源程序及鏈接命令文件4 觀察信號時域波形及其頻譜251. 基二實數(shù)FFT運算的算法該算法主要分為以下四步:第一步,輸入數(shù)據(jù)的組合和位倒序把輸入序列作位倒序是為了在整個運算最后的輸出中得到的序列是自然順序。第二步,N點復數(shù)FFT在DATA數(shù)據(jù)處理緩沖器里進行N點復數(shù)FFT運算。26第三步,分離復數(shù)FFT的輸出為奇部分和偶部分分離FFT輸出為RP、RM、IP和IM四個序列,即偶實數(shù)、奇實數(shù)、偶虛數(shù)和奇虛數(shù)四部分。第四步,產生2N點的復數(shù)FFT
5、輸出序列產生2N=256個點的復數(shù)輸出,它與原始的256個點的實輸入序列的DFT一致。272. FFT運算模擬信號的產生及輸入產生模擬輸入信號可以有兩種方法:第一種方法是用C語言程序產生mdata.inc文件,然后,在DSP匯編語言程序中通過.copy匯編命令將生成的數(shù)據(jù)文件mdata.inc復制到匯編程序中。第二種方法是建立與輸入信號對應的數(shù)據(jù)流文件mdata.dat,具體操作步驟見教材內容。283. 實序列FFT匯編源程序及鏈接命令文件【例】256點實序列FFT的DSP實現(xiàn)。 256點實序列FFT匯編源程序如下: * *Radix-2,DIT,Real-input FFT Program
6、* * fft.asm * * .mmregs .global reset,start,sav_sin,sav_idx,sav_grp .def start,_c_int00 .data 29DATA .space 1024.copy mdata1.inc; mdata1.inc 為模擬輸入信號數(shù)據(jù),起始地址標號INPUTN.set128 ;復數(shù)點數(shù)LOGN.set7 ;蝶形級數(shù)sav_grp.usect tempv,3 ;定義組變量值sav_sin.setsav_grp+1 ;定義旋轉因子表sav_idx.setsav_grp+2OUTPUT.usect OUTPUT,256 ;信號功率譜B
7、OS.usectstack,0Fh ;定義堆棧TOS.usectstack,1 .copy “twiddle1.inc” ;正弦表系數(shù)由twiddle1.inc ;文件給出,起始地址標號TWI130.copy “twiddle2.inc“ ; 余弦表系數(shù)由twiddle2.inc文件給 ;出,起始地址標號TWI2.text_c_int00b start nopnopstart:STM#TOS,SPLD#0,DPSSBXFRCT 31輸入信號時域波形、頻譜圖及其功率譜4. 觀察信號時域波形及其頻譜32二、數(shù)字濾波器的DSP實現(xiàn)1、模擬濾波器回顧 數(shù)字信號處理主要是面向實時的密集型數(shù)據(jù)運算。而濾波
8、在數(shù)字信號處理中占有極其重要的地位,是語音處理、圖像處理、模式識別、頻譜分析等應用的基本處理算法。33理想低通濾波器34低通、高通、帶通與帶阻濾波器35高通濾波器36帶通濾波器37帶阻濾波器38截止頻率與帶寬39通帶、阻帶與過渡帶40滾 降(過渡帶)41阻帶衰減42帶內平坦度43巴特沃爾斯濾波器(Butterworth)4445契比協(xié)夫濾波器(Chebyshev)契比協(xié)夫多項式46契比協(xié)夫濾波器(Chebyshev)I型47契比協(xié)夫濾波器(Chebyshev)II型48橢圓濾波器49 在同樣的通帶平滑度、過渡帶寬和阻帶衰減指標下,三種濾波器所需要的階數(shù)為:巴特沃爾什 6階契比雪夫 4階 橢圓
9、3階50二階低通濾波器51幅頻特性和相頻特性5253 2、數(shù)字濾波器 數(shù)字濾波又稱程序濾波,是將輸入信號通過一定的運算關系(程序)變?yōu)樗璧妮敵鲂盘?,即:實現(xiàn)數(shù)字濾波就必須把輸入輸出信號關系轉變成可實現(xiàn)的數(shù)學模型或算法。 用DSP芯片實現(xiàn)數(shù)字濾波具有穩(wěn)定性好、精確度高、不受環(huán)境影響,以及靈活性好等突出優(yōu)點。54數(shù)字濾波器的差分方程分為無限沖激響應系統(tǒng)(IIR)和有限沖激響應系統(tǒng)(FIR)。IIR系統(tǒng)因為與過去某些輸出有關,所以網(wǎng)絡結構有反饋支路稱為遞歸結構,F(xiàn)IR系統(tǒng)只與激勵有關沒有反饋支路,稱為非遞歸結構。55IIR濾波器的主要特點單位沖擊響應有無限多項高效率(因為結構簡單、系數(shù)小、乘法操作
10、較少)與模擬濾波器有對應關系可以解析控制,強制系統(tǒng)在指定位置為零點有極點,在設計時要考慮穩(wěn)定性具有反饋,可能產生噪聲、誤差累積56yk = a0 xk + a1xk-1 + a2xk-2 b1yk-1 b2yk-2Y(z)=a0X(z)+a1X(z)z-1+a2X(z)z-2b1Y(z) z-1 b2Y(z) z-2Y(z)= (a0+a1z-1+a2z-2 )/(b1z-1+b2z-2)X(z)57零極點子系統(tǒng)交換位置(傳輸函數(shù)不變,但差分方程不同)58標準型二階節(jié)59二階節(jié)的C54實現(xiàn) STM #d+5, AR3;AR3:d(n), d(n-1), d(n-2)STM #table, AR
11、4 ;AR4:coeff of IIR filter B2,B1,A2,A1,A0.* Feedback pathMAC *AR4+, *AR3-, A ;input+d(n-2)*B2MAC *AR4+, *AR3-, A ;input+d(n-2)*B2+d(n-1)*B1STH A, *AR3;d(n) = input+d(n-2)*B2+d(n-1)*B1* Forward pathMPY *AR4+, *AR3-, A ;d(n-2)*A2MAC *AR4+, *AR3, A ;d(n-2)*A2+d(n-1)*A1DELAY *AR3-;d(n-2)=d(n-1)MAC *AR4+
12、, *AR3, A ;d(n-2)*A2+d(n-1)*A1+d(n)*A0DELAY *AR3- ;d(n-1)=d(n).60級 連61多級二階節(jié)級連成多級 IIR62并 聯(lián)63IIR濾波器的設計(1)設計一個符合要求的模擬濾波器(2)從S平面映射到Z平面,得到相應的數(shù)字濾波器64沖激響應不變法 h(nts)= hak65Z平面的單位圓映射為S平面的fs/2的區(qū)間66雙線性變換67有限沖擊響應(FIR)濾波器= a0 + a1z-1 + + aNz-(N-1)68FIR濾波器的結構69頻率響應70FIR濾波器的主要特點單位沖擊響應只有有限多項可以設計成線性相位系統(tǒng)只在零點處有極點,因此系統(tǒng)
13、總是穩(wěn)定的便于DSP實現(xiàn)并可用立即數(shù)乘加指令編程,(節(jié)約存儲器) 71系統(tǒng)非線性相移造成輸出信號失真系統(tǒng)相位特性決定了信號不同頻率的時延72 輸入波形DFT變換忽略相位信息IDFT變換輸出波形忽略相位信息的后果73相位特性74要求線性相位的例子通信系統(tǒng):數(shù)據(jù)通信、調制解調器希爾伯特變換器:要求輸入輸出信號正交。高保真音響系統(tǒng):音樂的相位失真必須減到最小,盡可能逼真地重現(xiàn)原來的聲音。理想微分器:75線性相位的FIR濾波器系統(tǒng)的群延時76線性相位設計當 hp=hN-p 即hp關于中點對稱,且:則滿足線性相位要求,群延時為:77假設在 時H() = 0,有:當H()為偶函數(shù)有:用付氏級數(shù)實現(xiàn)FIR濾
14、波器78截取有限項得近似H(z):其中:h(p) =79用DSP實現(xiàn)FIR濾波器的存儲器安排80FIR濾波器編程實現(xiàn)RPTBD fir_filter_loop-1 STM #K_FIR_BFFR, BK ; FIR circular bffr sizeLD *INBUF_P+, A ; load the input valuefir_filter:STL A, *FIR_DATA_P+% ; replace oldest sample with ;newest sampleRPTZ A, (K_FIR_BFFR-1)MAC *FIR_DATA_P+0%, *FIR_COFF_P+0%, A ;
15、filteringSTH A, *OUTBUF_P+ ; replace the oldest bffr valuefir_filter_loop81計算16階的FIR濾波器輸出256個點.sect “fir-prog”STM #255, BRC ; Repeat 256 timesRPTBD fir_filter_loopSTM #16, BK ; FIR circular buffer sizeLD *AR7+, A ; load the input valueSTL A, *AR4+% ; replace oldest sample with; newest sampleRPTZ A,
16、#15MAC *AR4+0%, *AR3+0%, A ; filteringSTH A, *AR5+ ; replace the oldest buffer valuefir_filter_loop82C54的FIRS指令 該指令實現(xiàn)一個對稱的FIR濾波器。累加器A的高段(bit32-16)和由pmad(程序存儲器地址)尋址的pmem相乘,結果加到累加器B中。同時,存儲器操作數(shù)Xmem和Ymem相加,結果左移16bits,然后裝入累加器A。在下一個循環(huán)中,pmad加1。語法:FIRS Xmem,Ymem,pmad例:FIRS *AR3+,*AR4+,COEFFS 83矩形窗84Hamming窗
17、85Blackman窗86矩形窗與blackman窗的比較87 窗函數(shù) 旁瓣峰值 過渡帶寬 阻帶 Wn 幅度(dB) 衰減(dB)矩形窗三角窗海寧窗海明窗布蘭克門窗凱撒窗-21-25-44-53-74-804 /N8 /N8 /N8 /N12 /N10 /N-13-25-31-41-57-57各種窗函數(shù)基本參數(shù)小結88數(shù)字濾波器設計軟件包DFDP4/plus通過雙線性變換法,由Butterworth、Chebyshev、elliptic等原型濾波器來設計IIR通過窗函數(shù)設計法設計FIR濾波器使用代碼生成器(CGEN)可生成TMS320 DSP的匯編代碼可生成采樣信號(如矩形波、單脈沖波、三角波
18、、正余弦、高斯噪聲波等)89 1FIR濾波器的基本結構 FIR濾波器的系統(tǒng)函數(shù)沒有反饋回路,因此它是穩(wěn)定系統(tǒng),其單位沖激響應h(n)是一個有限長序列。FIR系統(tǒng)的差分方程實際上是一種乘法累加運算。3、FIR濾波器的DSP實現(xiàn)90FIR濾波器的結構圖:由圖看出,實際算法由一組基本運算單元:乘法器、加法器、延遲器組成。顯然,最主要的問題是延遲環(huán)節(jié)如何實現(xiàn)。91 2. FIR濾波器中z-1的實現(xiàn) 對于N級的FIR濾波器,在數(shù)據(jù)存儲器中開辟一個稱為滑窗的N個單元的線性數(shù)據(jù)緩沖區(qū),存放最新的N個輸入數(shù)據(jù)樣本;從最老的樣本開始,每讀一個樣本后,將此樣本向下移位,讀完最后一個樣本后,輸入最新樣本至緩沖區(qū)的頂
19、部。 用線性緩沖區(qū)實現(xiàn)z-1的優(yōu)點是,新老數(shù)據(jù)在存儲器中存放的位置直接明了。(1)用線性緩沖區(qū)法實現(xiàn)z-1 92N=6的線性緩沖區(qū)存儲器圖93C54x片內沒有I/O資源,CPU通過外部譯碼可以尋址64K的I/O空間。有兩條實現(xiàn)輸入和輸出的指令:PORTR PA, Smem ;將PA端口的內容送 ;數(shù)據(jù)存儲器SmemPORTW Smem, PA ;將地址為Smem的數(shù)據(jù) ;存儲器內容送端口PA數(shù)據(jù)的輸入/輸出 94 使用存儲器延時指令DELAY,可以將數(shù)據(jù)存儲單元中的內容向較高地址的下一單元傳送。實現(xiàn)z-1的運算指令為:DELAY Smem ;(Smem)Seme+1,數(shù)據(jù)存儲器 ;單元的內容復
20、制下一高地址單元DELAY *AR2 ;AR2指向源地址,即將AR2所指單 ;元內容復制到下一高地址單元中 ;延時指令與其它指令結合 LD+DELAYLTD指令 ;單數(shù)據(jù)存儲器的值裝入 ;T寄存器并送下一單元延時 MAC+DELAYMACD指令 ;乘加延遲存儲器的延時操作95 在數(shù)據(jù)存儲器中開辟一個稱為滑窗的N個單元的循環(huán)緩沖區(qū),循環(huán)緩沖區(qū)地址首尾相鄰:滑窗中存放最新的N個輸入樣本,每次輸入新樣本時,以新樣本改寫滑窗中最老的數(shù)據(jù),而滑窗中的其它數(shù)據(jù)不動;利用片內循環(huán)緩沖區(qū)長度寄存器對滑窗進行間接尋址。 利用循環(huán)緩沖區(qū)實現(xiàn)Z-1的優(yōu)點是不需要移動數(shù)據(jù),不存在一個機器周期中要求能一次讀和一次寫的數(shù)
21、據(jù)存儲器,因而可以將循環(huán)緩沖區(qū)定位在數(shù)據(jù)存儲器的任何位置(而線性緩沖區(qū)要求定位在DARAM)。 (2)用循環(huán)緩沖區(qū)法實現(xiàn)z-196N=6的循環(huán)緩沖區(qū)存儲器圖97 3FIR濾波器的DSP實現(xiàn)方法 FIR濾波器的輸出表達式寫為 y(n)=b0 x(n)+b1x(n-1)+bn-1x(n-N+1)其結構圖FIR濾波算法實際上是一種乘累加運算。它不斷地從輸入端讀入樣本值 xn,經延時(z-1)后做乘法累加,輸出濾波結果yn。98例:編寫N=5的y(n)計算程序。y(n)=a0*x(n)+a1*x(n-1)+a2*x(n-2)+a3*x(n-3)+a4*x(n-4), 先將系數(shù)a0a4存放在數(shù)據(jù)存儲器中
22、,然后設置線性緩沖區(qū),用以存放輸入和輸出數(shù)據(jù)。(1)用線性緩沖區(qū)和直接尋址方法實現(xiàn)FIR線性緩沖區(qū)安排:99 .title “FIR1.ASM” ;定義源程序名 .mmregs ;定義存儲器映象寄存器 .def start ;定義語句標號start .bss y,1 ;為結果y預留1個單元的空間XN .usect “XN”,1 ;在自定義的未初始化段“XN”XNM1 .usect “XN”,1 ;中保留5個單元的空間XNM2 .usect “XN”,1XNM3 .usect “XN”,1 XNM4 .usect “XN”,1A0 .usect “A0”,1 ;在自定義的未初始化段“A0”A1
23、.usect “A0”,1 ;中保留5個單元的空間A2 .usect “A0”,1A3 .usect “A0”,1A4 .usect “A0”,1PA0 .set 0 ;定義PA0為輸出端口PA1 .set 1 ;定義PA1為輸入端口100 .datatable: .word 1*32768/10 ;假定程序空間有五個參數(shù) .word -3*32768/10 .word 5*32768/10 .word -3*32768/10 .word 1*32768/10 .textstart: SSBX FRCT ;設置進行小數(shù)相乘 STM #A0,AR1 ;將數(shù)據(jù)空間用于放參數(shù)的首地址送AR1 RPT
24、 #4 ;重復下條指令5次傳送 MVPD table,*AR1+ ;傳送程序空間的系數(shù)到數(shù)據(jù)空間 LD #XN,DP ;設置數(shù)據(jù)存儲器頁指針的起始位置 PORTR PA1,XN ;從數(shù)據(jù)輸入端口I/O輸入最新數(shù)據(jù)x(n)FIR1: LD XNM4,T ;x(n-4)T101MPY A4,A ;a4*x(n-4)ALTD XNM3 ;x(n-3)T, x(n-3)x(n-4)MAC A3,A ;A+a3*x(n-3)ALTD XNM2 ;x(n-2)T, x(n-2)x(n-3)MAC A2,A ;A+a2*x(n-2)ALTD XNM1 ;x(n-1)T, x(n-1)x(n-2)MAC A1
25、,A ;A+a1*x(n-1)ALTD XN ;x(n)T, x(n)x(n-1)MAC A0,A ;A+a0*x(n)ASTH A,y ;保存y(n)的高字節(jié)PORTW y,PA0 ;輸出y(n)BD FIR1 ;執(zhí)行完下條指令后循環(huán)(帶延遲轉移)PORTR PA1,XN ;輸入新的x(n).end102vectors.objfir1.obj-o fir1.out-m fir1.map-e startMEMORY PAGE 0 : EPROM: org=01OOOH len=01000H VECS: org=03F80H len=00080H PAGE 1 : SPRAM: org=0006
26、0H len=00020H DARAM: org=00080H len=01380H SECTIONS .vectors: VECS PAGE 0 .text: EPROM PAGE 0 .data: EPROM PAGE 0 .bss: SPRAM PAGE 1 .XN: DARAM align(8) PAGE 1 .A0: DARAM align(8) PAGE 1 103(2)用線性緩沖區(qū)和間接尋址方法實現(xiàn)FIR例:編寫y(n)=a0*x(n)+a1*x(n-1)+a2*x(n-2)+a3*x(n-3)+a4*x(n-4),的計算程序,其中N=5。 將系數(shù)a0a4存放在數(shù)據(jù)存儲器中,并設
27、置線性緩沖區(qū)存放輸入數(shù)據(jù)。利用AR1和AR2分別作為間接尋址線性緩沖區(qū)和系數(shù)區(qū)的輔助寄存器。 104 .title “FIR2.ASM” ;定義源程序名 .mmregs ;定義存儲器映象寄存器 .def start ;定義語句標號start .bss y,1 ;為結果y預留1個單元的空間x .usect “x”,5 ;在自定義的未初始化段“x”中保留5個單元的空間a .usect “a”,5 ;在自定義的未初始化段“a”中保留5個單元的空間PA0 .set 0 ;定義PA0為輸出端口PA1 .set 1 ;定義PA1為輸入端口 .datatable: .word 2*32768/10 ;假定程
28、序空間有五個參數(shù) .word -3*32768/10 .word 4*32768/10 .word -3*32768/10 .word 2*32768/10105 .textstart: SSBX FRCT ;小數(shù)相乘 STM #a,AR2 ;將數(shù)據(jù)空間用于放系數(shù)的首地址送AR2 RPT #4 ;重復下條指令5次傳送 MVPD table,* AR2+ ;傳送程序空間的系數(shù)到數(shù)據(jù)空間 STM #x4, AR1 ;AR1指向x(n-4) STM #a4, AR2 ;AR2指向a4 STM #4, AR0 ;指針復位值4AR0 LD #x, DP ;設置數(shù)據(jù)存儲器頁指針的起始位置 PORTR PA
29、1,x ;從端口PA1輸入最新值x(n)106FIR2: LD *AR1-, T ;x(n-4)T MPY *AR2-, A ;a4*x(n-4)A LTD *AR1- ;x(n-3)T, x(n-3)x(n-4) MAC *AR2-, A ;A+a3*x(n-3)A LTD *AR1- ;x(n-2)T, x(n-2)x(n-3) MAC *AR2-, A ;A+a2*x(n-2)A LTD *AR1- ;x(n-1)T, x(n-1)x(n-2) MAC *AR2-, A ;A+a1*x(n-1)A LTD *AR1 ;x(n)T, x(n)x(n-1) MAC *AR2+0, A ;A+
30、a0*x(n)A ,AR2復原,指向a4 STH A,y ;保存運算結果的高位字到y(tǒng)(n) PORTW y(n),PA0 ;將結果y(n)輸出到端口PA0 BD FIR2 ;執(zhí)行完下條指令后,從FIR2開始循環(huán) PORTR PA1,*AR1+0 ;輸入新值x(n), AR1復原指向x4 .end107(3)用線性緩沖區(qū)和帶移位雙操作數(shù)尋址方法實現(xiàn)FIR例:編寫y(n)=a0*x(n)+a1*x(n-1)+a2*x(n-2)+a3*x(n-3)+a4*x(n-4),的計算程序,其中N=5。 系數(shù)a0a4存放在程序存儲器中,輸入數(shù)據(jù)存放在數(shù)據(jù)存儲器的線性緩沖區(qū)中。乘法累加利用MACD指令,該指令完
31、成數(shù)據(jù)存儲器單元與程序存儲器單元相乘,并累加、移位的功能。 108 .title “FIR3.ASM” ;定義源程序名 .mmregs ;定義存儲器映象寄存器 .def start ;定義語句標號start .bss y,1 ;為結果y預留1個單元的空間x .usect “x”,6 ;在自定義的未初始化 ;段“x”中保留6個單元PA0 .set 0 ;定義PA0為輸出端口PA1 .set 1 ;定義PA1為輸入端口 .data ;假定程序空間有五個參數(shù)COEF: .word 1*32768/10 ;a4 .word -4*32768/10 ;a3 .word 3*32768/10 ;a2 .w
32、ord -4*32768/10 ;a1 .word 1*32768/10 ;a0109 .textstart: SSBX FRCT ;設置小數(shù)乘法 STM #x+5, AR1 ;AR1指向x(n-4) STM #4, AR0 ;設置AR1復位值 LD #x+1, DP ;設置數(shù)據(jù)存儲器頁指針的起始位置 PORTR PA1, x+1 ;輸入最新值x(n)FIR3: RPTZ A,#4 ;累加器A清0, 設置重復下條指令5次 MACD *AR1-, COEF, A ;x(n-4)T, A= x(n-4)*a4 +A ;(PAR)+1PAR, x(n-4)x(n-3) STH A, *AR1 ;暫存
33、結果到y(tǒng)(n) PORTW *AR1+, PA0 ;輸出y(n)到PA0,AR1指向x(n) BD FIR3 ;執(zhí)行下條指令后循環(huán) PORTR PA1, *AR1+0 ;輸入新數(shù)據(jù)到x(n), AR1指向x(n-4)110【例】用循環(huán)緩沖區(qū)和雙操作數(shù)尋址方法編寫實現(xiàn)FIR濾波的程序。1)FIR濾波器設計 設計一個FIR低通濾波器,通帶邊界頻率為1500Hz,通帶波紋小于1dB;阻帶邊界頻率為2000Hz,阻帶衰減大于40dB;采樣頻率為8000Hz。試用MATLAB窗函數(shù)進行FIR濾波器的設計 b=fir1(17,1500/8000*2)-設計濾波器參數(shù) h=round(b*215) -浮點數(shù)
34、轉換為定點數(shù)Q15格式(4)用循環(huán)緩沖區(qū)和雙操作數(shù)尋址方法實現(xiàn)FIR1112)產生濾波器輸入信號的文件 按照通常的程序調試方法,先用Simulator逐步調試各子程序模塊,再用硬件仿真器在實際系統(tǒng)中與硬件儀器聯(lián)調。使用CCS的Simulator進行濾波器特性測試時,需要輸入時間信號x(n)。 本例設計一個采樣頻率Fs為8000Hz,輸入信號頻率為1000Hz和2500Hz的合成信號,通過設計的低通濾波器將2500Hz信號濾掉,余下1000Hz信號。1123)編寫FIR數(shù)字濾波器的匯編源程序FIR數(shù)字濾波器匯編程序fir.asm如下:*一個FIR濾波器源程序fir.asm * .mmregs .
35、global start .def start,_c_int00INDEX .set 1KS .set 256 ;輸入樣本數(shù)據(jù)個數(shù)N .set 17 ;FIR濾波器階數(shù)COEF_FIR .sect COEF_FIR;FIR濾波器系數(shù)113 .word 0,158,264,-290,-1406,-951,3187,9287,12272 .word 9287,3187,-951,-1406,-290,264,158,0 .dataINPUT .copy “firin.inc” ;輸入數(shù)據(jù)在數(shù)據(jù)區(qū)0 x2400OUTPUT .space 1024 ;輸出數(shù)據(jù)在數(shù)據(jù)區(qū)0 x2500COEFTAB .u
36、sect “FIR_COEF”,N ;自定義段,為未初始化變量DATABUF .usect “FIR_BFR”,N ;保留存儲空間BOS .usect “STACK”,0FhTOS .usect “STACK”,1 114 .text ;文本段 .asg AR0,INDEX_P ;將一個字符串賦給一個符號 .asg AR4,DATA_P ;輸入數(shù)據(jù)x(n)循環(huán)緩沖區(qū)指針 .asg AR5,COEF_P ;FIR系數(shù)表指針 .asg AR6,INBUF_P ;模擬輸入數(shù)據(jù)指針 .asg AR7,OUTBUF_P ;FIR濾波器輸出數(shù)據(jù)指針_c_int00 b start nop nopstart
37、: SSBX FRCT ;設置小數(shù)乘法 STM #COEFTAB, COEF_P ;將FIR系數(shù)從程序存儲區(qū) RPT #N-1 ;移到數(shù)據(jù)存儲區(qū) MVPD #COEF_FIR,*COEF_P+ STM #INDEX,INDEX_P115 STM #DATABUF,DATA_P ;數(shù)據(jù)循環(huán)緩沖區(qū)清零 RPTZ A,#N-1 STL A,*DATA_P+ STM #(DATABUF+N-1),DATA_P ;數(shù)據(jù)循環(huán)緩沖區(qū)指針 ;指向xn-(N-1) STM #COEFTAB,COEF_P FIR_TASK: STM #INPUT,INBUF_P STM #OUTPUT,OUTBUF_P STM
38、#KS-1,BRC ;塊重復計數(shù)器116 RPTBD LOOP-1 STM#N,BK ;FIR循環(huán)緩沖區(qū)大小 LD *INBUF_P+,A ;裝載輸入數(shù)據(jù)FIR_FILTER: ;FIR濾波運算 STL A,*DATA_P+% ;用最新的樣本值 ;替代最舊的樣本值 RPTZA,N-1 MAC *DATA_P+0%,*COEF_P+0%,A ;計算 STH A,*OUTBUF_P+ LOOP: EEND B EEND .end1174)編寫FIR濾波器鏈接命令文件對應以上匯編程序的鏈接命令文件fir.cmd如下:fir.obj-m fir.map-o fir.outMEMORYPAGE0: RO
39、M1(RIX) :ORIGIN=0080H,LENGTH=100HPAGE1: INTRAM1(RW) :ORIGIN=2400H,LENGTH=0200H INTRAM2(RW) :ORIGIN=2600H,LENGTH=0100H INTRAM3(RW) :ORIGIN=2700H,LENGTH=0100H B2B(RW) :ORIGIN=0070H,LENGTH=10H118SECTIONS.text :ROM1PAGE 0.data : INTRAM1 PAGE 1FIR_COEF: INTRAM2 PAGE 1FIR_BFR : INTRAM3 PAGE 1.stack : B2B
40、PAGE 1 1195)CCS集成開發(fā)環(huán)境下上機操作過程(1)在CCS上建立fir工程并運行fir.out程序。 (2)觀察輸入信號的波形及頻譜。(3)觀察輸出信號的波形及頻譜。120 Graph 屬性設置窗口121 輸入信號的時域波形 輸入信號的頻譜圖122 濾波器輸出信號時域波形 濾波器輸出信號頻譜圖123 4.系數(shù)對稱FIR濾波器設計 系數(shù)對稱的FIR濾波器具有線性相位特性,這種濾波器是用得最多的FIR濾波器,特別是對相位失真要求很高的場合。 如果FIR濾波器的h(n)是實數(shù),且滿足偶對稱h(n)=h(N-1-n)或奇對稱h(n)=-h(N-1-n)的條件,則濾波器具有線性相位特性。 一
41、個對稱FIR濾波器滿足h(n)=h(N-1-n)。 124例如,N=8的FIR濾波器,其輸出方程為:Y(n)=h0 x(n)+h1x(n-1)+h2x(n-2)+h3x(n-3)+h3x(n-4) +h2x(n-5)+h1x(n-6)+h0 x(n-7) 總共有8次乘法和7次加法。如果利用對稱性,可將其改寫成: Y(n)=h0 x(n)+x(n-7)+h1x(n-1)+x(n-6)+h2x(n-2) +x(n-5)+h3x(n-3)+x(n-4) 變成4次乘法和7次加法,乘法運算的次數(shù)少了一半。這是對稱FIR的一個優(yōu)點。 125 對稱FIR濾波器的實現(xiàn)可按如下步驟進行:(1)將數(shù)據(jù)存儲器分為新
42、舊兩個循環(huán)緩沖區(qū),每個循環(huán)緩沖區(qū)的長度為N/2,New循環(huán)緩沖區(qū)中存放N/2=4個新數(shù)據(jù);Old循環(huán)緩沖區(qū)中存放N/2=4個老數(shù)據(jù)。126(2)設置循環(huán)緩沖區(qū)指針,以AR2指向New循環(huán)緩沖區(qū)中最新數(shù)據(jù);以AR3指向Old循環(huán)緩沖區(qū)中最老數(shù)據(jù)。(3)在程序存儲器中設置系數(shù)表。(4)(AR2)+(AR3)AH(累加器A的高位),AR2-1AR2,AR3-1AR3。(5)將累加器B清0,重復執(zhí)行4次(i=0,1,2,3)下面的運算: (AH)*系數(shù)hi+(B)B,系數(shù)指針(PAR)加1, (AR2)+(AR3)AH,AR2和AR3減。127(6)保存和輸出結果(結果在BH中)。(7)修正數(shù)據(jù)指針,
43、讓AR2和AR3分別指向New循環(huán)緩沖區(qū)最新的數(shù)據(jù)和Old循環(huán)緩沖區(qū)中最老的數(shù)據(jù)。(8)用New循環(huán)緩沖區(qū)中最老的數(shù)據(jù)替代Old循環(huán)緩沖區(qū)中最老的數(shù)據(jù)。Old循環(huán)緩沖區(qū)指針減1。(9)輸入一個新數(shù)據(jù)替代New循環(huán)緩沖區(qū)中最老的數(shù)據(jù)。 重復執(zhí)行(4)(9)步。128 C54x的有限沖激響應濾波器指令FIRS為: FIRS Xmem,Ymem,Pmad該指令執(zhí)行 PmadPAR(程序存儲器地址寄存器) 當(RC)!= 0 (B)+(A(3216)(由PAR尋址Pmem)B (Xmem)+(Ymem)16A (PAR)+1PAR (RC)-1RC FIRS指令在同一個機器周期內,通過C和D總線讀2次
44、數(shù)據(jù)存儲器,同時通過P總線讀一個系數(shù)。129例 設計對稱FIR濾波器(N=8)。 .title “FIR5.ASM” ;給匯編程序取名 .mmregs ;定義存儲器映象寄存器 .def start ;定義標號start的起始位置 .bss y,1 ;為未初始化變量y保留空間x_new .usect “DATA1”,4 ;自定義4個單元的未初始化段DTAT1x_old .usect “DATA2”,4 ;自定義4個單元的未初始化段DATA2Size .set 4 ;定義符號size=4PA0 .set 0 ;設置數(shù)據(jù)輸出端口I/O,PA0=0PA1 .set 1 ;設置數(shù)據(jù)輸入端口I/O,PA1
45、=1 .dataCOEF .word 1*32768/10,2*32768/10 ;系數(shù)對稱,只需 .word 3*32768/10,4*32768/10 ;給出N/2=4個系數(shù)130 .textstart: LD #y, DP ;設置數(shù)據(jù)存儲器頁指針的起始位置 SSBX FRCT ;小數(shù)乘法 STM #x_new, AR2 ;AR2指向新緩沖區(qū)第1個單元 STM #x_old+(size-1), AR3 ;AR3指向老緩沖區(qū)最后1個單元 STM #size, BK ;設置循環(huán)緩沖區(qū)長度BK =size STM #-1, AR0 ;循環(huán)控制增量AR0=-1 PORTR PA1, #x_new
46、;從I/O輸入端口PA1 ;輸入數(shù)據(jù)到x(n)131FIR5: ADD *AR2+0%,*AR3+0%,A ;AH=x(n)+ x(n-7) ;(第一次) RPTZ B, #(size-1) ;RC=#size-1+1,B=0 FIRS *AR2+0%,*AR3+0%, COEF ;B+=AH*h0, ;AH=x(n-1)+x(n-6) STH B, y ;保存結果到y(tǒng) PORTW y, PA0 ;輸出結果到PA0 MAR *+AR2(2)% ;修正AR2,指向新緩 ; 沖區(qū)最老的數(shù)據(jù) MAR *AR3+% ;修正AR3,指向老緩 ;沖區(qū)最老的數(shù)據(jù) MVDD *AR2, *AR3+0% ; 新
47、緩沖區(qū)向老緩沖區(qū)傳送一個數(shù) ; 用新緩沖區(qū)最老的數(shù)據(jù)覆蓋舊緩沖區(qū) ; 最老的數(shù)據(jù) BD FIR5 ;執(zhí)行完下條指令后轉移FIR5并循環(huán) PORTR PA1, *AR2 ; 輸入新數(shù)據(jù)至新緩沖區(qū) .end1325、IIR濾波器的DSP實現(xiàn) 1IIR濾波器的基本概念 N階無限沖激響應(IIR)濾波器的脈沖傳遞函數(shù)表達式為:其差分方程表達式可寫為:133Y(n)由兩部分構成:第一部分 是一個對x(n)的M節(jié)延時鏈結構,每節(jié)延時抽頭后加權相加,是一個橫向結構網(wǎng)絡;第二部分 也是一個N節(jié)延時鏈的橫向結構網(wǎng)絡,不過它是對y(n)的延時,因此是個反饋網(wǎng)絡。IIR濾波器的脈沖傳遞在Z平面上有極點存在,其單位沖
48、激響應是無限長序列。134 IIR濾波器與FIR濾波器的一個重要區(qū)別是,IIR可以用較少階數(shù)獲得很高的選擇特性,所用存儲單元少,運算次數(shù)少,具有經濟、高效的特點。但是,在有限精度的運算中,可能出現(xiàn)不穩(wěn)定現(xiàn)象。而且,選擇性越好,相位的非線性越嚴重,而FIR濾波器可以得到嚴格的線性相位。 因此,在相位要求不很敏感的場合,如語言通信等,選用IIR濾波器較為合適;而對于圖像信號處理、數(shù)據(jù)傳輸?shù)纫圆ㄐ螖y帶信息的系統(tǒng),對線性相位要求較高,在條件許可的情況下,采用系數(shù)對稱FIR濾波器較好。135直接形式的二階IIR數(shù)字濾波器 對于直接形式的二階IIR數(shù)字濾波器,其結構如圖所示: 2二階IIR濾波器的實現(xiàn)方法
49、 136存放輸入、輸出變量和濾波器 系數(shù)的緩沖區(qū)編程時,將變量和系數(shù)都存放在DARAM中,并采用循環(huán)緩沖區(qū)方式尋址,共需開辟4個循環(huán)緩沖區(qū),用來存放變量和系數(shù)。這4個循環(huán)緩沖區(qū)的結構如圖所示:137【例】設計一個三階的切比雪夫型帶通數(shù)字濾波器,其采樣頻率Fs=16kHz,其通頻帶3.2kHzf4.8kHz,內損耗不大于1dB;f5.6kHz為阻帶,其衰減大于20dB。(1)IIR濾波器的設計利用MATLAB信號處理工具箱設計IIR濾波器,程序為: wp=3.2,4.8;ws=2.4,5.6;rp=1;rs=20 n,wn=cheb1ord(wp/8,ws/8,rp,rs) b,a=cheby1
50、(n,rp,wn) 138設計結果為: N=3 wn =0.4000 0.6000 b0=0.0114747 a0=1.000000 b1=0 a1=0 b2=-0.034424 a2=2.13779 b3=0 a3=0 b4=0.034424 a4=1.76935 b5=0 a5=0 b6=-0.0114747 a6=0.539758139(2)產生濾波器輸入信號的文件使用CCS的Simulator進行濾波器特性的測試時,需要輸入時間信號x(n)。 #include #include void main() int i; double f256; FILE *fp; if(fp=fopen(
51、iirin.inc,wt)=NULL) printf(cant open file! n); return; 140fprintf(fp,INPUT: .sect %cINPUT %cn,);for(i=0;iROM PAGE 0.data:DARAM PAGE 1BN:DARAM PAGE 1AN:DARAM PAGE 1 INBUF:RAM1 PAGE 1OUTPUT:RAM2 PAGE 1149 3高階IIR濾波器的實現(xiàn) 一個高階IIR濾波器可以分解成若干個二階基本節(jié)相級聯(lián)。由于調整每個二階基本節(jié)的系數(shù),只涉及到這個二階節(jié)的一對極點和零點,不影響其他零、極點,因此便于調整系統(tǒng)的性能。 此
52、外,由于字長有限,每個二階基本節(jié)運算后都會帶來一定的誤差,合理安排各二階基本節(jié)的前后次序,將使系統(tǒng)的精度得到優(yōu)化。150對高階IIR濾波器的幾點特殊處理 當出現(xiàn)一個或一個以上系數(shù)。此時,既可以用最大的系數(shù)來定標,即用最大的系數(shù)去除所有的系數(shù),也可以將此的系數(shù)分解成兩個的系數(shù)進行運算和相加,例如B0=1.2,則:X(n)*B0=x(n)*(B0/2)+x(n)*(B0/2)=0.6*x(n)+0.6*x(n)這樣,將使所有的系數(shù)保持精度,而僅僅多開銷一個機器周期。(1)系數(shù)時的定標方法151(2)對輸入數(shù)據(jù)定標 一般地,從外設口輸入一個數(shù)據(jù)加載到累加器A,可用以下指令: PORTR 0001h,
53、 Xin LD Xin, 16,A如果運算過程中可能出現(xiàn)的輸出值,可在輸入數(shù)據(jù)時將其縮小若干倍,如: PORTR 0001h, Xin LD Xin, 16-3,A將輸入數(shù)據(jù)除以8,將使輸出值小于。上面用多種不同的方法進行了濾波器的設計,在實現(xiàn)濾波器功能的前提下,程序的繁簡和對存儲器的使用情況是不同的,應用中應根據(jù)具體情況進行選擇。 152三、工程問題的DSP實現(xiàn)例:DTMF的編解碼用DSP實現(xiàn)雙音多頻(DTMF)的撥號產生和解碼。DTMF(Dual-Tone Multiple Frequency)153實現(xiàn)步驟對象分析算法設計DSP選擇系統(tǒng)設計系統(tǒng)實現(xiàn)系統(tǒng)調試154對象分析 對所要開發(fā)的系統(tǒng)
54、的功能、性能要有深入的了解和分析,尤其對技術指標,要作透徹的理解和把握。155 DTMF用一對頻率(行頻/列頻)來表示一個符號(電話鍵盤上的09,AD,*,#,共16個符號) 一次按鍵的時間是100ms,其中,頻率對存在的時間是45ms,不允許超過55ms,其余的時間是靜音。156 157CCITT關于DTMF的指標Low band: 697、770、852、941(Hz)RBW3.5%High band: 1209、1336、1477、1633(Hz) RBW4dB REV 8dBDYN RANGE: 25dBGUARD TIME: MIN TONE TIME 45msSNR:NOISE -
55、24dBV158算法設計 算法設計是非常關鍵的步驟,因為算法決定運算量和存儲器的大小,從而決定DSP的選擇,進而決定系統(tǒng)的設計,包括硬件和軟件的設計。159DTMF撥號的產生 基于DSP的DTMF的音頻信號發(fā)生器,使用兩個二階的數(shù)字正弦波振蕩器,一個產生行頻,一個產生列頻。160 161DTMF發(fā)生器的系數(shù)和初始條件162DTMF發(fā)生器的信號流程163音頻檢測Goertzel算法是DTMF解碼器的基礎,實際上是一個兩極點的IIR濾波器。DFT或FFT需要在處理之前準備好一個數(shù)據(jù)塊,而Goertzel算法是一個遞歸的結構,就每個輸入的樣本進行計算。164Goertzel算法的特點Goertzel
56、算法的IIR濾波器結構涉及兩個復共軛極點,但對于實際的DTMF音頻檢測,只要有幅度信息就夠了(實際上使用幅度平方),從而簡化為只需要一個實系數(shù)參與計算。 Goertzel算法要比FFT快得多,因為只需要提供8個行/列頻和它們的二次諧波的信息(二次諧波的信息用于將DTMF與話音或音樂區(qū)別開來)。165Goertzel算法166行頻/列頻及相應的系數(shù)167有效性檢查信號強度 DTMF行頻、列頻信號之和的強度是否達到一定的門限值168扭曲度 標準扭曲: 行頻峰值 列頻峰值 4dB 反向扭曲: 列頻峰值 行頻峰值 8dB169二次諧波強度 以便將DTMF信號與其他語音信號、音樂信號等區(qū)別開來。170數(shù)
57、字信息的穩(wěn)定性 如果一個數(shù)字成功地檢測到兩次,認為該數(shù)字是穩(wěn)定的171數(shù)字信息的有效性 檢測到的數(shù)字前面必須是靜音符時,該數(shù)字才是有效的,以便將各次擊鍵區(qū)別開來172 173編碼器對速度和存儲器的要求174175DSP芯片選擇算法對DSP芯片計算速度的要求系統(tǒng)的管理(如任務管理、進程管理、存儲器管理、I/O管理等)對DSP的要求片內存儲器和片外存儲器的要求(包括容量的要求和速度的要求)176對外設(如串口、并口、定時器、總線寬度、等待狀態(tài)等)的要求DSP封裝對印制板的設計影響甚大開發(fā)環(huán)境技術支持性能價格比177DSP芯片的速度178DSP的片內存儲器179DSP的外設180BGA(BALL G
58、RID ARRAY)181PLCC(PLASTIC J-LEADED CHIP CARRIER)182PQFP(PLASTIC QUAD FLAT PACK)183PDLP(PLASTIC DUAL-IN-LINE PACKAGE)184LCCC(LEADLESS CERAMIC CHIP CARRIER)185系統(tǒng)設計硬件系統(tǒng)設計軟件系統(tǒng)設計工作軟件測試軟件功能框圖(指標分配)電原理圖印制板(數(shù)字與模擬電路,接地,電源,多層板)186系統(tǒng)的實現(xiàn)從C程序作起 用C Compiler將C源程序編譯成為匯編語言源程序,然后匯編、連接后輸出可執(zhí)行代碼;也可以使用shell程序,將編譯、匯編、連接一齊
59、完成。187 188源程序分析器 輸入是C源文件。讀入源語句,檢查語法和語意錯誤,寫出一個中間文件(.if)189優(yōu)化器 可選擇項。其輸入是分析器產生的中間文件(.if)。當運行優(yōu)化器時,用戶可以選擇優(yōu)化的層次。產生一個與中間文件格式相同的高效率版本。190代碼生成器 輸入是分析器或優(yōu)化器產生的中間文件(.if或.opt文件),產生一個匯編語言源文件191內部列表公用程序 輸入是C編譯器產生的匯編語言源程序和C源程序。產生的是按C文件的語句展開的匯編語言源文件192匯編器和連接器匯編器的輸入是代碼生成器產生的匯編語言文件,產生COFF目標文件 連接器的輸入是匯編器產生的COFF目標文件,產生可
60、執(zhí)行的目標文件193運行C編譯器 cl500 -options filenames -z link_options object filescl500調用編譯器和匯編器的命令。-options 影響編譯器處理輸入文件的途徑filenames 一個或多個C源文件、匯編語言源文件,或目標文件。-z 運行連接器的選擇項。link_options 影響連接器處理輸入文件的途徑object files 命名編譯器產生的目標文件194cl500 -q symtab file seek.asm z 編譯文件symtab和file,匯編第三個文件seek.asm,連接這三個文件,并使用quiet選擇項,抑制輸
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《知識產權前沿問題》課件
- 《支氣管哮喘防治》課件
- 地理(河南)-【八省聯(lián)考】河南、山西、陜西、內蒙古、四川、云南、寧夏、青海八省2025年高考綜合改革適應性演練
- 《對標管理咨詢》課件
- 人教版八年級上冊地理第2章《中國的自然環(huán)境》教案
- 小學數(shù)學二年級數(shù)學加減法練習題
- 一模閱卷語知作文評分說明南京市一模閱卷語知閱讀評分細則
- 上杭一中屆模擬試卷語文試題
- 寵物用品設計師職位概述
- 促進學生學業(yè)成績提高的班級計劃
- 文藝復興經典名著選讀智慧樹知到期末考試答案章節(jié)答案2024年北京大學
- 一年級下-科學-非紙筆測試
- 淘氣的一天(教案)2023-2024學年數(shù)學二年級下冊 北師大版
- 中藥房培訓課題
- 供電方案審批流程
- 球墨鑄鐵管行業(yè)分析及市場研究報告
- 建筑規(guī)劃設計方案評審
- 2024中國出口信用保險公司江蘇分公司勞務派遣人員招聘筆試參考題庫附帶答案詳解
- 淘寶爆款打造方案
- 自然情懷-主題作文訓練
- 阿爾茨海默病康復
評論
0/150
提交評論