引言
音频接收设备已经是日常生活、学习、工作中不可缺少的工具,但是在使用过程中由于某些原因,如切换频道、播放广告等,信号输出时会出现音量大小不一的情况,严重影响用户的收听效果。产生这种音量相差较大的主要原因是音频信号输入的幅度不一致,解决办法就是进行增益控制。
最早的增益控制是模拟电路检测控制,但模拟电路设计相对繁琐,且难以实现较宽范围的增益控制,因此随着数字信号处理器件(DSP)的发展,采用DSP进行增益控制成为主流。起初数字器件处理的一般方法是大的信号减小增益,小的信号不处理。现在也有对小信号进行放大的方法,但由于担心在没有信号输入的情况下增益调整太大,会使背景噪声也加大,因此增益调整范围不大,不能达到理想的控制效果。另外,基本都是对输入信号进行检测,即前馈控制,对输出信号不进行检测,这样在输入时若增益较大,输出会被限幅,影响收听效果。且DSP方案成本相对较高。本方案采用成本低的单片机为处理核心,通过简单的增益控制算法完成增益自动控制。
1 系统硬件设计
如图1所示,整个系统以音频信号的采集处理为核心进行设计。音频控制芯片PGA2311两边的音频信号输入和输出端,经放大器TL084电平搬移后送到MSP430F149的A/D口进行采样(对信号输入/输出端都进行检测目的是解决在输入端无信号情况下增益是否调整的问题,同时避免增益过大导致输出端限幅发生)。采样数据由软件算法处理得到增益值,经电平变换器74HC245配置到PGA2311。按键和数码管完成输出电平门限范围的设置和显示。
图1 系统框图
1.1 主控电路
主控芯片MSP430F149是一款16位、48个8位并行I/O口、具有精简指令集、超低功耗(节电模式下最低只有0.1 μA)的单片机,其寻址空间共64 KB其中RAM为2 KB,给系统开发带来很大的方便。它内置一个12位A/D转换器ADC12、采样保持器和模拟多路器。ADC12具有高速、通用的特点,能够对8个外部模拟源和4个内部参考电源(包括内部温度传感器源)进行A/D转换。ADC12还提供多种采样触发方式、转换时钟周期、转换模式的选择。
PGA2311是一款双声道、可编程增益放大器,与MSP430F149之间通过SPI总线交互,其增益范围为+31.5~-95.5 dB。
图1 中MSP430F149是3.3 V供电,而PGA2311是±5 V供电的CMOS器件,因此在I/O逻辑电平匹配时需要注意,在驱动PGA2311时用电平移位器74HC245达到电平匹配。
1.2 电平搬移电路
由于一般音频输出设备音量大小不一且为交流耦合形式,而MSP430F149的A/D采样电压范围是0~2.5 V,为了使被采样信号与A/D匹配避免削波失真,需要将输入信号比例放大(或缩小),并将中心电压搬移至1.25 V附近。如图2所示。
图2 电平搬移电路
2 软件设计
软件设计包括按键显示、外设控制、音频信号处理几个部分,重点是音频信号处理的AGC算法。按键显示响应用户设置输出音量大小并显示出来,外设控制主要是对PGA2311进行配置。
2.1 AGC算法
AGC算法核心是通过信号的包络信息来判断信号的动态范围是否超过设置大小,这里需要快速跟踪包络的变化,及时进行增益控制。以往的AGC算法中乘除法运算对CPU资源的占用较大。这里提出的AGC算法比较简单实用,其流程如图3所示。具体实现过程:从单片机的A/D口,获得音频输入/输出信号的电平存入数组。数组存储数据达到门限比较要求,进入峰值比较流程。根据存储的输入信号数据,采用冒泡排序的算法找出最大幅值,判断输入端是否有信号。如果判定没有音频信号输入,则增益不调整,防止由于输出信号太小而一直增大增益,噪声过大,或者一旦出现声音,由于增益过大而出现短时间输出声音太大。输入端有信号,则对输出端进行检测,同样调用冒泡排序程序找出最大幅值,如发现输出信号大小超过设定门限,则减小增益,反之则增大增益。在减小增益时,步进要大些,而在增大增益时步进要小些,这样在增益调整时输出的音量使用户听觉上不觉得难受。
图3 AGC算法流程
3 实验论证
为验证设计的正确性进行实验论证。设定输出电平范围,由计算机输入突变的音频信号,通过示波器观察输出,如图4所示。
从图4中方框所标示的音量突变区域,可以看出输入音量突然增大后,在500 ms内就将增益调低,保持音量输出在设定范围输出。高音突变低音等实验由于调整周期较长,这里就不作图示整个调整过程了。
图4 低音变高音结果
结语
实验结果说明,该设计增益控制及时、准确,保持输出信号电平在设定范围稳定输出,且低功耗,实现简单,可移植性强,可以满足目前用户对音频接收设备音量输出的要求。