毕业设计(论文)-基于单片机的数字化语音存储与回放系统[附源码和中英文翻译]_第1页
毕业设计(论文)-基于单片机的数字化语音存储与回放系统[附源码和中英文翻译]_第2页
毕业设计(论文)-基于单片机的数字化语音存储与回放系统[附源码和中英文翻译]_第3页
毕业设计(论文)-基于单片机的数字化语音存储与回放系统[附源码和中英文翻译]_第4页
毕业设计(论文)-基于单片机的数字化语音存储与回放系统[附源码和中英文翻译]_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘 要当今,计算机技术带来了科研和生产的许多重大飞跃,微型计算机的应用已经渗透到生产、生活的各个方面。单片微型计算机简称单片微机或单片机,又称为微控制器。它体积小、价廉、功能强,适用范围越来越宽。单片机在工业控制、自动检测、智能仪器、家用电器等领域的应用尤其突出。本课题以凌阳SPCE061A单片机为主体,实现了语音的数字化存储与回放,整个系统分为录音、停止、和放音三种状态,状态的改变用按键K1K2K3控制。存储器采用SPR4096,放大器采用NE5532,使用SPCE061A单片机自带的LineIN输入,性能良好的数字滤波器滤去音频信号(3003400)频段以外的信号,经AD转换将音频信号转换为电信号,采用SACM-A2000的压缩算法,将压缩后的数据存储在SPR4096存储器中。放音时再从SPR4096读取数据,利用凌阳SACM库提供的DVR函数进行录放,数模转换后经过放大驱动喇叭。在8kHz的采样频率时,语音存储时间可以达到10s以上,回放时语音失真小,音质良好。软硬件的结合使该系统有合理的结构,性能指标基本达到要求。关键词:SPCE061A SPR4096 数字滤波压缩编码语音ABSTRACTNowadays, computer science has brought about a lot of achievements in scientific research and in industry. The application of microcomputer has penetrated to all aspects of life and industry. Microcomputer is called singlechip for shot, or controller. Because of its small bulk, low price, strong function, the microcomputer is used more and more, especially in the industrial control, automatic detect, intelligent instrument, apparatus and so on.This task is based on the microcomputer SPCE061A of Sunplus. Digital memorization of voice and playback of voice are all realized in this system. All the system is composed of three states: record, playback and halt. The keys K1K2K3 are in charge of the change of the states. SPR4096 is used as the data memorizer. The microcomputer SPCE061A offers micin input. Digital filter which performance is all right is used to wipe off the noise. Audio frequency single is switched to the electric single via the conversion of AD. After amplified, it drives the trumpet. Voice memorization time can reach more than 10s at 8kHz sampling frequency. Quality of the playback voice is fine and distortion is low. Both software and hardware were combined together so that the system can work well. The tested data shows that the system is reliable and the performance of the system up to the design requirements.Key words: SPCE061A ; SPR4096; digital filter; 第一章 SPCE061A单片机简介1.1 凌阳16位单片机介绍 随着单片机功能集成化的发展,其应用领域也逐渐地由传统的控制,扩展为控制处理、数据处理以及数字信号处理(DSP,Digital Signal Processing)等领域。凌阳的16位单片机就是为适应这种发展而设计的。它的CPU内核采用凌阳最新推出的nSP(Microcontroller and Signal Processor)16位微处理器芯片(以下简称nSP)。围绕nSP所形成的16位nSP系列单片机(以下简称nSP家族)采用的是模块式集成结构,它以nSP内核为中心集成不同规模的ROM、RAM和功能丰富的各种外设接口部件。nSP内核是一个通用的核结构。除此之外的其它功能模块均为可选结构,亦即这种结构可大可小或可有可无。借助这种通用结构附加可选结构的积木式的构成,便可形成各种不同系列派生产品,以适合不同的应用场合。这样做无疑会使每一种派生产品具有更强的功能和更低的成本。 nSP家族有以下特点: l 体积小、集成度高、可靠性好且易于扩展 nSP家族把各功能部件模块化地集成在一个芯片里,内部采用总线结构,因而减少了各功能部件之间的连线,提高了其可靠性和抗干扰能力。另外,模块化的结构易于系统扩展,以适应不同用户的需求。 l 具有较强的中断处理能力 nSP家族的中断系统支持10个中断向量及10余个中断源,适合实时应用领域。 l 高性能价格比 nSP家族片内带有高寻址能力的ROM、静态RAM和多功能的I/O口。另外,nSP的指令系统提供具有较高运算速度的16位16位的乘法运算指令和内积运算指令,为其应用增添了DSP功能,使得nSP家族运用在复杂的数字信号处理方面既很便利,又比专用的DSP芯片廉价。 l 功能强、效率高的指令系统 nSP指令系统的指令格式紧凑,执行迅速,并且其指令结构提供了对高级语言的支持,这可以大大缩短产品的开发时间。 l 低功耗、低电压 nSP家族采用CMOS制造工艺,同时增加了软件激发的弱振方式、空闲方式和掉电方式,极大地降低了其功耗。另外,nSP家族的工作电压范围大,能在低电压供电时正常工作,且能用电池供电。这对于其在野外作业等领域中的应用具有特殊的意义。1.2 SPCE061A单片机1.2.1 SPCE061A单片机概述 SPCE061A是继nSP系列产品SPCE500A等之后凌阳科技推出的又一个16位结构的微控制器。目前有两种封装形式:84引脚的PLCC84封装和80引脚的LQFP80贴片封装。 主要性能是: 16位nSP微处理器;CPU时钟:32768Hz49.152MHz ;工作电压:VDD为2.43.6V(cpu), VDDH为2.45.5V(I/O); 可编程音频处理; 内置2K字SRAM、内置32K FLASH;32位通用可编程输入/输出端口; 2个16位可编程定时器/计数器(可自动预置初始计数值); 32768Hz实时时钟,锁相环PLL振荡器提供系统时钟信号;2个10位DAC(数-模转换)输出通道; 7通道10位电压模-数转换器(ADC)和单通道语音模-数转换器; 16系统处于备用状态下(时钟处于停止状态)耗电小于2A3.6V; 14个中断源:定时器A / B,2个外部时钟源输入, 声音模-数转换器输入通道内置麦克风放大器自动增益控制(AGC)功能;具备触键唤醒的功能; 使用凌阳音频编码SACM_S240方式(2.4K位/秒),能容纳210秒的语音数据; 具备异步、同步串行设备接口; 具有低电压复位(LVR)功能和低电压监测(LVD)功能; 具有保密能力; 具有WatchDog功能(由具体型号决定)内置在线仿真电路接口ICE(In- Circuit Emulator);1.2.2 结构概览 SPCE061A的结构如图1-1所示:图1-1 SPCE061A结构图 1.2.3 芯片的引脚排列和说明 SPCE061A有两种封装形式,一种为84个引脚的PLCC84封装形式;61A PLCC84实物图如1-2,引脚排列如图1-3;另一种为80个引脚,如图1-4所示。 图 1-2 SPCE061A PLCC84 图1-3 SPCE061A PLCC84引脚排列 图1-4 SPEC061A LQFP80 引脚排列1.2.4 芯片特性SPCE061A系统参数特性如下所示:各引脚特性介绍如下:IOA0-IOA15(41-48,53,54-60脚):I/O口A,共16个。IOB0-IOB15(5-1,81-76,68-64脚):I/O口B,共16个。OSC31I(13脚):振荡器输入。在石英晶振模式下,是石英元件的一个输入脚。OSC32O(12脚):振荡器输出。在石英晶振模式下,是石英元件的一个输出脚。XRESB(6脚):复位输入。若这个脚输入低电平,会使控制器被重置复位。XICE(16脚):ICE使能端,接在线调试器PROBE的使能脚ICE_EN。XICECLK(17脚):ICE时钟脚,接在线调试器PROBE的时钟脚ICE_SCK。XICESDA(18脚):ICE数据脚,接在线调试器PROBE的数据脚ICE_SDA。PVIN(20脚):程序保密设定脚。接GRD。PRUSE(29脚):程序保密设定脚。接+5V。DAC1(21脚):音频输出通道1。DAC2(22脚):音频输出通道2。VRES2(23脚):2V参考电压输出脚。AGC(25脚):语音输入自动控制引脚。OPI(26脚):Microphone的第二运放输入脚。MICOUT(27脚):Microphone的第一运放输出脚。MICN(28脚):Microphone的负向输入脚。MICP(33脚):Microphone的正向输入脚。VRTPAD(35脚):A/D转换外部参考电压输入脚。它决定A/D转换输入电压上限值。若该点输入一个2.5V的参考电压,则A/D转换电压输入范围为0-2.5V。(外部A/D最高参考电压3.3V)。VCM(34脚):ADC参考电压输出脚。VMIC(37脚):Microphone电源。XSLEEP(63脚):睡眠状态指示脚。当CPU进入睡眠状态时,该脚输出一个高电平。VCP(8脚):锁相环压控振荡器的阻容输入。XROMT、PVPP、XTEST(61、69、14脚):出厂测试用引脚,悬空即可。VDDH(51、52、75脚):I/O点评参考。若该点输入一个5V的参考电压,则I/O输入输出高电平为5V。VDD(7脚):PLL锁相环电源。VSS(9脚):锁相环地。Vss(19、24脚):模拟地。VSS(38、49、50、62脚):数字地。VDD(15脚、36脚):数字电源。第二章 61板组成及自检2.1 61板组成2.1.1 概述目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上的各种仪表控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。利用51单片机进行开发时,硬体开发系统要求很多,如仿真器、烧录器、开发板等。软体开发工具有富兰克林、Keil51等。61板是SPCE061A的硬体开发系统,用户只采用61板就可以进行开发,与61板配套的软体开发工具名称为凌阳十六位单片机集成开发环境(unSP IDE),凌阳大学计划网站提供开发环境的免费下载和升级。61板是以16位单片机SPCE061A为核心的精简开发仿真实验板,大小相当于一页扑克牌,是凌阳大学计划专为大学生、电子爱好者等进行电子实习、课程设计、毕业设计、电子制作及电子竞赛所设计的,也可作为单片机项目初期研发使用。61板的主要特点是:简单、易学、实用。它采用的是精简指令集,在这个指令系统中共有41条指令,指令功能简单且容易掌握。 61板除了具备单片机最小系统电路外还包括有电源电路、音频电路(含MIC输入部分和DAC音频输出部分)、复位电路等,而且体积小、采用电池供电,方便随身携带!2.1.2 61板的结构 61板的实物结构图如图2-1 所示 图2-1 61板实物图表2-1 框图说明POWER 5V&3V的供电电路PLL锁向环外部电路Power电源指示灯Sleep睡眠指示灯RESET复位电路K4复位按键PROBE在线调试器串行5pin接口S5EZ-PROBE和PROBE切换的拨断开关J12、J3耳机插孔和两pin喇叭插针DAC一路音频输出电路,采用SPY0030集成音频放大器MIC麦克风输入电路OSC32768晶振电路VREFA/D转换外部参考电压输入接口R/C芯片其他外围电阻、电容电路K1K3扩展的按键:接IOA0IOA22.1.3 61板组成及作用 61板结构如图2-2所示 图2-2 61板组成结构(一)输入/输出(I/O)接口61板将SPCE061A的32个I/O口全部引出:IOA0IOA15,IOB0IOB15,对应的引脚为:A口,4148、53、5460;B口,51、8176、6864。而且该I/O口是可编程的,即可以设置为输入或输出:设置为输入时,分为悬浮输入或非悬浮输入,非悬浮输入又可以设置为上拉输入或是下拉输入;在5V情况下,上拉电阻为150K,下拉电阻为110K;设置为输出时,可以选择同相输出或者反相输出。 (二)音频输入/输出接口正如我们在前面介绍的61板具有强大的语音处理功能,如图2所示,X1是语音的MIC输入端,带自动增益(AGC)控制,J12和J3都是语音输出接口,一个是耳机插孔另一个是两pin的插针外接喇叭,由DAC输出引脚21或22经语音集成放大器SPYOO30放大,然后输出,SPY0030是凌阳的芯片,相当于LM386,但是比386音质好,它可以工作在2.46.0V范围内,最大输出功率可达700mW(386必须工作在4V以上,而且功率只有100mW)。(三)在线调试器(PROBE)和EZ-PROBE接口图2-2中J4为PROBE的接口,该接口有5PIN,其中两个分别是地(VSS)和3.3v电源(VCC),我们就是通过PROBE一端接PC机25针并口,一端连接它来调试、仿真和下载程序的。这样,就不需要再用仿真器和编程器了,只要按图2所示将其连接好,就可以通过它在PC机上调试程序,并且在线仿真,最后将程序下载到芯片中,即完成了程序的烧写。图2-2中的J11是EZ-PROBE的接口,我们提供一根转接线用作EZ-PROBE的下载,一端连接PC机的25pin并口,另外一端接61板的5pin EZ-PROBE接口,参见图2-2。(四)电源接口图2-2中J10是电源接口,61板的内核SPCE061A电压要求为3.3V,而I/O端口的电压可以选择3.3V也可以选择5V。所以,在板子上具有两种工作电压:5V和3.3V。对应的引脚中15、36和7必须为3.3V, 对于I/O端口的电压51、52、75可以为3.3V也可以是5V,这两种电平的选择通过跳线J5来选择。61板的供电电源系统采用用户多种选择方式: 1、 DC5V电池供电用户可以用3节电池来供电,5V直流电压直接通过SPY0029(相当于一般3.3V 稳压器)稳压到3.3V,为整个61板提供了4.5V和3.3V两种电平的电压。2、 DC5V稳压源供电用户可以直接外接5V的直流稳压源供电,5V电压再通过SPY0029稳压到3.3V。3、 DC3V供电用户可以提供直流3.3V电压为实验板进行供电,此时整个板子只有3.3V电压,I/O端口电压此时只有一种选择。 需要注意的是由于SPY0029最大输出电流为50mA,所以如果需要外接一些模组时要先考虑一下是否合适。 (五)外部复位复位是对61板内部的硬件初始化,61板本身具有上电复位功能,即只要一通电就自动复位,另外,还具有外部复位电路,即在引脚6上外加一个低电平就可令其复位。如图2-2中的REST按键。2.2 61板测试 主要测试部分 1、I/O口(A口作为输入,B口作为输出); 2、睡眠功能(进入睡眠状态,指示灯点亮); 3、A/D转换输入(B口的低7位作为模拟电压源输出,对应A口的7个通道采样转换); 4、MIC输入及语音输出(同时实现A/D和D/A转换功能)。2.2.1 测试步骤 第一步、连接电源,可以用3V电池。 现象:当电源接通时,红色的发光二极管会点亮。有语音提示:“欢迎进入自检模式”,否则会听到:I/O测试失败的警告,所以就要 进行第二步的操作; 第二步、用排线分别连接I/OA口的低8位和IOB口的低8位,IOA口的高8位和IOB口的高8位,然后按下REST复位键现象:当按下复位键后,语音提示欢迎进入自检模式,当听到语音:I/O测试成功后,进行第三步操作;第三步、按K1键进行睡眠功能测试现象:如果测试成功,绿色的发光二极管亮灭一下,有语音提示睡眠测试成功,否则提示睡眠测试失败,然后进行第四步操作;第四步、按下K2键进行A/D转换的测试现象:语音提示:A/D测试成功,否则提示A/D测试失败,进入最后一步操作;第五步、拔掉第一步测试时的连接线,并按下K3键测试MIC输入及D/A转换输出是否正常现象:可以在MIC上轻轻的拍几下,同时听是否有声音输出,如果有声音输出,则说明MIC输入和D/A转换输出部分正常。 以上操作,只有当I/O测试成功时,按键才会有效。2.2.2 测试流程 系统的测试流程图如图2-3所示图2-3 测试流程图第三章 硬件电路设计本系统以SPCE061A作为整个系统的主控制板,使用SPCE061A单片机自带的LineIN输入,滤除噪声后模数转换,将ADC的结果进行数字滤波,然后存放在存储器SPR4096中,播放时从SPR4096中读取数据,直接送到SPCE061A自带的DAC进行播放。这种设计方案硬件电路非常简单,很多都是61板自带的集成模块,可以很好的减少或避免来自系统内部的干扰。整个录放过程的原理框图如图3-1 图3-1 原理框图本章将具体介绍各部分电路原理及其功能。3.1 61板电路原理图 本设计的硬件核心是61板,是整个系统的主控制器,首先来介绍61板的原理。61板的原理图如图3-2图3-2 61板原理图3.2 音频电路音频电路由麦克风电路以及音频输出电路组成。3.2.1 音频电路-麦克风输入电路麦克风电路主要作用是将声音信号便成电信号。图3-3 是麦克风输入电路,这部分电路需要外接。 SPCE061A的VMIC输出为3.3V,正好为麦克风的电源。VMIC经R1和R3为麦克风提供3.3V的工作电压,麦克风输出信号经C4和C5隔直后送到放大电路。放大电路的运放曾考虑过LM324和NE5532,最终选择了NE5532,原因是考虑到输入失调电压,LM324典型值是1.5mV,NE5532的典型值为0.5Mv,采用LM324的话,可能会导致输入失调电压把输入的信号“吃掉”。因为SPCE061A的AD测量范围是0VDD,所以要把交流信号进行一个电压偏移,使之不出现负电平,电压偏移是在信号线加直流偏置电压实现的,具体说,是把VCM(这是SPCE061A的ADC参考电压输出脚,系统正常工作是输出1.6V)经R2和R5R6后接到信号线上.放大电路的增益为R10与R8的比值,调整R10可以改变电路的增益。实验证明,当R10调为100K时,效果比较好。R4是为了保证NE5532的RP=RN,所以,R4=R10. 图3-3 麦克风输入电路3.2.2 音频电路-DAC放大电路图3-4 是DAC输出放大电路,它是61板提供的现成的功能模块,可以直接使用,不需要外接。这使得电路设计简单。图3-4 DAC 放大电路电路中SPY0030的放大倍数被固定为20倍。音量的大小可以通过电位器R9调整。 SPY0030也是凌阳公司的产品。它的详细说明可以参见凌阳公司的SPY0030 data sheet。和LM386相比,SPY0030还是比较有优势的,比如LM386工作电压需在4V以上, SPY0030仅需2.4V即可工作(两颗电池即可工作);LM386输出功率100mW以下, SPY0030约700mW。3.3 键盘电路 键盘电路如图3-5所示:该电路在61A板上也是现成的。K1 -录音K2 -停止K3 -放音 图3-5 键盘电路3.4 复位电路复位是对“61板”内部的硬件初始化,“61板”本身具有上电复位功能,即只要一通电就自动复位;另外,还具有外部复位电路,即在引脚6上外加一个低电平就可令其复位。如下图3-6中的REST按键。图3-6 复位电路3.5 PROBEG和EZ-PROBE接口61板结构方框图中的J4为PROBE的接口,PROBE一端接PC机25针并口,一端连接它来调试、仿真和下载程序的。这样,就不需要再用仿真器和编程器了,只需按照要求将其连接好,就可以通过它在PC机上调试程序,并且在线仿真,最后将程序下载到芯片中,即完成了程序的烧写。方框图中的J11是EZ-PROBE的接口,下载线一端连接PC机的25pin并口,另外一端接61板的5pin EZ-PROBE接口。第四章 软件系统设计4.1 音频压缩及算法4.1.1 音频的概述 我们所说的音频是指频率在20 Hz20 kHz的声音信号,分为:波形声音、语音和音乐三种,其中波形声音就是自然界中所有的声音,是声音数字化的基础。语音也可以表示为波形声音,但波形声音表示不出语言、语音学的内涵。语音是对讲话声音的一次抽象。是语言的载体,是人类社会特有的一种信息系统,是社会交际工具的符号。音乐与语音相比更规范一些,是符号化了的声音。但音乐不能对所有的声音进行符号化。乐谱是符号化声音的符号组,表示比单个符号更复杂的声音信息内容。4.1.2 数字音频的采样和量化 将模拟的(连续的)声音波形数字元化(离散化),以便利数字计算机进行处理的过程,主要包括采样和量化两个方面。 数字音频的质量取决于:采样频率和量化位数这两个重要参数。此外,声道的数目、相应的音频设备也是影响音频质量的原因。 4.1.3 语音压缩编码基础 语音压缩编码中的数据量是指:数据量=(采样频率量化位数)/8(字节数) 声道数目。 压缩编码的目的:通过对资料的压缩,达到高效率存储和转换资料的结果,即在保证一定声音质量的条件下,以最小的资料率来表达和传送声音信息。 压缩编码的必要性:实际应用中,未经压缩编码的音频资料量很大,进行传输或存储是不现实的。 所以要通过对信号趋势的预测和冗余信息处理,进行资料的压缩,这样就可以使我们用较少的资源建立更多的信息。 举个例子,没有压缩过的CD品质的资料,一分钟的内容需要11MB的内存容量来存储。如果将原始资料进行压缩处理,在确保声音品质不失真的前提下,将数据压缩一半,5.5MB就可以完全还原效果。而在实际操作中,可以依需要来选择合适的算法。常用的是SACM_A2000和SACM_S480两种放音算法 4.2 A2000键控语音模块本部分模块设计的总体思路是把整个系统分为录音、停止和放音三种状态,状态的改变用按键K1K2K3控制。录放音都放在中断服务程序里处理,主程序只处理键盘事件。主程序先对系统进行初始化,然后只处理键盘事件,判断按键值,并据此设置相应的系统状态。中断服务程序是通过定时器中断进入的。在中断服务程序中,先判断系统当前状态,根据系统状态进行相应操作。如果是录音状态,就去取ADC结果进行数字滤波,把滤波结果保存到SPR4096中,最后清中断标志退出中断服务;如果是放音状态,就从SPR4096中读出数据,进行DAC,最后清中断标志退出中断服务;如果是停止状态,就不进行其它操作,直接清中断标志就退出中断服务程序。 4.2.1键控语音函数及说明通过键盘扫描,键值确定,根据不同的键值,做出语音播放的不同处理。 使用相关语音函数说明: 语音函数,来自于sacmv25.lib 1)【API格式】void SACM_A2000_ServiceLoop(void) 【功能说明】从资源中获取SACM_A2000语音资料,并将其填入译码队列中。 【参 数】无。【返 回 值】无。2) 【API格式】void SACM_A2000_Initial(int Init_Index) 【功能说明】SACM_A2000语音播放之前的初始化。 【参 数】Init_Index=0 表示手动方式;Init_Index=1 则表示自动式。 【返 回 值】无 【备 注】该函数用于对定时器、中断和DAC等的初始化3) 【API格式】void SACM_A2000_Play(int Speech_Index, int Channel, int Ramp_Set);【功能说明】播放资源中SACM_A2000语音或乐曲。 【参 数】Speech _Index:表示语音索引号。 Channel: 1.通过DAC1通道播放; 2.通过DAC2通道播放; 3.通过DAC1和DAC2双通道播放。 Ramp_Set: 0.禁止音量增/减调节; 1. 仅允许音量增调节; 2. 仅允许音量减调节;3. 允许音量增/减调节。4) 【API格式】unsigned int SP_GetCh(void); 【功能说明】获取按键值。 【参 数】无。 【返 回 值】按键值 5) 【API格式】unsigned int SACM_A2000_Status(void); 【功能说明】获取SACM_A2000语音播放的状态。 【参 数】无。 【返 回 值】当R1的bit0=0,表示语音播放结束;bit0=1,表示语音在播放中。 相关按键函数:来自key.asm文件6) 【API格式】void System_ServiceLoop (void); 【功能说明】键盘扫描与按键去抖。 【参 数】无。 【返 回 值】无 7) 【API格式】void System_Initial (void); 【功能说明】键盘初始化 【参 数】无。 【返 回 值】无 4.2.2 主程序流程图及说明 说明:本程序流程主要通过对按键扫描、键值确定后,决定语音是播放、停止、暂停。 主程序流程图如图4-1: 图4-1 主程序流程图4.3 SACM-DVR 录放SACM-DVR具有录音和放音功能,并采用SACM_A2000的算法,录音时采用16K资料率及8K采样率获取语音资源,经过SACM_A2000压缩后存储在扩展的SRAM 628128A里,录满音后自动开始放音。其相关API函数如下所示:int SACM_DVR_Initial(int Init_Index) /初始化void SACM_DVR_ServiceLoop(void) /获取资料,填入译码队列void SACM_DVR_Encode(void) /录音SACM_DVR_StopEncoder(); /停止编码SACM_DVR_InitEncoder(RceMonitorOn) /初始化解码器void SACM_DVR_Stop(void) /停止录音void SACM_DVR_Play(void) /开始播放unsigned int SACM_DVR _Status(void) /获取SACM_DVR模块的状态void SACM_DVR _InitDecode(void) /开始译码void SACM_DVR _Decode(void) /获取语音资料并译码,中断播放SACM_DVR_StopDecoder(); /停止解码unsigned int SACM_DVR _ TestQueue(void) /获取语音队列状态int SACM_DVR _Fetchqueue(void) /获取录音编码数据void SACM_DVR_FillQueue(unsigned int encoded-data) /填充资料到语音队列,等待播放int GetResource(long Address) (Manual) / 从资源文件里获取一个字型语音资料中断服务函数:Call F_FIQ_Service_ SACM_DVR /playingCall F_IRQ1_Service_ SACM_DVR /recode具体函数如下:1) 【API格式】C:void SACM_DVR_ServiceLoop(void) ASM:Call F_ SACM_DVR _ServiceLoop 【功能说明】在录音期间从ADC通道获取录音资料,且将其以SACM_A2000格式进行编码后存入外接SRAM中;而在播放期间从SRAM中获取语音资料,对其进行解码,然后等候中断服务子程序将其送出DAC通道。 【参数】无。 【返回值】无。2) 【API格式】C:void SACM_ DVR _Initial(int Init_Index) ASM:R1= Init_Index Call F_ SACM_ DVR _Initial 【功能说明】SACM_ DVR语音播放之前的初始化:设置中断源、定时器以及播放方式(自动、 手动) 【参数】Init_Index=0 表示手动方式;Init_Index=1 则表示自动方式。 【返回值】无 【备注】 对于SACM_DVR模块,需要一些I/O口来连接外部的SRAM,用以存放录音资料。 录放音的格式采用SACM_A2000。3)【API格式】C:void SACM_DVR _Stop(void); ASM:Call F_ SACM_DVR _Stop 【功能说明】以自动方式停止录音。 【参数】无。 【返回值】无。4)【API格式】C:void SACM_DVR_Encode(void); ASM:Call F_ SACM_DVR_ Encode 【功能说明】开始以自动方式录制声音资料到外接SRAM中。 【参数】无。 【返回值】无。 【备注】该函数仅适用于SACM_DVR模块,且只有自动方式。5)【API格式】C:int SACM_DVR _Play(int Speech_Index, int Channel, int Ramp_Set); ASM:Call SACM_DVR _Play 【功能说明】以自动方式播放外接SRAM中的录音资料。 【参数】无 【返回值】无。 【备注】该函数仅使用于自动方式下。6)【API格式】C:unsigned int SACM_DVR _Status(void); ASM:Call F_ SACM_DVR _ Status 返回值=R1 【功能说明】获取SACM_DVR模块的状态。 【参数】无。 【返回值】当R1中bit0=0,表示语音播放结束;bit0=1,表示语音在播放中。 SACM_DVR模块的状态返回值,如图所示。【备注】该函数仅使用于DVR的手动方式下。7) 【API格式】C:void SACM_DVR_InitDecode(int Channel); ASM:Call F_SACM_DVR_Decode 【功能说明】开始对SACM_DVR语音资料以非自动方式(编程控制)进行译码。 【参数】Channel=1,2,3;分别表示使用DAC1、DAC2信道以及DAC1和DAC2双通 道 【返回值】无。 【备注】用户只能通过非自动方式对语音资料解压缩。8) 【API格式】C:void SACM_DVR_Decode(void); ASM :Call F_ SACM_DVR_Decode 【功能说明】从语音队列里获取的SACM_DVR语音资料,并进行译码,然后通过 中断服务子程序将其送入DAC通道播放。 【参数】无。 【返回值】无。 【备注】用户仅能通过非自动方式对语音资料进行译码。9) 【API格式】C:unsigned int SACM_DVR_TestQueue(void); ASM:Call F_SACM_DVR_TestQueue 返回值=R1 【功能说明】获取语音队列的状态。 【参数】无。 【返回值】R1=0,语音队列不空不满 =1,语音队列满 =2;语音队列空。 【备注】用户仅能通过非自动方式测试语音队列状态。10】【API格式】C:int SACM_DVR _FetchQueue(void); ASM:Call F_SACM_DVR _FetchQueue Return_Value=R1 【功能说明】获取录音编码(SACM_A2000)数据。 【参数】无。 【返回值】16位录音资料。 【备注】 采用-SACM_A2000编码格式编码 仅用于非自动方式下 程序1-1 外扩SRAM需要SRAM写初始化(InitWriteSRAM),及写(WriteSRAM) 子函数。 SACM_DVR_Initial(Manual); Addr=0; InitWriteSRAM(); /用户需外接SRAM SACM_DVR_InitEncoder(); while(AddrSRAM_Size) SACM_DVR_Encode(); /获取数据并译码 If(SACM_DVR_TestQueue()!=Empty) /若队列不空,则存储资料 ret=SACM_DVR_FetchQueue(); /从队列中得到资料 writeSRAM(Addr,ret); /存入用户存储区 Addr+=2; /两个8位SRAM存储一个16位资料 11】【API格式】C:void SACM_DVR _FillQueue(unsigned int encoded-data); ASM:R1=语音编码资料 Call F_ SACM_DVR _FillQueue 【功能说明】填充SACM_A2000语音资料到DVR译码器等待播放 【参数】encoded-data为语音编码资料。 【返回值】无。 【备注】 语音资料格式为-SACM_A2000编码格式。 从语音队列里至少每48ms获取48个字资料(16K资料采样率)。 仅用于非自动方式下。12】【API格式】C:int GetResource(long Address); 【功能说明】从资源文件里获取一个字型语音资料。 【参数】无。 【返回值】一个字型语音资料。13】【API格式】ASM:Call F_FIQ_Service_ SACM_DVR ASM:Call F_IRQ1_Service_SACM_DVR 【功能说明】用作SACM_DVR语音背景程序的中断服务子程序。通过前台子程序(自动方式的 SACM_DVR _ServiceLoop 及手动方式的SACM_DVR _Decode)对语音资料进行译码,然后将其送入DAC通道播放。即FIQ中断服务子程序用于声音播放的背景程序;而IRQ1中断服务子程序则用于声音录制的背景程序。 【参数】无。 【返回值】无。 【备注】SACM_DVR语音背景子程序只有汇编指令形式,且应将此子程序安置在TMA_FIQ中断源上。额外的中断服务子程序安置在IRQ1_TMA中断源上。4.4 数字滤波 我们希望录音得到的只是音频信号,减少其它信号的干扰。因此,我们要进行滤波,滤去音频信号(3003400Hz)频段以外的信号。 滤波可以用模拟的方法实现,也可以用数字的方法实现。模拟滤波一般采用RC电路组成无源滤波,或加上运放构成有源滤波,不管用哪种方法,都需要增加硬件成本,而且,随着阶数的增加,模拟滤波器的调试将越来越困难。数字滤波的好处在于没有硬件成本,当然,不包括因MCU的速度不够而必须更换MCU引起的成本增加。另外,高阶(比如100阶)滤波器对模拟滤波器来说是很难想象的,而用数字滤波器就可以实现。 数字滤波器是对数字信号实现滤波的线性时不变系统。数字滤波的实质是一种运算过程,实现对信号的运算处理。我们从信号和系统课程中知道,时域离散系统的频域特性如下: Y(ejw)=X(ejw)H(ejw),其中X(ejw), H(ejw)分别是数字滤波器的输出序列和输入序列的频域特性,H(ejw)是数字滤波器的单位取样响应的频谱。按照输入信号频谱的特点和处理信号的目的,适当选择H(ejw),使得滤波后的X(ejw)H(ejw)满足设计的要求,这就是数字滤波器的滤波原理。的选择很关键,它决定了滤波器的性能。单片机一般适合做定点运算,而一般都是小数,所以要对进行定点处理,这是一个很麻烦的过程。 滤波运算要进行乘累加的运算,一般MCU速度不够的话是无法进行的。SPCE061A可以工作在49MHz,更重要的是,它提供了一个1616的硬件乘法器,它的乘累加指令正好可以用来实现滤波运算。 nSP乘法累加求和指令(Muls)之格式如下: MR = Rd * Rs ,ss,n; MR = Rd * Rs ,us,n; 式中: MR为用于累加的寄存器对,由R3、R4充当; Rd为目标寄存器,在此用于采样数据指针; Rs为源寄存器,在此用于系数寄存器指针; n为参加滤波运算的采样样本数目; ss为有符号数相乘的设定,缺省设定即为此;us为无符号数相乘的设定。 假设参加滤波的采样样本数为4,且由采样数据指针R1和系数寄存器指针R2分别指向的存储器内容在执行Mul指令前后的情况如下图所示。 当执行了指令MR = R1 * R2,4以后,会产生如下一些动作:) 累加器MR清零后进行MAC计算: MR = C1* Xn-1 + C2* Xn-2 + C3* Xn-3 + C4* Xn-4; 且指针向右移动了n(n=4)个字的位置。 )值得注意的是,指针R1指向的存储器的内容(采样数据样本)向前移动了一个字的位置。其意义在于当采样新的数据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论