第7章應(yīng)用程序相關(guān)設(shè)計(jì)_第1頁
第7章應(yīng)用程序相關(guān)設(shè)計(jì)_第2頁
第7章應(yīng)用程序相關(guān)設(shè)計(jì)_第3頁
第7章應(yīng)用程序相關(guān)設(shè)計(jì)_第4頁
第7章應(yīng)用程序相關(guān)設(shè)計(jì)_第5頁
已閱讀5頁,還剩80頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第7章應(yīng)用程序相關(guān)設(shè)計(jì)第第7章章 應(yīng)用程序設(shè)計(jì)應(yīng)用程序設(shè)計(jì)第7章應(yīng)用程序相關(guān)設(shè)計(jì)本章內(nèi)容提要:本章內(nèi)容提要:n定標(biāo)與溢出處理定標(biāo)與溢出處理n基礎(chǔ)算術(shù)運(yùn)算基礎(chǔ)算術(shù)運(yùn)算nFIR濾波器濾波器nIIR濾波器濾波器n快速傅里葉變換快速傅里葉變換(FFT)第7章應(yīng)用程序相關(guān)設(shè)計(jì)7.1定標(biāo)與溢出處理定標(biāo)與溢出處理n數(shù)的定標(biāo)數(shù)的定標(biāo)n溢出的處理方法溢出的處理方法n常用信號(hào)處理算法中的定標(biāo)方法常用信號(hào)處理算法中的定標(biāo)方法第7章應(yīng)用程序相關(guān)設(shè)計(jì)7.1.1 數(shù)的定標(biāo)數(shù)的定標(biāo)l小數(shù)定標(biāo)的概念小數(shù)定標(biāo)的概念u設(shè)定一個(gè)設(shè)定一個(gè)16位數(shù)的小數(shù)點(diǎn)處于該數(shù)中的哪一位位數(shù)的小數(shù)點(diǎn)處于該數(shù)中的哪一位u可以表示不同大小和不同精度的小

2、數(shù)可以表示不同大小和不同精度的小數(shù)lQ表示法表示法u表表7-1列出了一個(gè)列出了一個(gè)16位數(shù)的位數(shù)的16種種Q表示及它們所能表示及它們所能表示的十進(jìn)制數(shù)值范圍表示的十進(jìn)制數(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對(duì)定點(diǎn)數(shù)而言,數(shù)值范圍與精度是一對(duì)矛盾。一個(gè)變量要對(duì)定點(diǎn)數(shù)而言,數(shù)值范圍與精度是一對(duì)矛盾。一個(gè)變量要想能夠表示比較大的數(shù)值范圍,必須以犧牲精度為代價(jià);想能夠表示比較大的數(shù)值范圍,必須以犧牲精度為代價(jià);而想提高精度,則數(shù)的表示范圍就相應(yīng)地減小。在實(shí)際的而想提高精度,則數(shù)的表示范圍就相應(yīng)地減小。在實(shí)際的定點(diǎn)算法中,應(yīng)該根據(jù)具體問題進(jìn)行折衷處理定點(diǎn)算法中,應(yīng)該根據(jù)具體問題進(jìn)行折衷處理, , 以達(dá)到最以達(dá)到最佳效果。佳效果。l在在C55x中,中,16位整數(shù)采用補(bǔ)碼形式表示。每個(gè)采用位整數(shù)采用補(bǔ)碼形式表示。每個(gè)采用Qi定標(biāo)的定標(biāo)的16位數(shù)用位數(shù)用1個(gè)符

4、號(hào)位、個(gè)符號(hào)位、i個(gè)小數(shù)位和個(gè)小數(shù)位和15-i個(gè)整個(gè)整數(shù)位來表示。數(shù)位來表示。表表7-2 同樣的數(shù)在不同定標(biāo)方式下所表示的具體數(shù)值同樣的數(shù)在不同定標(biāo)方式下所表示的具體數(shù)值l同樣一個(gè)同樣一個(gè)16位數(shù),若小數(shù)點(diǎn)設(shè)定的位置不同,它所表位數(shù),若小數(shù)點(diǎn)設(shè)定的位置不同,它所表示的數(shù)也就不同。示的數(shù)也就不同。第7章應(yīng)用程序相關(guān)設(shè)計(jì)7.1.2 溢出的處理方法溢出的處理方法l如果算術(shù)運(yùn)算結(jié)果超出寄存器所能表示的最大數(shù)就如果算術(shù)運(yùn)算結(jié)果超出寄存器所能表示的最大數(shù)就會(huì)出現(xiàn)溢出會(huì)出現(xiàn)溢出u因?yàn)橐驗(yàn)?6位定點(diǎn)位定點(diǎn)DSP的動(dòng)態(tài)范圍有限,所以在使用的動(dòng)態(tài)范圍有限,所以在使用時(shí)必須注意動(dòng)態(tài)范圍以防溢出時(shí)必須注意動(dòng)態(tài)范圍以防

5、溢出l溢出還與輸入信號(hào)的特性和運(yùn)算法則有關(guān)溢出還與輸入信號(hào)的特性和運(yùn)算法則有關(guān) 1. 溢出溢出 C55x有以下幾種硬件特性可以處理溢出:有以下幾種硬件特性可以處理溢出:l保護(hù)位保護(hù)位 C55x的每個(gè)累加器都有的每個(gè)累加器都有8個(gè)保護(hù)位(個(gè)保護(hù)位(3932位),位),允許連續(xù)允許連續(xù)256次乘加操作而累加器不溢出次乘加操作而累加器不溢出l溢出標(biāo)志位溢出標(biāo)志位 C55x的每個(gè)累加器都有相關(guān)的溢出標(biāo)志位,當(dāng)累加的每個(gè)累加器都有相關(guān)的溢出標(biāo)志位,當(dāng)累加器操作結(jié)果出現(xiàn)溢出時(shí),這個(gè)標(biāo)志位就會(huì)置位器操作結(jié)果出現(xiàn)溢出時(shí),這個(gè)標(biāo)志位就會(huì)置位2. C55x的溢出處理機(jī)制的溢出處理機(jī)制l飽和方式位飽和方式位SATD

6、和和SATAuSATD控制控制D單元的操作,單元的操作,SATA控制控制A單元的操作。單元的操作。u如果如果SATD=1,當(dāng),當(dāng)D單元發(fā)生溢出時(shí),對(duì)單元發(fā)生溢出時(shí),對(duì)D單元的結(jié)單元的結(jié)果進(jìn)行飽和處理。不管飽和方式位的值是什么,當(dāng)果進(jìn)行飽和處理。不管飽和方式位的值是什么,當(dāng)累加器發(fā)生溢出時(shí),相應(yīng)的溢出標(biāo)志位都會(huì)被置位累加器發(fā)生溢出時(shí),相應(yīng)的溢出標(biāo)志位都會(huì)被置位uA單元沒有溢出標(biāo)志位,但如果單元沒有溢出標(biāo)志位,但如果SATA=1,發(fā)生溢出,發(fā)生溢出時(shí),結(jié)果也會(huì)進(jìn)行飽和處理時(shí),結(jié)果也會(huì)進(jìn)行飽和處理 飽和處理是用最近的邊界值代替溢出結(jié)果。飽和處理是用最近的邊界值代替溢出結(jié)果。例如,例如,1616位寄存

7、器的范圍是位寄存器的范圍是8000h8000h(最小負(fù)數(shù))(最小負(fù)數(shù))7FFFh7FFFh(最大正數(shù)),飽和處理就是用(最大正數(shù)),飽和處理就是用7FFFh7FFFh代替比代替比7FFFh7FFFh大的大的結(jié)果;用結(jié)果;用8000h8000h代替比代替比8000h8000h小的結(jié)果。小的結(jié)果。l飽和。飽和是一種處理溢出的方法,但是飽和會(huì)剪掉部飽和。飽和是一種處理溢出的方法,但是飽和會(huì)剪掉部分輸出信號(hào),可能會(huì)引起信號(hào)失真和引起系統(tǒng)非線性。分輸出信號(hào),可能會(huì)引起信號(hào)失真和引起系統(tǒng)非線性。l輸入定標(biāo)。分析所要使用的系統(tǒng),假定最壞的情況,然輸入定標(biāo)。分析所要使用的系統(tǒng),假定最壞的情況,然后對(duì)輸入信號(hào)定

8、標(biāo),以防止溢出。但是這種方法會(huì)極大后對(duì)輸入信號(hào)定標(biāo),以防止溢出。但是這種方法會(huì)極大地降低輸出信號(hào)的精確度。地降低輸出信號(hào)的精確度。l固定定標(biāo)。假定最壞的情況,對(duì)中間結(jié)果定標(biāo)。這種方固定定標(biāo)。假定最壞的情況,對(duì)中間結(jié)果定標(biāo)。這種方法可以防止溢出,同時(shí)增加了系統(tǒng)的信噪比。法可以防止溢出,同時(shí)增加了系統(tǒng)的信噪比。l動(dòng)態(tài)定標(biāo)。可以監(jiān)測(cè)中間結(jié)果的范圍,只在需要的時(shí)候動(dòng)態(tài)定標(biāo)。可以監(jiān)測(cè)中間結(jié)果的范圍,只在需要的時(shí)候?qū)χ虚g結(jié)果定標(biāo)。這種方法可以防止溢出但會(huì)增加計(jì)算對(duì)中間結(jié)果定標(biāo)。這種方法可以防止溢出但會(huì)增加計(jì)算量。量。3. 溢出的處理方法溢出的處理方法第7章應(yīng)用程序相關(guān)設(shè)計(jì)7.1.3 常用信號(hào)處理常用信號(hào)處

9、理 算法中的定標(biāo)方法算法中的定標(biāo)方法lFIR濾波器的定標(biāo)方法濾波器的定標(biāo)方法u在在FIR濾波器中處理溢出的最好方法是設(shè)計(jì)時(shí)使濾濾波器中處理溢出的最好方法是設(shè)計(jì)時(shí)使濾波器的增益小于波器的增益小于1,這樣就不需要對(duì)輸入信號(hào)定標(biāo)。,這樣就不需要對(duì)輸入信號(hào)定標(biāo)。這種方法和累加器的保護(hù)位結(jié)合起來,可以有效地這種方法和累加器的保護(hù)位結(jié)合起來,可以有效地防止溢出。防止溢出。u由于對(duì)信號(hào)處理的負(fù)面影響,在由于對(duì)信號(hào)處理的負(fù)面影響,在FIR濾波器中不使濾波器中不使用固定定標(biāo)和輸入定標(biāo)。如果不考慮計(jì)算量,在用固定定標(biāo)和輸入定標(biāo)。如果不考慮計(jì)算量,在FIR濾波器中可以使用動(dòng)態(tài)定標(biāo)。對(duì)一些類型的音濾波器中可以使用動(dòng)態(tài)

10、定標(biāo)。對(duì)一些類型的音頻信號(hào),飽和處理也是一種常用的方法。頻信號(hào),飽和處理也是一種常用的方法。lIIR濾波器的定標(biāo)方法濾波器的定標(biāo)方法uIIR濾波器的定點(diǎn)實(shí)現(xiàn)推薦使用多個(gè)二階基本節(jié)級(jí)濾波器的定點(diǎn)實(shí)現(xiàn)推薦使用多個(gè)二階基本節(jié)級(jí)聯(lián)組成,這樣可以減小高階濾波器頻率響應(yīng)靈敏度。聯(lián)組成,這樣可以減小高階濾波器頻率響應(yīng)靈敏度。由于濾波器系數(shù)的量化引入誤差,因此避免溢出對(duì)由于濾波器系數(shù)的量化引入誤差,因此避免溢出對(duì)IIR濾波器非常重要。濾波器非常重要。u可以通過把中間結(jié)果保存在處理器累加器來避免節(jié)可以通過把中間結(jié)果保存在處理器累加器來避免節(jié)間數(shù)據(jù)溢出。為防止在第間數(shù)據(jù)溢出。為防止在第k階內(nèi)部發(fā)生數(shù)據(jù)溢出,階內(nèi)部

11、發(fā)生數(shù)據(jù)溢出,需要用增益系數(shù)對(duì)濾波器的單位脈沖響應(yīng)(前饋通需要用增益系數(shù)對(duì)濾波器的單位脈沖響應(yīng)(前饋通道)定標(biāo)。道)定標(biāo)。u動(dòng)態(tài)標(biāo)定方法。在每個(gè)階段濾波器內(nèi)部狀態(tài)都被減動(dòng)態(tài)標(biāo)定方法。在每個(gè)階段濾波器內(nèi)部狀態(tài)都被減半,以提高指令周期換取為代價(jià)提高了結(jié)果的精度。半,以提高指令周期換取為代價(jià)提高了結(jié)果的精度。knGabs(f(n)2 1/2knG(abs(f(n) )l FFT的定標(biāo)方法的定標(biāo)方法u在FFT操作里,每次蝶形運(yùn)算后數(shù)據(jù)平均增加一位。輸入定標(biāo)需要移位 (FFT長(zhǎng)度為N),這會(huì)導(dǎo)致在計(jì)算FFT之前就衰減 6 dB。u在固定定標(biāo)中,每級(jí)蝶形運(yùn)算輸出除以2,這是最常用的FFT定標(biāo)方法,因?yàn)樗?jiǎn)

12、單而且有比較好的信噪比。但是,對(duì)于大的FFT,這種定標(biāo)可能會(huì)使信息丟失。u另一種方法是動(dòng)態(tài)定標(biāo),即在輸出溢出時(shí)再除以2。在這種情況下,會(huì)在這個(gè)過程中指定一個(gè)變量,每定標(biāo)一次變量的值加1,計(jì)算結(jié)束后根據(jù)變量的值把結(jié)果乘以一個(gè)系數(shù)。動(dòng)態(tài)定標(biāo)的信噪比最好,但會(huì)增加FFT循環(huán)次數(shù)。N2logN2log第7章應(yīng)用程序相關(guān)設(shè)計(jì)7.2 基礎(chǔ)算術(shù)運(yùn)算基礎(chǔ)算術(shù)運(yùn)算n加減運(yùn)算加減運(yùn)算n乘法運(yùn)算乘法運(yùn)算n除法運(yùn)算除法運(yùn)算n小數(shù)乘法小數(shù)乘法第7章應(yīng)用程序相關(guān)設(shè)計(jì)7.2.1 加減運(yùn)算加減運(yùn)算l在數(shù)字信號(hào)處理中,加減運(yùn)算是常見的算術(shù)運(yùn)算。在數(shù)字信號(hào)處理中,加減運(yùn)算是常見的算術(shù)運(yùn)算。一般使用一般使用16位或位或32位加減運(yùn)

13、算,數(shù)值分析、浮點(diǎn)位加減運(yùn)算,數(shù)值分析、浮點(diǎn)運(yùn)算和其它操作可能需要運(yùn)算和其它操作可能需要32位以上的運(yùn)算。位以上的運(yùn)算。lC55x有直接完成有直接完成16位或位或32位加減運(yùn)算的指令,位加減運(yùn)算的指令,但沒有能直接完成多字加減運(yùn)算的指令。要進(jìn)行但沒有能直接完成多字加減運(yùn)算的指令。要進(jìn)行多字加減運(yùn)算,需要通過編程方法實(shí)現(xiàn)。多字加減運(yùn)算,需要通過編程方法實(shí)現(xiàn)。l 以下指令可在單周期內(nèi)完成以下指令可在單周期內(nèi)完成32位加法運(yùn)算:位加法運(yùn)算:MOV40 dbl(Lmem),ACxADD dbl(Lmem),ACxl 64位的高位的高32位加法要考慮低位加法要考慮低32位加法產(chǎn)生的進(jìn)位,位加法產(chǎn)生的進(jìn)位

14、,使用以下指令:使用以下指令:ADD uns(Smem), CARRY, ACxl 以下指令可在單周期內(nèi)完成以下指令可在單周期內(nèi)完成32位減法運(yùn)算:位減法運(yùn)算:MOV40 dbl(Lmem),ACxSUB dbl(Lmem),ACxl 64位的高位的高32位減法要考慮低位減法要考慮低32位減法產(chǎn)生的借位,位減法產(chǎn)生的借位,使用以下指令:使用以下指令: SUB uns(Smem),BORROW,ACx 例例7-1,64位加法運(yùn)算。文件名為:位加法運(yùn)算。文件名為: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位結(jié)果 AR1 - Y1; Y0; 入口條

18、件: AR2 - W0; SXMD = 1 (允許符號(hào)擴(kuò)展) W1; SATD = 0 (不做飽和處理) W2; FRCT = 0 (關(guān)小數(shù)模式) W3; ;限制條件:延遲鏈和輸入序列必須指定為長(zhǎng)字類型。;*.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章應(yīng)用程序相關(guān)設(shè)計(jì)7.2.3 除法運(yùn)算除法運(yùn)算lC55x沒有提供硬件除法器,也沒有提供專門的除法指令,

20、沒有提供硬件除法器,也沒有提供專門的除法指令,要實(shí)現(xiàn)除法運(yùn)算需借助于條件減法指令要實(shí)現(xiàn)除法運(yùn)算需借助于條件減法指令SUBC和重復(fù)指令和重復(fù)指令RPT。l根據(jù)被除數(shù)絕對(duì)值與除數(shù)絕對(duì)值的大小關(guān)系,除法的實(shí)根據(jù)被除數(shù)絕對(duì)值與除數(shù)絕對(duì)值的大小關(guān)系,除法的實(shí)現(xiàn)過程略有不同:現(xiàn)過程略有不同:u當(dāng)當(dāng)|被除數(shù)被除數(shù)|被除數(shù); AR1-除數(shù); AR2-商; AR3-余數(shù); 注:; 無符號(hào)除法,被除數(shù)、除數(shù)均為16位; 關(guān)閉符號(hào)擴(kuò)展,被除數(shù)、除數(shù)均為正數(shù); 運(yùn)算完成后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 (關(guān)閉符號(hào)擴(kuò)展)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,無符號(hào),無符號(hào)32位除位除16位整數(shù)除法。位整數(shù)除法。文件名為:文件名為:udiv32o16.asm。.mmregs.model call=c

22、55_std.model mem=large;*; 指針分配; AR0-被除數(shù)高位;被除數(shù)低位; AR1-除數(shù); AR2-商高位; 商低位; AR3-余數(shù);注:;無符號(hào)除法,被除數(shù)為32位,除數(shù)為16位;關(guān)閉符號(hào)擴(kuò)展,被除數(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 (關(guān)閉符號(hào)擴(kuò)展)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 存儲(chǔ)地址裝入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 (打開符號(hào)擴(kuò)展) B L1例例7-6,帶符號(hào),帶符號(hào)16位除位除16位整數(shù)除法。位整數(shù)除法。文件名為:文件名為:sdiv16o16.asm。.mmregs.model call=c55_std.model mem=large;*; 指針分配; AR0-被除數(shù); AR1-除數(shù);AR2-商;AR3-余數(shù); 注:; 帶符號(hào)除法,被除數(shù)為16位,除數(shù)為16位;打開符號(hào)擴(kuò)展,被除數(shù)、除數(shù)可為負(fù)數(shù);除法運(yùn)算之前,商的符號(hào)存入AC0;除法運(yùn)算之后,商存入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 (打開符號(hào)擴(kuò)展)MPYM *AR0,*AR1,AC0 ; 計(jì)算期望得到的商的符號(hào)MOV *AR1,AC1 ; 把除數(shù)存入AC1ABS AC1,AC1 ; 求絕對(duì)值,|除數(shù)|MOV AC1,*AR2 ; 暫時(shí)保存 |除數(shù)|MOV *AR0,AC1 ; 把被除數(shù)存入 AC1ABS AC1

26、,AC1 ; 求絕對(duì)值,|被除數(shù)|RPT #(16-1); 執(zhí)行subc 16次SUBC *AR2,AC1,AC1 ;AR2 - |除數(shù)|MOV HI(AC1),*AR3 ; 保存余數(shù)MOV AC1,*AR2 ; 保存商SFTS AC1,#16 ; 對(duì)商移位: 把符號(hào)位放在最高位NEG AC1,AC1 ; 對(duì)商求反XCCPART label,AC0被除數(shù)高半部分(NumH)(偶地址);被除數(shù)高半部分(NumL); AR1-除數(shù)(Den);AR2-商的高半部分(QuotH)(偶地址);商的低半部分(QuotL);AR3-余數(shù)(Rem); 注:; 帶符號(hào)除法,被除數(shù)為32位,除數(shù)為16位;打開符號(hào)

27、擴(kuò)展,被除數(shù)、除數(shù)可為負(fù)數(shù);除法運(yùn)算之前,期望的商的符號(hào)存入AC0;第一次除法運(yùn)算之前,把被除數(shù)的高半部分存入AC1;第一次除法運(yùn)算之后,把商的高半部分存入AC1(15-0);第二次除法運(yùn)算之前,把被除數(shù)的低半部分存入AC1;第二次除法運(yùn)算之后,把商的低半部分存入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 (打開符號(hào)擴(kuò)展)MPYM *AR0,*AR1,AC0 ; 除法結(jié)果的符號(hào)位( 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存儲(chǔ)地址裝入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í)際結(jié)果應(yīng)該為正數(shù),跳到skip.MOV40 dbl(*AR2),AC1 ; 否

30、則,對(duì)商取反.NEG AC1,AC1MOV AC1,dbl(*AR2)skip: B L1第7章應(yīng)用程序相關(guān)設(shè)計(jì)7.2.4 小數(shù)乘法小數(shù)乘法l在定點(diǎn)在定點(diǎn)DSP的某些應(yīng)用中,整數(shù)運(yùn)算很難滿足要求。這的某些應(yīng)用中,整數(shù)運(yùn)算很難滿足要求。這是因?yàn)樗陨泶嬖谌毕荩菏且驗(yàn)樗陨泶嬖谌毕荩簎兩個(gè)兩個(gè)16位整數(shù)相乘,乘積總是位整數(shù)相乘,乘積總是“向左增長(zhǎng)向左增長(zhǎng)”(即小數(shù)(即小數(shù)點(diǎn)左側(cè)的位數(shù)增加),這意味著多次相乘后,乘積將點(diǎn)左側(cè)的位數(shù)增加),這意味著多次相乘后,乘積將很快超出定點(diǎn)器件的數(shù)據(jù)范圍。很快超出定點(diǎn)器件的數(shù)據(jù)范圍。u保存保存32位乘積到存儲(chǔ)器,要占用位乘積到存儲(chǔ)器,要占用2個(gè)個(gè)CPU周期和周期和

31、2個(gè)個(gè)字的存儲(chǔ)器空間。字的存儲(chǔ)器空間。u由于乘法器都是由于乘法器都是16位相乘,因此將位相乘,因此將32位乘積再作為位乘積再作為乘法器的輸入時(shí)就顯得較繁瑣,不能勝任遞歸運(yùn)算。乘法器的輸入時(shí)就顯得較繁瑣,不能勝任遞歸運(yùn)算。l為了克服這些缺陷,在實(shí)際應(yīng)用中更多采用的是小數(shù)為了克服這些缺陷,在實(shí)際應(yīng)用中更多采用的是小數(shù)運(yùn)算。小數(shù)運(yùn)算具有如下優(yōu)點(diǎn):運(yùn)算。小數(shù)運(yùn)算具有如下優(yōu)點(diǎn): u乘積總是乘積總是“向右增長(zhǎng)向右增長(zhǎng)”。這就意味著超出定點(diǎn)器件。這就意味著超出定點(diǎn)器件數(shù)據(jù)范圍的將是不太感興趣的部分。數(shù)據(jù)范圍的將是不太感興趣的部分。u既可以存儲(chǔ)既可以存儲(chǔ)32位乘積,也可以近存儲(chǔ)高位乘積,也可以近存儲(chǔ)高16位乘

32、積,位乘積,這就允許用較少的資源保存結(jié)果。這就允許用較少的資源保存結(jié)果。u可以用于遞歸運(yùn)算??梢杂糜谶f歸運(yùn)算。 例例7-8,兩個(gè),兩個(gè)Q31格式有符號(hào)小數(shù)相乘,得到一格式有符號(hào)小數(shù)相乘,得到一個(gè)個(gè)Q31格式結(jié)果。文件名為:格式結(jié)果。文件名為:mpyQ31.asm。 需要注意的是:需要注意的是:u兩個(gè)帶符號(hào)小數(shù)相乘,所得乘積帶有兩個(gè)帶符號(hào)小數(shù)相乘,所得乘積帶有2個(gè)符號(hào)位。個(gè)符號(hào)位。u為了解決冗余符號(hào)位的問題,需要在程序中設(shè)定狀為了解決冗余符號(hào)位的問題,需要在程序中設(shè)定狀態(tài)寄存器態(tài)寄存器ST1中的中的FRCT(小數(shù)方式)為(小數(shù)方式)為1,這樣當(dāng),這樣當(dāng)乘法器將結(jié)果傳送至累加器時(shí)就會(huì)自動(dòng)左移乘法器

33、將結(jié)果傳送至累加器時(shí)就會(huì)自動(dòng)左移1位。位。.mmregs.model call=c55_std.model mem=large;*;操作數(shù)取自數(shù)據(jù)存儲(chǔ)器,運(yùn)算結(jié)果送回?cái)?shù)據(jù)存儲(chǔ)器。; 數(shù)據(jù)存儲(chǔ): 指針分配:; X1 X0 Q31操作數(shù) AR0 - X1; Y1 Y0 Q31操作數(shù) X0; W1 W0 Q31結(jié)果 AR1 - Y1; Y0; 入口條件: AR2 - W0(偶地址); SXMD = 1 (允許符號(hào)擴(kuò)展) W1; SATD = 0 (不做飽和處理) ; FRCT = 1 (運(yùn)算結(jié)果左移一位) ; ;限制條件: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章應(yīng)用程序相關(guān)設(shè)計(jì)7.3 F

35、IR濾波器濾波器l數(shù)字濾波器是數(shù)字濾波器是DSP的基本應(yīng)用,有的基本應(yīng)用,有2種基本類型:種基本類型:u有限沖激響應(yīng)濾波器有限沖激響應(yīng)濾波器FIRu無限沖激濾波器無限沖激濾波器IIRl一般來說,如果需要線性相位則選擇用一般來說,如果需要線性相位則選擇用FIR濾波器,濾波器,對(duì)于相位要求不敏感的場(chǎng)合可以選用對(duì)于相位要求不敏感的場(chǎng)合可以選用IIR濾波器。濾波器。l本節(jié)主要討論本節(jié)主要討論FIR濾波器的濾波器的DSP實(shí)現(xiàn)方法,有關(guān)實(shí)現(xiàn)方法,有關(guān)IIR濾波器的實(shí)現(xiàn)將在下一節(jié)中介紹。濾波器的實(shí)現(xiàn)將在下一節(jié)中介紹。第7章應(yīng)用程序相關(guān)設(shè)計(jì)7.3.1 FIR濾波器的基本結(jié)構(gòu)濾波器的基本結(jié)構(gòu)l一個(gè)一個(gè)FIR濾波

36、器的輸出序列和輸入序列之間的關(guān)系,濾波器的輸出序列和輸入序列之間的關(guān)系,滿足差分方程:滿足差分方程:l傳遞函數(shù)為傳遞函數(shù)為 10Niiy nb x ni 10NiiiY zH zb zX zl FIR濾波器的結(jié)構(gòu):l FIR濾波器的單位沖激響應(yīng)是一個(gè)有限長(zhǎng)序列。若為實(shí)數(shù),且滿足偶對(duì)稱或奇對(duì)稱的條件,則FIR濾波器具有線性相位特性。 偶對(duì)稱線性相位FIR濾波器的差分方程為:)1()()(12/0iNnxinxbnyNii第7章應(yīng)用程序相關(guān)設(shè)計(jì)7.3.2 FIR濾波器的濾波器的C語言編程實(shí)現(xiàn)語言編程實(shí)現(xiàn)例例7-9,直接型,直接型FIR濾波器的濾波器的C語言編程實(shí)現(xiàn)。語言編程實(shí)現(xiàn)。/* fir.c

37、該程序用于實(shí)現(xiàn)FIR濾波器* L濾波器的階數(shù)* bi濾波器的系數(shù),i=0,1,L-1* xi輸入信號(hào)向量,i=0,1,L-1;x0對(duì)應(yīng)于當(dāng)前值,x1對(duì)應(yīng)于上一采樣值* x_in 輸入信號(hào)的當(dāng)前值* y_out 輸出信號(hào)的當(dāng)前值*/float fir(float x_in, float *x,float *b,int L)float y_out;int i;/* - */* 把上一個(gè)采樣時(shí)間的輸入信號(hào)向量延遲一個(gè)單元把上一個(gè)采樣時(shí)間的輸入信號(hào)向量延遲一個(gè)單元,得到當(dāng)前得到當(dāng)前采樣時(shí)間的輸入信號(hào)向量采樣時(shí)間的輸入信號(hào)向量 */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濾波器的實(shí)現(xiàn)涉及到兩個(gè)基本操作,一個(gè)是濾波器的實(shí)現(xiàn)涉及到兩個(gè)基本操作,一個(gè)是輸入信號(hào)向量與濾波器系數(shù)向量的內(nèi)積計(jì)算,另一個(gè)是輸入信號(hào)向量與濾波器系數(shù)向量的內(nèi)積計(jì)算,另一個(gè)是輸入信號(hào)向量的更新處理。輸入信號(hào)向量的更新處理。u 在每個(gè)采樣周期信號(hào)緩沖器都要更新一次,最老的在每個(gè)采樣周期信號(hào)緩沖器都要更新一次,最老的采樣被拋棄,而其他的信號(hào)則向緩沖器的右方移動(dòng)一采樣被拋棄,而其他的信號(hào)則向緩沖器的右方移動(dòng)一個(gè)

39、單元,一個(gè)新的采樣被插入存儲(chǔ)單元,并被標(biāo)記。個(gè)單元,一個(gè)新的采樣被插入存儲(chǔ)單元,并被標(biāo)記。 如果這個(gè)操作過程不用如果這個(gè)操作過程不用DSPDSP硬件完成,那么它需要硬件完成,那么它需要很多的時(shí)間。很多的時(shí)間。第7章應(yīng)用程序相關(guān)設(shè)計(jì)7.3.3 FIR濾波器的匯編語言編程實(shí)現(xiàn)濾波器的匯編語言編程實(shí)現(xiàn)l處理信號(hào)緩沖器的最有效方法,是把信號(hào)采樣加載到循環(huán)處理信號(hào)緩沖器的最有效方法,是把信號(hào)采樣加載到循環(huán)緩沖器中。緩沖器中。l在循環(huán)緩沖器中,采取數(shù)據(jù)保持固定、反時(shí)針方向移動(dòng)地在循環(huán)緩沖器中,采取數(shù)據(jù)保持固定、反時(shí)針方向移動(dòng)地址的方式,代替保持緩沖器地址固定且正方向移動(dòng)數(shù)據(jù)。址的方式,代替保持緩沖器地址固

40、定且正方向移動(dòng)數(shù)據(jù)。l信號(hào)采樣的起點(diǎn)由指針信號(hào)采樣的起點(diǎn)由指針x(n) 指定,其它諸采樣則沿著順指定,其它諸采樣則沿著順時(shí)針方向,從起點(diǎn)開始依次順序加載。時(shí)針方向,從起點(diǎn)開始依次順序加載。圖圖7-4 FIR濾波器的循環(huán)緩沖區(qū)濾波器的循環(huán)緩沖區(qū)(a)信號(hào)循環(huán)緩沖區(qū)信號(hào)循環(huán)緩沖區(qū) (b)系數(shù)循環(huán)緩沖區(qū)系數(shù)循環(huán)緩沖區(qū)例例7-10,F(xiàn)IR濾波器的濾波器的C55x匯編語言實(shí)現(xiàn)。匯編語言實(shí)現(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 該程序用于實(shí)現(xiàn)FIR濾波器,可被C語言程序調(diào)用; int fir(int *,int *, unsigned int,int); 參數(shù)0: AR0 輸入信號(hào)緩沖區(qū)指針; 參數(shù)1: AR1 - FIR濾波器系數(shù)向量指針; 參數(shù)2: T0 - FIR 濾波器的階數(shù)L; 參數(shù)3: T1 - 輸入信號(hào)當(dāng)前值在循環(huán)緩沖區(qū)的序數(shù); 返回值: T0 - 輸出信號(hào)當(dāng)前值 .def _fir _fir pshm ST1_55 ;現(xiàn)場(chǎng)ST1,ST2和ST3入棧 pshm ST2_55 pshm ST3_55or #0 x340,mmap(ST1_55) ;設(shè)置FRCT,SXMD,SAT

46、Dbset SMUL ;置位SMULmov mmap(AR0),BSA01 ;AR0=輸入信號(hào)循環(huán)緩沖區(qū)的起始地址mov mmap(AR1),BSA23 ;AR1=濾波器系數(shù)循環(huán)緩沖區(qū)的起始地址mov mmap(T0),BK03 ;設(shè)置循環(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 ;設(shè)置外部循環(huán)次數(shù)為L(zhǎng)-1 mpym *AR0+,*AR2+,AC0 ;執(zhí)行第一次運(yùn)算| rpt CSR ;啟動(dòng)循環(huán)

47、macm *AR0+,*AR2+,AC0mov hi(AC0),T0 ; 用Q15格式存放結(jié)果popm ST3_55 ; 恢復(fù)ST1, ST2和 ST3popm ST2_55 popm ST1_55 ret.end第7章應(yīng)用程序相關(guān)設(shè)計(jì)7.4 IIR濾波器濾波器lIIR濾波器的優(yōu)點(diǎn):結(jié)構(gòu)簡(jiǎn)單,運(yùn)算量小,可以用濾波器的優(yōu)點(diǎn):結(jié)構(gòu)簡(jiǎn)單,運(yùn)算量小,可以用較少的階數(shù)獲得很高的選擇性。較少的階數(shù)獲得很高的選擇性。lIIR濾波器的缺點(diǎn):具有相位特性差,存在穩(wěn)定性濾波器的缺點(diǎn):具有相位特性差,存在穩(wěn)定性問題。問題。l高階高階IIR濾波器經(jīng)常以串聯(lián)或并聯(lián)二階環(huán)節(jié)的形式濾波器經(jīng)常以串聯(lián)或并聯(lián)二階環(huán)節(jié)的形式予以實(shí)

48、現(xiàn)。予以實(shí)現(xiàn)。第7章應(yīng)用程序相關(guān)設(shè)計(jì)7.4.1 二階二階IIR濾波器的結(jié)構(gòu)濾波器的結(jié)構(gòu)l二階二階IIR濾波器,又稱為二階基本節(jié),分為直接型、濾波器,又稱為二階基本節(jié),分為直接型、標(biāo)準(zhǔn)型和變換型。標(biāo)準(zhǔn)型和變換型。l二階二階IIR濾波器傳遞函數(shù)為:濾波器傳遞函數(shù)為: 2211221101zazazbzbbzH圖圖7-5 二階二階IIR濾波器的直接型濾波器的直接型的實(shí)現(xiàn)的實(shí)現(xiàn)圖圖7-6 的信號(hào)流圖的信號(hào)流圖圖圖7-7 二階二階IIR濾波器的直接型濾波器的直接型的實(shí)現(xiàn)的實(shí)現(xiàn)由于直接型由于直接型對(duì)于給定的傳遞函數(shù)具有最小可能的延遲對(duì)于給定的傳遞函數(shù)具有最小可能的延遲數(shù)、加法器數(shù)和乘法器數(shù),所以被稱為標(biāo)準(zhǔn)

49、型。數(shù)、加法器數(shù)和乘法器數(shù),所以被稱為標(biāo)準(zhǔn)型。第7章應(yīng)用程序相關(guān)設(shè)計(jì)7.4.2 高階高階IIR濾波器的結(jié)構(gòu)濾波器的結(jié)構(gòu)l高階高階IIR濾波器的差分方程和系統(tǒng)函數(shù)分別為:濾波器的差分方程和系統(tǒng)函數(shù)分別為:MmmLllmnyalnxbny110)()()(MmmmLlllzazbzH1101)(圖圖7-8 高階高階IIR濾波器的直接型濾波器的直接型實(shí)現(xiàn)(實(shí)現(xiàn)(L=M+1)圖圖7-9 7-9 高階高階IIRIIR濾波器的串聯(lián)型結(jié)構(gòu)濾波器的串聯(lián)型結(jié)構(gòu)圖圖7-10 第第k個(gè)二階節(jié)個(gè)二階節(jié))(zHk)2() 1()()(21nwanwanxnwkkkkkk)2() 1()()(21nwbnwbnwnykk

50、kkkk)()(1nynxkkKk,.,2 , 1)()(01nxbnx)()(nynyk對(duì)于 ,有其中,注意:第7章應(yīng)用程序相關(guān)設(shè)計(jì)7.4.3 IIR濾波器的濾波器的C語言實(shí)現(xiàn)語言實(shí)現(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; : : ; 標(biāo)定: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) ;設(shè)置FRCT,SXMD,SATD bset SMUL ;置位SMUL sub #1,T0 ; 樣本數(shù) - 1 mov T0,BRC0 ; 設(shè)置外循環(huán)計(jì)數(shù)器 sub #1,T1,T0; 二階節(jié)個(gè)數(shù) - 1 mov T0,BRC1; 設(shè)置內(nèi)循環(huán)計(jì)數(shù)器 mov T1,T0 ;設(shè)置循環(huán)緩沖區(qū)大小 sfts T0,#1 mov mmap(T0),BK03;BK03=2*二階節(jié)個(gè)數(shù) sfts T0,#1 add T1,T0 mov m

52、map(T0),BK47;BK47=5*二階節(jié)個(gè)數(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 ;啟動(dòng)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格式存放結(jié)果sample_loop popboth XAR7 ;恢復(fù)AR7 pop T3 ;恢復(fù)T3 pop

54、m ST3_55 ;恢復(fù)ST1,ST2,ST3 popm ST2_55 popm ST1_55 ret .end */圖圖7-11 IIR濾波器系數(shù)和信號(hào)緩沖區(qū)配置濾波器系數(shù)和信號(hào)緩沖區(qū)配置第7章應(yīng)用程序相關(guān)設(shè)計(jì)7.5 快速傅里葉變換快速傅里葉變換FFTnFFT算法原理算法原理n庫利一圖基算法庫利一圖基算法nFFT算法的實(shí)現(xiàn)算法的實(shí)現(xiàn)第7章應(yīng)用程序相關(guān)設(shè)計(jì)7.5.1 FFT算法原理算法原理l快速傅里葉變換(快速傅里葉變換(FFT)是離散傅里葉變換()是離散傅里葉變換(DFT)的一種快速算法。通過的一種快速算法。通過FFT算法,算法,DFT的計(jì)算量大大的計(jì)算量大大減少,運(yùn)算時(shí)間縮短減少,運(yùn)算時(shí)間

55、縮短12個(gè)數(shù)量級(jí)。個(gè)數(shù)量級(jí)。lDFT的變換公式為的變換公式為 其中其中 為旋轉(zhuǎn)因子。為旋轉(zhuǎn)因子。10( )( )NnkNnx kx n W10)(1)(NknkNWkxNnx0,1,1kN0,1,1nNNjWN2expl FFT之所以減少運(yùn)算量,主要是利用了旋轉(zhuǎn)因子的以之所以減少運(yùn)算量,主要是利用了旋轉(zhuǎn)因子的以下下3點(diǎn)特性:點(diǎn)特性:u對(duì)稱性對(duì)稱性u(píng)周期性周期性u(píng)可約性可約性*()nknkNNWW()()()nkn N kn k NNNNWWW/,nkmnknknk mNmNNN mWWWW利用這些特性可以使利用這些特性可以使DFT運(yùn)算中有些項(xiàng)進(jìn)行合并,將長(zhǎng)序列運(yùn)算中有些項(xiàng)進(jìn)行合并,將長(zhǎng)序列的的

56、DFT分解為短序列的分解為短序列的DFT。DFT從算法上分為按時(shí)間抽選(從算法上分為按時(shí)間抽選(DIT)和按頻率抽選)和按頻率抽選(DIF)。)?;?的的DIT又被稱為庫利一圖基算法。基又被稱為庫利一圖基算法。基2的的DIF又稱為桑德又稱為桑德圖基算法。圖基算法。 第7章應(yīng)用程序相關(guān)設(shè)計(jì)7.5.2 庫利一圖基算法庫利一圖基算法n信號(hào)流圖信號(hào)流圖n比特反轉(zhuǎn)比特反轉(zhuǎn)n蝶形運(yùn)算蝶形運(yùn)算1. 信號(hào)流圖信號(hào)流圖2比特反轉(zhuǎn)比特反轉(zhuǎn)l圖圖7-11的輸入信號(hào)的順序是按照比特反轉(zhuǎn)排列的,輸出的輸入信號(hào)的順序是按照比特反轉(zhuǎn)排列的,輸出序列是按照自然順序的。比特反轉(zhuǎn)就是將序列下標(biāo)用二序列是按照自然順序的。比特反轉(zhuǎn)

57、就是將序列下標(biāo)用二進(jìn)制表示,然后將二進(jìn)制數(shù)按照相反的方向排列,即得進(jìn)制表示,然后將二進(jìn)制數(shù)按照相反的方向排列,即得到這個(gè)序列的實(shí)際位置。到這個(gè)序列的實(shí)際位置。l按照自然排序的時(shí)域信號(hào)數(shù)據(jù)是按照自然排序的時(shí)域信號(hào)數(shù)據(jù)是x(0)、x(1)、x(2)、x(3)、x(4)、x(5)、x(6)、x(7),其序號(hào)寫成二進(jìn)制數(shù),其序號(hào)寫成二進(jìn)制數(shù)分別為分別為000b、001b、010b、011b、100b、101b、110b、111b,將這些二進(jìn)制數(shù)前后倒轉(zhuǎn),即得到進(jìn)行,將這些二進(jìn)制數(shù)前后倒轉(zhuǎn),即得到進(jìn)行FFT前數(shù)據(jù)所對(duì)應(yīng)的實(shí)際二進(jìn)制數(shù)地址:前數(shù)據(jù)所對(duì)應(yīng)的實(shí)際二進(jìn)制數(shù)地址:000b、100b、010b、11

58、0b、001b、101b、011b、111b,對(duì)應(yīng)的,對(duì)應(yīng)的十進(jìn)制數(shù)是:十進(jìn)制數(shù)是:0、4、2、6、1、5、3、7。序號(hào)為。序號(hào)為3的存的存儲(chǔ)單元,按照自然排序應(yīng)該存放儲(chǔ)單元,按照自然排序應(yīng)該存放x(3),但由于,但由于FFT計(jì)算計(jì)算規(guī)則的要求,現(xiàn)在應(yīng)該存放規(guī)則的要求,現(xiàn)在應(yīng)該存放x(6)。 3.蝶形運(yùn)算蝶形運(yùn)算l 基基2DIT FFT算法,共由算法,共由M級(jí)構(gòu)成,每級(jí)計(jì)算由級(jí)構(gòu)成,每級(jí)計(jì)算由N/2個(gè)個(gè)蝶形運(yùn)算構(gòu)成。蝶形運(yùn)算構(gòu)成。l 基本運(yùn)算單元為以下所謂蝶形運(yùn)算:基本運(yùn)算單元為以下所謂蝶形運(yùn)算:l 蝶形運(yùn)算中上下兩個(gè)節(jié)點(diǎn)蝶形運(yùn)算中上下兩個(gè)節(jié)點(diǎn)p、q的間距為:的間距為: )()()(1qXWp

59、XpXmrNmm)()()(1qXWpXqXmrNmm1,.,1 , 0Mmmpq2第7章應(yīng)用程序相關(guān)設(shè)計(jì)7.5.3 FFT算法的實(shí)現(xiàn)算法的實(shí)現(xiàn)l為了敘述簡(jiǎn)單,本書給出采用為了敘述簡(jiǎn)單,本書給出采用C語言編寫的語言編寫的FFT程序,程序,相應(yīng)的匯編程序請(qǐng)讀者自行完成。相應(yīng)的匯編程序請(qǐng)讀者自行完成。(1)主程序:fft_test.c#include #include fcomplex.h /*包含浮點(diǎn)復(fù)數(shù)結(jié)構(gòu)體定義頭文件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語言實(shí)現(xiàn)。語言實(shí)現(xiàn)。extern void generator(int *,unsigned int)#define N 128 /* FFT的數(shù)據(jù)個(gè)數(shù) */#define M 7 /* M=log2(N) */#define PI 3.1415926 complex XN; /* 說明輸入信號(hào)數(shù)組,為復(fù)數(shù) */complex WM; /* 說明

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論