版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、第7章應用程序相關設計第第7章章 應用程序設計應用程序設計第7章應用程序相關設計本章內(nèi)容提要:本章內(nèi)容提要:n定標與溢出處理定標與溢出處理n基礎算術運算基礎算術運算nFIR濾波器濾波器nIIR濾波器濾波器n快速傅里葉變換快速傅里葉變換(FFT)第7章應用程序相關設計7.1定標與溢出處理定標與溢出處理n數(shù)的定標數(shù)的定標n溢出的處理方法溢出的處理方法n常用信號處理算法中的定標方法常用信號處理算法中的定標方法第7章應用程序相關設計7.1.1 數(shù)的定標數(shù)的定標l小數(shù)定標的概念小數(shù)定標的概念u設定一個設定一個16位數(shù)的小數(shù)點處于該數(shù)中的哪一位位數(shù)的小數(shù)點處于該數(shù)中的哪一位u可以表示不同大小和不同精度的小
2、數(shù)可以表示不同大小和不同精度的小數(shù)lQ表示法表示法u表表7-1列出了一個列出了一個16位數(shù)的位數(shù)的16種種Q表示及它們所能表示及它們所能表示的十進制數(shù)值范圍表示的十進制數(shù)值范圍表表7-1 Q表示及數(shù)值范圍表示及數(shù)值范圍l不同的不同的Q所表示的數(shù)不僅范圍不同,而且精度也不相同所表示的數(shù)不僅范圍不同,而且精度也不相同uQ越大,數(shù)值范圍越小,但精度越高越大,數(shù)值范圍越小,但精度越高uQ越小,數(shù)值范圍越大,但精度就越低越小,數(shù)值范圍越大,但精度就越低例如,例如,Q0的數(shù)值范圍是的數(shù)值范圍是-32768到到+32767,其精度為,其精度為1;Q15的數(shù)值范圍為的數(shù)值范圍為-1到到0.9999695,精度
3、為,精度為 1/32768 = 0.00003051對定點數(shù)而言,數(shù)值范圍與精度是一對矛盾。一個變量要對定點數(shù)而言,數(shù)值范圍與精度是一對矛盾。一個變量要想能夠表示比較大的數(shù)值范圍,必須以犧牲精度為代價;想能夠表示比較大的數(shù)值范圍,必須以犧牲精度為代價;而想提高精度,則數(shù)的表示范圍就相應地減小。在實際的而想提高精度,則數(shù)的表示范圍就相應地減小。在實際的定點算法中,應該根據(jù)具體問題進行折衷處理定點算法中,應該根據(jù)具體問題進行折衷處理, , 以達到最以達到最佳效果。佳效果。l在在C55x中,中,16位整數(shù)采用補碼形式表示。每個采用位整數(shù)采用補碼形式表示。每個采用Qi定標的定標的16位數(shù)用位數(shù)用1個符
4、號位、個符號位、i個小數(shù)位和個小數(shù)位和15-i個整個整數(shù)位來表示。數(shù)位來表示。表表7-2 同樣的數(shù)在不同定標方式下所表示的具體數(shù)值同樣的數(shù)在不同定標方式下所表示的具體數(shù)值l同樣一個同樣一個16位數(shù),若小數(shù)點設定的位置不同,它所表位數(shù),若小數(shù)點設定的位置不同,它所表示的數(shù)也就不同。示的數(shù)也就不同。第7章應用程序相關設計7.1.2 溢出的處理方法溢出的處理方法l如果算術運算結果超出寄存器所能表示的最大數(shù)就如果算術運算結果超出寄存器所能表示的最大數(shù)就會出現(xiàn)溢出會出現(xiàn)溢出u因為因為16位定點位定點DSP的動態(tài)范圍有限,所以在使用的動態(tài)范圍有限,所以在使用時必須注意動態(tài)范圍以防溢出時必須注意動態(tài)范圍以防
5、溢出l溢出還與輸入信號的特性和運算法則有關溢出還與輸入信號的特性和運算法則有關 1. 溢出溢出 C55x有以下幾種硬件特性可以處理溢出:有以下幾種硬件特性可以處理溢出:l保護位保護位 C55x的每個累加器都有的每個累加器都有8個保護位(個保護位(3932位),位),允許連續(xù)允許連續(xù)256次乘加操作而累加器不溢出次乘加操作而累加器不溢出l溢出標志位溢出標志位 C55x的每個累加器都有相關的溢出標志位,當累加的每個累加器都有相關的溢出標志位,當累加器操作結果出現(xiàn)溢出時,這個標志位就會置位器操作結果出現(xiàn)溢出時,這個標志位就會置位2. C55x的溢出處理機制的溢出處理機制l飽和方式位飽和方式位SATD
6、和和SATAuSATD控制控制D單元的操作,單元的操作,SATA控制控制A單元的操作。單元的操作。u如果如果SATD=1,當,當D單元發(fā)生溢出時,對單元發(fā)生溢出時,對D單元的結單元的結果進行飽和處理。不管飽和方式位的值是什么,當果進行飽和處理。不管飽和方式位的值是什么,當累加器發(fā)生溢出時,相應的溢出標志位都會被置位累加器發(fā)生溢出時,相應的溢出標志位都會被置位uA單元沒有溢出標志位,但如果單元沒有溢出標志位,但如果SATA=1,發(fā)生溢出,發(fā)生溢出時,結果也會進行飽和處理時,結果也會進行飽和處理 飽和處理是用最近的邊界值代替溢出結果。飽和處理是用最近的邊界值代替溢出結果。例如,例如,1616位寄存
7、器的范圍是位寄存器的范圍是8000h8000h(最小負數(shù))(最小負數(shù))7FFFh7FFFh(最大正數(shù)),飽和處理就是用(最大正數(shù)),飽和處理就是用7FFFh7FFFh代替比代替比7FFFh7FFFh大的大的結果;用結果;用8000h8000h代替比代替比8000h8000h小的結果。小的結果。l飽和。飽和是一種處理溢出的方法,但是飽和會剪掉部飽和。飽和是一種處理溢出的方法,但是飽和會剪掉部分輸出信號,可能會引起信號失真和引起系統(tǒng)非線性。分輸出信號,可能會引起信號失真和引起系統(tǒng)非線性。l輸入定標。分析所要使用的系統(tǒng),假定最壞的情況,然輸入定標。分析所要使用的系統(tǒng),假定最壞的情況,然后對輸入信號定
8、標,以防止溢出。但是這種方法會極大后對輸入信號定標,以防止溢出。但是這種方法會極大地降低輸出信號的精確度。地降低輸出信號的精確度。l固定定標。假定最壞的情況,對中間結果定標。這種方固定定標。假定最壞的情況,對中間結果定標。這種方法可以防止溢出,同時增加了系統(tǒng)的信噪比。法可以防止溢出,同時增加了系統(tǒng)的信噪比。l動態(tài)定標。可以監(jiān)測中間結果的范圍,只在需要的時候動態(tài)定標??梢员O(jiān)測中間結果的范圍,只在需要的時候?qū)χ虚g結果定標。這種方法可以防止溢出但會增加計算對中間結果定標。這種方法可以防止溢出但會增加計算量。量。3. 溢出的處理方法溢出的處理方法第7章應用程序相關設計7.1.3 常用信號處理常用信號處
9、理 算法中的定標方法算法中的定標方法lFIR濾波器的定標方法濾波器的定標方法u在在FIR濾波器中處理溢出的最好方法是設計時使濾濾波器中處理溢出的最好方法是設計時使濾波器的增益小于波器的增益小于1,這樣就不需要對輸入信號定標。,這樣就不需要對輸入信號定標。這種方法和累加器的保護位結合起來,可以有效地這種方法和累加器的保護位結合起來,可以有效地防止溢出。防止溢出。u由于對信號處理的負面影響,在由于對信號處理的負面影響,在FIR濾波器中不使濾波器中不使用固定定標和輸入定標。如果不考慮計算量,在用固定定標和輸入定標。如果不考慮計算量,在FIR濾波器中可以使用動態(tài)定標。對一些類型的音濾波器中可以使用動態(tài)
10、定標。對一些類型的音頻信號,飽和處理也是一種常用的方法。頻信號,飽和處理也是一種常用的方法。lIIR濾波器的定標方法濾波器的定標方法uIIR濾波器的定點實現(xiàn)推薦使用多個二階基本節(jié)級濾波器的定點實現(xiàn)推薦使用多個二階基本節(jié)級聯(lián)組成,這樣可以減小高階濾波器頻率響應靈敏度。聯(lián)組成,這樣可以減小高階濾波器頻率響應靈敏度。由于濾波器系數(shù)的量化引入誤差,因此避免溢出對由于濾波器系數(shù)的量化引入誤差,因此避免溢出對IIR濾波器非常重要。濾波器非常重要。u可以通過把中間結果保存在處理器累加器來避免節(jié)可以通過把中間結果保存在處理器累加器來避免節(jié)間數(shù)據(jù)溢出。為防止在第間數(shù)據(jù)溢出。為防止在第k階內(nèi)部發(fā)生數(shù)據(jù)溢出,階內(nèi)部
11、發(fā)生數(shù)據(jù)溢出,需要用增益系數(shù)對濾波器的單位脈沖響應(前饋通需要用增益系數(shù)對濾波器的單位脈沖響應(前饋通道)定標。道)定標。u動態(tài)標定方法。在每個階段濾波器內(nèi)部狀態(tài)都被減動態(tài)標定方法。在每個階段濾波器內(nèi)部狀態(tài)都被減半,以提高指令周期換取為代價提高了結果的精度。半,以提高指令周期換取為代價提高了結果的精度。knGabs(f(n)2 1/2knG(abs(f(n) )l FFT的定標方法的定標方法u在FFT操作里,每次蝶形運算后數(shù)據(jù)平均增加一位。輸入定標需要移位 (FFT長度為N),這會導致在計算FFT之前就衰減 6 dB。u在固定定標中,每級蝶形運算輸出除以2,這是最常用的FFT定標方法,因為它簡
12、單而且有比較好的信噪比。但是,對于大的FFT,這種定標可能會使信息丟失。u另一種方法是動態(tài)定標,即在輸出溢出時再除以2。在這種情況下,會在這個過程中指定一個變量,每定標一次變量的值加1,計算結束后根據(jù)變量的值把結果乘以一個系數(shù)。動態(tài)定標的信噪比最好,但會增加FFT循環(huán)次數(shù)。N2logN2log第7章應用程序相關設計7.2 基礎算術運算基礎算術運算n加減運算加減運算n乘法運算乘法運算n除法運算除法運算n小數(shù)乘法小數(shù)乘法第7章應用程序相關設計7.2.1 加減運算加減運算l在數(shù)字信號處理中,加減運算是常見的算術運算。在數(shù)字信號處理中,加減運算是常見的算術運算。一般使用一般使用16位或位或32位加減運
13、算,數(shù)值分析、浮點位加減運算,數(shù)值分析、浮點運算和其它操作可能需要運算和其它操作可能需要32位以上的運算。位以上的運算。lC55x有直接完成有直接完成16位或位或32位加減運算的指令,位加減運算的指令,但沒有能直接完成多字加減運算的指令。要進行但沒有能直接完成多字加減運算的指令。要進行多字加減運算,需要通過編程方法實現(xiàn)。多字加減運算,需要通過編程方法實現(xiàn)。l 以下指令可在單周期內(nèi)完成以下指令可在單周期內(nèi)完成32位加法運算:位加法運算:MOV40 dbl(Lmem),ACxADD dbl(Lmem),ACxl 64位的高位的高32位加法要考慮低位加法要考慮低32位加法產(chǎn)生的進位,位加法產(chǎn)生的進位
14、,使用以下指令:使用以下指令:ADD uns(Smem), CARRY, ACxl 以下指令可在單周期內(nèi)完成以下指令可在單周期內(nèi)完成32位減法運算:位減法運算:MOV40 dbl(Lmem),ACxSUB dbl(Lmem),ACxl 64位的高位的高32位減法要考慮低位減法要考慮低32位減法產(chǎn)生的借位,位減法產(chǎn)生的借位,使用以下指令:使用以下指令: SUB uns(Smem),BORROW,ACx 例例7-1,64位加法運算。文件名為:位加法運算。文件名為:add64.asm。.mmregs.model call=c55_std.model mem=large;*; 64位加法 指針分配;
15、X3 X2 X1 X0 AR1 -X3 (偶地址); + Y3 Y2 Y1 Y0 X2; - X1; W3 W2 W1 W0 X0; AR2 - Y3 (偶地址); Y2; Y1; Y0; AR3 - W3 (偶地址); W2; W1; W0;*.sect.text.align 4.globalstart.symstart,start, 36, 2, 0start:MOV #0100h,AR1 MOV #0104h,AR2 MOV #0108h,AR3L1: MOV40 dbl(*AR1(#2), AC0 ; AC0 = X1 X0 ADD dbl(*AR2(#2), AC0 ; AC0 =
16、X1 X0 + Y1 Y0 MOV AC0,dbl(*AR3(#2) ; 保存W1 W0. MOV40 dbl(*AR1), AC0 ; AC0 = X3 X2 ADD uns(*AR2(#1),CARRY,AC0 ; AC0 = X3 X2 + 00 Y2 + CARRY ADD *AR2 X3 (偶地址); Y3 Y2 Y1 Y0 X2; - X1; W3 W2 W1 W0 X0; AR2 - Y3 (偶地址); Y2; Y1; Y0; AR3 - W3 (偶地址); W2; W1; W0;*.sect.text.align 4.globalstart.symstart,start,36,
17、2,0start:MOV #0100h,AR1 MOV #0104h,AR2 MOV #0108h,AR3L1: MOV40 dbl(*AR1(#2),AC0 ;AC0=X1X0 SUB dbl(*AR2(#2),AC0 ;AC0=X1X0-Y1Y0 MOV AC0,dbl(*AR3(#2) ;保存W1W0. MOV40 dbl(*AR1),AC0 ;AC0=X3X2 SUB uns(*AR2(#1),BORROW,AC0;AC0=X3X2-00Y2-BORROW SUB *AR2 X1; Y1 Y0 32位操作數(shù) X0; W3 W2 W1 W0 64位結果 AR1 - Y1; Y0; 入口條
18、件: AR2 - W0; SXMD = 1 (允許符號擴展) W1; SATD = 0 (不做飽和處理) W2; FRCT = 0 (關小數(shù)模式) W3; ;限制條件:延遲鏈和輸入序列必須指定為長字類型。;*.sect.text.align 4.global start.symstart,start,36,2,0start:MOV #0100h,AR0 MOV #0102h,AR1 MOV #0104h,AR2 BSET SXMD BCLR SATD BCLR FRCTL1: AMAR *AR0+ ;AR0指向X0 |AMAR *AR1+ ;AR1指向Y0MPYM uns(*AR0-),uns
19、(*AR1),AC0 ;ACO=X0*Y0MOV AC0,*AR2+ ;保存W0MACM *AR0+,uns(*AR1-),AC0#16,AC0 ;AC0=X0*Y016+X1*Y0MACM uns(*AR0-),*AR1,AC0 ;AC0=X0*Y016+X1*Y0+X0*Y1MOV AC0,*AR2+ ;保存W1MACM *AR0,*AR1,AC0#16,AC0 ;AC0=AC016+X1*Y1MOV AC0,*AR2+ ;保存W2MOV HI(AC0),*AR2 ;保存W3 B L1第7章應用程序相關設計7.2.3 除法運算除法運算lC55x沒有提供硬件除法器,也沒有提供專門的除法指令,
20、沒有提供硬件除法器,也沒有提供專門的除法指令,要實現(xiàn)除法運算需借助于條件減法指令要實現(xiàn)除法運算需借助于條件減法指令SUBC和重復指令和重復指令RPT。l根據(jù)被除數(shù)絕對值與除數(shù)絕對值的大小關系,除法的實根據(jù)被除數(shù)絕對值與除數(shù)絕對值的大小關系,除法的實現(xiàn)過程略有不同:現(xiàn)過程略有不同:u當當|被除數(shù)被除數(shù)|被除數(shù); AR1-除數(shù); AR2-商; AR3-余數(shù); 注:; 無符號除法,被除數(shù)、除數(shù)均為16位; 關閉符號擴展,被除數(shù)、除數(shù)均為正數(shù); 運算完成后AC0(15-0)為商,AC0(31-16)為余數(shù);* .sect.text.align 4.global start.symstart,start
21、,36,2,0start:MOV #0100h,AR0 MOV #0101h,AR1 MOV #0102h,AR2 MOV #0103h,AR3L1:BCLR SXMD ; 清零SXMD (關閉符號擴展)MOV *AR0,AC0 ; 把被除數(shù)放入AC0RPT #(16-1) ; 執(zhí)行subc 16次SUBC *AR1,AC0,AC0 ; AR1指向除數(shù)MOV AC0,*AR2 ; 保存商MOV HI(AC0),*AR3 ; 保存余數(shù) B L1例例7-5,無符號,無符號32位除位除16位整數(shù)除法。位整數(shù)除法。文件名為:文件名為:udiv32o16.asm。.mmregs.model call=c
22、55_std.model mem=large;*; 指針分配; AR0-被除數(shù)高位;被除數(shù)低位; AR1-除數(shù); AR2-商高位; 商低位; AR3-余數(shù);注:;無符號除法,被除數(shù)為32位,除數(shù)為16位;關閉符號擴展,被除數(shù)、除數(shù)均為正數(shù);第一次除法之前,把被除數(shù)高位存入AC0;第一次除法之后,把商的高位存入AC0(15-0);第二次除法之前,把被除數(shù)低位存入AC0; 第二次除法之后,AC0(15-0)為商的低位,AC0(31-16)為余數(shù);*.sect.text.align 4.globalstart.symstart,start,36,2,0start:MOV #0100h,AR0 MOV
23、 #0102h,AR1 MOV #0104h,AR2 MOV #0106h,AR3L1:BCLR SXMD ; 清零SXMD (關閉符號擴展)MOV *AR0+,AC0 ; 把被除數(shù)高位存入AC0 | RPT #(15-1) ; 執(zhí)行subc 15次SUBC *AR1,AC0,AC0; AR1指向除數(shù)SUBC *AR1,AC0,AC0 ; 執(zhí)行subc最后一次 | MOV #8,AR4 ; 把AC0_L 存儲地址裝入AR4MOV AC0,*AR2+ ; 保存商的高位MOV *AR0+,*AR4 ; 把被除數(shù)低位裝入AC0_LRPT #(16-1) ; 執(zhí)行subc 16次SUBC *AR1,A
24、C0,AC0MOV AC0,*AR2+ ; 保存商的低位MOV HI(AC0),*AR3 ; 保存余數(shù)BSET SXMD ; 置位SXMD (打開符號擴展) B L1例例7-6,帶符號,帶符號16位除位除16位整數(shù)除法。位整數(shù)除法。文件名為:文件名為:sdiv16o16.asm。.mmregs.model call=c55_std.model mem=large;*; 指針分配; AR0-被除數(shù); AR1-除數(shù);AR2-商;AR3-余數(shù); 注:; 帶符號除法,被除數(shù)為16位,除數(shù)為16位;打開符號擴展,被除數(shù)、除數(shù)可為負數(shù);除法運算之前,商的符號存入AC0;除法運算之后,商存入AC1(15-0
25、),余數(shù)存入AC1(31-16);*.sect.text.align 4.globalstart.symstart,start,36,2,0start:MOV #0100h,AR0 MOV #0101h,AR1 MOV #0102h,AR2 MOV #0103h,AR3L1: BSET SXMD ; 置位SXMD (打開符號擴展)MPYM *AR0,*AR1,AC0 ; 計算期望得到的商的符號MOV *AR1,AC1 ; 把除數(shù)存入AC1ABS AC1,AC1 ; 求絕對值,|除數(shù)|MOV AC1,*AR2 ; 暫時保存 |除數(shù)|MOV *AR0,AC1 ; 把被除數(shù)存入 AC1ABS AC1
26、,AC1 ; 求絕對值,|被除數(shù)|RPT #(16-1); 執(zhí)行subc 16次SUBC *AR2,AC1,AC1 ;AR2 - |除數(shù)|MOV HI(AC1),*AR3 ; 保存余數(shù)MOV AC1,*AR2 ; 保存商SFTS AC1,#16 ; 對商移位: 把符號位放在最高位NEG AC1,AC1 ; 對商求反XCCPART label,AC0被除數(shù)高半部分(NumH)(偶地址);被除數(shù)高半部分(NumL); AR1-除數(shù)(Den);AR2-商的高半部分(QuotH)(偶地址);商的低半部分(QuotL);AR3-余數(shù)(Rem); 注:; 帶符號除法,被除數(shù)為32位,除數(shù)為16位;打開符號
27、擴展,被除數(shù)、除數(shù)可為負數(shù);除法運算之前,期望的商的符號存入AC0;第一次除法運算之前,把被除數(shù)的高半部分存入AC1;第一次除法運算之后,把商的高半部分存入AC1(15-0);第二次除法運算之前,把被除數(shù)的低半部分存入AC1;第二次除法運算之后,把商的低半部分存入AC1(15-0),余數(shù)存入AC1(31-16);*.sect.text.align 4.global start.symstart,start,36,2,0start:MOV #0100h,AR0 MOV #0102h,AR1 MOV #0104h,AR2 MOV #0106h,AR3 MOV #0108h,AR4L1:BSET S
28、XMD ; 置位SXMD (打開符號擴展)MPYM *AR0,*AR1,AC0 ; 除法結果的符號位( NumH x Den )MOV *AR1,AC1; AC1 = DenABS AC1,AC1 ; AC1 = abs(Den)MOV AC1,*AR3 ; Rem = abs(Den) MOV40 dbl(*AR0),AC1 ; AC1 = NumH NumLABS AC1,AC1 ; AC1 = abs(Num)MOV AC1,dbl(*AR2) ; QuotH = abs(NumH) ; QuotL = abs(NumL) MOV *AR2,AC1 ; AC1 = QuotHRPT #(
29、15-1) ; 執(zhí)行subc 15次SUBC *AR3,AC1,AC1SUBC *AR3,AC1,AC1 ; 最后一次執(zhí)行subc| MOV #11,AR4 ; 把AC1_L存儲地址裝入AR4MOV AC1,*AR2+ ; 保存 QuotHMOV *AR2,*AR4 ; AC1_L = QuotHRPT #(16-1) ; 執(zhí)行subc 16次SUBC *AR3,AC1,AC1MOV AC1,*AR2- ; 保存 QuotLMOV HI(AC1),*AR3 ; 保存 RemBCC skip,AC0= #0 ; 如果實際結果應該為正數(shù),跳到skip.MOV40 dbl(*AR2),AC1 ; 否
30、則,對商取反.NEG AC1,AC1MOV AC1,dbl(*AR2)skip: B L1第7章應用程序相關設計7.2.4 小數(shù)乘法小數(shù)乘法l在定點在定點DSP的某些應用中,整數(shù)運算很難滿足要求。這的某些應用中,整數(shù)運算很難滿足要求。這是因為它自身存在缺陷:是因為它自身存在缺陷:u兩個兩個16位整數(shù)相乘,乘積總是位整數(shù)相乘,乘積總是“向左增長向左增長”(即小數(shù)(即小數(shù)點左側(cè)的位數(shù)增加),這意味著多次相乘后,乘積將點左側(cè)的位數(shù)增加),這意味著多次相乘后,乘積將很快超出定點器件的數(shù)據(jù)范圍。很快超出定點器件的數(shù)據(jù)范圍。u保存保存32位乘積到存儲器,要占用位乘積到存儲器,要占用2個個CPU周期和周期和
31、2個個字的存儲器空間。字的存儲器空間。u由于乘法器都是由于乘法器都是16位相乘,因此將位相乘,因此將32位乘積再作為位乘積再作為乘法器的輸入時就顯得較繁瑣,不能勝任遞歸運算。乘法器的輸入時就顯得較繁瑣,不能勝任遞歸運算。l為了克服這些缺陷,在實際應用中更多采用的是小數(shù)為了克服這些缺陷,在實際應用中更多采用的是小數(shù)運算。小數(shù)運算具有如下優(yōu)點:運算。小數(shù)運算具有如下優(yōu)點: u乘積總是乘積總是“向右增長向右增長”。這就意味著超出定點器件。這就意味著超出定點器件數(shù)據(jù)范圍的將是不太感興趣的部分。數(shù)據(jù)范圍的將是不太感興趣的部分。u既可以存儲既可以存儲32位乘積,也可以近存儲高位乘積,也可以近存儲高16位乘
32、積,位乘積,這就允許用較少的資源保存結果。這就允許用較少的資源保存結果。u可以用于遞歸運算??梢杂糜谶f歸運算。 例例7-8,兩個,兩個Q31格式有符號小數(shù)相乘,得到一格式有符號小數(shù)相乘,得到一個個Q31格式結果。文件名為:格式結果。文件名為:mpyQ31.asm。 需要注意的是:需要注意的是:u兩個帶符號小數(shù)相乘,所得乘積帶有兩個帶符號小數(shù)相乘,所得乘積帶有2個符號位。個符號位。u為了解決冗余符號位的問題,需要在程序中設定狀為了解決冗余符號位的問題,需要在程序中設定狀態(tài)寄存器態(tài)寄存器ST1中的中的FRCT(小數(shù)方式)為(小數(shù)方式)為1,這樣當,這樣當乘法器將結果傳送至累加器時就會自動左移乘法器
33、將結果傳送至累加器時就會自動左移1位。位。.mmregs.model call=c55_std.model mem=large;*;操作數(shù)取自數(shù)據(jù)存儲器,運算結果送回數(shù)據(jù)存儲器。; 數(shù)據(jù)存儲: 指針分配:; X1 X0 Q31操作數(shù) AR0 - X1; Y1 Y0 Q31操作數(shù) X0; W1 W0 Q31結果 AR1 - Y1; Y0; 入口條件: AR2 - W0(偶地址); SXMD = 1 (允許符號擴展) W1; SATD = 0 (不做飽和處理) ; FRCT = 1 (運算結果左移一位) ; ;限制條件:W1被指定為偶地址;*.sect.text.align 4.globalsta
34、rt.symstart,start,36,2,0start:MOV #0100h,AR0 MOV #0102h,AR1 MOV #0104h,AR2 BSET SXMD BCLR SATD BSET FRCTL1: AMAR *AR0+ ; AR0指向X0 MPYM uns(*AR0-),*AR1+,AC0 ; AC0=X0*Y1 MACM *AR0,uns(*AR1-),AC0 ; AC0=X0*Y1+X1*Y0 MACM *AR0,*AR1,AC0#16,AC0; AC0=AC016+X1*Y1 MOV AC0,dbl(*AR2) ; 保存W1W0 B L1第7章應用程序相關設計7.3 F
35、IR濾波器濾波器l數(shù)字濾波器是數(shù)字濾波器是DSP的基本應用,有的基本應用,有2種基本類型:種基本類型:u有限沖激響應濾波器有限沖激響應濾波器FIRu無限沖激濾波器無限沖激濾波器IIRl一般來說,如果需要線性相位則選擇用一般來說,如果需要線性相位則選擇用FIR濾波器,濾波器,對于相位要求不敏感的場合可以選用對于相位要求不敏感的場合可以選用IIR濾波器。濾波器。l本節(jié)主要討論本節(jié)主要討論FIR濾波器的濾波器的DSP實現(xiàn)方法,有關實現(xiàn)方法,有關IIR濾波器的實現(xiàn)將在下一節(jié)中介紹。濾波器的實現(xiàn)將在下一節(jié)中介紹。第7章應用程序相關設計7.3.1 FIR濾波器的基本結構濾波器的基本結構l一個一個FIR濾波
36、器的輸出序列和輸入序列之間的關系,濾波器的輸出序列和輸入序列之間的關系,滿足差分方程:滿足差分方程:l傳遞函數(shù)為傳遞函數(shù)為 10Niiy nb x ni 10NiiiY zH zb zX zl FIR濾波器的結構:l FIR濾波器的單位沖激響應是一個有限長序列。若為實數(shù),且滿足偶對稱或奇對稱的條件,則FIR濾波器具有線性相位特性。 偶對稱線性相位FIR濾波器的差分方程為:)1()()(12/0iNnxinxbnyNii第7章應用程序相關設計7.3.2 FIR濾波器的濾波器的C語言編程實現(xiàn)語言編程實現(xiàn)例例7-9,直接型,直接型FIR濾波器的濾波器的C語言編程實現(xiàn)。語言編程實現(xiàn)。/* fir.c
37、該程序用于實現(xiàn)FIR濾波器* L濾波器的階數(shù)* bi濾波器的系數(shù),i=0,1,L-1* xi輸入信號向量,i=0,1,L-1;x0對應于當前值,x1對應于上一采樣值* x_in 輸入信號的當前值* y_out 輸出信號的當前值*/float fir(float x_in, float *x,float *b,int L)float y_out;int i;/* - */* 把上一個采樣時間的輸入信號向量延遲一個單元把上一個采樣時間的輸入信號向量延遲一個單元,得到當前得到當前采樣時間的輸入信號向量采樣時間的輸入信號向量 */for(i=L-1;i0;i-) xi = xi-1;x0=x_in;/
38、* - */*完成完成FIR濾波濾波 */y_out = 0.0;for(i=0;iL;i+) y_out = y_out + bi*xi;return y_out;u 直接型直接型FIRFIR濾波器的實現(xiàn)涉及到兩個基本操作,一個是濾波器的實現(xiàn)涉及到兩個基本操作,一個是輸入信號向量與濾波器系數(shù)向量的內(nèi)積計算,另一個是輸入信號向量與濾波器系數(shù)向量的內(nèi)積計算,另一個是輸入信號向量的更新處理。輸入信號向量的更新處理。u 在每個采樣周期信號緩沖器都要更新一次,最老的在每個采樣周期信號緩沖器都要更新一次,最老的采樣被拋棄,而其他的信號則向緩沖器的右方移動一采樣被拋棄,而其他的信號則向緩沖器的右方移動一個
39、單元,一個新的采樣被插入存儲單元,并被標記。個單元,一個新的采樣被插入存儲單元,并被標記。 如果這個操作過程不用如果這個操作過程不用DSPDSP硬件完成,那么它需要硬件完成,那么它需要很多的時間。很多的時間。第7章應用程序相關設計7.3.3 FIR濾波器的匯編語言編程實現(xiàn)濾波器的匯編語言編程實現(xiàn)l處理信號緩沖器的最有效方法,是把信號采樣加載到循環(huán)處理信號緩沖器的最有效方法,是把信號采樣加載到循環(huán)緩沖器中。緩沖器中。l在循環(huán)緩沖器中,采取數(shù)據(jù)保持固定、反時針方向移動地在循環(huán)緩沖器中,采取數(shù)據(jù)保持固定、反時針方向移動地址的方式,代替保持緩沖器地址固定且正方向移動數(shù)據(jù)。址的方式,代替保持緩沖器地址固
40、定且正方向移動數(shù)據(jù)。l信號采樣的起點由指針信號采樣的起點由指針x(n) 指定,其它諸采樣則沿著順指定,其它諸采樣則沿著順時針方向,從起點開始依次順序加載。時針方向,從起點開始依次順序加載。圖圖7-4 FIR濾波器的循環(huán)緩沖區(qū)濾波器的循環(huán)緩沖區(qū)(a)信號循環(huán)緩沖區(qū)信號循環(huán)緩沖區(qū) (b)系數(shù)循環(huán)緩沖區(qū)系數(shù)循環(huán)緩沖區(qū)例例7-10,F(xiàn)IR濾波器的濾波器的C55x匯編語言實現(xiàn)。匯編語言實現(xiàn)。(1) 主程序 fir_test.c/* fir_test.c */#includemath.h#define L 64 /* Number of FIR filter coefficients */#define
41、Fs 8000 /* 8000 Hz sampling frequency */#define T 1/Fs #define f1 800 /* 800 Hz frequency */#define f2 1800 /* 1800 Hz frequency */#define f3 3300 /* 3300 Hz frequency */#define PI 3.1415926#define w1 (2*PI*f1*T) /* 2*pi*f1/Fs */#define w2 (2*PI*f2*T) /* 2*pi*f2/Fs */#define w3 (2*PI*f3*T) /* 2*pi*f
42、3/Fs */#define a1 0.333 /* Magnitude for wave 1 */#define a2 0.333 /* Magnitude for wave 2 */#define a3 0.333 /* Magnitude for wave 3 */extern int fir(int *,int *,unsigned int,int );/* Low-pass FIR filter coefficients */int coeffL= -26,-13,14,36,31,-8,-58,-71,-15,83,139,76,-90,-231,-194,50,331,383,7
43、8,-405, -654,-347,403,1024,863,-228,-1577,-1972,-453,2910,6836,9470,9470,6836, 2910,-453,-1972,-1577,-228,863, 1024,403,-347,-654,-405,78,383,331,50,-194,-231,-90,76,139,83,-15,-71, -58,-8,31,36,14,-13,-26;int inL; /* input buffer */int outL; /* Output buffer */main() unsigned int i; float signal; u
44、nsigned int n=0; int index=0; for(i=0;iL;i+) ini=0; outi=0; while(1) signal = a1*cos(float)w1*n); signal += a2*cos(float)w2*n); signal += a3*cos(float)w3*n); n+; inindex = (int)(0 x7fff*signal)+0.5); outindex = fir(in,coeff,L,index); index-; if(index=-1) index=L-1; (2) 匯編語言整數(shù)匯編語言整數(shù)fir濾波器函數(shù):濾波器函數(shù):fir
45、.asm; fir.asm 該程序用于實現(xiàn)FIR濾波器,可被C語言程序調(diào)用; int fir(int *,int *, unsigned int,int); 參數(shù)0: AR0 輸入信號緩沖區(qū)指針; 參數(shù)1: AR1 - FIR濾波器系數(shù)向量指針; 參數(shù)2: T0 - FIR 濾波器的階數(shù)L; 參數(shù)3: T1 - 輸入信號當前值在循環(huán)緩沖區(qū)的序數(shù); 返回值: T0 - 輸出信號當前值 .def _fir _fir pshm ST1_55 ;現(xiàn)場ST1,ST2和ST3入棧 pshm ST2_55 pshm ST3_55or #0 x340,mmap(ST1_55) ;設置FRCT,SXMD,SAT
46、Dbset SMUL ;置位SMULmov mmap(AR0),BSA01 ;AR0=輸入信號循環(huán)緩沖區(qū)的起始地址mov mmap(AR1),BSA23 ;AR1=濾波器系數(shù)循環(huán)緩沖區(qū)的起始地址mov mmap(T0),BK03 ;設置循環(huán)緩沖區(qū)大小or #0 x5,mmap(ST2_55) ;AR0和AR2為循環(huán)緩沖區(qū)指針mov T1,AR0 ; AR0從index偏移量開始mov #0,AR2 ; AR2從0偏移量開始sub #2,T0 ;T0=L-2 mov T0,CSR ;設置外部循環(huán)次數(shù)為L-1 mpym *AR0+,*AR2+,AC0 ;執(zhí)行第一次運算| rpt CSR ;啟動循環(huán)
47、macm *AR0+,*AR2+,AC0mov hi(AC0),T0 ; 用Q15格式存放結果popm ST3_55 ; 恢復ST1, ST2和 ST3popm ST2_55 popm ST1_55 ret.end第7章應用程序相關設計7.4 IIR濾波器濾波器lIIR濾波器的優(yōu)點:結構簡單,運算量小,可以用濾波器的優(yōu)點:結構簡單,運算量小,可以用較少的階數(shù)獲得很高的選擇性。較少的階數(shù)獲得很高的選擇性。lIIR濾波器的缺點:具有相位特性差,存在穩(wěn)定性濾波器的缺點:具有相位特性差,存在穩(wěn)定性問題。問題。l高階高階IIR濾波器經(jīng)常以串聯(lián)或并聯(lián)二階環(huán)節(jié)的形式濾波器經(jīng)常以串聯(lián)或并聯(lián)二階環(huán)節(jié)的形式予以實
48、現(xiàn)。予以實現(xiàn)。第7章應用程序相關設計7.4.1 二階二階IIR濾波器的結構濾波器的結構l二階二階IIR濾波器,又稱為二階基本節(jié),分為直接型、濾波器,又稱為二階基本節(jié),分為直接型、標準型和變換型。標準型和變換型。l二階二階IIR濾波器傳遞函數(shù)為:濾波器傳遞函數(shù)為: 2211221101zazazbzbbzH圖圖7-5 二階二階IIR濾波器的直接型濾波器的直接型的實現(xiàn)的實現(xiàn)圖圖7-6 的信號流圖的信號流圖圖圖7-7 二階二階IIR濾波器的直接型濾波器的直接型的實現(xiàn)的實現(xiàn)由于直接型由于直接型對于給定的傳遞函數(shù)具有最小可能的延遲對于給定的傳遞函數(shù)具有最小可能的延遲數(shù)、加法器數(shù)和乘法器數(shù),所以被稱為標準
49、型。數(shù)、加法器數(shù)和乘法器數(shù),所以被稱為標準型。第7章應用程序相關設計7.4.2 高階高階IIR濾波器的結構濾波器的結構l高階高階IIR濾波器的差分方程和系統(tǒng)函數(shù)分別為:濾波器的差分方程和系統(tǒng)函數(shù)分別為:MmmLllmnyalnxbny110)()()(MmmmLlllzazbzH1101)(圖圖7-8 高階高階IIR濾波器的直接型濾波器的直接型實現(xiàn)(實現(xiàn)(L=M+1)圖圖7-9 7-9 高階高階IIRIIR濾波器的串聯(lián)型結構濾波器的串聯(lián)型結構圖圖7-10 第第k個二階節(jié)個二階節(jié))(zHk)2() 1()()(21nwanwanxnwkkkkkk)2() 1()()(21nwbnwbnwnykk
50、kkkk)()(1nynxkkKk,.,2 , 1)()(01nxbnx)()(nynyk對于 ,有其中,注意:第7章應用程序相關設計7.4.3 IIR濾波器的濾波器的C語言實現(xiàn)語言實現(xiàn)例例7-11,采用二維數(shù)組編寫的采用二維數(shù)組編寫的IIR濾波器濾波器C語言程序。語言程序。temp=xin; /*xin為IIR濾波器的輸入 */for(k=0;k w1i AR7 - a1k; w1j a2k; : b2k; w2i b0k; w2j b1k; : : ; 標定:Q14 格式; .global _iir .sect iir_code _iir pshm ST1_55 ; 保存ST1,ST2,S
51、T3 pshm ST2_55 pshm ST3_55 psh T3 ; 保存T3 pshboth XAR7 ; 保存AR7 or #0 x340,mmap(ST1_55) ;設置FRCT,SXMD,SATD bset SMUL ;置位SMUL sub #1,T0 ; 樣本數(shù) - 1 mov T0,BRC0 ; 設置外循環(huán)計數(shù)器 sub #1,T1,T0; 二階節(jié)個數(shù) - 1 mov T0,BRC1; 設置內(nèi)循環(huán)計數(shù)器 mov T1,T0 ;設置循環(huán)緩沖區(qū)大小 sfts T0,#1 mov mmap(T0),BK03;BK03=2*二階節(jié)個數(shù) sfts T0,#1 add T1,T0 mov m
52、map(T0),BK47;BK47=5*二階節(jié)個數(shù) mov mmap(AR3),BSA23 ;初始化延遲線基地址 mov mmap(AR2),BSA67 ;初始化系數(shù)基地址 amov #0,AR3 ;初始化延遲緩沖區(qū)入口 amov #0,AR7 ;初始化系數(shù)入口 or #0 x88,mmap(ST2_55) mov #1,T0 ;用于左移| rptblocal sample_loop-1 ;啟動IIR濾波器環(huán) mov *AR0+ #14,AC0 ;AC0=x(n)/2(即Q14)| rptblocal filter_loop-1 masm *(AR3+T1),*AR7+,AC0;AC0-=a1
53、k*wk(n-1) masm T3=*AR3,*AR7+,AC0;AC0-=a2k*wk(n-2) mov rnd(hi(AC0T0),*AR3 ;wk(n-2)=wk(n) | mpym *AR7+,T3,AC0 ;AC0+=b2k*wk(n-2) macm *(AR3+T1),*AR7+,AC0;AC0+=b0k*wk(n-1) macm *AR3+,*AR7+,AC0 ;AC0+=b1k*wk(n) filter_loop mov rnd(hi(AC0#2),*AR1+ ;按Q15格式存放結果sample_loop popboth XAR7 ;恢復AR7 pop T3 ;恢復T3 pop
54、m ST3_55 ;恢復ST1,ST2,ST3 popm ST2_55 popm ST1_55 ret .end */圖圖7-11 IIR濾波器系數(shù)和信號緩沖區(qū)配置濾波器系數(shù)和信號緩沖區(qū)配置第7章應用程序相關設計7.5 快速傅里葉變換快速傅里葉變換FFTnFFT算法原理算法原理n庫利一圖基算法庫利一圖基算法nFFT算法的實現(xiàn)算法的實現(xiàn)第7章應用程序相關設計7.5.1 FFT算法原理算法原理l快速傅里葉變換(快速傅里葉變換(FFT)是離散傅里葉變換()是離散傅里葉變換(DFT)的一種快速算法。通過的一種快速算法。通過FFT算法,算法,DFT的計算量大大的計算量大大減少,運算時間縮短減少,運算時間
55、縮短12個數(shù)量級。個數(shù)量級。lDFT的變換公式為的變換公式為 其中其中 為旋轉(zhuǎn)因子。為旋轉(zhuǎn)因子。10( )( )NnkNnx kx n W10)(1)(NknkNWkxNnx0,1,1kN0,1,1nNNjWN2expl FFT之所以減少運算量,主要是利用了旋轉(zhuǎn)因子的以之所以減少運算量,主要是利用了旋轉(zhuǎn)因子的以下下3點特性:點特性:u對稱性對稱性u周期性周期性u可約性可約性*()nknkNNWW()()()nkn N kn k NNNNWWW/,nkmnknknk mNmNNN mWWWW利用這些特性可以使利用這些特性可以使DFT運算中有些項進行合并,將長序列運算中有些項進行合并,將長序列的的
56、DFT分解為短序列的分解為短序列的DFT。DFT從算法上分為按時間抽選(從算法上分為按時間抽選(DIT)和按頻率抽選)和按頻率抽選(DIF)。)。基基2的的DIT又被稱為庫利一圖基算法。基又被稱為庫利一圖基算法?;?的的DIF又稱為桑德又稱為桑德圖基算法。圖基算法。 第7章應用程序相關設計7.5.2 庫利一圖基算法庫利一圖基算法n信號流圖信號流圖n比特反轉(zhuǎn)比特反轉(zhuǎn)n蝶形運算蝶形運算1. 信號流圖信號流圖2比特反轉(zhuǎn)比特反轉(zhuǎn)l圖圖7-11的輸入信號的順序是按照比特反轉(zhuǎn)排列的,輸出的輸入信號的順序是按照比特反轉(zhuǎn)排列的,輸出序列是按照自然順序的。比特反轉(zhuǎn)就是將序列下標用二序列是按照自然順序的。比特反轉(zhuǎn)
57、就是將序列下標用二進制表示,然后將二進制數(shù)按照相反的方向排列,即得進制表示,然后將二進制數(shù)按照相反的方向排列,即得到這個序列的實際位置。到這個序列的實際位置。l按照自然排序的時域信號數(shù)據(jù)是按照自然排序的時域信號數(shù)據(jù)是x(0)、x(1)、x(2)、x(3)、x(4)、x(5)、x(6)、x(7),其序號寫成二進制數(shù),其序號寫成二進制數(shù)分別為分別為000b、001b、010b、011b、100b、101b、110b、111b,將這些二進制數(shù)前后倒轉(zhuǎn),即得到進行,將這些二進制數(shù)前后倒轉(zhuǎn),即得到進行FFT前數(shù)據(jù)所對應的實際二進制數(shù)地址:前數(shù)據(jù)所對應的實際二進制數(shù)地址:000b、100b、010b、11
58、0b、001b、101b、011b、111b,對應的,對應的十進制數(shù)是:十進制數(shù)是:0、4、2、6、1、5、3、7。序號為。序號為3的存的存儲單元,按照自然排序應該存放儲單元,按照自然排序應該存放x(3),但由于,但由于FFT計算計算規(guī)則的要求,現(xiàn)在應該存放規(guī)則的要求,現(xiàn)在應該存放x(6)。 3.蝶形運算蝶形運算l 基基2DIT FFT算法,共由算法,共由M級構成,每級計算由級構成,每級計算由N/2個個蝶形運算構成。蝶形運算構成。l 基本運算單元為以下所謂蝶形運算:基本運算單元為以下所謂蝶形運算:l 蝶形運算中上下兩個節(jié)點蝶形運算中上下兩個節(jié)點p、q的間距為:的間距為: )()()(1qXWp
59、XpXmrNmm)()()(1qXWpXqXmrNmm1,.,1 , 0Mmmpq2第7章應用程序相關設計7.5.3 FFT算法的實現(xiàn)算法的實現(xiàn)l為了敘述簡單,本書給出采用為了敘述簡單,本書給出采用C語言編寫的語言編寫的FFT程序,程序,相應的匯編程序請讀者自行完成。相應的匯編程序請讀者自行完成。(1)主程序:fft_test.c#include #include fcomplex.h /*包含浮點復數(shù)結構體定義頭文件fcomplex.h*/extern void bit_rev(complex *,unsigned int);/*位反轉(zhuǎn)函數(shù)聲明*/extern void fft(complex *,unsigned int,complex *,unsigned int); /* fft函數(shù)聲明 */例例7-13,基,基2DIT FFT算法的算法的C語言實現(xiàn)。語言實現(xiàn)。extern void generator(int *,unsigned int)#define N 128 /* FFT的數(shù)據(jù)個數(shù) */#define M 7 /* M=log2(N) */#define PI 3.1415926 complex XN; /* 說明輸入信號數(shù)組,為復數(shù) */complex WM; /* 說明
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年三方合作合同協(xié)議書:金融科技項目合作框架協(xié)議3篇
- 2024年度河砂開采權有償使用合同2篇
- 2024年度高品質(zhì)碎石供應商買賣合同版B版
- 2024年農(nóng)業(yè)機械融資租賃合同2篇
- 2024年度片石石材加工與環(huán)保安全合同3篇
- 2024年度油田鉆探與打井降水一體化施工服務合同3篇
- 2024年度金融服務合同:銀行為中小企業(yè)提供融資支持3篇
- 2024年度商鋪委托出租合同包括商業(yè)品牌入駐及推廣3篇
- 2024年某科技公司與某運營商關于5G網(wǎng)絡建設的合同
- 黃沙材料采購合同范例
- 藥品養(yǎng)護匯總分析報表
- 中醫(yī)藥申報書
- 不穩(wěn)定型心絞痛臨床路徑表單
- 化肥的發(fā)展史
- 水運工程施工組織設計
- 斑蝥的藥用價值與養(yǎng)殖
- 三維激光掃描技術與應用實例(課堂PPT)
- 消防水池施工方案
- 小學美術《多變的紙拉花》課件ppt課件
- 《數(shù)據(jù)結構》課程標準
- 譯林版五年級上冊英語五上《朗文閱讀》U1-2練習題
評論
0/150
提交評論