基于凌阳单片机的语音信号实时采集
ADC初始化程序如下:
INT OFF;
R1=0x0030;
[P_TimerA_Ctrl]=R1;
//时钟频率为CLKA的fosc/2
R1=0xfa00;
[P_TimerA_Data]=R1;
//采样率为16kHz
R1=0x003d;
[P_ADC_Ctrl]=R1; //设置AGC功能
R1=0x00A8;
[P_DAC_Ctrl]=R1; //采用自动方式且通过MIC_IN通道输入,通过定时器A的溢出锁存数据,ADC为自动方式
R1=0x1000;
[P_INT_Ctrl]=R1; //开中断IRQ1_TM
INT IRQ;
图3 语音采集的硬件连接图
采样后的数字语音信号数据量非常大,且由于语音信号采样点幅度分布的非均匀性和样本间的相关性等原因,使语音信号中含有大量的冗余信息。因此,在实际应用中采用各种信源编码技术来消除语音信号的冗余度。语音编码方法主要有波形编码、参数编码和混合编码。
*波形编码的基本原理是以波形逼近为原则,在时域上把幅度样本分层量化并用代码表示;特点是语音质量高、抗噪性强编码率高,适于语音及高保真音乐。
*参数编码是基于某种语音产生模型,在编程端分析出该模型参数选择适当的方式进行编码;特点是语音质量差、抗噪抗弱和编码率低。
*混合编码综合了波形和参数编码之优点。
凌阳SPCE061A提供了压缩算法库——SACMLIB(见表1),其处理的语音信号范围是200Hz~3.4kHz的电话语音,并将A/D、编/解码、存储及D/A做成相应的模块,对于每个模块都有其应用程序接口API。
表1 SACM-LIB库中模块及其算法
(2)语音数据的传输
SPCE061A的通用异步串口(UART)提供了一个8位全双工标准接口,用于完成SPCE061A与外设之间的串行通信。借助于IOB口的特殊功能和UART IRQ中断,可以同时完成UART接口的接收与发送数据的过程。根据应用需求,把UART设置为中断方式接收数据,以查询方式发送数据。
UART初始化程序InitUART()见网络补充版(http://fanwen.oyaya.net收集整理)。
《基于凌阳单片机的语音信号实时采集(第2页)》