基于TMS320F2812 DSP處理器的FIR濾波器的設計與實現_第1頁
基于TMS320F2812 DSP處理器的FIR濾波器的設計與實現_第2頁
基于TMS320F2812 DSP處理器的FIR濾波器的設計與實現_第3頁
基于TMS320F2812 DSP處理器的FIR濾波器的設計與實現_第4頁
基于TMS320F2812 DSP處理器的FIR濾波器的設計與實現_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目 錄一、引言- 2 -二、設計目的- 2 -三、設計要求- 2 -四、總體設計- 3 -4.1利用matlab軟件的fdatool工具設計fir濾波器- 3 -4.1.1有限沖擊響應數字濾波器的基礎理論- 3 -4.1.2 利用matlab軟件的fdatool設計fir濾波器- 3 -4.1.3提取濾波器參數- 7 -4.2 ccs環(huán)境下fir濾波器的設計及軟件仿真- 8 -4.2.1 程序流程圖- 8 -4.2.2 在ccs集成開發(fā)環(huán)境下新建fir濾波器工程- 8 -4.2.3觀察濾波前后的信號的時域波形及fft magnitude波形- 9 -4.2.4 程序清單- 11 -4.3 對實

2、時采樣信號進行濾波的fir濾波器的實現- 14 -4.3.1 程序清單- 14 -4.3.2 測試效果- 17 -4.3.3 sci串行數據傳輸- 17 -五、總結- 21 -六、參考文獻- 22 -基于tms320f2812 dsp處理器的fir濾波器的設計與實現一、引言在當今信息時代數字信號處理已成為一門極其重要的學科。數字信號處理在通信、語音、圖像等眾多相關領域得到了廣泛的應用。數字信號處理(dsp)包括兩重含義:數字信號處理技術(digital signal processing)和數字信號處理器(digital signal processor)。數字信號處理(dsp)是利用計算機或

3、專用處理設備,以數值計算的方法、對信號進行采集、濾波、增強、壓縮、估值和識別等加工處理,借以達到提取信息和便于應用的目的,其應用范圍涉及幾乎所有的工程技術領域。在數字信號處理的應用中,數字濾波器很重要而且得到了廣泛的應用。按照數字濾波器的特性,它可以被分為線性與非線性、因果與非因果、無限長沖擊響應(iir)與有限長沖擊響應(fir)等等。其中,線性時不變的數字濾波器是最基本的類型;iir 濾波器的特征是具有無限持續(xù)時間沖激響應,而fir濾波器的沖激響應只能延續(xù)一定時間,在工程實際中可以采用遞歸的方式實現也可以采用非遞歸的方式實現。目前fir濾波器的實現方法大致可分為三種:利用單片通用數字濾波器

4、集成電路、dsp器件或者可編程邏輯器件實現。其中以使用通用dsp芯片實現方式較為簡單,是一種實時、快速、特別適合于實現各種數字信號處理運算的微處理器,借助于通用數字計算機按濾波器的設計算法編出程序進行數字濾波計算。由于它具有豐富的硬件資源、改進的哈佛結構、高速數據處理能力和強大的指令系統而在通信、航空、航天、雷達、工業(yè)控制、網絡及家用電器等各個領域得到廣泛應用 。二、設計目的(1)掌握用窗函數法設計fir濾波器的原理及方法,熟悉線性纖維fir濾波器的幅頻特性和相頻特性,熟悉不同的窗函數對濾波器性能的影響。(2) 掌握使用matlab編程的基本方法,學會利用fdatool 工具來快速設計滿足需要

5、的濾波器。(3) 掌握tms320f2812 dsp處理器開發(fā)的程序框架結構,學習驅動tms320f2812 dsp處理器程序編寫并能使其正常工作。實習驅動adc模塊實現信號的實時采集與模數轉換。(4) 掌握使用tms320f2812 dsp處理器實現fir數字低通濾波器的設計方法,并能夠實時采集輸入信號并濾除高頻信號再通過sci串口傳輸到計算機顯示。三、設計要求1、利用matlab軟件的fdatool工具設計fir濾波器,并提取濾波器參數;2、在ccs集成開發(fā)環(huán)境下,利用第1步得到的濾波器參數,利用窗函數法設計fir濾波器程序,觀察輸入信號及濾波后得到的輸出信號的時域波形及fft magni

6、tude波形;3、利用tms320f2812的adc片內外設的外圍電路實時采集的混頻信號數據,使用1個51階的fir低通濾波器,在ccs中設計fir濾波器程序實現濾波,觀察相關波形及濾波效果,通過sci接口將數據傳送到計算機上;4、(選做)利用ti公司的tlv320aic23高性能立體聲音頻codec芯片,通過mic或音頻接口采樣音頻信號,對采樣的音頻信號做濾波運算,進行低音加重處理,再將運算過的音頻數據通過揚聲器播放出來。四、總體設計4.1利用matlab軟件的fdatool工具設計fir濾波器4.1.1有限沖擊響應數字濾波器的基礎理論濾波器就是在時間域或頻域內,對已知激勵產生規(guī)定響應的網絡

7、,使其能夠從信號中提取有用的信號,抑制并衰減不需要的信號。濾波器的設計實質上就是對提出的要求給出相應的性能指標,再通過計算,使物理可實現的實際濾波器頻率響應特性逼近給出的頻率響應特性。fir 數字濾波器系統的傳遞函數為: (1)由此得到系統的差分方程: (2)若fir 數字濾波器的單位沖激響應序列為h(n),它就是濾波器系數向量b(n)。傳統的濾波器分析與設計均使用繁瑣的公式計算,改變參數后需要重新運算,從而在分析與設計濾波器尤其是高階濾波器時工作量特別大。這里應用matlab 設計fir濾波器,根據給定的性能指標設計一個h(z),使其逼近這一指標,進而計算并確定濾波器的系數b(n),再將所設

8、計濾波器的幅頻響應、相頻響應曲線作為輸出,與設計要求進行比較,對設計的濾波器進行優(yōu)化。設計完成之后將得到fir濾波器的單位沖激響應序列h(n)的各個參數值。4.1.2 利用matlab軟件的fdatool設計fir濾波器() 首先在命令窗口鍵入fdatool命令,啟動濾波器設計分析器,調出fdatool界面,如下圖所示。 fdatool界面() 在filter type選項中選lowpass,在design method中選擇fir濾波器,接著在fir中選擇window (窗函數) 法。() 然后在filter order 中選擇specify order (為指定階數),輸入數值為“24”;

9、在opitions框中選中“scale passband”;在窗類型(window:)下拉框選擇“blackman”。() 在frenquency specification選項中,將fs(為采樣頻率)、fc (為通帶截止頻率)中分別鍵入30000 hz和9600 hz。() 點擊“design filter”按鈕,完成濾波器的設計。具體參數及設計成功后的結果如下圖所示。 fir低通濾波器設計() 通過菜單選項analysis 來分析濾波器的幅頻響應和相頻響應特性。點擊analysis 中的magnitude response和phase response 對幅頻和相頻響應進行分析。如下圖所示

10、 幅頻和相頻響應進行分析() 在fdatool 中,選擇targets - generate c header.,單擊generate按鈕,選擇路徑,即可輸出前一步設計出的 fir濾波器的系數表。(默認的系數表文件為fdacoefs.h。如下圖所示。 導出濾波器系數() 在matlab中打開得到的fdacoefs.h的文件,如下圖所示 從matlab中打開的fdacoefs.h文件4.1.3提取濾波器參數取系數表中的數據小數點后3位有效值,得到如下內容:const float b25= 0.0,0.0,0.001,-0.002,-0.002,0.01,-0.009,-0.018,0.049,-

11、0.02,-0.11,0.28,0.64,0.28,-0.11,-0.02,0.049,-0.018,-0.009,0.01,-0.002,-0.002,0.001,0.0,0.0 4.2 ccs環(huán)境下fir濾波器的設計及軟件仿真4.2.1 程序流程圖初始化輸入低通濾波器各頻率參數構建濾波器頻域特性波形使用fdatool提取濾波器參數或用fir濾波器計算程序計算得到濾波器參數構建fir濾波器進行濾波無限循環(huán)4.2.2 在ccs集成開發(fā)環(huán)境下新建fir濾波器工程()實驗準備設置軟件仿真模式,啟動ccs。()建立工程建立一個文件夾,存放在d:fir,將d:課程設計fir濾波器fir源程序文件夾下的

12、工程全部復制到d:fir,在ccs中打開d:firfirfir.pjt工程,打開的ccs集成開發(fā)環(huán)境如下圖所示。 在ccs集成開發(fā)環(huán)境中打開工程4.2.3觀察濾波前后的信號的時域波形及fft magnitude波形(1)編譯工程文件生成fir.out文件,并通過file-load program裝載該文件。(2)設置波形時域觀察窗口。選擇菜單viewgraphtime/frequency ,分別進行如下圖所示進行設置以便觀察輸入/輸出時域波形。 輸入數據時域波形觀察 輸出數據時域波形觀察選擇菜單viewgraphtime/frequency ,分別進行如下圖所示進行設置以便觀察輸入/輸出頻域波

13、形。輸入數據頻域波形觀察 輸出數據頻域波形觀察(3)設置斷點。在程序fir.c中,有注釋斷點的語句上設置軟件斷點。(4)運行并觀察結果。選擇debug菜單的run項,或按f5鍵運行程序。觀察到的圖形如下圖所示。濾波前后的數據波形及fft分析的對比圖4.2.4 程序清單fir.c 程序/#include dsp281x_device.h / dsp281x headerfile include file/#include dsp281x_examples.h / dsp281x examples include file/#include f2812a.h#includemath.h#defin

14、e firnumber 25/#define signal1f 1000/#define signal2f 4500/#define samplef 10000#define pi 3.1415926float inputwave();float fir();float fhnfirnumber= 0.0,0.0,0.001,-0.002,-0.002,0.01,-0.009,-0.018,0.049,-0.02,-0.11,0.28,0.64,0.28,-0.11,-0.02,0.049,-0.018,-0.009,0.01,-0.002,-0.002,0.001,0.0,0.0 ;floa

15、t fxnfirnumber= 0.0 ;float finput,foutput;float fsignal1,fsignal2;float fstepsignal1,fstepsignal2;float f2pi;int i;float fin256,fout256;int nin,nout;main(void) nin=0; nout=0;f2pi=2*pi;fsignal1=0.0;fsignal2=pi*0.1;fstepsignal1=2*pi/30;fstepsignal2=2*pi*1.4;while ( 1 )finput=inputwave();finnin=finput;

16、nin+; nin%=256;foutput=fir();foutnout=foutput;nout+;if ( nout=256 )nout=0;/* 請在此句上設置軟件斷點 */ float inputwave()for ( i=firnumber-1;i0;i- )fxni=fxni-1;fxn0=sin(fsignal1)+cos(fsignal2)/6.0;fsignal1+=fstepsignal1; if ( fsignal1=f2pi )fsignal1-=f2pi;fsignal2+=fstepsignal2;if ( fsignal2=f2pi )fsignal2-=f2p

17、i;return(fxn0);float fir()float fsum;fsum=0;for ( i=0;i reset, page = 0 /*vectors : vectors, page = 0*/ .pinit : prog, page = 0 .cinit : prog, page = 0 .text : prog, page = 0 /* 16-bit data sections */ .const : l0l1ram, page = 1 .bss : l0l1ram, page = 1 .stack : m1ram, page = 1 .sysmem : m0ram, page

18、 = 1 /* 32-bit data sections */ .ebss : h0ram, page = 1 .econst : h0ram, page = 1 .esysmem : h0ram, page = 14.3 對實時采樣信號進行濾波的fir濾波器的實現4.3.1 程序清單#include dsp281x_device.h / dsp281x headerfile include file#include dsp281x_examples.h / dsp281x examples include file#include #define pi 3.1415927int px256;

19、int py256;double npass,h51, x, y, xmid51;int m=50;int n=256;/ prototype statements for functions found within this errupt void adc_isr(void);/ global variables used in this example:uint16 loopcount;uint16 conversioncount;void firdes(int m, double npass) int t; for (t=0; t=m; t+) ht = sin(t-m

20、/2.0)*npass*pi)/(pi*(t-m/2.0); if (t=m/2) ht=npass; void main(void) int xm,ym; double fs,fstop,r,rm; int i,j,p,k;/ pll, watchdog, enable peripheral clocks/ this example function is found in the dsp281x_sysctrl.c file. initsysctrl();/ for this example, set hspclk to sysclkout / 6 (25mhz assuming 150m

21、hz sysclkout) eallow; sysctrlregs.hispcp.all = 0x3; / hspclk = sysclkout/6 edis; / disable cpu interrupts dint;/ initialize the pie control registers to their default state. initpiectrl();/ disable cpu interrupts and clear all cpu interrupt flags: ier = 0x0000; ifr = 0x0000;/ initialize the pie vect

22、or table with pointers to the shell interrupt / service routines (isr). initpievecttable();/ interrupts that are used in this example are re-mapped to/ isr functions found within this file. eallow; / this is needed to write to eallow protected register pievecttable.adcint = &adc_isr; edis; / this is

23、 needed to disable write to eallow protected registersinitadc(); / for this example, init the adc/ enable adcint in pie piectrlregs.pieier1.bit.intx6 = 1; ier |= m_int1; / enable cpu interrupt 1 eint; / enable global interrupt intm ertm; / enable global realtime interrupt dbgm loopcount = 0; convers

24、ioncount = 0; / configure adc adcregs.adctrl1.bit.seq_casc = 1; adcregs.adcmaxconv.all = 0x0000; / setup 2 convs on seq1 adcregs.adcchselseq1.bit.conv00 = 0x4; / setup adcina0 as 1st seq1 conv. adcregs.adctrl2.bit.eva_soc_seq1 = 1; / enable evasoc to start seq1 adcregs.adctrl2.bit.int_ena_seq1 = 1;

25、/ enable seq1 interrupt (every eos)/ configure eva/ assumes eva clock is already enabled in initsysctrl(); evaregs.t1cmpr = 0x0380; / setup t1 compare value evaregs.t1pr = 0x07ff; / setup period register evaregs.gptcona.bit.t1toadc = 1; / enable evasoc in eva evaregs.t1con.all = 0x1042; / enable tim

26、er 1 compare (upcount mode)/ wait for adc interrupt k=0; fs = 250000; fstop = 20000; npass = fstop/fs; for (i=0; i=m; i+) xmidi=0; for(;) firdes(m, npass);for (i=0; i=n-1; i+) xm = pxi; x = xm/1023.0; for (p=0; p=m; p+) xmidm-p = xmidm-p-1; xmid0 = x; r = 0; rm= 0; for (j=0; j4; if(conversioncount =

27、 256) conversioncount = 0; else conversioncount+; / reinitialize for next adc sequence adcregs.adctrl2.bit.rst_seq1 = 1; / reset seq1 adcregs.adcst.bit.int_seq1_clr = 1; / clearint seq1 bit piectrlregs.pieack.all = pieack_group1; / acknowledge interrupt to pie return;4.3.2 測試效果如上圖所示,可以發(fā)現使用dsp芯片實現的的f

28、ir濾波器已經成功的將設定的混合頻率信號中的高頻部分濾除。4.3.3 sci串行數據傳輸對實時采樣信號進行濾波并通過sci串口數據傳輸到計算機的程序如下:#include dsp281x_device.h / dsp281x headerfile include file#include dsp281x_examples.h / dsp281x examples include file#include #define pi 3.1415927int px256;int py256;double npass,h51, x, y, xmid51;int m=50;int n=256;long i

29、nt delays; / prototype statements for functions found within this errupt void adc_isr(void);void scia_init(void);void scia_xmit(char a);/ global variables used in this example:uint16 loopcount;uint16 conversioncount;void firdes(int m, double npass) int t; for (t=0; t=m; t+) ht = sin(t-m/2.0)

30、*npass*pi)/(pi*(t-m/2.0); if (t=m/2) ht=npass; void main(void) int xm,ym; double fs,fstop,r,rm; int i,j,p,k;/ pll, watchdog, enable peripheral clocks/ this example function is found in the dsp281x_sysctrl.c file. initsysctrl();/ for this example, set hspclk to sysclkout / 6 (25mhz assuming 150mhz sy

31、sclkout) eallow; sysctrlregs.hispcp.all = 0x3; / hspclk = sysclkout/6 edis; / disable cpu interrupts dint;/ initialize the pie control registers to their default state. initpiectrl();/ disable cpu interrupts and clear all cpu interrupt flags: ier = 0x0000; ifr = 0x0000;/ initialize the pie vector ta

32、ble with pointers to the shell interrupt / service routines (isr). initpievecttable();/ interrupts that are used in this example are re-mapped to/ isr functions found within this file. eallow; / this is needed to write to eallow protected register pievecttable.adcint = &adc_isr; edis; / this is need

33、ed to disable write to eallow protected registers initadc(); / for this example, init the adc scia_init(); eallow; gpiomuxregs.gpfmux.all = 0x0030; /配置io口為專用引腳 edis;/ enable adcint in pie piectrlregs.pieier1.bit.intx6 = 1; ier |= m_int1; / enable cpu interrupt 1 eint; / enable global interrupt intm

34、ertm; / enable global realtime interrupt dbgm loopcount = 0; conversioncount = 0;/ configure adc adcregs.adctrl1.bit.seq_casc = 1; adcregs.adcmaxconv.all = 0x0000; / setup 2 convs on seq1 adcregs.adcchselseq1.bit.conv00 = 0x4; / setup adcina0 as 1st seq1 conv. adcregs.adctrl2.bit.eva_soc_seq1 = 1; /

35、 enable evasoc to start seq1 adcregs.adctrl2.bit.int_ena_seq1 = 1; / enable seq1 interrupt (every eos)/ configure eva/ assumes eva clock is already enabled in initsysctrl(); evaregs.t1cmpr = 0x0380; / setup t1 compare value evaregs.t1pr = 0x07ff; / setup period register evaregs.gptcona.bit.t1toadc =

36、 1; / enable evasoc in eva evaregs.t1con.all = 0x1042; / enable timer 1 compare (upcount mode)/ wait for adc interrupt k=0; fs = 250000; fstop = 20000; npass = fstop/fs; for (i=0; i=m; i+) xmidi=0; for(;) sciaregs.scitxbuf=0x55; sciaregs.scitxbuf=0x55; sciaregs.scitxbuf=0x55; sciaregs.scitxbuf=0x55;

37、 sciaregs.scitxbuf=0x55; sciaregs.scitxbuf=0x55; sciaregs.scitxbuf=0x55; sciaregs.scitxbuf=0x55;/幀首分隔符 firdes(m, npass);for (i=0; i=n-1; i+) xm = pxi; x = xm/1023.0; for (p=0; p=m; p+) xmidm-p = xmidm-p-1; xmid0 = x; r = 0; rm= 0; for (j=0; j=m; j+) r = xmidj * hj;rm = rm + r; y = rm; ym = (int)(1023.0 * y); pyi = ym; for(i=0;i256;i+) sciaregs.scitxbuf=pyi

溫馨提示

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

最新文檔

評論

0/150

提交評論