试验四FIR滤波器试验_第1页
试验四FIR滤波器试验_第2页
试验四FIR滤波器试验_第3页
试验四FIR滤波器试验_第4页
试验四FIR滤波器试验_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验四 FIR滤波器实验一、实验内容1、掌握TMS320C54x DSPLIB函数库中fir 函数的使用方法。2、学习并掌握5402 DSP片上外设DMA勺结构与配置 。3、使用DM徽据传输方式在C语言下实现直接型的 FIR滤波器。、实验内容1、使用查询方式设计一个fir低通滤波器,通带频率为2400Hz。Fpass=2400,fstop=3000,fs=16000-1D0567FrftMhCiY Q=HZJ#include #include #lnclude #include #include #include void delay(s16 period);HANDLE hHandset;s

2、16 data;/* Create specific data section for coeffiecients */#pragma DATA_SECTION(coeffs,coefficients);/* Low Pass Filter */short coeffs16=2810,985,-906, -2112, -1653,2005,6878, 10556, 10556,6878,2005, -1653, -2112,-906,985,2810;#pragma DATA_SECTION(delaybuff,delay);short delaybuff16=0;short *delaypt

3、r = &(delaybuff0);short inp_buffer1;short out_buffer1;short *inp_ptr=inp_buffer;short *out_ptr=out_buffer;void main() s16 cnt=2;if (brd_init(100) return;/* blink the leds a couple times */ while ( cnt- )brd_led_toggle(BRD_LED0);/* brd_delay_msec(1000); */ delay(1000)-brd_led_toggle(BRD_LED1); /* brd

4、_delay_msec(1000); */ delay(1000);brd_led_toggle(BRD_LED2); /* brd_delay_msec(1000); */ delay(1000);/* Open Handset Codec */* Acquire handle/* DAC in 15-bit/* ADC in 15-bit/* 6dB gain on/* -6dB gain on/* 16KHz sampling ratehHandset = codec_open(HANDSET_CODEC); to codec */* Set codec parameters */cod

5、ec_dac_mode(hHandset, CODEC_DAC_15BIT);mode */codec_adc_mode(hHandset, CODEC_ADC_15BIT);mode */codec_ain_gain(hHandset, CODEC_AIN_6dB);analog input to ADC */codec_aout_gain(hHandset, CODEC_AOUT_MINUS_6dB);analog output from DAC */codec_sample_rate(hHandset,SR_16000);*/* Polling and digital loopback

6、*/ while (1)/* Wait for sample from handset */while (!MCBSP_RRDY(HANDSET_CODEC) ;/* Read sample from and write back to handset codec */ inp_buffer0 = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC);/*数据处理开始*/fir计算fir(inp_ptr,coeffs,out_ptr,&delayptr,16,1);data=out_buffer0&0 xfffe;/*数据处理结束*/*(volatile u16*)

7、DXR1_ADDR(HANDSET_CODEC) =data ;void delay(s16 period)int i, j;for(i=0; iperiod; i+)for(j=0; j1; j+);2.使用DMAT式设计FIR低通滤波器,通带截频为4000Hz。从5402 DSK板白MIC端口输入频率为3000Hz和5000Hz正弦信号的叠力口信号,使用示波器在SPEAKE端口观察输出信号波形。Fpass=4000,fstop=5000,fs=16000_ Magnitude Response (dB),-10-15口-25-3001234567Frequency (kHtz)EB_PhM

8、fi Rsseonss,#include #include #include #include #include void delay(s16 period);extern void DMAC2ISR();HANDLE hHandset;unsigned int dmsefc, dmmcr, dmctr, src_addr, dst_addr;unsigned int dmpre, dmsrcp, dmdstp, dmidx0, dmidx1, dmfri0, dmfri1, dmgsa, dmgda, dmgcr, dmgfr;/* Create specific data section

9、for buffer (symbol, section_name) */#pragma DATA_SECTION(buffer,audio_buffer); int buffer0 x500;/* Create specific data section for coeffiecients */#pragma DATA_SECTION(coeffs,coefficients);/* Low Pass Filter */int coeffs16=560,-1842,-686,1948,-282,-3838,3221,16103, 16103,3221,-3838,-282,1948,-686,-

10、1842,560);#pragma DATA_SECTION(delaybuff,delay);int delaybuff16=0;/* declare and initialize two variables for DMAC ISRs */int frame=0;int flag=0;int temp;int currbuff = 0;/* delayptr holds the address of the start of the delay buffer */int *delayptr1 = &(delaybuff0);void main() s16 cnt=1;/* These ar

11、e the items that BIOS will set when we use it */BSCR = 0 x8806;XPC = 0;PMST = 0 xA0;brd_set_cpu_freq(50);TIMER_HALT(0);brd_set_wait_states(7, 7, 9);TIMER_RESET(0);if(brd_init_bios() return;/* Open Handset Codec */hHandset = codec_open(HANDSET_CODEC);/* Acquire handle tocodec */ /* Set codec paramete

12、rs */* DAC in 15-bit mode*/codec_dac_mode(hHandset, CODEC_DAC_15BIT);/* ADC in 15-bit mode/* 6dB gain on analog/* -6dB gain on analog/* 16KHz sampling rate */codec_adc_mode(hHandset, CODEC_ADC_15BIT);*/codec_ain_gain(hHandset, CODEC_AIN_6dB);input to ADC */codec_aout_gain(hHandset, CODEC_AOUT_MINUS_

13、6dB); output from DAC */codec_sample_rate(hHandset,SR_16000);/* Clear IFR */INTR_CLR_FLAG(DMAC2);/* Reset all DMA channels */ dma_reset_all();/* Initialize DMA channel 2 */dmsefc = (DSYNC_REVT1 12);dmmcr = (AuToINIT_ENABLE 15) | (DINM_ENABLE 14) |(IMOD_HALFBLOCK 13) | (CTMOD_DEC 12) | (INDEXMODE_NOM

14、OD 8) | (SPACE_DATA 6) | (INDEXMODE_INC 2) | (SPACE_DATA);dmctr = 0 xFF;src_addr = DRR1_ADDR(HANDSET_CODEC);dst_addr = (unsigned int) &buffer;dma_init(DMA_CH2, dmsefc, dmmcr, dmctr, SPACE_DA TA, src_addr, SPACE_DATA, dst_addr);/* Set number of frames for channel 2 */DMA_FRAMECOUNT(DMA_CH2, 2);/* Set

15、 up global autoinit registers for DMA CH2 Input */dmgsa = src_addr;dmgda = dst_addr;dmgcr = 0 xFF;dmgfr = 2;/* Set up global priority and enable control register for Ch2 */dmpre = (HIGH_PRIORITY 10) | (INTSEL_01 6);dmsrcp = SPACE_DATA;dmdstp = SPACE_DATA;dmidx0 = 0;dmidx1 = 0;dmfri0 = 0;dmfri1 = 0;d

16、ma_global_init(dmpre, dmsrcp, dmdstp, dmidx0, dmidx1, dmfri0, dmfri1, dmgsa, dmgda, dmgcr, dmgfr);/* Enable channel 2 */DMA_ENABLE(DMA_CH2);/* prime the serial port to begin input buffer stream */temp = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC);/* Enable DMAC2 interrupt */INTR_ENABLE(DMAC2);/* Enable

17、 Global Interrupts */INTR_GLOBAL_ENABLE;/* Endless loop waiting for DMAC2 interrupt */for(;);void delay(s16 period)int i, j;for(i=0; iperiod; i+)for(j=0; j1; j+);三、思考题1、滤波器设计中为什么要设有延迟缓冲存储器delaybuff ?其大小有什么限制?答:在连续的数据块计算时,延迟缓冲区保存着后一次计算所需要的前一次的输出数据。这个缓冲存储区的起点必须位于Kbit的边界处,即起始地址的最低 K=log2nh个有效位必须为零。2、使用查询方式和 DMA断方式设计FIR滤波器时,允许DSP用于数字信号处理程序的最大时间分别是多少?答:查询方式允许 DSP用于数字信号处理程序的最大时间是Ts,而DMA中断方式设计 FIR滤波器时允许用于数字信号处理程序的最大时间是256Ts。3、如何设置C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论