语音存储与回放Word文档下载推荐.docx
《语音存储与回放Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《语音存储与回放Word文档下载推荐.docx(9页珍藏版)》请在冰豆网上搜索。
语音存储与回放数字电路
一、系统方案
1题目指标和要求:
(1)放大器1和放大器2的增益均可调,增益调整范围为20dB~40dB;
(2)带通滤波器1和2的通带均为300Hz~3.4kHz;
(3)ADC的采样频率为8kHz,字长为8位;
(4)语音存储时间不小于4秒(采用62256或容量与其一致的存储器);
(5)DAC的转换频率为8kHz,字长为8位;
(6)回放语音质量良好。
(7)系统的录放功能等可用手动控制,各状态均有相应的指示信号显示。
2方案讨论
本题采用数模转换模数转换芯片,语音信号通过耳麦采集进入模拟通道放大滤波后再由芯片抽样采集,经过AD装换后单片机读取存入62256.回放时经过DA转换接至滤波电路,由功放电路功率放大后接到小喇叭输出。
其系统组成如下:
二.总体分析
系统主要由语音处理前向通道、A/D转换、单片机控制兼数据处理、D/A转换、键盘显示模块及后向处理通道组成。
单片机构成系统的控制中心,用来进行控制功能选择和结果显示。
通过前级放大,将微弱的电信号放大到2.5v,中间由10uF的电容进行隔离,再通过300Hz~3.4kHz的带通滤波器滤除50Hz的影响和高频噪声。
ADC0804的参考电压选为+5V,其采集的电压信号范围是0~+5V。
而语音信号是双极性的,可正可负(滤波器输出信号幅值约为土2.5V),因此,有必要加一直流偏置电压(约为+2.5V),使语音信号变为单极性信号(0~+5V),保证ADC0809采样有效,同时也保证其具有一定的采样精度。
通过反相加法器将双极性的电信号转换为0~+5V的单极性信号。
信号通过A/D转换后进入单片机进行相应处理,然后D/A转换成模拟信号输出,而DA0832输出的为电流,要通过一个运放和其内部的电阻构成I/V转换,得到的输出为0~-5V的单极性电压,于是加上一个电平抬升电路,将电压转换为-2.5~+2.5V的双极性电压,后极通过300Hz~3.4kHz的带通滤波器使之平滑,并用音频功放放大语音信号后输出。
三电路设计
1语音输入和前置放大电路设计
声电转换通过驻极体话筒实现,它具有灵敏度高、噪声低、价格低廉等诸多优点。
由于驻极体麦克风获得的语音信号非常微弱,需要将语音信号进行放大,为了减少噪声,这里采用低噪声宽频带的音频专用运放NE5534。
采用共模信号抑制能力较强的差分放大电路,采用两只(配对)麦克风分别接入差分放大器的正负端,有效地抑制了背景噪声,差分比例放大器的电压放大倍数为R5/R3=100,其电路原理图如图所示
图3—1语音采集和前置放大
2带通滤波器设计
前向通道中的带通滤波器用以消除混叠失真,所以称为抗混叠滤波器;
后向通道中的滤波器用于滤出300Hz~3.4kHz的语音信号,同时有效地抑制噪声特别是D/A转换后的数字信号,所以称为平滑滤波器。
两者均由两阶低通滤波器级联两阶高通滤波器构成。
图3—2带通滤波器
由公式可以算出其中心频率为f=1010Hz,品质因素Q=0.326,Q小于10,故该带通滤波器为宽带带通滤波器,实验结果表明,该滤波器能有效滤除低频分量和高频分量,大大减少了噪声干扰,同时也滤除了多余的高频分量,消除了混叠失真,性能足以满足要求。
3ADC0809及外围电路设计
ADC0809的工作过程是首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
图3—3ADC0809及外围电路
4.后向通道
由DA转换,滤波,功率放大三大部分组成。
DAC0832用作DA转换,滤波模块与前级滤波电路相同,功率放大采用常用的功放芯片LM386,简化了电路。
考虑到对于声音信号,过多的高频分量只能增加噪声,所以后接R2,C2构成低通滤波器,截至频率合理的设定在3.4khz±
100hz。
功放部分采用LM386来推动扬声器,LM386电源电压4-12V,音频功率0.25w。
LM386功放是它的电源电压范围非常宽,最高可使用到15V,消耗静态电流为4mA,当电源电压为12V时,在8欧姆的负载情况下,可提供几百mW的功率。
它的典型输入阻抗为50K。
图3—4DAC0832及外围电路
图3—5后项模拟通道电路
5总体电路图
图3—6总体电路图设计
四程序
1程序流程图
2程序
#include<
reg52.h>
absacc.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineAD_0804XBYTE[0x8000]
#defineDA_0832XBYTE[0x9000]
#defineledXBYTE[0xff00]
#defineKEY_HXBYTE[0xfc00]
#defineKEY_LXBYTE[0xfe00]
uintxdata*RAM;
uchardata_AD,data_DA;
voiddelay(uintz)
{
ucharx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
}
voidluqu()
led=0xfe;
RAM=0x0000;
while(RAM<
0x8000)
{
AD_0804=0;
TR0=1;
while(!
TF0);
TR0=0;
TF0=0;
data_AD=AD_0804;
*RAM=data_AD;
RAM++;
}
led=0xfd;
voidhuifang()
led=0x55;
data_DA=*RAM;
DA_0832=data_DA;
led=0xaa;
voidmain()
TMOD=0x02;
TH0=0x7c;
TL0=0x7c;
while
(1)
{
KEY_H=0xfe;
delay(5);
switch(KEY_L)
{
case0xfe:
luqu();
break;
case0xfd:
huifang();
}