第9题 数字化语音存储与回放系统Word文档格式.docx
《第9题 数字化语音存储与回放系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《第9题 数字化语音存储与回放系统Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
![第9题 数字化语音存储与回放系统Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/31/c79aa23f-0f62-4981-aadf-4d7d1113f20c/c79aa23f-0f62-4981-aadf-4d7d1113f20c1.gif)
三、评分标准
任务
项目
得分
基本要求
方案设计与论证、理论分析与计算
30
测试方法与数据、对测试结果的分析
20
实际制作完成情况
50
发挥部分
完成发挥部分第①项
15
完成发挥部分第②项
5
完成发挥部分第③项
完成发挥部分第④项
摘要
本设计基于增强型STM32F103ZET6单片机,实现数字化语音存储与回放。
语音信号通过驻极体话筒采样后进行放大,经过通频带为300Hz-3.4kHz的带通滤波器进行滤波,通过AGC电路实现自动音量控制,送入单片机内部进行ADC采样并存入内部FLASH存储器中。
录制完成后语音数据再经过单片机内部DAC输出为模拟信号,并再次通过带通滤波器滤波后对其进行功率放大,保证信号回放质量。
为提高存储器利用率,本设计采用ADPCM算法,延长语音存储时间,经测试可达30秒。
本系统的创新点在于使用单个按键简化控制逻辑,并通过指示灯实时表示系统当前的工作状态,简单直观,易于使用。
关键词STM32带通滤波器ADPCM算法LM386
Abstract
ThisdesignisbasedontheenhancedSTM32F103ZET6microcontroller,digitalvoicestorageandplayback.Electretmicrophonesamplingswereconductedafteramplificationbyspeechsignal,throughthepassbandof300Hz-3.4kHzbandpassfilterwiththefilter,theAGCcircuitrealizationofautomaticvolumecontrol,intotheinternalmicrocontrollerADCsamplingandstoredininternalflashmemory.Afterrecordingthespeechdata,theDACoutputisanalogsignal,andthepoweramplifierisamplifiedbythefilterwiththefilter,andthesignalqualityisguaranteed.Toimprovememoryutilization,thisdesignusesADPCMalgorithmtoextendthevoicestoragetime,thetestcanreach30seconds.Theinnovativepointofthissystemistosimplifythecontrollogicbyusingasinglekey,anditiseasytouseinrealtime,anditissimpleandintuitive,anditiseasytouse.
KeywordsSTM32BandPassFilterADPCMAlgorithmLM386
1方案选择与比较
1.1主控制器的选择与比较
方案一:
采用MSP430G2553为主控制器,内置具有基准、采样与保持以及自动扫描功能的10位200-ksps的A/D转换器,且功耗低。
但其运算速度不够快,存储空间达不到要求。
方案二:
采用STM32单片机为主控制器,速度快,具有72MHz的CPU工作频率和很强的运算能力,且自带有3个12位模数转换器,1μs转换时间(多达21个输入通道),2通道12位D/A转换器。
具有从256K至512K字节的闪存程序存储器,高达64K字节的SRAM。
经比较,采用方案二为主控制器。
1.2语音信号采集的选择与比较
方案一:
采用动圈式话筒,结构简单、结实耐用、价格较低,对使用环境的要求不高。
但灵敏度不够高,高频响应不足,音色不够细腻。
方案二:
采用驻极体话筒,体积小,噪声低、失真小、灵敏度很高,频响也很宽。
经比较,采用方案二作为语音信号采集的方案。
1.3带通滤波器的选择与比较
采用单个运放构成压控电压源二阶带通滤波器,输入阻抗较高,输出阻抗较低,相当于一个电压源,性能稳定。
但系统要求通频带为300Hz—3.4kHz,f0=(fH+fL)/2=1550Hz,而此时Auf=0,即Rf/R1=0才可实现,故无法达到要求。
采用低通滤波器和高通滤波器串联,通过低通滤波器将输入的信号进行滤波,使得只有低于设计要求的频带中最高频率的信号才能通过,再通过高通滤波器使得只有高于设计要求的频带较低频率的信号才能通过。
经比较,滤波器串联可采用方案二作为带通滤波器的方案。
图1-1压控电压源二阶带通滤波器图1-2带通滤波电路
1.4A/D和D/A转换电路的选择与比较
采用ADC0832和DAC0832,ADC0832具有双通道A/D转换,8位分辨率,采样频率可达32.5kHz;
DAC0832具有8位分辨率,可双缓冲、单缓冲或直接数字输入,电流稳定时间为1μS。
此方案需两个转换芯片,增加电路复杂程度,且外置转换芯片串行传输速度较慢。
采用PCF8591,单片集成、单独供电、低功耗、8-bitCMOS数据获取器件。
PCF8591具有4个模拟输入、1个模拟输出和1个串行I²
C总线接口。
此方案可相应简化电路,但外置转换芯片GPIO在低速总线上,串行传输速度较慢。
方案三:
采用STM32F103ZET6内置A/D、D/A,3个12位模数转换器,1μs转换时间,2通道12位D/A转换器,并行传输,搭载在高速总线上,速度快,且无需附加硬件电路。
第1页,共7页
经比较,采用方案三作为A/D和D/A转换电路的选择。
1.5存储器的选择与比较
采用外部FLASH存储器,容量较大,断电后仍能保存,但需通过I2C或SPI,速度较慢,需外接电路,使用不方便。
采用单片机内置存储器,具有256K至512K字节的闪存程序存储器,断电后可保存,速度快,无需外接电路。
经比较,采用方案二作为存储器选择方案。
2总体设计
本系统对输入的语音信息进行前置放大后进入由低通滤波器和高通滤波器串联组成的带通滤波器中,并进行自动增益控制后送入单片机A/D采样,采用ADPCM算法进行压缩存储。
再经过D/A转换后再次送入带通滤波器,利用x/sin(x)高频校正,改善高频分量的损失,进而在功率放大后送入扬声器输出。
本设计总体设计框架如下:
3硬件设计
3.1语音输入
语音输入采用驻极体话筒。
驻极体话筒是一种体积小、频带宽、噪音小和灵敏度高的语音传感器。
驻极体话筒主要参数有:
灵敏度典型值为-66—-56dB或5—15mV/Pa;
频率响应典型值为50Hz—12kHz;
输出阻抗典型值不大于2kΩ;
工作电压DC为1.5—12V。
第2页,共7页
图3-1驻极体话筒内部结构及应用电路
3.2放大电路
前置放大电路和末极放大电路同时采用LM386芯片,LM386是一种音频集成功放,具有自身功耗低、更新内链增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点的功率放大器,广泛应用于录音机和收音机之中,电压增益20-200可调,满足此系统要求。
在1脚和8脚之间接10k滑动变阻器,实现增益可调。
图3-2放大电路
3.3带通滤波器
带通滤波器是指能通过某一频率范围内的频率分量、但将其他范围的频率分量衰减到极低水平的滤波器,一个理想的带通滤波器应该有一个完全平坦的通带,在通带内没有放大或者衰减,并且在通带之外所有频率都被完全衰减掉。
本设计采用低通滤波器与高通滤波器串联方式构成带通滤波器。
低通滤波器截止频率fH=3.4kHz,AU=-1,设C1为10nF,R2为3.3kΩ根据f0=
,AUP=-R2/R1,可得R1为3.3kΩ,R3=1.8kΩ,C2=39nF。
高通滤波器截止频率300Hz,fL=300Hz,AU=-1,设C2为100nF,R1为6.8kΩ根据f0=
,AUP=-C1/C2,可得C1为100nF,R2=1.8kΩ,C3=220nF。
第3页,共7页
图3-3无限增益多路反馈二阶低通及高通滤波电路
图3-4低通电路频率特性曲线
图3-5高通电路频率特性曲线
4软件设计
4.1主程序设计
程序及框图见附录。
4.2AGC功能实现
自动增益控制(AGC)电路的作用是能根据输入信号的电压的大小,自动调整放大器的增益,使得放大器的输出电压在一定范围内变化。
此功能可通过硬件实现,由电平检测器(峰值检波电路)、低通滤波器、直流放大器、电压比较器、控制电压产生器和可控增益放大器组成。
此方案实现起来过于复杂,并且可以通过软件调试进行自动增益,故本设计采用软件实现自动增益控制。
第4页,共7页
图4-1自动增益控制电路框图
4.3存储空间分配
根据存储空间=采样率*字长*时间,此系统采样率为16kHz,字长8bit,存储时间30s,可计算得所需存储空间为480KB。
STM32F103ZET6主存储器分为256页,每页为2字节。
图4-2存储器地址空间分配图4-3STM32内存模块组织
5系统测试与结果
5.1测试仪器
仪器名称型号
模拟示波器X2002
函数信号发生器F10
直流稳压电源SK1731
5.2测试方法
系统硬件方案完成后,进行各模块电路搭建,再对各模块进行功能验证,各硬件模块测试通过后编写各软件模块。
最后进行系统联调,按照题目要求测试整体功能并调整参数,填写测试表格并撰写设计报告。
5.3测试结果
5.3.1基本要求的测试与结果
软件调试无误后对搭建好的系统供电,初始化复位进入等待按键状态,按键后程序开始录音并存储,此时绿色指示灯点亮,红色指示灯间断闪烁;
10s后开始播放,此时红、绿指示灯同时点亮,音质效果良好,杂音小;
10s后进入擦除状态,红、绿指示灯同时闪烁;
5s之后检测是否有按键按下,循环执行,否则绿色指示灯长亮,红色指示灯熄灭。
放大器增益可调,前置放大46dB及末级放大40dB均可实现;
ADC及DAC采样频率达到16kHz,字长8位;
经测试系统工作正常。
5.3.2扩展要求的测试与结果
软件调试无误后对搭建好的系统供电,初始化复位后系统运行与基本要求相似,存储时间达到30s,并且可实现通过ADPCM算法对语音信息进行压缩存储,提高了存储器利用率。
并且对系统增加了自动音量控制功能,同时进行了高频x/sinx高频校正,保证了语音高质量回放。
第5页,共7页
经测试,系统工作正常。
6总结与体会
本论文是采用单片机来实现语音录放系统的设计,解决了以前用磁带记录的缺陷,单片机语音录放系统是数字电路为基础,利用数字语音电路来实现语音信号的记录、存储、还原等。
它具有体积小,使用方便,可灵活扩展等优点。
通过此语音录放系统的设计可以看出,数字语音系统比模拟语音系统更方便,更灵活,它是以后语音系统发展的趋势。
由于时间较为紧张和实验条件的限制,本设计还存在许多的不足之处,AGC自动增益控制和音频压缩编解码未完成,我们会继续努力提高自己的知识水平,继续完善这次的设计。
7参考文献
[1]吴运昌.模拟电子线路基础[M].广州:
华南理工大学出版社,2004.
[2]李建忠.单片机原理及应用[M].西安:
西安电子科技大学,2002.
[3]贾立新.电子设计与实践[M].北京:
清华大学出版社,2007.
[4]童诗白.模拟电子技术基础[M].北京:
高等教育出版社,2003.
[5]胡寿松.自动控制原理[M].北京:
科学出版社,2007.
附录
程序清单
voidEXTI0_IRQHandler(void){
if(EXTI_GetStatus(EXTI_Line)){
SYS_DELAY_MS(15);
if(!
GPIO_READ_IN(A,0)){
key=1;
while(!
GPIO_READ_IN(A,0));
}
}
EXTI_ClearITBit(EXTI_Line0);
}
voidSYS_CONFIG(void){
RCC_CONFIG_APB1(DAC);
RCC_CONFIG_APB2(AFIO);
RCC_CONFIG_APB2(GPIO);
RCC_CONFIG_APB2(ADC);
GPIO_CONFIG(A,0,IN_FLOATING);
GPIO_CONFIG(A,3,AIN);
GPIO_CONFIG(A,4,AIN);
GPIO_CONFIG(B,0,Out_PP);
GPIO_CONFIG(C,0,Out_PP);
NVIC_CONFIG(EXTI0_IRQn,0);
EXTI_CONFIG(A,0,Line0,Falling);
FLASH_CONFIG(FLASH_ADDRESS);
DAC_CONFIG
(1);
ADC_CONFIG(3);
TICK_CONFIG(4500,0);
第6页,共7页
程序框图
主程序流程图(左)初始化流程图(右)
#pragmaonce
#include"
stm32f10x.h"
#defineGPIO_READ_IN(x,y)((_Bool)(GPIO##x->
IDR&
GPIO_Pin_##y))
#defineGPIO_READ_OUT(x,y)((_Bool)(GPIO##x->
ODR&
#defineGPIO_WRITE(x,y,z)do{GPIO##x->
BSRR=GPIO_Pin_##y}while(0)
#defineGPIO_CONFIG(x,y,z)do{GPIO_InitTypeDefM=GPIO_Pin_##y;
}while(0)
#defineGPIO_INVERSE(x,y)do{GPIO_WRITE(x,y,0)}while(0)
#defineDAC_CONFIG(x)do{DAC_InitTypeDefM={DAC_Trigger_None};
#defineDAC_SET(x)do{DAC_SetChannel1Data(DAC_Align_8b_R,(x));
voidFLASH_CONFIG(u32addr){
charcount=0;
FLASH_Unlock();
FLASH_ClearFlag(FLASH_FLAG_EOP);
FLASH_ClearFlag(FLASH_FLAG_PGERR);
FLASH_ClearFlag(FLASH_FLAG_WRPRTERR);
while(addr<
FLASH_END){
if(count++%20==0){
GPIO_INVERSE(B,0);
GPIO_INVERSE(C,0);
FLASH_ErasePage(addr);
addr+=0x800;
GPIO_WRITE(B,0,0);
GPIO_WRITE(C,0,1);
voidSysTick_Handler(void){
if(key){
if(play)DAC_SET(FLASH_READ(FLASH_ADDRESS+tick));
else{
if(tick%2==0)temp=ADC_GET()>
>
8;
else{
temp+=(ADC_GET()&
0xFF00);
FLASH_WRITE(FLASH_ADDRESS+tick-1,temp);
}
if(tick%8000==0)GPIO_INVERSE(C,0);
if(++tick==240000){
if(play){
FLASH_CONFIG(FLASH_ADDRESS);
key=0;
elseGPIO_WRITE(C,0,0);
play=!
play;
tick=0;
第7页,共7页