基于飞思卡尔MCU的AEC算法实现

发布者:DelightfulSmile最新更新时间:2007-11-22 来源: 电子元器件应用关键字:接口  输入  回声  远端 手机看文章 扫描二维码
随时随地手机看文章

0 引言

VoIP是在IP网络上实现音视频及传真信号传输的一门全新的集成业务数据网络技术。IP语音传输技术具有节省带宽、话费低,可方便地集成智能型开放体系结构以及多媒体业务等优势。但较之传统电话,其语音质量较差。事实上,影响因特网语音质量的因素是多方面的,关键因素之一是回声的影响。因此,要提高因特网的语音质量,就必须在语音传输过程中进行回声消除。AEC是基于自适应算法并可用于VoIP的声学回声消除技术。而用于AEC算法的实现与研究的硬件平台是以freescale公司的MCF5235为核心的开发板。MCF523x系列MCU是首个以带有增强型乘加运算单元(eMAC)的ColdFire V2内核为核心,该产品同时结合了增强型时序处理单元(eTPU)和10/100以太网多媒体通道控制模块(MAC)的MCU,因而具有强大的数据处理能力和丰富的接口,能够满足VoIP电话终端对数据处理速度以及网络通讯安全的要求。

1 回声消除

1.1 声学回声消除原理

AEC是以扬声器信号与由它产生的多路径回声的相关性为基础建立的远端信号语音模型,利用它可对回声进行估计,并不断地修改滤波器的系数,以使估计值更逼近真实的回声,然后,将回声估计值从话筒的输人信号中减去,从而达到消除回声之目的。

声学回声消除器的结构原理如图1所示。其中y(n)代表远端语音信号,r(n)代表回声,x(n)是已经叠加了回声信号r(n)的近端语音信号。对回声消除器来说,可将远端信号作为一个参考信号,然后由自适应滤波器通过它来产生回声的估计值r′(n),再从近端带有回声的语音信号中减去r′(n),从而估计出近端输出信号μ(n)。在近端未说话时,即当x(n)=0时,μ(n)即为回声的残差信号e(n)。e(n)的计算方程为:

e(n)=r(n)-r′(n) (1)

此时,回声的残留信号的理想值应为0。

1.2 自适应FIR滤波器

在声学回声消除器里,横向结构的自适应滤波器可通过参考信号来产生回声的副本,其原理如图2所示。如果这个横向结构的自适应滤波器的转换函数与回声通道的函数模型一致,那么,回声的副本与回声就应该是一致的,这样,通过两者的抵消便可达到消除回声之目的。

FIR滤波器的最主要特点是没有反馈回路,这是一种非递归系统,它的冲激响应是一个有限长序列。FIR滤波器的输出计算公式为:

自适应FIR滤波器根据上一刻的近端输出信号μ(n)及远端语音信号y(n),并通过自适应算法来估算当前时刻FIR滤波器的系数ak(n+1)。

1.3 LMS算法和NLMS算法

在输入信号和参考信号都是平稳随机信号的情况下,自适应滤波器的均方误差E[e(n)]性能曲面是滤波器加权系数ak的二次函数。其系数修正算法通常采用可使均方误差最小的最优化求解算法。

由于实际的梯度值只能根据观测数据估计,因此LMS算法提出的一个基本思想就是用平方误差E[e2(n)]来代替均方误差E[e(n)]。它是对基本的最速下降算法的改进,其算法迭代公式为:

ak(n+1)=ak(n)+2μe(e)*y(n) (3)

其中y(n)为输入信号,μ为迭代步长常量。

规一化LMS (NLMS)算法可用来在LMS自适应滤波器方程里修正FIR滤波器的系数。NLMS算法与LMS算法几乎是一样的,唯一的不同是NLMS算法中使用可变步长控制因子来代替LMS算法中的常量因子。其目的是加快算法的收敛速度。其算法迭代公式为:

其中,μ可由试验来确定。但应注意,μ的选取至关重要,为了确保收敛,必须满足0<μ<2。本方案中的自适应算法就是采用NLMS算法。

1.4 语音检测

语音活动检测可用来确定三种语音状态:近端讲话状态、远端讲话状态和双端讲话状态。因为AEC要根据不同的语音活动状态来进行相应的处理。它在检测到近端语音活动状态时,滤波器既不进行滤波,也不进行系数更新;而在检测到双端语音活动状态时,将停止滤波器系数的更新,但要进行滤波。由于在只有远端语音活动的状态下,既要进行滤波,又要进行系数更新。因此,语音活动状态检测的正确与否在很大程度上会影响回声消除的效果。语音活动检测流程如图3所示。

双端讲话情况可以通过设计近端话音检测器,并采用Geigel算法来判决。利用该算法计算回声延时大小范围内的瞬时能量比较,具有着良好的性能优势。其Geigel算法描述如下:

式中,N是FIR延时级数,之所以将r(i)和最近N个远端输入的最大值进行比较,而不是仅仅和当前远端输入点y(i)进行比较,是因为回声路径延时具有不确定性。

2 实现方案

声学回声消除器AEC主要包括FIR滤波模块、Geigle双端语音判决模块、NLMS系数更新模块、语音状态控制模块四个部分,图4所示是该AEC的简要工作流程。

Freescale公司的硬件开发平台以Coldfire系列MCF5235为核心。该系列MCU支持标准C语言及其专用的汇编语言。因此,在该平台上运行的功能模块需要使用C语言或者专用汇编。AEC的开发及移植过程如图5所示。

设计时。首先应搭建AEC的Matlab模型并对该模型进行仿真验证。然后以已通过验证的模型为标准,搭建可在MCF5235开发板上运行的C语言模型。最后根据需要将运算较为密集的那部分C语言程序转化为Coldfire芯片的专用汇编语言。

3 实验结果及分析

在Matlab环境下对AEC进行测试时,可将需要的三部分语音信号同时输入到回声消除器,然后测试回声消除的相关性能。

本测试所输入的语音信号波形如图6所示。从上到下依次是远端语音信号y(n)、近端语音信号x(n)和回声信号,其中与之和作为近端输入与y(n)一同构成了回声消除器的两个输入信号。将滤波器的阶数设置为512。即采取64 ms延时的回声消除。通过回声消除处理后所得到的残差信号e(n)的波形如图7所示。

从图6和图7的对比可以发现,当只存在远端信号和回声信号,而近端缄默的情况下,回声消除器能够快速收敛并消除绝大部分回声;而当双端都存在信号时,回声消除器能在消除回声的基础上较好的保持近端语音波形。

将AEC功能模块集成到用MCF5235开发板搭建的VoIP终端上,来建立两个通信终端的语音通信,即可对AEC功能模块进行实时免提通话测试。

4 结束语

本文介绍了声学回声消除的原理、声学回声消除器的设计以及AEC在基于freescale公司MCF5235开发平台的VoIP语音通信终端上的集成方法。该AEC的实现包括语音检测、自适应滤波等语音处理算法。其程序执行的实时性较好。通过Matlab模型的仿真结果和通话主观测试结果证明,用该方案实现的声学回声消除器能够满足网络通信对语音的要求。

关键字:接口  输入  回声  远端 引用地址:基于飞思卡尔MCU的AEC算法实现

上一篇:PICCl8编译器命令行驱动及其应用
下一篇:基于飞思卡尔MCU的AEC算法实现

推荐阅读最新更新时间:2024-03-16 12:22

电液伺服机构与CAN总线接口设计
   1前言   在新型导弹制导和控制系统中采用总线式的数据传输方案,是解决现行的导弹飞行控制系统中,通过点对点直接连接的电缆网传输模拟信号造成的结构复杂、可靠性低、系统的电磁兼容性与抗毁伤能力等诸多弊病的一个较好的途径。电液伺服机构是导弹控制系统中重要的组成部分。它的性能往往严重影响到导弹的控制精度,甚至决定飞行的成败。在总线式导弹控制系统中,导弹电液伺服机构将作为总线上的一个节点挂接在总线上,因此必须设计一个将总线与电液伺服机构连接起来的 接口 。导弹总线式控制系统结构如图1所示。   在导弹飞行中,惯性敏感元件获得导弹的飞行参数后,送到弹上计算机,经过计算机运算后形成控制指令,指令被送到导弹的电液伺服机构,通
[嵌入式]
ARM I2C总线接口电路和时序
ARM I2C总线接口电路和时序 AR M 12C 总线由一根数据线SDA( se riald ataline)和一根时钟线SCL(serial clock line)构成,每个电路模块挂在12C总线的SDA和SCL线上和主芯片进行数据交换。12C总线上的接口电路的输人端必须是开漏或集电极开路以具有“与”的功能。在标准模式下,数据传输速度为1 000 kbps,在高速模式下为4000 kbpsoARM 12C总线的接口电路如图1所示。 图 I ARM I2C总线的接口电路图 Fig.I Interfacec ircuitof A RMIZ 12C b us SD A和 SCL都为双向v0口线,通过上拉电阻接正电源,在AR
[单片机]
ARM I2C总线<font color='red'>接口</font>电路和时序
电脑总线接口的常见故障及其解决办法
前言   曾经有这样的一份统计报告:电脑故障中有40%来源于电脑的总线种配件插接在一起,因配件插接在一起,因此我们很难保证每个插槽都能够稳定地工作,出现这样或那样的问题虽然寻找起来很麻烦,但并不为奇。因此,当我们了解到总线接口对电脑的影响时,就不能不尝试着将这些故障加以汇总。否则,再发生类似的问题时,我们同样束手无策。于是,也就有了今天的这篇小文。 一、总线的故障分类   计算机的总线类故障按其与总线的关系来划分,主要有总线设计缺陷所产生的故障、总线控制器故障、总线接口类故障、总线设置类故障、总线设备故障几类。 1、总线设计缺陷故障   一般来说,总线本身设计缺陷所产生的故障对于一般电脑爱好者而言无法凭自身的力量来解决,因此一些主板
[嵌入式]
Exar公司与Digi-Key公司签署全球分销协议,合作覆盖接口、电源管理和通讯类产品
Exar公司(纳斯达克:EXAR)近日宣布与领先的在线电子元件分销商Digi-Key 公司已正式签署全球分销协议。 一系列的Exar 产品正在Digi Key上架销售,包括串行收发器和通用异步收发器,各种电源管理芯片,如升压和降压型稳压器、电荷泵,LED驱动器,还有Exar的PowerXR™系列可编程电源解决方案,以及用于T/E载波和SONET/SDH应用的通讯产品。除了这些和其他元件,Digi-Key还将销售包括产品评估和开发板在内的各种成熟的子系统解决方案。 “能与Digi-Key公司就此展开合作,我们感到非常高兴,Digi-Key公司无疑是在线分销领域的领导者,拥有独占鳌头的全球市场渗透力,” E
[半导体设计/制造]
基于ARM-Linux的MAX1303接口与驱动程序设计
摘要:针对数据采集与处理系统的应用需求,设计了嵌入Linux的ARM9处理器LPC3250与16位AD采样芯片MAX1303的硬件接口和驱动程序。首先,描述了LPC3250和MAX1303的性能、特点以及硬件接口电路设计方案。然后,在硬件平台的基础上,详细地阐述了嵌入式Linux下MAXl303驱动程序的组成模块和具体实现方法,并给出了部分源代码以及对设备驱动的测试方法。测试结果表明,系统工作正常、稳定,采样结果正确,具有实际工程应用价值。 在数据采集系统中,通常是通过传感器将自然世界的物理量转化成电量,电量是模拟量,必须经过模/数转换才能被系统的处理器读取。现在的很多微处理器都有片内AD,但这些AD多数是8位、10位或者12
[单片机]
基于ARM-Linux的MAX1303<font color='red'>接口</font>与驱动程序设计
嵌入式系统中的USB总线接口电路图
  详细阐述了一种用于嵌入式系统中的USB总线接口电路,该电路是基于USB专用芯片CH375实现的,并给出了系统硬件实现和应用程序。实验结果表明,该电路具有成本低、可靠性高等特点,可方便地集成到各种嵌入式系统中。    接口电路设计 :单片机与CH375芯片的连接方式有串行接口和并行接口两种,串行接口连接方式虽然电路连接简单,不用扩展使用外部地址空间,但其要遵循一定的通信协议,软件设计较为复杂,并且传输速度较并行接口的传输速度要慢。对于大多数嵌入式系统应用,因串口资源较少,而且扩展外部地址空间技术非常成熟,故本接口电路采取了并口连接方式。其电路原理图如图2所示。      图2 接口电路图   图2中的X8为USB接口插座,为了避
[电源管理]
嵌入式系统中的USB总线<font color='red'>接口</font>电路图
TMS320F24x与PC机串行通信接口设计及应用
引言 tms320f24x是美国ti公司tms320系列定点数字信号处理器(dsp)之一,tms320f240是f24x系列面向数字控制芯片的典型代表。由于tms320f240并不具备人机界面,在实际使用过程中,需要为它提供一个人机接口或上层控制接口,以便于观察控制效果或传递必要的控制信息。因此,实现tms320f240与pc之间串行通信接口的设计方法,具有较高的实用价值。 串行通信接口的硬件设计 f240芯片内部集成了一个串行通信接口(sci)模块,该模块是一个标准的通用异步接收/发送(uart)通信接口,通信接口有scitxd(sci发送输出引脚)和scirxd(sci接收输入引脚)两个外部引脚,引脚的信号电平为ttl
[嵌入式]
基于ISP1581型接口电路的USB2.0接口设计
1 引言    通用串行总线(USB)是近年来开发的一种串行总线标准,主要用于PC与外围设备的互联。USB总线具有使用简单、即插即用、易于扩展和传输速度快等优点。其协议主要有USB1.1和USB2.0二个版本,USB1.1的传输速率最高可以达到12Mb/s,USB2.0最高可以达到480Mb/s,因此可以满足大部分数据的传输需要。    目前,用于USB接口的电路主要有二类:一类是带USB接口的微控制器(如Cypress公司的EZUSB,Intel公司的8x931等);另一类是纯粹的USB接口电路,它需要一个外部微控制器(如National Semiconductor公司的USBN9602,Philips公司的PDIUSBD
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved