FIR实时滤波.doc_第1页
FIR实时滤波.doc_第2页
FIR实时滤波.doc_第3页
FIR实时滤波.doc_第4页
FIR实时滤波.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

DSP课程设计实验报告学 院:电子信息工程学院专 业:通信工程学 号:10213082学 生:谭啸宇指 导 教 师:钱满义2013年7月目录实验要求:3实验目的:3实验背景:31DMA技术3实验内容:41.基本思想42.程序与数据5主程序5噪声数据16FIR滤波器数据173.结果17实验感想20利用DSP实现实时信号FIR滤波实验要求:基本部分 (1) 掌握利用滤波器设计FIR滤波器的方法,并提取滤波器参数; (2) 掌握利用Matlab的信号处理工具箱的使用,以及利用Matlab对信号进行滤波 (3) 设计数字滤波算法,或调用DSPLIB中的滤波函数,实现对信号的滤波。 (4) 利用C语言对A/D、D/A进行初始化 (5) 利用C语言对DMA进行初始化 (6) 编写DMA中断服务程序,实现信号的实时滤波 (7) 利用CCS信号分析工具分析信号的频谱成分,确定滤波器的参数发挥部分(1)比较加不同窗和阶数时滤波器的滤波效果;(2)测试所设计滤波器的幅频特性和相频特性,并与MATLIB下的设计结果进行比较。(3)在实验板的Line in输入端接入正弦信号,分左右声道分别采集,并分别滤波。实验目的: 掌握利用 DSP 实现信号实时 FIR 滤波设计可使学生更加透彻的理解信号的采集方法和滤波方法。学会利用 Matlab 对信号进行 FIR 滤波,掌握 Matlab 的信号仿真。同时通过对 DSP 信号处理器及 A/D、D/A 转换器以及 DMA 的编程,可以培养学生 C 语言编程能力以及使用 DSP 硬件平台实现数字信号处理算法的能力。实验背景:1DMA技术Direct Memory Access(存储器直接访问)是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,既不通过CPU,也不需要CPU干预。整个数据传输操作在一个称为“DMA控制器”的控制下进行。CPU除了在数据传输开始和结束时做一点处理外,在传输过程中还可以进行其他的工作。这样,在大部分时间里,CPU和输入输出都处于并行操作,因此使整个计算机系统的效率大大提高。DMA是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依于 CPU 的大量中断负载,否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方,在这个时间中,CPU对于其他的工作来说就无法使用。DMA传输将数据从一个地址空间复制到另外一个地址空间,当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工作。DMA 传输对于高效能嵌入式系统算法和网络是很重要的。一个设备接口试图通过总线直接向另一个设备发送数据(一般是大批量的数据), 它会先向CPU发送DMA请求信号。外设通过DMA的一种专门接口电路DMA控制器(DMAC),向CPU提出接管总线控制权的总线请求,CPU收到该信号后,在当前的总线周期结束后,会按DMA信号的优先级和提出DMA请求的先后顺序响应DMA信号。CPU对某个设备接口响应DMA请求时,会让出总线控制权。于是在DMA控制器的管理下,外设和存储器直接进行数据交换,而不需CPU干预。数据传送完毕后,设备接口会向CPU发送DMA结束信号,交还总线控制权。实现DMA传送的基本操作如下:1、外设可通过DMA控制器向CPU发出DMA请求;2、CPU响应DMA请求,系统转变为DMA工作方式,并把总线控制权交给DMA控制器;3、由DMA控制器发送存储器地址,并决定传送数据块的长度;4、执行DMA传送;5、DMA操作结束,并把总线控制权交还CPU。DMA方式主要适用于一些高速的I/O设备。这些设备传输字节或字的速度非常快。对于这类高速I/O设备,如果用输入输出指令或采用中断的方法来传输字节信息,会大量占用CPU的时间,同时也容易造成数据的丢失。而DMA方式能使I/O设备直接和存储器进行成批数据的快速传送。2.FIR低通滤波器假设数字滤波器的频率响应函数H用下式表示:幅频特性表示信号通过该滤波器后各频率成分振幅衰减情况,而相频特性反映各频率成分通过滤波器后在时间上的延时情况。一般选频滤波器的技术要求由幅频特性给出,其相频特性是确定的,所以在设计过程中,对相频特性一般不作要求。在低通滤波器的幅频特性中,Wp和Ws分别称为通带边界频率和阻带截止频率。从Wp到Ws称为过渡带,过渡带上的频响一半是单调下降的。当冲击响应满足下列条件时,FIR滤波器具有对称结构,为线性相位滤波器:这种对称性,可使得乘法器数量减半:对n价滤波器,当n为偶数时,乘法器的个数为n/2个;当n为奇数时,乘法器的个数为(n+1)/2个。在电路实现中,乘法器占用的逻辑单元数较多。乘法器的增加,意味着电路成本增加,另外对电路的工作速度也有影响。 在DSP的应用中,可以应用Matlab的滤波器设计工具箱fdatool工具箱生成需要的FIR滤波器,在生成C文件,提取出相应的滤波数据,应用CCS来调用这些数据,从而应用DSP产生信号的滤波效果,这样就实现了FIR的低通滤波效果。实验内容:1.基本思想外部模拟信号先进行A/D转换,利用MCBSP的接收寄存器接收数据。利用CCS的频谱分析工具对输入信号进行频谱分析;根据频谱成分确定滤波器参数,然后利用Matlab设计FIR滤波器,将参数提取出来,存放到DSP存储区中。调用DSPLIB中的FIR滤波函数,对信号进行滤波。滤波后的数据利用DMA方式送到D/A转换器转换为模拟信号。2.程序与数据主程序:/* * Copyright (C) 2003 Texas Instruments Incorporated * All Rights Reserved */*-main_dmafir.c- * This is a DMA application example for Codec AIC23B analog input/output, * The example places the MCBSP in DMA transmit data mode and * syncs MCBSP receive with DMA channel 4 and MCBSP transmit * with DMA channel 5. * The example uses predefined CSL macros and symbolic * constants to create the initialization values needed for * the MCBSP and DMA control registers to effect the transfer * Created by hailingao , BJTU , 2012/06/25 */#include #include #include #include #include #include #include data.h/-Global data definition-/* Constants for the buffered ping-pong transfer */#define BUFFSIZE 256#define PING 0#define PONG 1/* * Data buffer declarations - the program uses four logical buffers of size * BUFFSIZE, one ping and one pong buffer on both receive and transmit sides. */#pragma DATA_SECTION (gBufferXmtPing, buffer_sect);Int16 gBufferXmtPingBUFFSIZE; / Transmit PING buffer#pragma DATA_SECTION (gBufferXmtPong, buffer_sect);Int16 gBufferXmtPongBUFFSIZE; / Transmit PONG buffer#pragma DATA_SECTION (gBufferRcvPing, buffer_sect);Int16 gBufferRcvPingBUFFSIZE; / Receive PING buffer#pragma DATA_SECTION (gBufferRcvPong, buffer_sect);Int16 gBufferRcvPongBUFFSIZE; / Receive PONG buffer#pragma DATA_SECTION (inp, .data_in1);DATA inpNX; #pragma DATA_SECTION (inp1, .data_in2);DATA inp1NX; #pragma DATA_SECTION (outbuf1, .data_in3);DATA outbuf1NX;/#pragma DATA_SECTION(out,.data_out);/DATA outNX; /*-*/ Config McBSP: Use McBSP to send and receive the data between DSP and AIC23B/*-*/MCBSP_Config Mcbsp1Config = MCBSP_SPCR1_RMK( MCBSP_SPCR1_DLB_OFF, / DLB = 0 MCBSP_SPCR1_RJUST_LZF, / RJUST = 0,right justify the data and zero fill the MSBs MCBSP_SPCR1_CLKSTP_DISABLE, / CLKSTP = 0 MCBSP_SPCR1_DXENA_ON, / DXENA = 1,DX delay enabler on 0, / Reserved = 0 MCBSP_SPCR1_RINTM_RRDY, / RINTM = 0 MCBSP_SPCR1_RSYNCERR_NO, / RSYNCER = 0 / MCBSP_SPCR1_RFULL_NO, / RFULL = 0 / MCBSP_SPCR1_RRDY_NO, / RRDY = 0 MCBSP_SPCR1_RRST_DISABLE / RRST = 0; Disable receiver ), MCBSP_SPCR2_RMK( MCBSP_SPCR2_FREE_NO, / FREE = 0 MCBSP_SPCR2_SOFT_NO, / SOFT = 0 MCBSP_SPCR2_FRST_FSG, / FRST = 1 ; Enable the frame-sync logic MCBSP_SPCR2_GRST_CLKG, / GRST = 1 ; The sample rate generator is take out of its reset state MCBSP_SPCR2_XINTM_XRDY, / XINTM = 0 MCBSP_SPCR2_XSYNCERR_NO, / XSYNCER =0 / MCBSP_SPCR2_XEMPTY_NO, / XEMPTY = 0 / MCBSP_SPCR2_XRDY_NO, / XRDY = 0 MCBSP_SPCR2_XRST_DISABLE / XRST = 0 Disable transimitter ), / 单数据相,接受数据长度为16位,每相2个数据 MCBSP_RCR1_RMK( MCBSP_RCR1_RFRLEN1_OF(1), / RFRLEN1 = 1 MCBSP_RCR1_RWDLEN1_16BIT / RWDLEN1 = 2 ), MCBSP_RCR2_RMK( MCBSP_RCR2_RPHASE_SINGLE, / RPHASE = 0 MCBSP_RCR2_RFRLEN2_OF(0), / RFRLEN2 = 0 MCBSP_RCR2_RWDLEN2_8BIT, / RWDLEN2 = 0 MCBSP_RCR2_RCOMPAND_MSB, / RCOMPAND = 0 No companding,any size data, MSB received first MCBSP_RCR2_RFIG_YES, / RFIG = 1 Frame-sync ignore MCBSP_RCR2_RDATDLY_1BIT / RDATDLY = 1 1-bit data delay ), MCBSP_XCR1_RMK( MCBSP_XCR1_XFRLEN1_OF(1), / XFRLEN1 = 1 MCBSP_XCR1_XWDLEN1_16BIT / XWDLEN1 = 2 ), MCBSP_XCR2_RMK( MCBSP_XCR2_XPHASE_SINGLE, / XPHASE = 0 MCBSP_XCR2_XFRLEN2_OF(0), / XFRLEN2 = 0 MCBSP_XCR2_XWDLEN2_8BIT, / XWDLEN2 = 0 MCBSP_XCR2_XCOMPAND_MSB, / XCOMPAND = 0 MCBSP_XCR2_XFIG_YES, / XFIG = 1 Unexpected Frame-sync ignore MCBSP_XCR2_XDATDLY_1BIT / XDATDLY = 1 1-bit data delay ), MCBSP_SRGR1_DEFAULT, MCBSP_SRGR2_DEFAULT, MCBSP_MCR1_DEFAULT, MCBSP_MCR2_DEFAULT, MCBSP_PCR_RMK( / MCBSP_PCR_IDLEEN_RESET, / IDLEEN = 0 MCBSP_PCR_XIOEN_SP, / XIOEN = 0 MCBSP_PCR_RIOEN_SP, / RIOEN = 0 MCBSP_PCR_FSXM_EXTERNAL, / FSXM = 0 Tranmit frame-syn is provided by AIC23B MCBSP_PCR_FSRM_EXTERNAL, / FSRM = 0 Receive frame-syn is provided by AIC23B MCBSP_PCR_CLKXM_INPUT, / CLKR is input MCBSP_PCR_CLKRM_INPUT, / CLKX is input MCBSP_PCR_SCLKME_NO, / SCLKME=0 CLKG is taken from the McBSP internal input clock / MCBSP_PCR_CLKSSTAT_0, / The signal on the CLKS pin is low MCBSP_PCR_DXSTAT_0, / Drive the signal on the DX pin low / MCBSP_PCR_DRSTAT_0, / The signal on the DR pin is low MCBSP_PCR_FSXP_ACTIVEHIGH, / FSXP = 1 Because a falling edge on LRCIN or LRCOUT starts data transfer MCBSP_PCR_FSRP_ACTIVELOW, / FSRP = 1 MCBSP_PCR_CLKXP_FALLING, / CLKXP = 1 The falling edge of BCLK starts data transfer MCBSP_PCR_CLKRP_RISING / CLKRP = 1 ), MCBSP_RCERA_DEFAULT, MCBSP_RCERB_DEFAULT, MCBSP_RCERC_DEFAULT, MCBSP_RCERD_DEFAULT, MCBSP_RCERE_DEFAULT, MCBSP_RCERF_DEFAULT, MCBSP_RCERG_DEFAULT, MCBSP_RCERH_DEFAULT, MCBSP_XCERA_DEFAULT, MCBSP_XCERB_DEFAULT, MCBSP_XCERC_DEFAULT, MCBSP_XCERD_DEFAULT, MCBSP_XCERE_DEFAULT, MCBSP_XCERF_DEFAULT, MCBSP_XCERG_DEFAULT, MCBSP_XCERH_DEFAULT ; DMA_Config dmaRcvConfig = /接收通道的主要参数配置 DMA_DMACSDP_RMK( DMA_DMACSDP_DSTBEN_NOBURST, DMA_DMACSDP_DSTPACK_OFF, DMA_DMACSDP_DST_DARAMPORT1, DMA_DMACSDP_SRCBEN_NOBURST, DMA_DMACSDP_SRCPACK_OFF, DMA_DMACSDP_SRC_PERIPH, DMA_DMACSDP_DATATYPE_16BIT ), /* DMACSDP */ DMA_DMACCR_RMK( DMA_DMACCR_DSTAMODE_POSTINC, DMA_DMACCR_SRCAMODE_CONST, DMA_DMACCR_ENDPROG_OFF,/* ENDPROG OFF */ DMA_DMACCR_WP_DEFAULT, DMA_DMACCR_REPEAT_OFF, DMA_DMACCR_AUTOINIT_ON,/* AUTOINIT ON */ DMA_DMACCR_EN_STOP, DMA_DMACCR_PRIO_LOW, DMA_DMACCR_FS_DISABLE, DMA_DMACCR_SYNC_REVT1 ), /* DMACCR */ DMA_DMACICR_RMK( DMA_DMACICR_AERRIE_ON, DMA_DMACICR_BLOCKIE_OFF, DMA_DMACICR_LASTIE_OFF, DMA_DMACICR_FRAMEIE_ON, DMA_DMACICR_FIRSTHALFIE_OFF, DMA_DMACICR_DROPIE_OFF, DMA_DMACICR_TIMEOUTIE_OFF ), /* DMACICR */ (DMA_AdrPtr)(MCBSP_ADDR(DRR11), /* DMACSSAL */ 0, /* DMACSSAU */NULL, /* DMACDSAL, to be loaded by submit */ 0, /* DMACDSAU */ BUFFSIZE, /* DMACEN */ 1, /* DMACFN */ 0, /* DMACFI */ 0 /* DMACEI */;DMA_Config dmaXmtConfig = /发送通道的主要参数配置 DMA_DMACSDP_RMK( DMA_DMACSDP_DSTBEN_NOBURST, DMA_DMACSDP_DSTPACK_OFF, DMA_DMACSDP_DST_PERIPH, DMA_DMACSDP_SRCBEN_NOBURST, DMA_DMACSDP_SRCPACK_OFF, DMA_DMACSDP_SRC_DARAMPORT0, DMA_DMACSDP_DATATYPE_16BIT ), /* DMACSDP */ DMA_DMACCR_RMK( DMA_DMACCR_DSTAMODE_CONST, DMA_DMACCR_SRCAMODE_POSTINC, DMA_DMACCR_ENDPROG_ON, DMA_DMACCR_WP_DEFAULT, DMA_DMACCR_REPEAT_OFF, DMA_DMACCR_AUTOINIT_OFF, DMA_DMACCR_EN_STOP, DMA_DMACCR_PRIO_LOW, DMA_DMACCR_FS_DISABLE, DMA_DMACCR_SYNC_XEVT1 ), /* DMACCR */ DMA_DMACICR_RMK( DMA_DMACICR_AERRIE_ON, DMA_DMACICR_BLOCKIE_OFF, DMA_DMACICR_LASTIE_OFF, DMA_DMACICR_FRAMEIE_ON, DMA_DMACICR_FIRSTHALFIE_OFF, DMA_DMACICR_DROPIE_OFF, DMA_DMACICR_TIMEOUTIE_OFF ), /* DMACICR */NULL, /* DMACDSAL, to be loaded by submit */ 0, /* DMACSSAU */ (DMA_AdrPtr)(MCBSP_ADDR(DXR11), /* DMACDSAL */ 0, /* DMACDSAU */ BUFFSIZE, /* DMACEN */ 1, /* DMACFN */ 0, /* DMACFI */ 0 /* DMACEI */;/* Define a DMA_Handle object to be used with DMA_open function */DMA_Handle hDmaRcv, hDmaXmt;/* Define a MCBSP_Handle object to be used with MCBSP_open function */MCBSP_Handle hMcbsp;volatile Uint16 transferComplete = FALSE;Uint16 err = 0;Uint16 old_intm;Uint16 xmtEventId, rcvEventId;/-Function prototypes-/* Reference the start of the interrupt vector table */* This symbol is defined in file vectors.s55 */extern void VECSTART(void);/* Protoype for interrupt functions */interrupt void dmaXmtIsr(void);interrupt void dmaRcvIsr(void);void taskFxn(void);/* * copyData() - Copy one buffer with length elements to another. */void copyData(Int16 *inbuf, Int16 *outbuf, Int16 length) Int16 i = 0; for (i = 0; i length; i+) /outbufi=inbufiinp1i = inbufi;for (i = 0; i length/2; i+) inpi = inp12*i+SINE_TABLEi; /取出输入信号的左声道并加噪/inp2*i+1 = inp12*i+1+SINE_TABLEi;fir(inp, h, outbuf1, dbptr, NX, NH); /将加噪后的左声道信号滤波for (i = 0; i length/2; i+) outbuf2*i =inpi; outbuf2*i+1 =outbuf1i; /将左右信号合并输出 /* - Threads - */* * processBuffer() - Process audio data once it has been received. */void processBuffer(void) Uint32 addr; static Int16 pingPong = PING;while(DMA_FGETH (hDmaRcv, DMACCR, ENDPROG) ; / Determine which ping-pong state were in if (pingPong = PING) / Configure the receive channel for pong input data addr = (Uint32)gBufferRcvPong) 16) & 0xffff);/ Set new state to PONG pingPong = PONG; else / Configure the receive channel for ping input data addr = (Uint32)gBufferRcvPing) 16) & 0xffff); / Set new state to PING pingPong = PING; DMA_FSETH (hDmaRcv, DMACCR, ENDPROG, 1);/DMA_FSETH (hDmaXmt, DMACCR, ENDPROG, 1); if (pingPong = PONG) /Insert your application program here copyData(gBufferRcvPing, gBufferXmtPing, BUFFSIZE); / Configure the transmit channel for ping output data addr = (Uint32)gBufferXmtPing) 16) & 0xffff); else /Insert your application program here copyData(gBufferRcvPong, gBufferXmtPong, BUFFSIZE); / Configure the transmit channel for pong output data addr = (Uint32)gBufferXmtPong) 16) & 0xffff); / Start the DMA/ DMA_start(hDmaRcv);/ DMA_start(hDmaXmt);/-main routine-void main(void) Uint16 i; /* Initialize CSL library - This is REQUIRED ! */ CSL_init();/ The main frequency of system is 240MHz/ 该频率是为了设置IIC模块的需要设置的,为了使用I2C_setup函数 PLL_setFreq(1, 0xC, 0, 1, 3, 3, 0); /EMIF初始化 Emif_Config(); / Open McBSP port 1 and get a McBSP type handlehMcbsp = MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET);/ Config McBSPport 1 by use previously defined structure MCBSP_config(hMcbsp, &Mcbsp1Config); /I2C初始化I2C_cofig(); /CODEC寄存器初始化inti_AIC(); /* Set IVPH/IVPD to start of interrupt vector table */ IRQ_setVecs(Uint32)(&VECSTART); for (i = 0; i = BUFFSIZE - 1; i+) gBufferXmtPingi = 0; gBufferXmtPongi = 0; for (i=0; i 15) & 0xFFFFu; srcAddrLo = (Uint16)(Uint32)(MCBSP_ADDR(DRR11) 15) & 0xFFFFu; dstAddrLo = (Uint16)(Uint32)(&gBufferRcvPing) 15) & 0xFFFFu; srcAddrLo = (Uint16)(Uint32)(&gBufferXmtPing) 15) & 0xFFFFu; dstAddrLo = (Uint16)(Uint32)(MCBSP_ADDR(DXR11) 1) & 0xFFFFu; dmaXmtConfig.dmacssal = (DMA_AdrPtr)srcAddrLo; dmaXmtConfig.dmacssau = srcAddrHi; dmaXmtConfig.dmacdsal = (DMA_AdrPtr)dstAddrLo; dmaXmtConfig.dmacdsau = dstAddrHi; /* Open MCBSP Port 1 and set registers to their power on defaults */ hMcbsp = MCBSP_open(MCBSP_PORT1, MCBSP_OPEN_RESET); /* Open DMA channels 4 & 5 and set regs to power on defaults */ hDmaRcv = DMA_open(DMA_CHA4,DMA_OPEN_RESET); hDmaXmt = DMA_open(DMA_CHA5,DMA_OPEN_RESET); /* Get interrupt event associated with DMA receive and transmit */ xmtEventId = DMA_getEventId(hDmaXmt); rcvEventId = DMA_getEventId(hDmaRcv); /* Temporarily disable interrupts and clear any pending */ /* interrupts for MCBSP transmit */ old_intm = IRQ_globalDisable(); /* Clear any pending interrupts for DMA channels */ IRQ_clear(xmtEventId); IRQ_clear(rcvEventId); /* Enable DMA interrupt in IER register */ IRQ_enable(xmtEventId); IRQ_enable(rcvEventId); /* Place DMA interrupt service addresses at associate vector */ IRQ_plug(xmtEventId,&dmaXmtIsr); IRQ_plug(rcvEventId,&dmaRcvIsr); /* Write values from configuration structure to MCBSP

温馨提示

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

评论

0/150

提交评论