![DSP應(yīng)用程序設(shè)計(jì)_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/23/0695d037-9983-4f0f-b254-351a482f50e7/0695d037-9983-4f0f-b254-351a482f50e71.gif)
![DSP應(yīng)用程序設(shè)計(jì)_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/23/0695d037-9983-4f0f-b254-351a482f50e7/0695d037-9983-4f0f-b254-351a482f50e72.gif)
![DSP應(yīng)用程序設(shè)計(jì)_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/23/0695d037-9983-4f0f-b254-351a482f50e7/0695d037-9983-4f0f-b254-351a482f50e73.gif)
![DSP應(yīng)用程序設(shè)計(jì)_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/23/0695d037-9983-4f0f-b254-351a482f50e7/0695d037-9983-4f0f-b254-351a482f50e74.gif)
![DSP應(yīng)用程序設(shè)計(jì)_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/23/0695d037-9983-4f0f-b254-351a482f50e7/0695d037-9983-4f0f-b254-351a482f50e75.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第7章章 應(yīng)用程序設(shè)計(jì)應(yīng)用程序設(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.1定標(biāo)與溢出處理定標(biāo)與溢出處理n數(shù)的定標(biāo)數(shù)的定標(biāo)n溢出的處理方法溢出的處理方法n常用信號(hào)處理算法中的定標(biāo)方法常用信號(hào)處理算法中的定標(biāo)方法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可以表示不同大小和不同精度的小數(shù)可以表示不同大小和不同精度的小數(shù)lQ表示法表示法u表表7-1列出了一個(gè)列出了一個(gè)16位
2、數(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,精度為,精度為 1/32768 = 0.00003051對(duì)定點(diǎn)數(shù)而言,數(shù)值范圍與精度是一對(duì)矛
3、盾。一個(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ù)具體問(wèn)題進(jìn)行折衷處理定點(diǎn)算法中,應(yīng)該根據(jù)具體問(wèn)題進(jìn)行折衷處理, , 以達(dá)到最以達(dá)到最佳效果。佳效果。l在在C55x中,中,16位整數(shù)采用補(bǔ)碼形式表示。每個(gè)采用位整數(shù)采用補(bǔ)碼形式表示。每個(gè)采用Qi定標(biāo)的定標(biāo)的16位數(shù)用位數(shù)用1個(gè)符號(hào)位、個(gè)符號(hào)位、i個(gè)小數(shù)位和個(gè)小數(shù)位和15-i個(gè)整個(gè)整數(shù)位來(lái)表示。數(shù)位來(lái)表示。表表7-2
4、 同樣的數(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.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)范圍以防溢出l溢出還與輸入信號(hào)的特性和運(yùn)算法則有關(guān)溢出還與輸入信號(hào)的特性和運(yùn)算法則有關(guān) 1. 溢出溢出 C55x有以下
5、幾種硬件特性可以處理溢出:有以下幾種硬件特性可以處理溢出: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和和SATAuSATD控制控制D單元的操作,單元的操作,SATA控制控制A單元的操作。單元的操作。u如果如果S
6、ATD=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單元沒(méi)有溢出標(biāo)志位,但如果單元沒(méi)有溢出標(biāo)志位,但如果SATA=1,發(fā)生溢出,發(fā)生溢出時(shí),結(jié)果也會(huì)進(jìn)行飽和處理時(shí),結(jié)果也會(huì)進(jìn)行飽和處理 飽和處理是用最近的邊界值代替溢出結(jié)果。飽和處理是用最近的邊界值代替溢出結(jié)果。例如,例如,1616位寄存器的范圍是位寄存器的范圍是8000h8000h(最小負(fù)數(shù))(最小負(fù)數(shù))7FFFh7FFFh(最大正數(shù)),飽和處
7、理就是用(最大正數(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)定標(biāo),以防止溢出。但是這種方法會(huì)極大后對(duì)輸入信號(hào)定標(biāo),以防止溢出。但是這種方法會(huì)極大地降低輸出信號(hào)的精確度。地降
8、低輸出信號(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)??梢员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.1.3 常用信號(hào)處理常用信號(hào)處理 算法中的定標(biāo)方法算法中的定標(biāo)方法lFIR濾波器的定標(biāo)方法濾波器的定標(biāo)方法u在在FIR濾波器中處理溢出的最好方法是設(shè)計(jì)時(shí)使濾濾波器
9、中處理溢出的最好方法是設(shè)計(jì)時(shí)使濾波器的增益小于波器的增益小于1,這樣就不需要對(duì)輸入信號(hào)定標(biāo)。,這樣就不需要對(duì)輸入信號(hào)定標(biāo)。這種方法和累加器的保護(hù)位結(jié)合起來(lái),可以有效地這種方法和累加器的保護(hù)位結(jié)合起來(lái),可以有效地防止溢出。防止溢出。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)定標(biāo)。對(duì)一些類型的音頻信號(hào),飽和處理也是一種常用的方法。頻信號(hào),飽和處理也是一種常用的方法。lIIR濾波器的定標(biāo)方法濾波器的定標(biāo)方法
10、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可以通過(guò)把中間結(jié)果保存在處理器累加器來(lái)避免節(jié)可以通過(guò)把中間結(jié)果保存在處理器累加器來(lái)避免節(jié)間數(shù)據(jù)溢出。為防止在第間數(shù)據(jù)溢出。為防止在第k階內(nèi)部發(fā)生數(shù)據(jù)溢出,階內(nèi)部發(fā)生數(shù)據(jù)溢出,需要用增益系數(shù)對(duì)濾波器的單位脈沖響應(yīng)(前饋通需要用增益系數(shù)對(duì)濾波器的單位脈沖響應(yīng)(前饋通道)定標(biāo)。道)定標(biāo)。u動(dòng)態(tài)標(biāo)定
11、方法。在每個(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)單而且有比較好的信噪比。但是,對(duì)于大的FFT,這種定標(biāo)可能會(huì)使信息丟失。u另一種方法是動(dòng)態(tài)定標(biāo),即在輸出溢出時(shí)再除以2。在這種情況下
12、,會(huì)在這個(gè)過(guò)程中指定一個(gè)變量,每定標(biāo)一次變量的值加1,計(jì)算結(jié)束后根據(jù)變量的值把結(jié)果乘以一個(gè)系數(shù)。動(dòng)態(tài)定標(biāo)的信噪比最好,但會(huì)增加FFT循環(huán)次數(shù)。N2logN2log7.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.2.1 加減運(yùn)算加減運(yùn)算l在數(shù)字信號(hào)處理中,加減運(yùn)算是常見(jiàn)的算術(shù)運(yùn)算。在數(shù)字信號(hào)處理中,加減運(yùn)算是常見(jiàn)的算術(shù)運(yùn)算。一般使用一般使用16位或位或32位加減運(yùn)算,數(shù)值分析、浮點(diǎn)位加減運(yùn)算,數(shù)值分析、浮點(diǎn)運(yùn)算和其它操作可能需要運(yùn)算和其它操作可能需要32位以上的運(yùn)算。位以上的運(yùn)算。lC55x有直接完成有直接完成16位或位或32位加減運(yùn)算
13、的指令,位加減運(yùn)算的指令,但沒(méi)有能直接完成多字加減運(yùn)算的指令。要進(jìn)行但沒(méi)有能直接完成多字加減運(yùn)算的指令。要進(jìn)行多字加減運(yùn)算,需要通過(guò)編程方法實(shí)現(xiàn)。多字加減運(yùn)算,需要通過(guò)編程方法實(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)位,使用以下指令:使用以下指令:ADD uns(Smem), CARRY, ACxl 以下指令可在單周期內(nèi)完成以下指令可在單周期內(nèi)完成32位減法運(yùn)算:位減法運(yùn)算:MOV40 db
14、l(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位加法 指針?lè)峙? X3 X2 X1 X0 AR1 -X3 (偶地址); + Y3 Y2 Y1 Y0 X2; - X1; W3 W2 W1 W0 X0; AR2 - Y3 (偶地址); Y2; Y
15、1; Y0; AR3 - W3 (偶地址); W2; W1; W0;* .text.align 4.globalstartstart:MOV #0100h,AR1 MOV #0104h,AR2 MOV #0108h,AR3L1: MOV40 dbl(*AR1(#2), AC0 ; AC0 = X1 X0 ADD dbl(*AR2(#2), AC0 ; AC0 = 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 = X
16、3 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.globalstartstart: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(*
17、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; 入口條件: AR2 - W0; SXMD = 1 (允許符號(hào)擴(kuò)展) W1; SATD = 0 (不做飽和處理) W2; FRCT = 0 (關(guān)小數(shù)模式) W3; ;限制條件:延遲鏈和輸入序列必須指定為長(zhǎng)字類型。;*.sect.text.align 4.global startstar
18、t: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(*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+ ;保存W1MA
19、CM *AR0,*AR1,AC0#16,AC0 ;AC0=AC016+X1*Y1MOV AC0,*AR2+ ;保存W2MOV HI(AC0),*AR2 ;保存W3 B L17.2.3 除法運(yùn)算除法運(yùn)算lC55x沒(méi)有提供硬件除法器,也沒(méi)有提供專門的除法指令,沒(méi)有提供硬件除法器,也沒(méi)有提供專門的除法指令,要實(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)過(guò)程略有不同:現(xiàn)過(guò)程略有不同:u當(dāng)當(dāng)|被除數(shù)被除數(shù)|被除數(shù); AR1-除數(shù); AR2-商; A
20、R3-余數(shù); 注:; 無(wú)符號(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 startstart: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 ; 保存
21、商MOV HI(AC0),*AR3 ; 保存余數(shù) B L1例例7-5,無(wú)符號(hào),無(wú)符號(hào)32位除位除16位整數(shù)除法。位整數(shù)除法。文件名為:文件名為:udiv32o16.asm。.mmregs.model call=c55_std.model mem=large;*; 指針?lè)峙? AR0-被除數(shù)高位;被除數(shù)低位; AR1-除數(shù); AR2-商高位; 商低位; AR3-余數(shù);注:;無(wú)符號(hào)除法,被除數(shù)為32位,除數(shù)為16位;關(guān)閉符號(hào)擴(kuò)展,被除數(shù)、除數(shù)均為正數(shù);第一次除法之前,把被除數(shù)高位存入AC0;第一次除法之后,把商的高位存入AC0(15-0);第二次除法之前,把被除數(shù)低位存入AC0; 第二次除法之后,
22、AC0(15-0)為商的低位,AC0(31-16)為余數(shù);*.sect.text.align 4.globalstart.symstart,start,36,2,0start:MOV #0100h,AR0 MOV #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
23、 ; 把AC0_L 存儲(chǔ)地址裝入AR4MOV AC0,*AR2+ ; 保存商的高位MOV *AR0+,*AR4 ; 把被除數(shù)低位裝入AC0_LRPT #(16-1) ; 執(zhí)行subc 16次SUBC *AR1,AC0,AC0MOV AC0,*AR2+ ; 保存商的低位MOV HI(AC0),*AR3 ; 保存余數(shù)BSET SXMD ; 置位SXMD (打開(kāi)符號(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;*; 指針?lè)峙? AR
24、0-被除數(shù); AR1-除數(shù);AR2-商;AR3-余數(shù); 注:; 帶符號(hào)除法,被除數(shù)為16位,除數(shù)為16位;打開(kāi)符號(hào)擴(kuò)展,被除數(shù)、除數(shù)可為負(fù)數(shù);除法運(yùn)算之前,商的符號(hào)存入AC0;除法運(yùn)算之后,商存入AC1(15-0),余數(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 (打開(kāi)符號(hào)擴(kuò)展)MPYM *AR0,*AR1,AC0 ; 計(jì)算期望得到的
25、商的符號(hào)MOV *AR1,AC1 ; 把除數(shù)存入AC1ABS AC1,AC1 ; 求絕對(duì)值,|除數(shù)|MOV AC1,*AR2 ; 暫時(shí)保存 |除數(shù)|MOV *AR0,AC1 ; 把被除數(shù)存入 AC1ABS AC1,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)(偶地址);
26、被除數(shù)高半部分(NumL); AR1-除數(shù)(Den);AR2-商的高半部分(QuotH)(偶地址);商的低半部分(QuotL);AR3-余數(shù)(Rem); 注:; 帶符號(hào)除法,被除數(shù)為32位,除數(shù)為16位;打開(kāi)符號(hào)擴(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.syms
27、tart,start,36,2,0start:MOV #0100h,AR0 MOV #0102h,AR1 MOV #0104h,AR2 MOV #0106h,AR3 MOV #0108h,AR4L1:BSET SXMD ; 置位SXMD (打開(kāi)符號(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
28、; AC1 = abs(Num)MOV AC1,dbl(*AR2) ; QuotH = abs(NumH) ; QuotL = abs(NumL) MOV *AR2,AC1 ; AC1 = QuotHRPT #(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
29、AC1,*AR2- ; 保存 QuotLMOV HI(AC1),*AR3 ; 保存 RemBCC skip,AC0= #0 ; 如果實(shí)際結(jié)果應(yīng)該為正數(shù),跳到skip.MOV40 dbl(*AR2),AC1 ; 否則,對(duì)商取反.NEG AC1,AC1MOV AC1,dbl(*AR2)skip: B L17.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ù)增加),這意味著多次相乘后,
30、乘積將點(diǎn)左側(cè)的位數(shù)增加),這意味著多次相乘后,乘積將很快超出定點(diǎn)器件的數(shù)據(jù)范圍。很快超出定點(diǎn)器件的數(shù)據(jù)范圍。u保存保存32位乘積到存儲(chǔ)器,要占用位乘積到存儲(chǔ)器,要占用2個(gè)個(gè)CPU周期和周期和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)”
31、。這就意味著超出定點(diǎn)器件。這就意味著超出定點(diǎn)器件數(shù)據(jù)范圍的將是不太感興趣的部分。數(shù)據(jù)范圍的將是不太感興趣的部分。u既可以存儲(chǔ)既可以存儲(chǔ)32位乘積,也可以近存儲(chǔ)高位乘積,也可以近存儲(chǔ)高16位乘積,位乘積,這就允許用較少的資源保存結(jié)果。這就允許用較少的資源保存結(jié)果。u可以用于遞歸運(yùn)算。可以用于遞歸運(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)位的問(wèn)題,
32、需要在程序中設(shè)定狀為了解決冗余符號(hào)位的問(wèn)題,需要在程序中設(shè)定狀態(tài)寄存器態(tài)寄存器ST1中的中的FRCT(小數(shù)方式)為(小數(shù)方式)為1,這樣當(dāng),這樣當(dāng)乘法器將結(jié)果傳送至累加器時(shí)就會(huì)自動(dòng)左移乘法器將結(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ǔ): 指針?lè)峙?; X1 X0 Q31操作數(shù) AR0 - X1; Y1 Y0 Q31操作數(shù) X0; W1 W0 Q31結(jié)果 AR1 - Y1; Y0; 入口條件: AR2 - W0(偶地址); SXMD = 1 (允許符號(hào)
33、擴(kuò)展) W1; SATD = 0 (不做飽和處理) ; FRCT = 1 (運(yùn)算結(jié)果左移一位) ; ;限制條件:W1被指定為偶地址;*.sect.text.align 4.globalstart.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+X
34、1*Y0 MACM *AR0,*AR1,AC0#16,AC0; AC0=AC016+X1*Y1 MOV AC0,dbl(*AR2) ; 保存W1W0 B L17.2.5 簡(jiǎn)單運(yùn)算簡(jiǎn)單運(yùn)算.title ADD_SUB .mmregs VAL1 .set 0 xFFFFhVAL2 .set 0 xF000h .global _c_int00 .text _c_int00: BCLR C54CM BCLR ARMS .ARMS_off BSET M40 BCLR SXMD BSET SATD 7.2.5 簡(jiǎn)單運(yùn)算簡(jiǎn)單運(yùn)算 MOV #0, AC0 MOV #VAL1, AC1H ADD #VAL2#1
35、6, AC1, AC0 RPT #256 ADD #VAL10;i-) xi = xi-1;x0=x_in;/* - */*完成完成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)緩沖器都要
36、更新一次,最老的采樣被拋棄,而其他的信號(hào)則向緩沖器的右方移動(dòng)一采樣被拋棄,而其他的信號(hào)則向緩沖器的右方移動(dòng)一個(gè)單元,一個(gè)新的采樣被插入存儲(chǔ)單元,并被標(biāo)記。個(gè)單元,一個(gè)新的采樣被插入存儲(chǔ)單元,并被標(biāo)記。 如果這個(gè)操作過(guò)程不用如果這個(gè)操作過(guò)程不用DSPDSP硬件完成,那么它需要硬件完成,那么它需要很多的時(shí)間。很多的時(shí)間。7.3.3 FIR濾波器的匯編語(yǔ)言編程實(shí)現(xiàn)濾波器的匯編語(yǔ)言編程實(shí)現(xiàn)l處理信號(hào)緩沖器的最有效方法,是把信號(hào)采樣加載到循環(huán)處理信號(hào)緩沖器的最有效方法,是把信號(hào)采樣加載到循環(huán)緩沖器中。緩沖器中。l在循環(huán)緩沖器中,采取數(shù)據(jù)保持固定、反時(shí)針?lè)较蛞苿?dòng)地在循環(huán)緩沖器中,采取數(shù)據(jù)保持固定、反時(shí)針?lè)?/p>
37、向移動(dòng)地址的方式,代替保持緩沖器地址固定且正方向移動(dòng)數(shù)據(jù)。址的方式,代替保持緩沖器地址固定且正方向移動(dòng)數(shù)據(jù)。l信號(hào)采樣的起點(diǎn)由指針信號(hào)采樣的起點(diǎn)由指針x(n) 指定,其它諸采樣則沿著順指定,其它諸采樣則沿著順時(shí)針?lè)较?,從起點(diǎn)開(kāi)始依次順序加載。時(shí)針?lè)较?,從起點(diǎn)開(kāi)始依次順序加載。圖圖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匯編語(yǔ)言實(shí)現(xiàn)。匯編語(yǔ)言實(shí)現(xiàn)。(1) 主程序 fir_test.c/* fir_test.c */#includemath.h#define L 64 /*
38、Number of FIR filter coefficients */#define 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
39、*pi*f2/Fs */#define w3 (2*PI*f3*T) /* 2*pi*f3/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,
40、-71,-15,83,139,76,-90,-231,-194,50,331,383,78,-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 buf
41、fer */main() unsigned int i; float signal; unsigned 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) i
42、ndex=L-1; (2) 匯編語(yǔ)言整數(shù)匯編語(yǔ)言整數(shù)fir濾波器函數(shù):濾波器函數(shù):fir.asm; fir.asm 該程序用于實(shí)現(xiàn)FIR濾波器,可被C語(yǔ)言程序調(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 ST
43、3_55or #0 x340,mmap(ST1_55) ;設(shè)置FRCT,SXMD,SATDbset 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偏移量開(kāi)始mov #0,AR2 ; AR2從0偏移量開(kāi)始sub #2,T0 ;T0=L-2 mov T0,CSR ;設(shè)置外部循環(huán)次數(shù)為L(zhǎng)-1
44、mpym *AR0+,*AR2+,AC0 ;執(zhí)行第一次運(yùn)算| rpt CSR ;啟動(dòng)循環(huán)macm *AR0+,*AR2+,AC0mov hi(AC0),T0 ; 用Q15格式存放結(jié)果popm ST3_55 ; 恢復(fù)ST1, ST2和 ST3popm ST2_55 popm ST1_55 ret.end7.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)定性問(wèn)題。問(wèn)題。l高階高階IIR濾波器經(jīng)常以
45、串聯(lián)或并聯(lián)二階環(huán)節(jié)的形式濾波器經(jīng)常以串聯(lián)或并聯(lián)二階環(huán)節(jié)的形式予以實(shí)現(xiàn)。予以實(shí)現(xiàn)。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ù)具有最小可能
46、的延遲數(shù)、加法器數(shù)和乘法器數(shù),所以被稱為標(biāo)準(zhǔn)型。數(shù)、加法器數(shù)和乘法器數(shù),所以被稱為標(biāo)準(zhǔn)型。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()()(21n
47、wbnwbnwnykkkkkk)()(1nynxkkKk,.,2 , 1)()(01nxbnx)()(nynyk對(duì)于 ,有其中,注意:7.4.3 IIR濾波器的濾波器的C語(yǔ)言實(shí)現(xiàn)語(yǔ)言實(shí)現(xiàn)例例7-11,采用二維數(shù)組編寫的采用二維數(shù)組編寫的IIR濾波器濾波器C語(yǔ)言程序。語(yǔ)言程序。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
48、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
49、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
50、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
51、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.5 快速傅里葉變換快速傅里葉變換FFTnFFT算法原理算法原理n庫(kù)利一圖基算法庫(kù)利一圖基算法nFFT算法的實(shí)現(xiàn)算法的實(shí)現(xiàn)7.5.1 FFT算法原理算法原理l快速傅里葉變換(快速傅里葉變換(FFT)是離散傅里葉變換()是離散傅里葉變換(DFT)的一種快速算法。通過(guò)的一種快速算法。通過(guò)FFT算法,算法,DFT的計(jì)算量大大的計(jì)算量大大減少,運(yùn)算時(shí)間縮短減少,運(yùn)算時(shí)間縮短12個(gè)數(shù)量級(jí)。個(gè)數(shù)量級(jí)。lDFT的變換公
52、式為的變換公式為 其中其中 為旋轉(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 kNNNNWWW/,nkmnknknk mNmNNN mWWWW利用這些特性可以使利用這些特性可以使DFT運(yùn)算中有些項(xiàng)進(jìn)行合并,將長(zhǎng)序列運(yùn)算中有些項(xiàng)進(jìn)行合并,將長(zhǎng)序列的的DFT分解為短序列的分解為短序列的DFT。DF
53、T從算法上分為按時(shí)間抽選(從算法上分為按時(shí)間抽選(DIT)和按頻率抽選)和按頻率抽選(DIF)。)?;?的的DIT又被稱為庫(kù)利一圖基算法?;直环Q為庫(kù)利一圖基算法。基2的的DIF又稱為桑德又稱為桑德圖基算法。圖基算法。 7.5.2 庫(kù)利一圖基算法庫(kù)利一圖基算法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)就是將序列下標(biāo)用二進(jìn)制表示,然后將二進(jìn)制數(shù)按照相反的方向排列,即得進(jìn)
54、制表示,然后將二進(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、110b、001b、101b、011b、111b,對(duì)應(yīng)的,對(duì)應(yīng)的十進(jìn)制數(shù)
55、是:十進(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的間距為:的間距為: )()()(1qXWpXpXmrNmm)()()(1qXWpXqXmrNmm1,.,1 ,
56、 0Mmmpq27.5.3 FFT算法的實(shí)現(xiàn)算法的實(shí)現(xiàn)l為了敘述簡(jiǎn)單,本書給出采用為了敘述簡(jiǎn)單,本書給出采用C語(yǔ)言編寫的語(yǔ)言編寫的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); /*
57、fft函數(shù)聲明 */例例7-13,基,基2DIT FFT算法的算法的C語(yǔ)言實(shí)現(xiàn)。語(yǔ)言實(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; /* 說(shuō)明輸入信號(hào)數(shù)組,為復(fù)數(shù) */complex WM; /* 說(shuō)明旋轉(zhuǎn)因子數(shù)組e(-j2PI/N),為復(fù)數(shù) */ complex temp; /* 說(shuō)明臨時(shí)復(fù)數(shù)變量 */float xinN;float spectrumN; /* 說(shuō)明功率譜信號(hào)數(shù)組,為實(shí)數(shù) */float re1N,im1N; /* 說(shuō)明臨時(shí)變量數(shù)組,為實(shí)數(shù) */void main() unsigned int i,j,L,LE,LE1; /*- */* 產(chǎn)生旋轉(zhuǎn)因
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國(guó)純棉棉襖行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年焊泥粉項(xiàng)目可行性研究報(bào)告
- 2025年槽式混合機(jī)項(xiàng)目可行性研究報(bào)告
- 2025年料流開(kāi)關(guān)項(xiàng)目可行性研究報(bào)告
- 廣西2025年廣西民族大學(xué)招聘教職人員控制數(shù)人員28人筆試歷年參考題庫(kù)附帶答案詳解
- 2025至2031年中國(guó)單片微電腦繞線機(jī)控制器行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年制冷管項(xiàng)目可行性研究報(bào)告
- 2025至2031年中國(guó)CRP定量試劑盒行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2030年高真冷裱膜項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年中國(guó)閃光繼電器數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- (高清版)DB43∕T 1147-2015 太陽(yáng)能果蔬烘干機(jī)
- 醫(yī)院人體器官捐獻(xiàn)及獲取流程
- 結(jié)腸造瘺還納手術(shù)配合
- 2024年云南省中考物理真題含解析
- 《安防監(jiān)控培訓(xùn)》課件
- 2025年中國(guó)艾草行業(yè)市場(chǎng)現(xiàn)狀、發(fā)展概況、未來(lái)前景分析報(bào)告
- (閩教版)六年級(jí)下英語(yǔ)教學(xué)計(jì)劃
- 人教版英語(yǔ)高考試卷與參考答案(2024年)
- 河砂、碎石生產(chǎn)質(zhì)量保證措施方案
- 全國(guó)教育科學(xué)規(guī)劃課題申報(bào)書:02.《鑄牢中華民族共同體意識(shí)的學(xué)校教育研究》
- 三位數(shù)除以兩位數(shù)過(guò)關(guān)練習(xí)口算題大全附答案
評(píng)論
0/150
提交評(píng)論