⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.txt

📁 有关于使用ISD1700芯片在单片机环境下的语音系统
💻 TXT
📖 第 1 页 / 共 2 页
字号:
摘要

   本文提出了一种在带有PWM模块的单片机上实现语音播放的方案。语音数据经过ADPCM编码压缩算法压缩后下载到单片机中。数据的压缩通过PC机上的压缩软件实现,压缩软件将WAV文件中的PCM数据提取出来,而后对其进行编码、压缩,同时生成可供单片机的C编译器直接调用的C语言代码文件。

    通过提取PC机中的WAV文件中的波形数据,使得声源的获取更简单方便,同时利用PC机录音的效果比一般的录音电路的效果要好,同时可减少录音时所需的前置滤波器的设计成本。利用单片机内集成的PWM还原语音,可以极大地减少成本。而使用ADPCM数据编码压缩则节省了大量存储空间。

关键词:PWM,语音,编码压缩,ADPCM,WAV


Abstract

The paper introduces a way to play speech through the microcontroller who owns PWM module.The speech data download in the microcontroller after they are compressed using the ADPCM algorithm.The software which is used to compress the speech data first get the PCM data from the WAV files ,then compress them,at last,we can get the C code which can be used in the C compiler such as “code vision”.

It is very convenience to get the the wave data from the WAV files which are in the personal computer.And it can get better speech quality than the method that getting the data through the common microphone circuit.Using the PWM integrated in the microcontroller can get a great deal of cost saving.And using the ADPCM code algorithm is a good way to store more speech data in the microcontroller.

Key words:PWM,speech,coding,compress,ADPCM algorithm,WAV


1 引言
        目前,语音合成集成电路越来越广泛地应用于各个领域。语音合成方式主要有波形编码方式和参数合成方式两种。其中波形编码方式是以单词和词组为单位将语音信息存储在存储器里,通过解码电路对这些单词和词组进行重新编排后经D/A转换输出。这种语音合成方式算法简单,易于实现,合成语音质量好,因而得到普遍采用。使用波形编码方式进行语音合成时,需要将数字的语音信息码通过D/A转换器恢复成模拟的电压信号或电流信号。

电路设计时,通常采用的方法是使用电阻网络来实现D/A转换,但是,在集成电路设计时,电阻的精度不易控制,并且实际开关的非线性影响会给D/A转换的输出带来非线性误差。数字脉冲宽度调制器(PWM)可以直接将数字语音信号转化成占空比不同的矩形脉冲序列。如果脉冲宽度调制器的输出频率足够高,利用低通滤波器可以直接恢复出语音信号。

 

 

2 脉冲宽度调制的原理
2.1 脉冲宽度调制
图1 脉冲宽度调制原理

(a)脉冲宽度调制原理框图 (b)脉冲宽度调制波形图
 
脉宽调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

简而言之,PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,矩形波的占空比被用来对一个具体模拟信号的电平进行编码。只要带宽足够,任何模拟值都可以使用PWM进行编码。

脉冲宽度调制波通常由一列占空比不同的矩形脉冲构成,其占空比与信号的瞬时采样值成比例。图1所示为脉冲宽度调制系统的原理框图和波形图。该系统由一个比较器和一个周期为Ts的锯齿波发生器组成。语音信号如果大于锯齿波信号,比较器输出正常数A,否则输出0。而解调方法只要在输出级接一低通滤波器就可还原出模拟信号。

 

2.2 AVR单片机中的PWM介绍
AVR系列单片机中几乎所有的型号都有PWM输出,以下以ATmega32为例介绍:

ATmega32内部集成了2个具有PWM输出功能的8们位定时/计数器和1个具有PWM输出功能的定时/计数器。下面分别对其进行介绍。

T/Cn 是一个通用的单通道8位(T/C1为16位)的定时器/计数器模块。它有4种工作模式,普通模式、CTC模式、快速PWM模式和相位修正PWM模式。

普通模式为最简单的工作模式。在此模式下计数器不停地累加。计到 8比特的最大值后 (TOP = 0xFF),由于数值溢出计数器简单地返回到最小值 0x00 重新开始。在 TCNTn 为零的同一个定时器时钟里T/Cn溢出标志 TOV0 置位。如果允许全局中断及TCn溢出中断,则可以产生中断。

在CTC模式下OCRn寄存器用于调节计数器的分辨率。当计数器的数值 TCNT0等于OCRn时计数器清零。OCRn定义了计数器的TOP值,亦即计数器的分辨率。这个模式使得用户可以很容易地控制比较匹配输出的频率,也简化了外部事件计数的操作。

快速PWM 模式可用来产生高频的PWM 波形。快速PWM模式与其他PWM模式的不同之处是其单斜坡工作方式。计数器从BOTTOM计到MAX,然后立即回到BOTTOM重新开始。此高频操作特性使得快速 PWM 模式十分适合DAC 应用。

相位修正PWM模式为用户提供了一个获得高精度相位修正 PWM 波形的方法。此模式基于双斜坡操作。计时器重复地从BOTTOM计到MAX,然后又从MAX倒退回到BOTTOM。相位修正模式适合于电机控制。

T/Cn具有一个10位的预分频器。T/C时钟源是由时钟选择逻辑决定的,而时钟选择逻辑是由位于T/C控制寄存器TCCRn的时钟选择位CSn2:0控制的。

 

 

3 语音波形的数字编码
语音编码方法要分为3类:波形编码、参数编码和混合编码。波形编码是根据语音信号的波形导出相应的数字编码形式,其目的是尽量保持波形不变,使得能够再现原始语音;滤形编码具有抗噪性能强、语音质量好等优点。参数编码又称声码器技术,它通过对语音信号进行分析,提取参数来对参数进行编码。参数编码主要是从听觉感知的角度注重语音的重现,即让解码语音听起来与输入语音相同,但不保证其波形相同。参数编码是上述两种法法的结合,同时从两方面构造语音编码。

基于波形编码的语音质量好,编码简单的优点,系统采用的是波形编码技术。

3.1 脉冲编码调制(PCM)
PCM是语音波形数字编码的一种最简单和最早的方法。其步骤是:首先用一个反混量失真滤波器将模拟语音信号的频谱限制到适当的宽度;然后以等于或高于奈奎斯特取样率的频率对限带语音信号进行等间隔取样,并对取样值进行量化,最后用一组二进制码脉冲序列表示各量化后的取样值,于是使用数字编码脉冲表示了原来的语音信号波形。WAV文件中存储的便是语音波形的PCM编码数据。

3.2 差分脉冲编码调制(DPCM)
差分编码调制是一种比较优秀的压缩编码方法,该算法是使用前一个样本来预测当前样本,然后算出当前样本与预测值的差值,并对差值进行量化。在8 kb/s的采样速率下,它可以把数码率压缩至4kb/s,在缓冲器空间一定的情况下,从而使语音存储量增加一倍,并且信噪比损失小,其数学表达式为:

A(n)=A(n-1)+e(n)                                  (1)

其中:

          
 
-7          ( S(n)-A(n-1) < -7 );
 
S(n)-A(n-1) ( -7 ≤ S(n)-A(n-1) ≤ 7 );    
 
7            (  S(n)-A(n一1) > 7 );        

 
 
e(n)=
 
   (2)

S(n)为当前采样值;A(n)为增量累加值;A(n-1)为预测值.一般以上一时刻A/D采样值作为现在时刻的预测值,e(n)为差分值,由于差分值的大小在-7~7之间,所以可以用四位二进制数表示并存入缓冲器,其中最高位是符号位,其余三位是数据位,最大值为0111(7),最小值为1111(-7).

3.3 增量调制(DM)
增量调制可以看成是差分脉冲编码器的一个特例。具体说,当差分脉冲编码调制系统的量化器的字长选为1位时,便得到增量调制系统和差分脉冲编码调制一样,在增量调制中被量化的不是输入语音信号而是预测误差信号。不同的是现在只有两个量化电平,分别用Δ和-Δ表示。即所有正预测误差值都量化为Δ,而所有负预测误差值都量化为-Δ。

3.4 自适应差分脉冲编码算法(ADPCM)
语音信号是一种具有短时稳性的非平稳随机过程,相邻样点间有着很强的相关性。利用语音信号的这一特点,采用自适应量化和自适应预测技术对语音信号进行编码,可以在较低的数据率情况下,获得较高质量的重构语音。自适应差分脉冲编码算法是使用前一个样本(或前几个样本)来预测当前样本,然后算出当前样本与预测值的差值,并对差值进行量化。对于每个输入样本值,所对应的编码值直接就是量化阶的确定数目。解码时就是用这个编码值乘以量化阶(可能会再加上半个量化阶以得到更好的精度)即得到重建的音频样本。编码和解码能随时修正量化阶以响应输入样本大小的变化。它的简便之处在于对预测值并不进行自适应,而是对量化阶进行自适应。

ADPCM(Adaptive DifferentialPulse Code Modulation,自适应差分脉冲编码调制)综合了APCM的自适应特性和DPCM系统的差分特性,是一种性能较好的波形编码。它的核心思想是:利用自适应改变量化阶的大小,即使用小的量化阶去编码小的差值,使用大的量化阶去编码大的差值;使用过去的样本值估算下一个输入样本的预测值,使实际样本值和预测值之间的差值总是最小。ADPCM记录的量化值不是每个采样点的幅值,而是该点的幅值与前一个采样点幅值之差。

ADPCM是利用样本与样本之间的高度相关性和量化阶自适应来压缩数据的一种波形编码技术。

4 WAV文件中声音采样数据的提取
4.1 WAV文件介绍
标准的WAV格式的声音文件含有声音的采样数据和文件头。文件头描述了后面声音数据的一些信息,如通道数、采样频率、采样位数以及数据的长度等。通道数,是指声音的采样路数,如单声道、立体声等。采样频率,是指每秒钟对声音的采样次数,采样频率越高,还原出来的声音越接近原始声音,如表1所列。根据采样定理,要想精确还原出某种频率的波形,其最小采样率应至少为该波形频率的2倍。

表1 采样频率与音质关系

音质
 频率范围/Hz
 采样频率/kHz
 
电话音质
 200Hz~3400Hz
 8
 
短波段收音机音质
 50Hz~7kHz
 11.025
 
FM收音机音质
 20Hz~15kHz
 22.05
 
CD音质
 10Hz~20kHz
 44.1
 

 

提取声音数据时,要注意采样频率、采样位数、存储容量与存储时间的关系,如表2所列。通常,8kHz的采样频率和8位的采样位数可获得清晰的语音以及较好的音乐声,并且占有较少的存储空间。

采样位数,指的是每次采样的采样精度。采样位数越高,还原出来的声音的量化噪声越小,波形也越接近原波形。

表2 采样频率/位数、存储容量与存储时间的关系

采样频率/kHz
 6
 6
 8
 8
 11.025
 11.025
 22.050
 22.050
 44.100
 44.100
 
采样位数/位
 8
 16
 8
 16
 8
 16
 8
 16
 8
 16
 
存储

容量

/KB
 32
 5.46
 2.73
 4.10
 2.05
 2.97
 1.49
 1.49
 0.74
 0.74
 0.37
 
64
 10.92
 5.46
 8.19
 4.10
 5.94
 2.97
 2.97
 1.49
 1.49
 0.74
 
128
 21.84
 10.92
 16.38
 8.19
 11.89
 5.94
 5.94
 2.97
 2.97
 1.49
 
256
 43.69
 21.84
 32.77
 16.38
 23.78
 11.89
 11.89
 5.94
 5.94
 2.97
 
512
 87.38
 43.69
 65.54
 32.77
 47.55
 23.78
 23.78
 11.89
 11.89
 5.94
 

注:存储时间单位:s

 

表3 2-bit ADPCM压缩后存储时间
  
 表4 2-bit ADPCM压缩后存储时间
 
采样频率/kHz
 6
 8
   
 采样频率/kHz
 6
 8
 
存储

容量

/KB
 32
 21.84
 16.38
   
 存储

容量

/KB
 32
 10.92
 8.19
 
64
 43.69
 32.77
   
 64
 21.84
 16.38
 
128
 87.38
 65.54
    
 128
 43.69
 32.77
 
256
 174.72
 131.07
    
 256
 87.38
 65.54
 
512
 349.44
 262.144
 ___________     
 512
 174.72
 131.07
 

       

4.2 WAV文件的文件格式
WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的。RIFF是英文Resource Interchange File Format的缩写,每个WAVE文件的头四个字节便是“RIFF”。WAVE文件是由若干个Chunk组成的。按照在文件中的出现位置包括:RIFF WAVE Chunk, Format Chunk, Fact Chunk(可选), Data Chunk。其中除了Fact Chunk外,其他三个Chunk是必须的。每个Chunk有各自的ID,位于Chunk最开始位置,作为标示,而且均为4个字节。

4.2.1 RIFF WAVE Chunk 
RIFF WAVE Chunk块中表明文件的格式及其大小。其的结构可用如下结构体表示:

struct RIFF_HEADER

{

    char szRiffID[4];        /*  'R',  'I',  'F',  'F'   */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -