基于TMS320F2812DSP處理器的FIR濾波器的設(shè)計(jì)與實(shí)現(xiàn).doc_第1頁
基于TMS320F2812DSP處理器的FIR濾波器的設(shè)計(jì)與實(shí)現(xiàn).doc_第2頁
基于TMS320F2812DSP處理器的FIR濾波器的設(shè)計(jì)與實(shí)現(xiàn).doc_第3頁
基于TMS320F2812DSP處理器的FIR濾波器的設(shè)計(jì)與實(shí)現(xiàn).doc_第4頁
基于TMS320F2812DSP處理器的FIR濾波器的設(shè)計(jì)與實(shí)現(xiàn).doc_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

目 錄一、引言- 2 -二、設(shè)計(jì)目的- 2 -三、設(shè)計(jì)要求- 2 -四、總體設(shè)計(jì)- 3 -4.1利用matlab軟件的fdatool工具設(shè)計(jì)fir濾波器- 3 -4.1.1有限沖擊響應(yīng)數(shù)字濾波器的基礎(chǔ)理論- 3 -4.1.2 利用matlab軟件的fdatool設(shè)計(jì)fir濾波器- 3 -4.1.3提取濾波器參數(shù)- 7 -4.2 ccs環(huán)境下fir濾波器的設(shè)計(jì)及軟件仿真- 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 對實(shí)時采樣信號進(jìn)行濾波的fir濾波器的實(shí)現(xiàn)- 14 -4.3.1 程序清單- 14 -4.3.2 測試效果- 17 -4.3.3 sci串行數(shù)據(jù)傳輸- 17 -五、總結(jié)- 21 -六、參考文獻(xiàn)- 22 -基于tms320f2812 dsp處理器的fir濾波器的設(shè)計(jì)與實(shí)現(xiàn)一、引言在當(dāng)今信息時代數(shù)字信號處理已成為一門極其重要的學(xué)科。數(shù)字信號處理在通信、語音、圖像等眾多相關(guān)領(lǐng)域得到了廣泛的應(yīng)用。數(shù)字信號處理(dsp)包括兩重含義:數(shù)字信號處理技術(shù)(digital signal processing)和數(shù)字信號處理器(digital signal processor)。數(shù)字信號處理(dsp)是利用計(jì)算機(jī)或?qū)S锰幚碓O(shè)備,以數(shù)值計(jì)算的方法、對信號進(jìn)行采集、濾波、增強(qiáng)、壓縮、估值和識別等加工處理,借以達(dá)到提取信息和便于應(yīng)用的目的,其應(yīng)用范圍涉及幾乎所有的工程技術(shù)領(lǐng)域。在數(shù)字信號處理的應(yīng)用中,數(shù)字濾波器很重要而且得到了廣泛的應(yīng)用。按照數(shù)字濾波器的特性,它可以被分為線性與非線性、因果與非因果、無限長沖擊響應(yīng)(iir)與有限長沖擊響應(yīng)(fir)等等。其中,線性時不變的數(shù)字濾波器是最基本的類型;iir 濾波器的特征是具有無限持續(xù)時間沖激響應(yīng),而fir濾波器的沖激響應(yīng)只能延續(xù)一定時間,在工程實(shí)際中可以采用遞歸的方式實(shí)現(xiàn)也可以采用非遞歸的方式實(shí)現(xiàn)。目前fir濾波器的實(shí)現(xiàn)方法大致可分為三種:利用單片通用數(shù)字濾波器集成電路、dsp器件或者可編程邏輯器件實(shí)現(xiàn)。其中以使用通用dsp芯片實(shí)現(xiàn)方式較為簡單,是一種實(shí)時、快速、特別適合于實(shí)現(xiàn)各種數(shù)字信號處理運(yùn)算的微處理器,借助于通用數(shù)字計(jì)算機(jī)按濾波器的設(shè)計(jì)算法編出程序進(jìn)行數(shù)字濾波計(jì)算。由于它具有豐富的硬件資源、改進(jìn)的哈佛結(jié)構(gòu)、高速數(shù)據(jù)處理能力和強(qiáng)大的指令系統(tǒng)而在通信、航空、航天、雷達(dá)、工業(yè)控制、網(wǎng)絡(luò)及家用電器等各個領(lǐng)域得到廣泛應(yīng)用 。二、設(shè)計(jì)目的(1)掌握用窗函數(shù)法設(shè)計(jì)fir濾波器的原理及方法,熟悉線性纖維fir濾波器的幅頻特性和相頻特性,熟悉不同的窗函數(shù)對濾波器性能的影響。(2) 掌握使用matlab編程的基本方法,學(xué)會利用fdatool 工具來快速設(shè)計(jì)滿足需要的濾波器。(3) 掌握tms320f2812 dsp處理器開發(fā)的程序框架結(jié)構(gòu),學(xué)習(xí)驅(qū)動tms320f2812 dsp處理器程序編寫并能使其正常工作。實(shí)習(xí)驅(qū)動adc模塊實(shí)現(xiàn)信號的實(shí)時采集與模數(shù)轉(zhuǎn)換。(4) 掌握使用tms320f2812 dsp處理器實(shí)現(xiàn)fir數(shù)字低通濾波器的設(shè)計(jì)方法,并能夠?qū)崟r采集輸入信號并濾除高頻信號再通過sci串口傳輸?shù)接?jì)算機(jī)顯示。三、設(shè)計(jì)要求1、利用matlab軟件的fdatool工具設(shè)計(jì)fir濾波器,并提取濾波器參數(shù);2、在ccs集成開發(fā)環(huán)境下,利用第1步得到的濾波器參數(shù),利用窗函數(shù)法設(shè)計(jì)fir濾波器程序,觀察輸入信號及濾波后得到的輸出信號的時域波形及fft magnitude波形;3、利用tms320f2812的adc片內(nèi)外設(shè)的外圍電路實(shí)時采集的混頻信號數(shù)據(jù),使用1個51階的fir低通濾波器,在ccs中設(shè)計(jì)fir濾波器程序?qū)崿F(xiàn)濾波,觀察相關(guān)波形及濾波效果,通過sci接口將數(shù)據(jù)傳送到計(jì)算機(jī)上;4、(選做)利用ti公司的tlv320aic23高性能立體聲音頻codec芯片,通過mic或音頻接口采樣音頻信號,對采樣的音頻信號做濾波運(yùn)算,進(jìn)行低音加重處理,再將運(yùn)算過的音頻數(shù)據(jù)通過揚(yáng)聲器播放出來。四、總體設(shè)計(jì)4.1利用matlab軟件的fdatool工具設(shè)計(jì)fir濾波器4.1.1有限沖擊響應(yīng)數(shù)字濾波器的基礎(chǔ)理論濾波器就是在時間域或頻域內(nèi),對已知激勵產(chǎn)生規(guī)定響應(yīng)的網(wǎng)絡(luò),使其能夠從信號中提取有用的信號,抑制并衰減不需要的信號。濾波器的設(shè)計(jì)實(shí)質(zhì)上就是對提出的要求給出相應(yīng)的性能指標(biāo),再通過計(jì)算,使物理可實(shí)現(xiàn)的實(shí)際濾波器頻率響應(yīng)特性逼近給出的頻率響應(yīng)特性。fir 數(shù)字濾波器系統(tǒng)的傳遞函數(shù)為: (1)由此得到系統(tǒng)的差分方程: (2)若fir 數(shù)字濾波器的單位沖激響應(yīng)序列為h(n),它就是濾波器系數(shù)向量b(n)。傳統(tǒng)的濾波器分析與設(shè)計(jì)均使用繁瑣的公式計(jì)算,改變參數(shù)后需要重新運(yùn)算,從而在分析與設(shè)計(jì)濾波器尤其是高階濾波器時工作量特別大。這里應(yīng)用matlab 設(shè)計(jì)fir濾波器,根據(jù)給定的性能指標(biāo)設(shè)計(jì)一個h(z),使其逼近這一指標(biāo),進(jìn)而計(jì)算并確定濾波器的系數(shù)b(n),再將所設(shè)計(jì)濾波器的幅頻響應(yīng)、相頻響應(yīng)曲線作為輸出,與設(shè)計(jì)要求進(jìn)行比較,對設(shè)計(jì)的濾波器進(jìn)行優(yōu)化。設(shè)計(jì)完成之后將得到fir濾波器的單位沖激響應(yīng)序列h(n)的各個參數(shù)值。4.1.2 利用matlab軟件的fdatool設(shè)計(jì)fir濾波器() 首先在命令窗口鍵入fdatool命令,啟動濾波器設(shè)計(jì)分析器,調(diào)出fdatool界面,如下圖所示。 fdatool界面() 在filter type選項(xiàng)中選lowpass,在design method中選擇fir濾波器,接著在fir中選擇window (窗函數(shù)) 法。() 然后在filter order 中選擇specify order (為指定階數(shù)),輸入數(shù)值為“24”;在opitions框中選中“scale passband”;在窗類型(window:)下拉框選擇“blackman”。() 在frenquency specification選項(xiàng)中,將fs(為采樣頻率)、fc (為通帶截止頻率)中分別鍵入30000 hz和9600 hz。() 點(diǎn)擊“design filter”按鈕,完成濾波器的設(shè)計(jì)。具體參數(shù)及設(shè)計(jì)成功后的結(jié)果如下圖所示。 fir低通濾波器設(shè)計(jì)() 通過菜單選項(xiàng)analysis 來分析濾波器的幅頻響應(yīng)和相頻響應(yīng)特性。點(diǎn)擊analysis 中的magnitude response和phase response 對幅頻和相頻響應(yīng)進(jìn)行分析。如下圖所示 幅頻和相頻響應(yīng)進(jìn)行分析() 在fdatool 中,選擇targets - generate c header.,單擊generate按鈕,選擇路徑,即可輸出前一步設(shè)計(jì)出的 fir濾波器的系數(shù)表。(默認(rèn)的系數(shù)表文件為fdacoefs.h。如下圖所示。 導(dǎo)出濾波器系數(shù)() 在matlab中打開得到的fdacoefs.h的文件,如下圖所示 從matlab中打開的fdacoefs.h文件4.1.3提取濾波器參數(shù)取系數(shù)表中的數(shù)據(jù)小數(shù)點(diǎn)后3位有效值,得到如下內(nèi)容:const float b25= 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 4.2 ccs環(huán)境下fir濾波器的設(shè)計(jì)及軟件仿真4.2.1 程序流程圖初始化輸入低通濾波器各頻率參數(shù)構(gòu)建濾波器頻域特性波形使用fdatool提取濾波器參數(shù)或用fir濾波器計(jì)算程序計(jì)算得到濾波器參數(shù)構(gòu)建fir濾波器進(jìn)行濾波無限循環(huán)4.2.2 在ccs集成開發(fā)環(huán)境下新建fir濾波器工程()實(shí)驗(yàn)準(zhǔn)備設(shè)置軟件仿真模式,啟動ccs。()建立工程建立一個文件夾,存放在d:fir,將d:課程設(shè)計(jì)fir濾波器fir源程序文件夾下的工程全部復(fù)制到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)設(shè)置波形時域觀察窗口。選擇菜單viewgraphtime/frequency ,分別進(jìn)行如下圖所示進(jìn)行設(shè)置以便觀察輸入/輸出時域波形。 輸入數(shù)據(jù)時域波形觀察 輸出數(shù)據(jù)時域波形觀察選擇菜單viewgraphtime/frequency ,分別進(jìn)行如下圖所示進(jìn)行設(shè)置以便觀察輸入/輸出頻域波形。輸入數(shù)據(jù)頻域波形觀察 輸出數(shù)據(jù)頻域波形觀察(3)設(shè)置斷點(diǎn)。在程序fir.c中,有注釋斷點(diǎn)的語句上設(shè)置軟件斷點(diǎn)。(4)運(yùn)行并觀察結(jié)果。選擇debug菜單的run項(xiàng),或按f5鍵運(yùn)行程序。觀察到的圖形如下圖所示。濾波前后的數(shù)據(jù)波形及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#define 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 ;float 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;nin+; nin%=256;foutput=fir();foutnout=foutput;nout+;if ( nout=256 )nout=0;/* 請?jiān)诖司渖显O(shè)置軟件斷點(diǎn) */ 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-=f2pi;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 = 1 /* 32-bit data sections */ .ebss : h0ram, page = 1 .econst : h0ram, page = 1 .esysmem : h0ram, page = 14.3 對實(shí)時采樣信號進(jìn)行濾波的fir濾波器的實(shí)現(xiàn)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;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/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 150mhz 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 vector 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 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; 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; / 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 = 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(;) 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 = 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ā)現(xiàn)使用dsp芯片實(shí)現(xiàn)的的fir濾波器已經(jīng)成功的將設(shè)定的混合頻率信號中的高頻部分濾除。4.3.3 sci串行數(shù)據(jù)傳輸對實(shí)時采樣信號進(jìn)行濾波并通過sci串口數(shù)據(jù)傳輸?shù)接?jì)算機(jī)的程序如下:#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 int 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)*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 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 vector 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 needed 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 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; / 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 = 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; 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; for

溫馨提示

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