PWM结合电阻网络实现16位WAV语音播放
摘要:本文提出一种利用PWM和电阻网络实现16位高音质WAV语音文件播放的设计,并提给3种解决方案和对比论证,阐述了其实现过程并通过实验验证。该方法不仅成本低,其音质接近16位精度,而且由于WAV编码方式简单,在单片机上解码容易实现。实验结果表明,该方法音质效果较好,可应用范围广。
引言
PWM波由谐波和直流量组成,谐波是需要被滤除的信号,即通过模拟低通滤波器可以将调制后的PWM信号转换成模拟信号,滤波器可以消除大部分高频成分,最后只留下直流量,图1为PWM信号还原为模拟信号的示意图。普通单片机受限于其处理能力,一般只能调制8位左右的PWM信号,因此只能还原8位的WAV声音文件。而用D/A转换器实现模拟量的输出成本较高,音质效果也不佳。电阻网络对各频带及幅值的信号的阻碍比较统一,保证了声音信号保真率。本文将16位高音质WAV信号进行拆分处理,一部分由PWM进行调制,另一部分控制8个I/O口中的某几路输出PWM,信号经低通滤波和功率放大后送至喇叭等放声设备,以此将数字语音信号转换成模拟信号,达到语音播放的目的。
1 原理及误差分析
1.1 基本原理
16位数字信号可表示自然界65 535种声音信号,据此将16位数字量量化为对应的模拟信号,便完成声音的还原:
这里将16位数据Data拆分为X1和X2,且有Data=X1×X2。将X1通过单片机的定时器调制为PWM信号,通过控制占空比来控制输出电压大小,即:
将X2用来控制单片机的8路I/O是输出调制好的PWM信号,还是输出信号“0”,该8路信号送到电阻网络,即:
则最后输出的电压大小为:
,以此便可以实现16位D/A转换。
1.2 数据拆分形式分析
针对基本原理中提出的将16位数据拆分为高低位两部分在单片机中的实现,提出3种方案并对其进行对比分析。
1.2.1 方案1
将16位数据从中间截断,并判断高低8位的值是否为0,是则补1,避免拆分的两个数据有一个为0时导致输出也为0。拆分后的低8位送给定时器进行PWM合成,高8位送给电阻网络控制输出。该方式占用单片机资源很少,对单片机处理能力没有要求,可以在所有单片机上实现。但PWM与电阻网络模拟电压输出均有非线性失真,当拆分的两个数据中有一个较小(接近0)或较大(接近255)时,对最后的输出电压有较大影响。
1.2.2 方案2
利用查表法,将Data=X1×X2的所有65 536种数据的拆分结果计算出来,建表后存到单片机中,只需根据数据大小对号查出X1、X2进行PWM调制并控制电阻网络输出即可(X1、X2均不大于256)。该数组需占用128 K的存储空间,但不是所有数据都能写成Data=X1×X2形式,只能尽可能地去逼近,最终的输出值与Data会有少许出入。该方案也不需要单片机具有较强的处理能力,且避免了方案1的缺陷,但因其逼近的拆分方式导致其输出精度有损,达不到16位高精度。
1.2.3 方案3
判断16位数据的高位为0的位数,将不为0的低位数据从中间一分为二,然后将拆分后的数据均左移相同的位数,保证数据拆分前后“一致”,将拆分后的数据分别进行PWM调制和控制电阻网络输出。一般单片机可轻松完成,占用资源较少,避免了方案2的缺陷,但在左移时会
有数据丢失,导致输出误差较大,特别是当数据小于255时,其误差是不可接受的。
根据现有的理论分析和实际的测试效果来看,方案2较为理想。本文针对方案2展开设计。
2 系统设计
系统框图如图2所示,该方案采用TI公司的MSP430F5529作为主控MCU,它将TF卡中的WAV文件读取出来,并在TF卡中的数据表中查出对应的数据拆分值,然后存放在单片机中分出来的1 KB的缓冲区中。定时器A定时读取缓冲区中的数据,定时器B完成PWM调制并同时控制电阻网络输出。由电阻网络输出的信号经二阶低通滤波器和功率放大器后送到喇叭完成语音播放。带触摸功能的TFT液晶屏用来显示和控制语音播放。单片机的供电由两节干电池完成,功率放大电路供电由12 V直流电源提供。
2.1 硬件设计
电阻网络的电路图如图3所示,利用电压叠加定理和电阻分压计算分析可知,其输出为Vout=(1/2×Viol+1/4×Vio2+1/8×Vio3+…+1/256×Vio8)×Vcc。它仅由两种阻值的电阻组成,阻值选取容易,其成本也低。
低通滤波和功率放大电路如图4所示,设计中采用了二阶无源低通滤波器,功率放大器选择TI公司的LM386,它适合放大低电压的音频信号。图4中R1、R2、C5、C6组成二阶低通滤波器,其在下降率为6 dB时的截止频率为16kHz,用以播放采样频率为22.05 kHz的WAV语音。C7、
R3组成了一阶高通滤波器。此处电压增益为20 dB,C3为隔直电容。LS1接
- 基于DSP的磁流变阻尼器的控制方法(04-14)
- 用DSP56F805 PWM模块输出高频正弦波(05-25)
- 一种基于DSP的新型单相PWM算法研究(08-14)
- 基于DSP的自动避障小车(04-05)
- 基于DSP的逆变电源控制系统研究(04-28)
- 基于DSP的感应电机SVPWM矢量控制系统(06-21)