第7章 TMS320C54x DSP匯編語言程序設計_第1頁
第7章 TMS320C54x DSP匯編語言程序設計_第2頁
第7章 TMS320C54x DSP匯編語言程序設計_第3頁
第7章 TMS320C54x DSP匯編語言程序設計_第4頁
第7章 TMS320C54x DSP匯編語言程序設計_第5頁
已閱讀5頁,還剩93頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第第7章章 匯編語言程序設計匯編語言程序設計n7.1 程序流程控制程序流程控制n7.2 數(shù)據(jù)塊傳送數(shù)據(jù)塊傳送n7.3 定點數(shù)的基本算術運算定點數(shù)的基本算術運算n7.4 長字運算和并行運算長字運算和并行運算n7.5 FIR濾波器的濾波器的DSP實現(xiàn)實現(xiàn)n7.6 IIR數(shù)字濾波器的數(shù)字濾波器的DSP實現(xiàn)實現(xiàn)n7.7 FFT運算的運算的DSP實現(xiàn)實現(xiàn)7.1 程序流程控制程序流程控制n7.1.1 程序存儲器地址生成程序存儲器地址生成n7.1.2 條件操作條件操作n7.1.3 分支轉移分支轉移n7.1.4 調用與返回調用與返回n7.1.5 重復操作重復操作n7.1.6 TMS320C54x中斷系統(tǒng)中斷系

2、統(tǒng)n7.1.7 堆棧的使用堆棧的使用返回首頁7.1.1 程序存儲器地址生成程序存儲器地址生成n程序存儲器中存放指令代碼、參數(shù)表和立即數(shù)。程序地址程序存儲器中存放指令代碼、參數(shù)表和立即數(shù)。程序地址產生邏輯(產生邏輯(PAGEN),), 包括以下包括以下5個寄存器(如圖個寄存器(如圖7-1所所示):示):n 程序計數(shù)器(程序計數(shù)器(PC););n重復計數(shù)器(重復計數(shù)器(RC););n塊重復計數(shù)器(塊重復計數(shù)器(BRC););n塊重復起始地址寄存器(塊重復起始地址寄存器(RSA););n塊重復結束地址寄存器(塊重復結束地址寄存器(REA)。)。圖7-1 程序地址產生邏輯(PAGEN)寄存器返回本節(jié)7

3、.1.2 條件操作條件操作表7-1 條件指令中的各種條件表7-2 多條件指令中的條件組合第一組第二組A 類B 類A 類B 類C 類EQOVTCCBIONEQNOVNTCNCNBIOLT LEQ GT GEQ 返回本節(jié)7.1.3 分支轉移分支轉移表7-3 無條件分支轉移指令指令說明周期數(shù)(非延遲/延遲)BD用指令中給出的地址加載PC4/2BACCD用指定累加器(A或B)的低16位作為地址加載PC6/4表7-4 條件分支轉移指令指令說明周期數(shù)(條件滿足/不滿足)非延遲延遲BCD如果指令中的條件滿足,就用指令中給出的地址加載PC5/33/3BANZD如果所選擇的輔助寄存器不等于0,就用指令中給出的地

4、址加載PC(用于循環(huán))4/22/2表7-5 遠分支轉移指令指令說明周期數(shù)(非延遲/延遲)FBD可以轉移到由指令所給定的23位地址(C5402為20位地址)4/2FBACCD可以轉移到指定累加器所給定的23位地址(C5402為20位地址)6/4返回本節(jié)7.1.4 調用與返回調用與返回表7-6 無條件調用與返回指令表7-7 條件調用與返回指令表7-8 遠調用和遠返回指令返回本節(jié)7.1.5 重復操作重復操作1單條指令的重復操作單條指令的重復操作nRPT(重復執(zhí)行下一條指令)和重復執(zhí)行下一條指令)和RPTZ(累加器累加器清清0后重復執(zhí)行下一條指令)可重復執(zhí)行其后的后重復執(zhí)行下一條指令)可重復執(zhí)行其后的

5、一條指令,重復的次數(shù)是指令操作數(shù)加一條指令,重復的次數(shù)是指令操作數(shù)加1,這個,這個值保存在值保存在16位的重復計數(shù)寄存器(位的重復計數(shù)寄存器(RC)中,這中,這個值只能由重復指令(個值只能由重復指令(RPT或或RPTZ)加載,而加載,而不能編程設置不能編程設置RC寄存器中的值,一次給定指令重寄存器中的值,一次給定指令重復執(zhí)行的最大次數(shù)是復執(zhí)行的最大次數(shù)是65536。2塊重復操作指令塊重復操作指令n塊重復指令塊重復指令RPTB用于將一個碼塊重復執(zhí)行用于將一個碼塊重復執(zhí)行N1次,次,N是裝入塊重復計數(shù)器(是裝入塊重復計數(shù)器(BRC)的值。一個的值。一個碼塊可以有一條或多條指令。單條重復指令執(zhí)行碼塊

6、可以有一條或多條指令。單條重復指令執(zhí)行時關閉所有可屏蔽中斷,而塊重復操作執(zhí)行期間時關閉所有可屏蔽中斷,而塊重復操作執(zhí)行期間可以響應中斷??梢皂憫袛唷?返回本節(jié)7.1.6 TMS320C54x中斷系統(tǒng)中斷系統(tǒng)1中斷類型中斷類型nC54x支持軟件中斷和硬件中斷。軟件中斷由程序支持軟件中斷和硬件中斷。軟件中斷由程序指令產生(指令產生(INTR、TRAP或或RESET)。)。硬件中斷硬件中斷由設備的一個信號產生,包括兩種類型:外部由設備的一個信號產生,包括兩種類型:外部硬件中斷由外部中斷口的信號觸發(fā);內部硬件硬件中斷由外部中斷口的信號觸發(fā);內部硬件中斷由片內外設的信號觸發(fā)。無論是硬件中斷還中斷由片內

7、外設的信號觸發(fā)。無論是硬件中斷還是軟件中斷,都屬于以下兩種類型:是軟件中斷,都屬于以下兩種類型:(1)可屏蔽中斷)可屏蔽中斷 (2)非屏蔽中斷)非屏蔽中斷 表7-9 C5402中斷源的中斷向量及硬件中斷優(yōu)先權2中斷標志寄存器(中斷標志寄存器(IFR)和中斷屏蔽寄存器和中斷屏蔽寄存器(IMR)n中斷標志寄存器(中斷標志寄存器(IFR)是存儲器映象的是存儲器映象的CPU寄寄存器。如圖存器。如圖7-2所示為所示為C5402中斷標志寄存器中斷標志寄存器(IFR)結構圖。中斷屏蔽寄存器(結構圖。中斷屏蔽寄存器(IMR)也是也是存儲器映象的存儲器映象的CPU寄存器,用來屏蔽外部和內部寄存器,用來屏蔽外部和

8、內部的可屏蔽中斷,其結構圖同的可屏蔽中斷,其結構圖同IFR完全一致。完全一致。 圖7-2 中斷標志寄存器(IFR)結構圖3中斷響應過程(中斷響應過程(如圖如圖7-3所示)所示)(1)接受中斷請求。)接受中斷請求。 (2)響應中斷。)響應中斷。(3)執(zhí)行中斷服務程序()執(zhí)行中斷服務程序(ISR)。)。接受中斷請求是可屏蔽中斷嗎?INTM=0 ?IMR 屏蔽位 =1 ?是硬件中斷或INTR 指令中斷嗎? 響應中斷 , 發(fā)出 信號 IACKPC 保存到軟件堆棧執(zhí)行中斷服務程序中斷返回,恢復PC繼續(xù)執(zhí)行主程序INTM 位置1否是是是否是否否圖7-3 中斷操作流程圖4重新映象中斷向量地址重新映象中斷向量

9、地址nC54x的中斷向量表是可重定位的,即在的中斷向量表是可重定位的,即在DSP復位復位時,中斷向量表的起始地址固定為時,中斷向量表的起始地址固定為0FF80H,復復位后,此表的起始地址可由用戶指定。位后,此表的起始地址可由用戶指定。n中斷向量可重新被映象到程序存儲器的任何一個中斷向量可重新被映象到程序存儲器的任何一個128字頁開始的地方(除保留區(qū)域外)。中斷向字頁開始的地方(除保留區(qū)域外)。中斷向量地址由量地址由PMST中的中斷向量指針中的中斷向量指針I(yè)PTR(9位)位)和中斷向量號(和中斷向量號(031)左移兩位后組成。如圖)左移兩位后組成。如圖7-4所示。所示。中斷向量號左移兩位后中斷向

10、量地址圖7-4 中斷向量地址的產生返回本節(jié)7.1.7 堆棧的使用堆棧的使用n堆棧被用于保存中斷程序、調用子程序的返回地堆棧被用于保存中斷程序、調用子程序的返回地址,也用于保護和恢復用戶指定的寄存器和數(shù)據(jù),址,也用于保護和恢復用戶指定的寄存器和數(shù)據(jù),還可用于程序調用時的參數(shù)傳遞。返回地址是由還可用于程序調用時的參數(shù)傳遞。返回地址是由DSP自動保存的。自動保存的。 n用戶編寫的壓棧指令和出棧指令將指定的內容壓用戶編寫的壓棧指令和出棧指令將指定的內容壓入和彈出堆棧,入和彈出堆棧,SP總是指向最后壓入堆棧的數(shù)據(jù),總是指向最后壓入堆棧的數(shù)據(jù),壓棧之前壓棧之前SP減減1,出棧之后,出棧之后SP加加1。 n

11、C54x支持軟件堆棧,在用戶指定的存儲區(qū)開辟一支持軟件堆棧,在用戶指定的存儲區(qū)開辟一塊存儲區(qū)作為堆棧存儲器。堆棧的定義及初始化塊存儲區(qū)作為堆棧存儲器。堆棧的定義及初始化步驟為:步驟為:1)聲明具有適當長度的未初始化段;)聲明具有適當長度的未初始化段;2)將堆棧指針指向棧底;)將堆棧指針指向棧底;3)在鏈接命令文件)在鏈接命令文件(.cmd)中將堆棧段放入內部中將堆棧段放入內部數(shù)據(jù)存儲區(qū)。數(shù)據(jù)存儲區(qū)。 返回本節(jié)7.2 數(shù)據(jù)塊傳送數(shù)據(jù)塊傳送nC54x有有10條數(shù)據(jù)傳送指令,為:條數(shù)據(jù)傳送指令,為:n數(shù)據(jù)存儲器數(shù)據(jù)存儲器數(shù)據(jù)存儲器:數(shù)據(jù)存儲器:MVDK Smem,dmad MVKD dmad,Sme

12、m MVDD Xmem,Ymemn數(shù)據(jù)存儲器數(shù)據(jù)存儲器MMR:MVDM dmad,MMR MVMD MMR,dmad MVMM mmr,mmr返回首頁n程序存儲器程序存儲器數(shù)據(jù)存儲器:數(shù)據(jù)存儲器: MVPD Pmad,Smem MVDP Smem,Pmad READA Smem WRITA Smem1編寫匯編源程序為編寫匯編源程序為 .mmregs .def _c_int00 .dataTBL: .word0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1 7,18,19 .word 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,

13、1PROM: .usect PROM,20 .bss a,20 .bss x,20 .bss y,20DATA: .usectDATA,20 .text_c_int00 b start nop nopstart:STM: #a,AR1;a20=0,1,2,3,4,5,6,7,8,9,10, ;11,12,13,14,15,16,17,18,19 RPT #39 ;x20=1,1,1,1,1,1,1,1,1,1 MVPD TBL,*AR1+ ;1,1,1,1,1,1,1,1,1,1 STM #x,AR2;將數(shù)據(jù)存儲器中的數(shù)組將數(shù)據(jù)存儲器中的數(shù)組x20復制到數(shù)組復制到數(shù)組y20 STM #y,AR

14、3 RPT #19 MVDD *AR2+,*AR3+ STM #a,AR1;將數(shù)據(jù)存儲器中的將數(shù)據(jù)存儲器中的a20寫入到程序存儲器寫入到程序存儲器PROM LD #PROM,A STM #19,AR3LOOPP:WRITA *AR1+ ADD #1,A,A BANZ LOOPP,*AR3- LD #PROM-1,A ;讀程序存儲器讀程序存儲器PROM中中20個數(shù)據(jù)存入數(shù)據(jù)個數(shù)據(jù)存入數(shù)據(jù)存儲器存儲器DATA STM#DATA,AR1 ST #19,BRC RPTB LOOP2 ADD #1,A,ALOOP2: READA *AR1+ ;該指令為單字指令該指令為單字指令WAIT: NOP B WA

15、IT2建立匯編源程序建立匯編源程序n點 擊點 擊 CCS C5000圖標,進入圖標,進入 CCS環(huán)境,再點 擊環(huán)境,再點 擊FileNewSource File菜單命令,打開一個空白文檔,菜單命令,打開一個空白文檔,將匯編源程序逐條輸入。將匯編源程序逐條輸入。n單擊單擊FileSave菜單命令,出現(xiàn)如圖菜單命令,出現(xiàn)如圖7-5所示的窗口,選所示的窗口,選擇擇D:Program Filesti myprojcetsmymove子目錄,在子目錄,在“文件名文件名”一欄中輸入一欄中輸入mymove,并選擇保存類型為并選擇保存類型為Assembly Source Files(*.asm),),單擊單擊

16、“保存保存”按鈕,按鈕,以上匯編程序被存盤。以上匯編程序被存盤。3建立鏈接命令文件建立鏈接命令文件n點擊點擊FileNewSource File菜單命令,打開一個空白菜單命令,打開一個空白文檔,逐條輸入鏈接命令文件。文檔,逐條輸入鏈接命令文件。 mymove.obj -o mymove.out -m mymove.map MEMORY PAGE 0:RAM: origin=1000h,length=800h RAM1: origin=2000h,length=300hPAGE 1: DARAM1: origin=0100h,length=100hDARAM2: origin=0200h,len

17、gth=100h SECTIONS .data :RAM PAGE 0.text :RAM PAGE 0PROM:RAM1 PAGE 0.bss:DARAM1 PAGE 1DATA:DARAM2 PAGE 1n點擊點擊FileSave菜單命令,如圖菜單命令,如圖7-5所示,選擇所示,選擇D:Program Filestimyprojcetsmymove子目錄,在子目錄,在“文件名文件名”一欄中輸入一欄中輸入mymove,并選擇保存類型為并選擇保存類型為TI Command Language File(*.cmd),),單擊單擊“保存保存”按按鈕,以上鏈接命令程序被存盤。鈕,以上鏈接命令程序被存

18、盤。4創(chuàng)建一個新工程創(chuàng)建一個新工程n在在Project菜單中選擇菜單中選擇New項,彈出項,彈出Project Creation(工程創(chuàng)建)窗口,如圖工程創(chuàng)建)窗口,如圖7-6所示。在所示。在Project一欄鍵入一欄鍵入mymove,然后單擊然后單擊“完成完成”按按鈕,鈕,CCS將創(chuàng)建一個名為將創(chuàng)建一個名為mymove.pjt的工程,的工程,此文件保存了工程的設置信息及工程中的文件引此文件保存了工程的設置信息及工程中的文件引用情況。用情況。 圖7-5 保存匯編源程序 圖7-6 工程創(chuàng)建窗口5將有關文件添加到工程中將有關文件添加到工程中n從從Project菜單中選取菜單中選取Add Files

19、 to Project命令,命令,選擇文件選擇文件mymove.asm,雙擊將雙擊將mymove.asm添加到工程中。添加到工程中。n點擊點擊ProjectAdd Files to Project菜單命令,菜單命令,將將mymove.cmd添加到工程文件中。添加到工程文件中。n逐層打開如圖逐層打開如圖7-7所示。雙擊所示。雙擊mymove.asm打開文打開文件,可以觀察和修改件,可以觀察和修改mymove.asm文件的內容。文件的內容。 6匯編、編譯和鏈接產生匯編、編譯和鏈接產生.out文件文件n點擊點擊Project菜單中的菜單中的Rebuild All。請注意在監(jiān)請注意在監(jiān)視窗口顯示的匯編

20、、編譯和鏈接的相關信息。如視窗口顯示的匯編、編譯和鏈接的相關信息。如果沒有錯誤,將產生果沒有錯誤,將產生mymove.out文件;如果有文件;如果有錯,在監(jiān)視窗口以紅色字體顯示出錯行,用鼠標錯,在監(jiān)視窗口以紅色字體顯示出錯行,用鼠標雙擊該行,光標跳將至源程序相應的出錯行。修雙擊該行,光標跳將至源程序相應的出錯行。修改錯誤后,重新匯編、鏈接。改錯誤后,重新匯編、鏈接。7加載并運行加載并運行.out文件文件n執(zhí)行菜單命令執(zhí)行菜單命令FileLoad Program,選擇選擇mymove.out并打開,將并打開,將Rebuild All生成的程序生成的程序加載到加載到DSP中。中。CCS將自動打開一

21、個反匯編窗口,將自動打開一個反匯編窗口,顯示加載程序的反匯編指令。顯示加載程序的反匯編指令。n點擊點擊DebugRun菜單命令運行程序,單步執(zhí)行菜單命令運行程序,單步執(zhí)行程序則點擊程序則點擊DebugStepInto菜單命令,或按菜單命令,或按F8鍵。鍵。8觀察運行結果觀察運行結果n點擊點擊ViewMemory菜單命令,將出現(xiàn)如圖菜單命令,將出現(xiàn)如圖7-8所所示的選項窗口,將示的選項窗口,將Address改為改為0 x0100,單擊單擊OK按鈕,將在匯編窗口顯示選定的數(shù)據(jù)空間的按鈕,將在匯編窗口顯示選定的數(shù)據(jù)空間的內容。內容。n當結果數(shù)據(jù)錯誤時,可檢查源程序并進行修改。當結果數(shù)據(jù)錯誤時,可檢查

22、源程序并進行修改。修改完畢,可重新匯編、鏈接,再加載運行修改完畢,可重新匯編、鏈接,再加載運行.out文件,直到結果正確。文件,直到結果正確。返回本節(jié)7.3 定點數(shù)的基本算術運算定點數(shù)的基本算術運算n7.3.1 加法、減法和乘法運算加法、減法和乘法運算n7.3.2 定點除法運算定點除法運算返回首頁7.3.1 加法、減法和乘法運算加法、減法和乘法運算1定點定點DSP中數(shù)據(jù)表示方法中數(shù)據(jù)表示方法n定點定點DSP芯片的數(shù)值表示是基于芯片的數(shù)值表示是基于2的補碼表示形的補碼表示形式。數(shù)的定標有式。數(shù)的定標有Q表示法和表示法和S表示法,表表示法,表7-10列出列出了了16位數(shù)的位數(shù)的16種種Q表示和表示

23、和S表示,以及它們所能表示,以及它們所能表示的十進制數(shù)范圍。表示的十進制數(shù)范圍。16位中有一個符號位、位中有一個符號位、Q個小數(shù)位和個小數(shù)位和15-Q個整數(shù)位來表示一個數(shù)。個整數(shù)位來表示一個數(shù)。 表7-10 Q表示、S表示及數(shù)值范圍圖7-9 DSP定點運算中小數(shù)的表示216位定點加法和位定點加法和16位定點減法位定點減法nC54x中提供了多條用于加法的指令,如中提供了多條用于加法的指令,如ADD、ADDC、ADDM和和ADDS。其中,其中,ADDS用于無符用于無符號數(shù)的加法運算,號數(shù)的加法運算,ADDC用于帶進位的加法運算用于帶進位的加法運算而而ADDM專用于立即數(shù)的加法。專用于立即數(shù)的加法。

24、n C54x中提供了多條用于減法的指令,如中提供了多條用于減法的指令,如SUB、SUBB、SUBC和和SUBS。其中,其中,SUBS用于無符用于無符號數(shù)的減法運算,號數(shù)的減法運算,SUBB用于帶進位的減法運算,用于帶進位的減法運算,而而SUBC為條件減法指令。為條件減法指令。316位定點整數(shù)乘法位定點整數(shù)乘法nC54x中提供了大量的乘法運算指令,其結果都是中提供了大量的乘法運算指令,其結果都是32位,放在累加器位,放在累加器A或或B中。乘數(shù)在中。乘數(shù)在C54x的乘法的乘法指令中很靈活,可以是指令中很靈活,可以是T寄存器、立即數(shù)、存儲寄存器、立即數(shù)、存儲單元和累加器單元和累加器A或或B的高的高1

25、6位。在位。在C54x中,一般中,一般對數(shù)據(jù)的處理都當做有符號數(shù),如果是無符號數(shù)對數(shù)據(jù)的處理都當做有符號數(shù),如果是無符號數(shù)相乘,使用相乘,使用MPYU指令,這是一條專門用于無符指令,這是一條專門用于無符號數(shù)乘法運算的指令,其他指令都是有符號數(shù)的號數(shù)乘法運算的指令,其他指令都是有符號數(shù)的乘法。乘法。 4Q15定點小數(shù)乘法運算定點小數(shù)乘法運算n兩個兩個16位整數(shù)相乘,乘積總是位整數(shù)相乘,乘積總是“向左增長向左增長”,這,這就意味著多次相乘后乘積將會很快超出定點器件就意味著多次相乘后乘積將會很快超出定點器件的數(shù)據(jù)范圍。而且要將的數(shù)據(jù)范圍。而且要將32位乘積保存到數(shù)據(jù)存儲位乘積保存到數(shù)據(jù)存儲器,就要耗

26、費兩個機器周期以及兩個字的程序和器,就要耗費兩個機器周期以及兩個字的程序和RAM單元。然而,兩個單元。然而,兩個Q15的小數(shù)相乘,乘積總的小數(shù)相乘,乘積總是是“向右增長向右增長”,這就意味著超出定點器件數(shù)據(jù),這就意味著超出定點器件數(shù)據(jù)范圍的將是不太感興趣的部分。范圍的將是不太感興趣的部分。 5混合表示法混合表示法n有些情況下,運算過程中為了既滿足數(shù)值的動態(tài)有些情況下,運算過程中為了既滿足數(shù)值的動態(tài)范圍又保證一定的精度,必須采用范圍又保證一定的精度,必須采用Q0與與Q15之間之間的表示方法。的表示方法。n在做加、減運算時,如果兩個操作數(shù)的定標不一在做加、減運算時,如果兩個操作數(shù)的定標不一樣,在運

27、算前要進行小數(shù)點的調整,為保證運算樣,在運算前要進行小數(shù)點的調整,為保證運算精度,需要使精度,需要使Q值小的數(shù)調整為與另一個數(shù)的值小的數(shù)調整為與另一個數(shù)的Q值一樣大。值一樣大。返回本節(jié)7.3.2 定點除法運算定點除法運算n在一般的在一般的DSP中,沒有專門的除法指令。同樣,在中,沒有專門的除法指令。同樣,在C54x中也沒有提供專門的除法指令。一般有兩種方法來完成除中也沒有提供專門的除法指令。一般有兩種方法來完成除法。一種是用乘法來代替,除以某個數(shù)相當于乘以其倒數(shù),法。一種是用乘法來代替,除以某個數(shù)相當于乘以其倒數(shù),所以先求出其倒數(shù),然后相乘。這種方法對于除以常數(shù)特所以先求出其倒數(shù),然后相乘。這

28、種方法對于除以常數(shù)特別適用。另一種方法是使用條件減法別適用。另一種方法是使用條件減法SUBC指令,加上重指令,加上重復指令復指令RPT #15,重復重復16次減法完成無符號數(shù)除法運算。次減法完成無符號數(shù)除法運算。兩種不同情況下的除法程序。兩種不同情況下的除法程序。1|被除數(shù)被除數(shù)|ROM1PAGE 0.data : INTRAM1 PAGE 1FIR_COEF: INTRAM2 PAGE 1FIR_BFR : INTRAM3 PAGE 1.stack : B2B PAGE 1 5CCS集成開發(fā)環(huán)境下上機操作過程集成開發(fā)環(huán)境下上機操作過程(1)在)在CCS上建立上建立fir工程并運行工程并運行f

29、ir.out程序。程序。 (2)觀察輸入信號的波形及頻譜(如圖)觀察輸入信號的波形及頻譜(如圖7-137-15所示)。所示)。(3)觀察輸出信號的波形及頻譜(如圖)觀察輸出信號的波形及頻譜(如圖7-16、7-17所示所示 )。)。 圖7-13 Graph 屬性設置窗口 圖7-14 輸入信號的時域波形 圖7-15 輸入信號的頻譜圖 圖7-16 濾波器輸出信號時域波形 圖7-17 濾波器輸出信號頻譜圖返回本節(jié)7.5.3 系數(shù)對稱系數(shù)對稱FIR濾波器的濾波器的DSP實現(xiàn)實現(xiàn)1在數(shù)據(jù)存儲器中開辟兩個循環(huán)緩沖區(qū):在數(shù)據(jù)存儲器中開辟兩個循環(huán)緩沖區(qū):nNew循環(huán)緩沖區(qū)中存放循環(huán)緩沖區(qū)中存放N/2=4個新數(shù)據(jù)

30、(設個新數(shù)據(jù)(設N=8););Old循環(huán)緩沖區(qū)中存放循環(huán)緩沖區(qū)中存放4個老數(shù)據(jù)。循環(huán)個老數(shù)據(jù)。循環(huán)緩沖區(qū)的長度為緩沖區(qū)的長度為N/2。緩沖區(qū)指針緩沖區(qū)指針AR2指向指向New 緩沖區(qū)中最新的數(shù)據(jù);緩沖區(qū)中最新的數(shù)據(jù);AR3指向指向Old 緩沖區(qū)中最緩沖區(qū)中最老的數(shù)據(jù),并在程序存儲器中設置系數(shù)表,如圖老的數(shù)據(jù),并在程序存儲器中設置系數(shù)表,如圖7-18所示。所示。2.(AR2)+(AR3)AH(累加器累加器A的高位)的高位)n(AR2)-1AR2,(AR3)-1AR33將累加器將累加器B清清0,重復執(zhí)行以下操作,重復執(zhí)行以下操作N/2次(次(i=0,1,2,3):):n(AH)系數(shù)系數(shù)ai+(B)

31、B,系數(shù)指針(系數(shù)指針(PAR)加加1n(AR2)+(AR3)AH,AR2 和和AR3減減1n并保存或輸出結果(結果在并保存或輸出結果(結果在BH中)。中)。4修正數(shù)據(jù)指針修正數(shù)據(jù)指針n將將AR2和和AR3分別指向分別指向New緩沖區(qū)中最新的數(shù)據(jù)緩沖區(qū)中最新的數(shù)據(jù)和和Old 緩沖區(qū)中最老的數(shù)據(jù)。用緩沖區(qū)中最老的數(shù)據(jù)。用New 緩沖區(qū)最老緩沖區(qū)最老的數(shù)據(jù)替代的數(shù)據(jù)替代Old 緩沖區(qū)中最老的數(shù)據(jù),如圖緩沖區(qū)中最老的數(shù)據(jù),如圖7-18中箭頭所示。中箭頭所示。Old 緩沖區(qū)指針減緩沖區(qū)指針減1。5輸入一個新的數(shù)據(jù)替代輸入一個新的數(shù)據(jù)替代New 緩沖區(qū)中最老的數(shù)緩沖區(qū)中最老的數(shù)據(jù)據(jù)n重復執(zhí)行步驟重復執(zhí)行

32、步驟25。返回本節(jié)7.6 IIR數(shù)字濾波器的數(shù)字濾波器的DSP實現(xiàn)實現(xiàn)nIIR數(shù)字濾波器的傳遞函數(shù)數(shù)字濾波器的傳遞函數(shù)H(z)為:為:n其對應的差分方程為:其對應的差分方程為:n例如,對于直接形式的二階例如,對于直接形式的二階IIR數(shù)字濾波器,其結數(shù)字濾波器,其結構如圖構如圖7-19所示,編程時,可以分別開辟四個緩沖所示,編程時,可以分別開辟四個緩沖區(qū),存放輸入、輸出變量和濾波器的系數(shù),如圖區(qū),存放輸入、輸出變量和濾波器的系數(shù),如圖7-20所示。所示。N1iiiM0iiiza1zb)z(H) in(ya) in(xb)n(yN1iiM0ii(7-4)(7-3)返回首頁圖7-19 直接形式的二階

33、IIR數(shù)字濾波器圖7-20 存放輸入、輸出變量和濾波器系數(shù)的緩沖區(qū)n【例【例7-15】設計一個三階的切比雪夫】設計一個三階的切比雪夫型帶通數(shù)字濾波器,型帶通數(shù)字濾波器,其采樣頻率其采樣頻率Fs =16kHz,其通頻帶其通頻帶3.2kHzf4.8kHz,內內損耗不大于損耗不大于1dB;f 5.6kHz為阻帶,其衰減為阻帶,其衰減大于大于20dB。1IIR濾波器的設計濾波器的設計n在在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(n

34、,rp,wn) n設計結果為:設計結果為: 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.5397582產生濾波器輸入信號的文件產生濾波器輸入信號的文件n使用使用CCS的的Simulator進行濾波器特性的測試時,需要輸進行濾波器特性的測試時,需要輸入時間信號入時間信號x(n)。 #include #include void main() int i; do

35、uble f256; FILE *fp; if(fp=fopen(iirin.inc,wt)=NULL) printf(cant open file! n); return; fprintf(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 1返回本節(jié)7.7 FFT運算的運算的DSP實現(xiàn)實現(xiàn)n7.7.1 基二實數(shù)基二實數(shù)FFT運算的算法運算的算法n7.7.2 FFT運算模擬信號的產生

36、及輸入運算模擬信號的產生及輸入n7.7.3 實序列實序列FFT匯編源程序及鏈接命令文件匯編源程序及鏈接命令文件n7.7.4 觀察信號時域波形及其頻譜觀察信號時域波形及其頻譜返回首頁7.7.1 基二實數(shù)基二實數(shù)FFT運算的算法運算的算法n該算法主要分為以下四步。該算法主要分為以下四步。第一步,輸入數(shù)據(jù)的組合和位倒序第一步,輸入數(shù)據(jù)的組合和位倒序n把輸入序列作位倒序是為了在整個運算最后的輸把輸入序列作位倒序是為了在整個運算最后的輸出中得到的序列是自然順序。如圖出中得到的序列是自然順序。如圖7-21所示。所示。第二步,第二步,N點復數(shù)點復數(shù)FFTn在在DATA數(shù)據(jù)處理緩沖器里進行數(shù)據(jù)處理緩沖器里進行

37、N點復數(shù)點復數(shù)FFT運算。運算。如圖如圖7-22所示。所示。第三步,分離復數(shù)第三步,分離復數(shù)FFT的輸出為奇部分和偶部分的輸出為奇部分和偶部分n分離分離FFT輸出為輸出為RP、RM、IP和和IM四個序列,即四個序列,即偶實數(shù)、奇實數(shù)、偶虛數(shù)和奇虛數(shù)四部分。偶實數(shù)、奇實數(shù)、偶虛數(shù)和奇虛數(shù)四部分。第四步,產生第四步,產生2N點的復數(shù)點的復數(shù)FFT輸出序列輸出序列n產生產生2N=256個點的復數(shù)輸出,它與原始的個點的復數(shù)輸出,它與原始的256個個點的實輸入序列的點的實輸入序列的DFT一致。如圖一致。如圖7-24所示。所示。返回本節(jié)7.7.2 FFT運算模擬信號的產生及輸入運算模擬信號的產生及輸入n產生模擬輸入信號可以有兩種方法,第一種方法是用產生模擬輸入信號可以有兩種方法,第一種方法是用C語言程序產生語言程序產生mdata.inc文件,然后,在文件,然后,在DSP匯編語言匯編語言程序中通過程序中通過.copy匯編命令將生成的數(shù)據(jù)文件匯編命令將生成的數(shù)據(jù)文件mdata.inc復制到匯編程序中,如例復制到匯編程序中,如例7-12和例和例7-15,數(shù)據(jù)起始地址,數(shù)據(jù)起

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論