系统结构设计
技术是SOC(System on Chip)技术和电子设计自动化技术相结合的一种全新的嵌入式系统设计技术,为设计者提供了一个可以快速开发设计及验证的系统设计平台,用以搭建基于总线的系统。它包含了一系列的模块,例如NiosⅡ处理器、存储器、总线、JTAG等IP核,还有包含操作系统内核的嵌入式软件开发工具。它可以将处理器、存储器、I/O接口、硬件协处理器和普通的用户逻辑等功能模块都集成到一个FPGA芯片里,构建一个可编程的片上系统。
在系统结构上数字音频AGC系统的设计主要包括3个层面:最底层是硬件层面,即物理硬件电路的原理图设计,包括各功能IC的外围电路设计;中间层是SOPC系统层,其设计主要有NiosⅡ软核处理器的配置和添加,选择各种可定制的外设IP核和自定义所需模块,将定制好的各个外设模块与Avalon总线进行连接,并为分配外设地址及中断,最后经编译、综合生成可在FPGA内实现相应功能的SOPC系统模块;最上层的是软件层,主要是NiosⅡ软核处理器运行的软件程序,是用C/C++代码编写的,包括μC/OS-Ⅱ实时操作系统,设备的驱动程序和应用程序。
本系统选用的FPGA芯片是Altera公司所推出的CycloneⅡ系列的EP2C20Q240C8。该芯片采用90 nm工艺制造,最大可用I/O管脚142个并内嵌26个乘法器块,支持使用Altera公司的SOPC Builder工具嵌入NiosⅡ软核处理器。系统整体架构,如图1所示。
2 数字音频AGC算法的设计与实现
嵌入式数字音频AGC系统的核心就是音频AGC算法的设计,音频AGC是音频自动增益控制算法,是一种根据输入音频信号水平自动动态地调整增益的机制,AGC算法的好坏直接反映在处理后输出的音频听觉感知效果。
2.1 算法基本思想
文中提出一种多参数融合带反馈机制的音频AGC处理算法,在保证输出电平满足条件的情况下,能有效解决传统AGC中过冲或过衰现象,并能够抑制背景噪声的提升,能根据人耳听觉特性输出音量稳定平衡的音频信号。
用yi(n)代表经过AGC处理的第i帧数字音频信号;xi(n)代表这一帧原始的数字音频信号;Gi表示这一帧的音频增益因子,音频AGC处理可以用如式(1)表示
2.2 关键特征参数提取
计算音频增益因子Gi的关键是对当前数字音频的状态判断。由于人耳对音量的主观感觉是从声音响度上来体现的,而响度是由发声体振动幅度的大小来决定,并且人耳对不同频率声音的感应是不平坦的,所以人耳感知的声音响度是频率和声压级的函数曲线。基于人耳的响度感知特性,AGC算法中音频增益因子Gi的计算需要综合考虑声音的振幅、短时能量和频率这3个特征。
经过数字化的音频信号实际上是一个时变信号,为了能对音频信号进行分析,可以假设音频信号在几十ms的短时间内是平稳的。为了得到短时音频信号,要对音频信号分帧处理,分帧是连续的。为避免AGC系统处理后的因音频分帧延迟带来的画音不同步现象,本设计将分帧定为20 ms。数字电视的音频采样率为48 kHz,所以一帧内的音频样值数有960点。
音频信号的振幅可以用峰值表示,即由一帧音频信号内的绝对值最大项来表示,用Pi代表第i帧数字音频信号xi(n)的帧内峰值,那么
短时能量可以有效判断信号幅度的大小,音频信号的短时能量Ei定义如下
短时能量由于对信号进行平方运算,考虑到处理器的性能和实时性的保证,可以采用绝对值之和代替平方和来表示短时能量的变化,使运算简化,其公式为
短时过零率是指每帧内信号通过零值的次数,对于数字音频信号实质上就是一帧信号采样点符号的变化次数,由于采样频率是固定的,因此短时过零率可以在一定程度上反映音频信号的频谱特征,用作一种音频信号频率的粗略估计。短时过零率Zi表示为
提取音频中以上3个关键特征参数就可以作为音频增益因子Gi的计算和判决的条件。
2.3 反馈机制的实现
在前馈处理中当输入的第i帧数字音频信号xi(n)的帧内峰值Pi超过用户设定的峰值电平门限值Ppeak信号就会被瞬间衰减,增益因子变小。而当输入的第i帧数字音频信号xi(n)的帧内峰值Pi低于用户设定的提升电平门限值Pact并且高于用户设定的噪音电平门限值Pnoise信号就会被瞬间提升,增益因子变大,低于噪音电平门限值Pnoise的信号就不会被提升。
前馈机制能在音频信号突变导致帧内峰值溢出或过小时,迅速改变增益因子,用非线性的变化将音频稳定在所设定的动态范围内(峰值电平门限Ppeak和提升电平门限Pact之间)。而新增加的反馈机制能通过判断处理后的短时能量调整增益因子Gi+1,使音频信号变化稳定,在一个较宽的时间尺度上均衡响度。AGC算法中计算增益因子的具体流程,如图2所示。
在反馈机制中使用α归一化滤波器对满足条件的输入音频信号和上一帧的增益因子Gi调整计算新的增益因子。
α 归一化滤波器可以简单表示为
为了避免增益因子的剧烈波动,需要加大增益因子Gi的权重值α,而权重值α的大小决定了滤波器归一化的收敛速度,|1-α|越大,则收敛速度越快。权重值α的计算需要综合参考短时过零率Zi、处理前的短时能量Mi和处理后的短时能量。在音频剧烈变化的时候,增益因子仍然能够收放自如,稳定平衡音频信号的输出。
2.4 噪音抑制处理方法
在AGE中对噪音的抑制是一个重要的部分,噪音主要是音频信号间的静音噪音和AGE处理中产生的噪音。对静音噪音的抑制主要靠噪音电平门限的设定,当输入的第i帧数字音频信号xi(n)的帧内峰值Pi低于用户设定的噪音电平门限值Pnoise时,就将该帧的增益因子Gi调整为1,不进行放大处理。当输入的音频峰值连续低于噪音电平门限的时间达到静音时间ts则将输出音频静音,这样就可以抑制噪音而不影响音频输出质量。
AGC处理中一个重要问题是,在音频分帧的交界处的样值点会因为增益因子Gi的突然改变而产生原本连续信号样值的突变,当分帧为20 ms时,AGC处理效果相当于产生50 Hz幅度不定的阶跃信号噪音。噪音信号Unoise的大小为
当xi-1(960)和xi(1)相差较大时会产生较大的影响。在本设计中为了消除该噪音,改为在每一个处理帧开始后的第一个过零点进行增益因子的更新。此时噪音的影响为
由于音频信号样值的连续性,在过零点处xi-1(n-1)和xi-1(n)均趋向于O,因此unoise也趋向于0。由于人耳的可听声音频率范围在20 Hz~20 kHz,在音频采样和A/D转换时会滤除人耳的可听声音频率范围外的频率分量,而每个周期内都有两个过零点,所以增益因子的更新速度不受影响。由此则AGC处理带来的噪音也被很好的抑制。
2.5 仿真结果及分析
为了验证该算法的正确性和有效性,采用Matlab对该数字音频AGC算法进行仿真。仿真结果如图3所示。
在仿真中输入一段声音忽大忽小的数字音频,从经过AGC处理后的数字音频输出来看,大音量的音频信号被有效衰减,小音量的音频信号被有效放大,正常音量的音频信号几乎没有变化。该段音频长度为6 s,增益因子在此期间可调整300次,该算法的增益因子调整速度可以满足音频剧烈变化时的使用需求。对噪音的抑制也起到了很好的效果,人耳的实际听觉感知达到了满意的效果。
3 软件层设计
目前比较流行的嵌入式操作系统主要有VxWorks,Windows CE,uCLinux,μC/OS-Ⅱ等。μC/OS-Ⅱ的规模较小、实时性和可靠性较高,能够满足嵌入式数字音频AGE系统对实时性的要求,考虑到NiosⅡIDE开发环境对μC/OS-Ⅱ的良好支持,故操作系统选择μC/OS-Ⅱ。μC/OS -Ⅱ是一种可移植、可固化、可裁减、占先式的多任务实时操作系统内核。它通过为每个任务分配单独的任务堆栈来保存任务工作环境,提供任务管理与调度,任务间的同步、互斥与通信,时间和中断管理、内存的动态分配等多种系统服务。
系统运行时,首先进行系统初始化操作,即初始化所有数据结构,分配堆栈空间,然后建立任务间通讯的信号量或者消息队列,进而创建任务,并且分配不同的优先级,所有任务被置于就绪态,系统从优先级最高的任务开始执行。
软件设计主要包括嵌入式操作系统μC/OS-Ⅱ的移植、LCD显示控制器和自定义音频模块的驱动程序设计、算法设计实现3个主要部分。嵌入式音频AGC系统根据功能划分主要有以下4个任务,如图4所示。
(1)系统初始化任务,主要是用以初始化整个嵌入式音频AGC系统,包括初始化各种系统变量、LCD控制器、键盘、自定义音频接口模块等系统模块,此外还担负着创建其他任务和信号量的任务,是系统正常运行必不可少的一环,该任务在系统中有最高的优先级。在正常初始化系统以后将该任务删除以节省系统开支。
(2)音频AGC处理任务,对自定义音频接口的输入音频进行AGC处理,配合自定义音频接口的驱动程序将处理好的音频进行输出。该任务是嵌入式音频AGC系统的核心任务,在系统初始化任务完成并删除后成为系统内优先级最高的任务。
(3)键盘输入响应处理任务,对PIO输入的按键信息进行相应处理,如果有改变参数设置等重要信息要通过信号量及时反馈给音频AGC处理任务,同时负责输出要在LCD上显示的内容,通过邮箱信号量发送给LCD显示任务。它的优先级比LCD显示任务高。
(4)LCD显示任务,将接收到的内容配合LCD控制器驱动程序进行LCD的显示输出。
4 结束语
本设计采用SOPC技术,利用FPGA实现SDI接口逻辑,移植μC/OS-Ⅱ实时操作系统为嵌入式应用软件运行平台,可以实现与广电设备的无缝接合。通过设计采用一种适于实时性的多参数融合的AGC算法对数字音频信号进行AGC处理,实现了具有抑制一定噪声能力的嵌入式数字音频AGC系统。测试表明该系统达到设计预期目标,改善了传统音频AGC处理中的一些缺陷,输出音频稳定平衡,完全满足实际需要,可广泛应用在数字演播室中的数字音频实时AGC处理上。