自适应性滤波的DSP实验报告.doc_第1页
自适应性滤波的DSP实验报告.doc_第2页
自适应性滤波的DSP实验报告.doc_第3页
自适应性滤波的DSP实验报告.doc_第4页
自适应性滤波的DSP实验报告.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

DSP课程设计自适应滤波的DSP实现DSP课程设计实验报告自适应滤波的DSP实现学 院:电子信息工程学院老 师:钱满义老师班 级:通信0606设计者:张健亮 学号:06211181 张 萌 学号:06211183电 话:51689510DSP课程设计自适滤波的DSP实现一、DSP课程设计目的(1)学习、掌握5402DSP片上外设直接存储器访问控制器DMA的结构与配置;(2)了解DSPLIB中的DLMS自适应滤波的使用,并学会调用54xdsp库中现有的常用函数;(3)了解自适应滤波器的原理,熟悉LMS算法; (4)了解DSP对自适应滤波器的设计及编程方法;(5)学会实时采集数据和信号提取方法 ;(6)熟悉对自适应滤波器的软件和硬件调试方法。二、DSP课程设计要求及目标利用DSP实时地对信号进行自适应滤波。DSP利用直接存储器访问方式DMA采集数据时不打扰CPU,CPU可以对信号进行实时地滤波。本设计要求利用DSP的DMA方式进行信号采集和信号输出,同时对外部输入的信号进行数字滤波。首先完成自适应滤波器需要使用自适应算法(LMS算法)的编程与实现,通过对未知系统传递函数的建模,识别该未知系统,并对该系统进行噪声滤波。实际中利用信号发生器产生一个或几个带噪声的正弦信号,其信号的频率、幅值以及相位都是变化的,通过自适应算法,实时跟踪该信号的变化,并将噪声滤去。 设计要求及目标如下:(1)对DMA进行初始化;(2)对A/D、D/A进行初始化;(3)编写DMA通道传输程序,实现数据实时采集和实时地输出;(4)设计子自适应滤波算法,或调用DSPLIB中的自适应函数,实现对信号的自适应波;(5)滤波后信号实时输出的同时,将数据存放在数据文件中;(6)利用自适应滤波实现语音信号回波对消。三、自适应滤波原理1、自适应滤波概述:数字信号处理(DSP)是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们所需要的信号形式。在数字信号处理中,滤波占有重要地位,滤波器是现代信号处理的重要组成部分,已经在信道均衡、回波抵消、谱线增强、噪声抑制、相参检测、窄带干扰抑制、系统识别、语音信号处理、生物医学电子学等方面获得广泛应用。利用滤波器,可以抑制干扰信号,放大正常信号,从而提取我们所需要的信息。数字滤波是语音和图像处理、模式识别、普分析等应用中的一个基本处理算法。用DSP芯片实现数字滤波除了具有稳定性好、精确度高、不受环境影响等优点外,还具有灵活性好的特点。用可编程DSP芯片实现数字滤波可通过修改滤波器的参数十分方便地改变滤波器的特性。早期的自适应滤波器的研究,是针对自适应天线系统和数字传输系统的均衡器来设计的。绝大多数对自适应滤波器的研究是基于Widrow提出的最小均方算法(LMS)。因为LMS算法的设计和实现都较为简单,因而在很多应用场合都非常适用。本课程设计所做的自适应滤波器结构是FIR类型滤波器结构,逼近算法采用LMS算法。这些结构和算法是自适应技术的基础。当然,现在越来越多的特定应用,它们需要特定的滤波器结构和自适应算法,以使蛋的复杂性取代系统性能的提高。但其本质还是一样的。有些评估自适应滤波器性能的交互式软件包就把采用LMS算法和FIR结构的自适应滤波器作为评估的标准。一个自适应滤波器实现的复杂性,通常用它所需要的乘法次数和阶数来衡量。基于DSP实现的自适应滤波器系统,其DSP的数据吞吐量和数据处理能量也就成为了考虑的重要因素。大多数DSP都有并行的硬件乘法器、流水结构以及快速的片内存储器,这些资源使自适应滤波器的实现更容易,且更有效。滤波器按照其参数是否可变分为固定参数滤波器和自适应滤波器两种。所谓固定参数滤波器,就是在滤波过程中,滤波器的参数是不变的,它适用于具有先验知识的信号处理,并且要求设计者预先知道在先前输入条件下的输出响应。但是,在实际的信号处理中,系统的状态是随着时间和空间的变化而变化的,输入的范围是无法确定的,且输出的结果也是无法预知的。在这种条件下,固定参数的滤波器不能正常工作。然而可以根据先前的输入和输出来不断的调整滤波器的参数,这种滤波器就是所说的自适应滤波器。自适应滤波器,就是利用前一时刻已获得滤波器的参数等结果,自动地调节当前时刻的滤波器参数,以适应信号或者噪声未知的或随时间变化的统计特性,从而实现最优滤波。自适应滤波器的特性变化是自适应算法通过调整滤波器系数来实现的。一般而言,自适应滤波器由两部分组成,一是滤波器结构,二是调整滤波器系数的自适应算法。自适应滤波器的结构采用FIR或IIR结构均可,由于IIR滤波器存在稳定性问题因此,一般采用FIR滤波器作为自适应滤波器的结构。2、自适应滤波原理:一个自适应滤波器,其权系数可以根据一种自适应算法来不断修改,使系统的冲击响应能满足给定的性能判据。如语音ADPCM 编码中,线性预测自适应滤波器就要尽量实现误差信号e(n)于输入信号x(n)的前端时刻值x(n-1)、x(n-2)、 等等线性无关。并由此作为判据不断调节滤波器的权系数。总的来讲,自适应滤波器有两个独立的部分:一个按理想模式设计的系数可调的数字滤波器;一套自适应算法,用来调节滤波器的权系数,使滤波器的性能达到要求。根据系统输入/输出结构变化,自适应滤波器可以应用于不同的目的,这些应用很多需要实时处理。如自适应预测器、回波相消器以及噪声消除器等等。并且,绝大多数的应用是基于最新发展的DSP来设计的。基于DSP的自适应滤波器,比用硬件实现的自适应滤波器有很多优点,其功率消耗及体积更小、更容易实现。特别重要的是修改程序使系统很容易升级,功能进一步完善。前面已指出,自适应滤波器除包括一个照某种结构设计的滤波器,还有一套自适应的算法。自适应算法是根据某种判据来设计的。最常用的判据是最小均方误差,即理想信号与滤波器输出之差的平方值的期望值最小,并且根据这个判据来修改权系数,以达到最优滤波的时变最佳滤波器。设计自适应滤波器时可以不必预先知道信号与噪声的自相关函数在滤波过程中即使噪声与信号的自相关函数随时间缓慢变化滤波器也能自动适应自动调节到满足均方误差最小的要求。自适应滤波器的一般结构如图1所示:d(n) + e(n) 滤波器结构x(n) _ y(n)自适应算法 自适应滤波器结构的一般形式x(n) 自适应滤波器的输入;y(n) 自适应滤波器的输出;d(n) 期望响应;e(n) 估计误差;e(n)=d(n)y(n); 上图为自适应滤波器结构的一般形式,图中x(n)为输入信号,通过参数可调的数字滤波器后产生输出信号y(n),将输出信号y(n)与标准信号(或者为期望信号)d(n)进行比较,得到误差信号e(n)。e(n)和x(n)通过自适应算法对滤波器的参数进行调整,调整的目的使得误差信号e(n)最小。重复上面过程,滤波器在自己的工作过程中逐渐了解到关于输入信号和噪声的统计规律,并以此为根据自动调整自己的参数,从而达到最佳的滤器效果。一旦输入信号的统计规律发生了变化,滤波器能够自动跟踪上输入信号的变化,自动调整滤波器的参数,最终达到滤波效果,实现自适应过程。就是使用自适应滤波器的系统识别原理图自适应滤波器的系统识别框图自适应滤波器的结构可以采用FIR或IIR结构,由于IIR滤波器存在稳定性问题,因此一般采用FIR滤波器作为自适应滤波器的结构,自适应FIR滤波器结构又可分为三种结构类型:横向型结构(Transversal Structure)、对称横向型结构(Symmetric Transversal Structure)、格型结构(Lattice Structure)。本实验所采用的是自适应滤波器设计中最常用的FIR横向型结构。下图是横向型滤波器的结构示意图。 横向型滤波器的结构示意图其中x(n) 自适应滤波器的输入 w(n) 自适应滤波器的冲激响应: w(n)=w(0),w(1),w(N-1) y(n) 自适应滤波器的输出: y(n)=x(n)w(n) (2)自适应算法的种类较多,最常用的自适应算法是最小均方误差算法,即LMS算法(Least Mean Square),LMS算法是一种易于实现、性能稳健、应用广泛的算法。所有的滤波器系数调整算法都是设法使y(n) 接近d(n),所不同的只是对于这种接近的评价标准不同。LMS算法的目标是通过调整系数,使输出误差序列e(n)=d(n)y(n) 的均方值最小化,并且根据这个判据来修改权系数,该算法因此而得名。误差序列的均方值又叫“均方误差”MSE(Mean Square Error)自适应滤波器除了包括一个按照某种结构设计的滤波器,还有一套自适应的算法。自适应算法是根据某种判断来设计的。最常用的判据是最小均方误差,即理想信号d(n)与滤波器输出y(n)之差e(n)的期望值最小,并且根据这个判据来修改权系数wi(n)。由此产生的算法称为LMS。均方误差表示为:MSEEeE(d(n)y(n) (3)对于横向结构的滤波器,代入的表达式有:MSEEdW(n)RW(n)2W(n)P (4)其中,RX(n) X(n)为NN自相关矩阵,是输入信号采样值间的相关性矩阵。PEd(n)X(n)为N1互相关矢量,代表理想信号d(n)与输入矢量的相关性。在均方误差达到最小时,得到最佳权系数Ww,w,w。它应满足下列方程即: RWP0 (5)这是一个线性方程组,如果R矩阵为满秩,R存在,可得到权系数的最佳值WRP (6)用完整的矩阵表示为 显然为x(n)的自相关值为x(n)与d(n)互相关值。在某些应用中,把输入信号的采样值分成相同的一段一段地(每一段称谓一桢),再求出R,的估计值得到每桢的最佳权系数。这种方法称为块对块自适应算法。如语音信号的线性预测编码LPC就是把语音信号分成帧进行处理的。R,的计算,要求出期望值E,在现实运算中不容易实现,为此可通过下式进行估计:用以上方法获得最佳W的运算量很大,对于一些在线或实时应用的场合,无法满足其时间要求。大多数场合使用迭代算法,对每次采样值就求出较佳权系数,称为采样值对采样值迭代算法。迭代算法可以避免复杂的和 的运算,又能实时求得近似解,因而切实可行。LMS算法是以最快下降发为原则得迭代算法,即矢量是矢量按均方误差性能平面得负斜率大小调节相应一个增量 =这个u是由系统稳定性和迭代运算收敛速度决定的自适应步长。为n次迭代的梯度。对于LMS算法为下式的斜率。=由上式产生了求解最佳权系数的两种方法,一种是最陡梯度法。其思路为:设计初始权系数,用=迭代公式计算,到与误差小于规定范围。其中的E 计算可用估计值表达式 上式K取值应足够大。如果用瞬时 来代替上面对的估计运算,就产生了另一种算法随机梯度法,即Widrow-Hoff的LMS算法。此时迭代公式为 以后讨论的LMS算法都是基于Widrow-Hoff的LMS算法。上式的迭代公式式假定滤波器结构为横向结构。对于对称横向型结构也可推出类似的迭代公式 其中为,而为。四、DSP硬件及软件开发工具1、DSP硬件开发工具-SEED5402 DSK面板TMS320VC5402 DSK是以TMS320VC5402处理器为核心的DSP 初学者工具(DSP Starter Kit)。它提供了一个低功耗,独立的开发平台,使用户能评估和开发C54XDSP的应用程序,同时也可以作为以其他芯片为核心的DSP硬件设计的参考。TMS320VC5402 DSK的结构框图如图1所示,主要包括以下部分:(1)100M VC5402 DSP;(2)64K16位的SRAM存储器;(3)256K16位的FLASH存储器;(4)JTAG仿真测试总线控制器(JTAG TBC)和并行接口控制器(Parallel Port Controller);(5)电话网络接口(DAA);(6)麦克风/扬声器音频接口;(7)RS-232异步数据接口;(8)扩展子板接口(MEMORY I/F和PERIPHERAL I/F)。 图1 TMS320VC5402 DSK原理框图DSK的核心是TMS320VC5402芯片,它是TI公司的第五代产品,支持定点运算,内核电压为1.8V,I/O电压为3.3V,工作速率可达100MIPS。片内包括一个JTAG仿真接口、一个控制接口、一个主机接口(HPI)、一个时钟接口、两个多通道缓冲串行接口McBSP0和McBSP1,McBSP0接电话网络接口,McBSP1接麦克风/扬声器音频接口。启动(boot)模式有三种:允许用户在运行环境中从NO-boot、ROM-boot或HPI-boot模式之间选择。DSK通过16位外部存储器接口(EMIF)将片外64K16位的SRAM,256K16位的FLASH存储器以及扩展存储器接口与DSP VC5402相连,扩展存储器接口可以与外接子板相连。DSK提供一个嵌入的IEEE标准 1149.1 JTAG(Joint Test Action Group)仿真模块,它可直接与编码设计调试软件CCS(Code composer debugger)兼容。IEEE标准 1149.1扫描逻辑仅用于仿真和测试。这个逻辑提供接口器件的边界扫描,用于测试引脚之间的连续性或进行DSP器件外设的操作测试。这种扫描逻辑接到内部扫描逻辑电路,扫描逻辑电路可以访问所有片内资源。DSP可以利用IEEE标准 1149.1串行的扫描引脚和专用仿真引脚进行在线仿真。DSK的嵌入JTAG仿真端口(由测试总线控制器TBC提供)与主机端口(HPI)一起与IEEE-1284并行接口相连。同时DSK也可以通过它的外部JTAG连接器与外部仿真器XDS510一起使用,进行外部仿真。 DSK的电话网络接口(DAA)与模数转换器TLC320AD50C连接,通过一个多通道缓冲串行端口(McBSP0)使DSP可以访问一个电话接口,多通道缓冲并行端口在软件控制下,可以访问外设扩展连接器。麦克风/扬声器接口(3.5mm音频插座提供)与第二片TLC320AD50C连接。这片TLC320AD50C连在DSP第二个多通道缓冲串行端口(McBSP1)上,McBSP1与DSP的两个定时器和一个外部中断信号相连,同时与外设扩展连接器相连来使用外接子板。通用异步接收发送器UART(Universal Asynchronous Receiver Transmitter)通过一个RS-232电平转换器与DB-9插座相连,组成串行异步输入输出接口。此接口可以与PC机相连。可编程器件CPLD完成DSK所需的组合逻辑,并为DSP软件提供控制和状态接口。两个80脚的子板连接器(MEMORY I/F和PERIPHERAL I/F),一个可以访问DSP的异步EMIF;另一个可以访问DSP的外设控制/状态信号。25脚DB-25为IEEE-1284并口,通过PPC(Parellel Port Controller)与DSP的HPI和TBC的JTAG相连。DSK提供了一个八脚的DIP开关,控制外部用户选项;还提供了一个按钮开关,允许手动复位(RESET)。DSK上有一个电压管理器,监控内部产生的电压,并在复位期控制主板;四个LED,一个用于通电指示,其他三个用于用户控制指示。DSK是一个需要+5VDC的独立板,板上的线性电压整流器提供1.8V的DSP核电压(Core Voltage),3.3VDC数字以及5VDC模拟电压。2、软件开发工具CCSDSP CCS(Code Composer Studio)是DSP编码设计软件,它是一个开放型的、功能强大的集成开发环境,它主要包括代码生成和代码调试两部分。代码生成部分是将用C或汇编语言编写的DSP程序编译并连接成可执行的DSP程序;代码调试部分是对DSP程序及系统进行调试,使之能够达到设计目标。CCS DSK C5000是针对C54X DSK开发系统设计的软件平台,其中的C编译器只支持ANSI C,因此,在写C程序时一定要遵守ANSI C的语法。连接C程序时,应包含一个运行支持库(runtime-support library),该库中含有所有用到的C函数。CCS C5000软件具有很好的仿真功能,程序正确运行后,可以直接观察到运行结果。有关的具体使用方法在此不作详细说明。五、程序设计1、程序流程图:上电复位 CODEC初始化DMA通道初始化DMA方式接收CODEC数据流等待DMA接收中断 N自适应信号滤波 Y信号输出 中断服务程序源程序1、 自适应滤波源程序1: #include #include #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;#pragma DATA_SECTION(buffer,audio_buffer);int buffer0x500;#pragma DATA_SECTION(coeffs,coefficients);int coeffs16;#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); interrupt void DMAC2ISR();void main() s16 cnt=1;/* These are the items that BIOS will set when we use it */ BSCR = 0x8806; XPC = 0; PMST = 0xA0; brd_set_cpu_freq(100); TIMER_HALT(0); brd_set_wait_states(7, 7, 9); TIMER_RESET(0); IMR=0;/禁止所有中断 /initializing over/* - */if(brd_init_bios() return;while ( cnt- )brd_led_toggle(BRD_LED0);delay(1000);brd_led_toggle(BRD_LED0);brd_led_toggle(BRD_LED1);delay(1000);brd_led_toggle(BRD_LED1);brd_led_toggle(BRD_LED2);delay(1000);brd_led_toggle(BRD_LED2);/test dsk5402 initialization correct/*CODEC 初始化*/ hHandset = codec_open(HANDSET_CODEC); codec_dac_mode(hHandset,CODEC_DAC_15BIT); codec_adc_mode(hHandset,CODEC_ADC_15BIT); codec_ain_gain(hHandset,CODEC_AIN_6dB); codec_aout_gain(hHandset,CODEC_AOUT_MINUS_6dB); codec_sample_rate(hHandset,SR_16000); /*DMA通道2 初始化*/INTR_CLR_FLAG(DMAC2);dma_reset_all();/*/*初始化DMA通道2的通道寄存器*/*/ dmsefc = (DSYNC_REVT1 12); dmmcr = (AUTOINIT_ENABLE15)|(DINM_ENABLE14)| (IMOD_HALFBLOCK 13) |(CTMOD_DEC 12) | (INDEXMODE_NOMOD 8) | (SPACE_DATA 6) | (INDEXMODE_INC 2) | (SPACE_DATA); dmctr = 0xFF; src_addr = DRR1_ADDR(HANDSET_CODEC); dst_addr = (unsigned int) &buffer;dma_init(DMA_CH2, dmsefc, dmmcr, dmctr, SPACE_DATA, src_addr, SPACE_DATA, dst_addr);/* Set number of frames for channel 2 */ DMA_FRAMECOUNT(DMA_CH2, 2); /*/*为DMA通道2初始化全局寄存器*/*/* Set up global autoinit registers for DMA CH2 Input */ dmgsa = src_addr; dmgda = dst_addr; dmgcr = 0xFF; 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;dma_global_init(dmpre, dmsrcp, dmdstp, dmidx0, dmidx1, dmfri0, dmfri1, dmgsa, dmgda, dmgcr, dmgfr);/*/*使能DMA通道2*/*/ DMA_ENABLE(DMA_CH2); temp = *(volatile u16*)DRR1_ADDR(HANDSET_CODEC); /*/*DMA通道2中断使能*/*/ INTR_ENABLE(DMAC2); INTR_GLOBAL_ENABLE;/*/*等待DMA通道2中断*/*/* Endless loop waiting for DMAC2 interrupt */ for(;);void delay(s16 period) int i, j; for(i=0; iperiod; i+) for(j=0; j1; j+); 源程序2:dma2isr.c#include #include externunsigned int channel; /*IN: DMA channel number */externunsigned int dmsefc; /*IN: Value to set sync & fr reg */externunsigned int dmmcr; /*IN: Value to set mode control reg */externunsigned int dmctr; /*IN: Value to set element count reg */externunsigned int src_page; /*IN: Value to set source page reg */externunsigned int src_addr; /*IN: Value to set source addr reg */externunsigned int dst_page; /*IN: Value to set dest page reg */externunsigned int dst_addr; /*IN: Value to set dest addr reg */extern int buffer0x500;extern int coeffs16;extern int delaybuff16; extern int frame; extern int flag;extern int currbuff;extern int *delayptr1;extern int step = 0.002;/the expected signal of 1KHz sine functionInt exp256=0,25,49,74,98,122,147,171,195,219,243,267,290,314,337,360,382,405,427,449,471,493,514,535,555,576,595,615,634,653,671,689,707,724,741,757,773,788,803,817,831,845,857,870,882,893,904,914,924,933,941,949,957,964,970,976,981,985,989,992,995,997,999,1000,1000,1000,999,997,995,993,989,985,981,976,970,964,957,950,942,933,924,915,904,894,882,871,858,845,832,818,804,789,774,758,742,725,708,690,672,654,635,616,597,577,557,536,515,494,473,451,429,407,384,361,338,315,292,268,244,221,197,172,148,124,100,75,51,26,2,-23,-47,-72,-96,-121,-145,-169,-193,-217,-241,-265,-289,-312,-335,-358,-381,-404,-426,-448,-470,-491,-513,-533,-554,-574,-594,-614,-633,-652,-670,-688,-706,-723,-740,-756,-772,-787,-802,-816,-830,-844,-857,-869,-881,-892,-903,-913,-923,-932,-941,-949,-956,-963,-969,-975,-980,-985,-989,-992,-995,-997,-999,-1000,-1000,-1000,-999,-997,-995,-993,-990,-986,-981,-976,-971,-964,-958,-950,-942,-934,-925,-915,-905,-894,-883,-871,-859,-846,-833,-819,-805,-790,-775,-759,-743,-726,-709,-692,-674,-655,-637,-617,-598,-578,-558,-537,-517,-495,-474,-452,-430,-408,-385,-363,-340,-317,-293,-270,-246,-222,-198,-174,-150,-126,-101,-77,-52,-28;/*初始化DMA通道3,启动FIR滤波后数据的发送*/voidinit_dma3(void) while(DMPREC&0x0008) ;/DMA3的传送是否结束 /*初始化DMA channel 3 */dmsefc = (DSYNC_REVT1 12); dmmcr = 0x4141; dmctr = 0xFF;/256 element/frame src_addr = (unsigned int) &buffer+0x300+(unsigned int)currbuff*0x100); dst_addr = DXR1_ADDR(HANDSET_CODEC); dma_init(DMA_CH3,dmsefc,dmmcr,dmctr,SPACE_DATA,src_addr, SPACE_DATA, dst_addr);currbuff=1;/* Set number of frames for channel 3 */ DMA_FRAMECOUNT(DMA_CH3, 0);/2 frame/block /* Enable channel 3 */ DMA_ENABLE(DMA_CH3);/*DMA通道2的中断服务程序,对接收到的DMA数据进行FIR滤波*/interrupt void DMAC2ISR(void)int *inp_buffer,*out_buffer; /int i;switch(frame) case 1:init_dma3(); break; case 0: if (flag)/不是最早数据帧 init_dma3(); else/是最早数据帧 flag=0xaa; break; default: break;inp_buffer=buffer+frame*0x100;out_buffer=buffer+0x300+currbuff*0x100;/*dlms adaptive filter*/dlms(inp_buffer,coeffs,out_buffer,&delayptr1,exp,step,16,256);frame+;if(frame=3)frame=0;2、 回波/*stem.h*/#define LENGTH_W 10 /LMS滤波器长度,#define LENGTH_H 10 /自适应滤波器长度#define STEP 100 /自适应步长#define LENGTH_IN 5 /输入缓冲数组x长度DATA xLENGTH_IN; /声明输入缓冲数组DATA yLENGTH_IN; /声明有回波时输入数组DATA out_hLENGTH_IN; /FIR滤波器即回声消除通道输出DATA out_wLENGTH_IN; /自适应滤波器输出DATA eLENGTH_IN;#pragma DATA_SECTION(coff_w,.coffw) /将数组coff_w指定到内存段.coffwDATA coff_wLENGTH_W; /声明自适应滤波器系数矢量#pragma DATA_SECTION(coff_h,.coffh) /将数组coff_h指定到内存段.coffhDATA coff_hLENGTH_H=790,2661,4629,6919,8210,8210,6919,4629,2661,790; /定义FIR滤波器的系数即回声通道的权系数#pragma DATA_SECTION(dbuffer_h,.dbufferh) /将数组dbuffer_h指定到内存段.dbufferhDATA dbuffer_hLENGTH_IN; /该数组存放FIR上一时刻的输出#pragma DATA_SECTION(dbuffer_w,.dbufferw) /将数组指定到内存段.dbufferw DATA dbuffer_wLENGTH_IN; /该数组存放自适应滤波器上一时刻输出源程序:#include type.h#include board.h#include codec.h#include mcbsp54.h#include tms320.h#include dsplib.h#include setm.hvoid delay(void); /延迟void update(DATA x,DATA dk);void initarray(DATA x);HANDLE hHandset; /CODEC句柄DATA bf15000; /缓冲区DATA *dp_w = &dbuffer_w0;DATA *dp_h = &dbuffer_h0; void main() s16 j; s16 m; s16 cnt=2; /灯循环闪次数,初始化等待时钟周期数 DATA dk,out_delay,yk;/ek s16 mode=2; /决定是否产生回波是否使用回波抵消 s16 i; if (brd_init(100) return; for (i=0; iLENGTH_IN; i+) dbuffer_hi = 0;for (i=0;iLENGTH_IN;i+) out_hi =0;for (i=0;iLENGTH_W;i+) coff_wi =0;for (i=0;iLENGTH_IN;i+) out_wi =0; /*板子初始化,用灯闪来表示*/brd_led_toggle(BRD_LED0);/* brd_delay_msec(1000); */delay();brd_led_toggle(BRD_LED1);/* brd_delay_msec(1000); */delay();brd_led_toggle(BRD_LED2);/* brd_delay_msec(1000); */delay(); /* Open Handset Codec */ hHandset = codec_open(HANDSET_CODEC); codec_dac_mode(hHandset,CODEC_DAC_15BIT); codec_adc_mode(hHandset,CODEC_ADC_15BIT); codec_ain_gain(hHandset, CODEC_AIN_6dB); codec_aout_gain(hHandset,CODEC_AOUT_MINUS_6dB); codec_sample_rate(hHandset,SR_8000); brd_led_toggle(BRD_LED0); initarray(x); /初始化所有数组 i=0;

温馨提示

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

评论

0/150

提交评论