音频压缩算法.docx
《音频压缩算法.docx》由会员分享,可在线阅读,更多相关《音频压缩算法.docx(67页珍藏版)》请在冰点文库上搜索。
![音频压缩算法.docx](https://file1.bingdoc.com/fileroot1/2023-5/21/b74f77c6-5ceb-472b-8a84-1cd8d95adfd2/b74f77c6-5ceb-472b-8a84-1cd8d95adfd21.gif)
音频压缩算法
第7章凌阳音频压缩算法261
第7章凌阳音频压缩算法
7.1背景介绍
7.1.1音频的概述(特点,分类)
我们所说的音频是指频率在20Hz~20kHz的声音信号,分为:
波形声音,语音
和音乐三种,其中波形声音就是自然界中所有的声音,是声音数字化的基础.语音也
可以表示为波形声音,但波形声音表示不出语言,语音学的内涵.语音是对讲话声音
的一次抽象.是语言的载体,是人类社会特有的一种信息系统,是社会交际工具的符
号.音乐与语音相比更规范一些,是符号化了的声音.但音乐不能对所有的声音进行
符号化.乐谱是符号化声音的符号组,表示比单个符号更复杂的声音信息内容.
7.1.2数字音频的采样和量化
将模拟的(连续的)声音波形数字元化(离散化),以便利数字计算机进行处理
的过程,主要包括采样和量化两个方面.
数字音频的质量取决于:
采样频率和量化位数这两个重要参数.此外,声道的数
目,相应的音频设备也是影响音频质量的原因.
7.1.3音频格式的介绍
音频文件通常分为两类:
声音文件和MIDI文件
(1)声音文件:
指的是通过声音录入设备录制的原始声音,直接记录了真实声音
的二进制采样数据,通常文件较大;
(2)MIDI文件:
它是一种音乐演奏指令序列,相当于乐谱,可以利用声音输出设
备或与计算机相连的电子乐器进行演奏,由于不包含声音数据,其文件尺寸较小.
1)声音文件的格式
WAVE文件——*.WAV
WAVE文件使用三个参数来表示声音,它们是:
采样位数,采样频率和声道数.
在计算机中采样位数一般有8位和16位两种,而采样频率一般有11025Hz(11KHz),
22050Hz(22KHz),44100Hz(44KHz)三种.我们以单声道为例,则一般WAVE文
件的比特率可达到88K~704Kbps.具体介绍如下:
(1)WAVE格式是Microsoft公司开发的一种声音文件格式,它符合RIFF(Resource
InterchangeFileFormat)文件规范;
第7章凌阳音频压缩算法262
(2)用于保存Windows平台的音频信息资源,被Windows平台及其应用程序所广
泛支持.
(3)WAVE格式支持MSADPCM,CCITTALaw,CCITTLaw和其它压缩算法,
支持多种音频位数,采样频率和声道,是PC机上最为流行的声音文件格式.
(4)但其文件尺寸较大,多用于存储简短的声音片段.
AIFF文件——AIF/AIFF
(1)AIFF是音频交换文件格式(AudioInterchangeFileFormat)的英文缩写,是苹
果计算机公司开发的一种声音文件格式;
(2)被Macintosh平台及其应用程序所支持,NetscapeNavigator浏览器中的
LiveAudio也支持AIFF格式,SGI及其它专业音频软件包同样支持这种格式.
(3)AIFF支持ACE2,ACE8,MAC3和MAC6压缩,支持16位44.1Kz立体声.
Audio文件——*.Audio
(1)Audio文件是SunMicrosystems公司推出的一种经过压缩的数字声音格式,是
Internet中常用的声音文件格式;
(2)NetscapeNavigator浏览器中的LiveAudio也支持Audio格式的声音文件.
MPEG文件——*.MP1/*.MP2/*.MP3
(1)MPEG是运动图像专家组(MovingPictureExpertsGroup)的英文缩写,代表
MPEG标准中的音频部分,即MPEG音频层(MPEGAudioLayer);
(2)MPEG音频文件的压缩是一种有损压缩,根据压缩质量和编码复杂程度的不同
可分为三层(MPEGAudioLayer1/2/3),分别对应MP1,MP2和MP3这三种声
音文件;
(3)MPEG音频编码具有很高的压缩率,MP1和MP2的压缩率分别为4:
1和6:
1~8:
1,而MP3的压缩率则高达10:
1~12:
1,也就是说一分钟CD音质的音
乐,未经压缩需要10MB存储空间,而经过MP3压缩编码后只有1MB左右,
同时其音质基本保持不失真,因此,目前使用最多的是MP3文件格式.
RealAudio文件——*.RA/*.RM/*.RAM
(1)RealAudio文件是RealNerworks公司开发的一种新型流式音频(Streaming
Audio)文件格式;
(2)它包含在RealMedia中,主要用于在低速的广域网上实时传输音频信息;
(3)网络连接速率不同,客户端所获得的声音质量也不尽相同:
对于28.8Kbps的连
接,可以达到广播级的声音质量;如果拥有ISDN或更快的线路连接,则可获
得CD音质的声音.
2)MIDI文件——*.MID/*.RMI
(1)MIDI是乐器数字接口(MusicalInstrumentDigitalInterface)的英文缩写,是数
字音乐/电子合成乐器的统一国际标准;
(2)它定义了计算机音乐程序,合成器及其它电子设备交换音乐信号的方式,还规
第7章凌阳音频压缩算法263
定了不同厂家的电子乐器与计算机连接的电缆和硬件及设备间数据传输的协
议,可用于为不同乐器创建数字声音,可以模拟大提琴,小提琴,钢琴等常见
乐器;
(3)在MIDI文件中,只包含产生某种声音的指令,这些指令包括使用什么MIDI
设备的音色,声音的强弱,声音持续多长时间等,计算机将这些指令发送给声
卡,声卡按照指令将声音合成出来,MIDI在重放时可以有不同的效果,这取
决于音乐合成器的质量;
(4)相对于保存真实采样资料的声音文件,MIDI文件显得更加紧凑,其文件尺寸
通常比声音文件小得多.
7.1.4语音压缩编码基础
语音压缩编码中的数据量是指:
数据量=(采样频率×量化位数)/8(字节数)×声道
数目.
压缩编码的目的:
通过对资料的压缩,达到高效率存储和转换资料的结果,即在
保证一定声音质量的条件下,以最小的资料率来表达和传送声音信息.
压缩编码的必要性:
实际应用中,未经压缩编码的音频资料量很大,进行传输或
存储是不现实的.所以要通过对信号趋势的预测和冗余信息处理,进行资料的压缩,
这样就可以使我们用较少的资源建立更多的信息.
举个例子,没有压缩过的CD品质的资料,一分钟的内容需要11MB的内存容量
来存储.如果将原始资料进行压缩处理,在确保声音品质不失真的前提下,将数据压
缩一半,5.5MB就可以完全还原效果.而在实际操作中,可以依需要来选择合适的算
法.
常见的几种音频压缩编码:
1)波形编码:
将时间域信号直接变换为数字代码,力图使重建语音波形保持原语
音信号的波形形状.波形编码的基本原理是在时间轴上对模拟语音按一定的速
率抽样,然后将幅度样本分层量化,并用代码表示.译码是其反过程,将收到
的数字序列经过译码和滤波恢复成模拟信号.
如:
脉冲编码调制(PulseCodeModulation,PCM),差分脉冲编码调制(DPCM),
增量调制(DM)以及它们的各种改进型,如自适应差分脉冲编码调制(ADPCM),自
适应增量调制(ADM),自适应传输编码(AdaptiveTransferCoding,ATC)和子带
编码(SBC)等都属于波形编码技术.
波形编码特点:
高话音质量,高码率,适于高保真音乐及语音.
2)参数编码:
参数编码又称为声源编码,是将信源信号在频率域或其它正交变换
域提取特征参数,并将其变换成数字代码进行传输.译码为其反过程,将收到
的数字序列经变换恢复特征参量,再根据特征参量重建语音信号.具体说,参
数编码是通过对语音信号特征参数的提取和编码,力图使重建语音信号具有尽
可能高的准确性,但重建信号的波形同原语音信号的波形可能会有相当大的差
别.
第7章凌阳音频压缩算法264
如:
线性预测编码(LPC)及其它各种改进型都属于参数编码.该编码比特率可
压缩到2Kbit/s-4.8Kbit/s,甚至更低,但语音质量只能达到中等,特别是自然度较低.
参数编码特点:
压缩比大,计算量大,音质不高,廉价!
3)混合编码:
混合编码使用参数编码技术和波形编码技术,计算机的发展为语音
编码技术的研究提供了强有力的工具,大规模,超大规模集成电路的出现,则
为语音编码的实现提供了基础.80年代以来,语音编码技术有了实质性的进
展,产生了新一代的编码算法,这就是混合编码.它将波形编码和参数编码组
合起来,克服了原有波形编码和参数编码的弱点,结合各自的长处,力图保持
波形编码的高质量和参数编码的低速率.
如:
多脉冲激励线性预测编码(MPLPC),规划脉冲激励线性预测编码(KPELPC),
码本激励线性预测编码(CELP)等都是属于混合编码技术.其数据率和音质介于参数
和波形编码之间.
总之,音频压缩技术之趋势有两个:
1)降低资料率,提高压缩比,用于廉价,低保真场合(如:
电话).
2)追求高保真度,复杂的压缩技术(如:
CD).语音合成,辨识技术的介绍:
按照实现的功能来分,语音合成可分两个档次:
(1)有限词汇的计算机语音输出
(2)基于语音合成技术的文字语音转换(TTS:
Text-to-Speech)
按照人类语言功能的不同层次,语音合成可分为三个层次:
(1)从文字到语音的合成(Text-to-Speech)
(2)从概念到语音的合成(Concept-to-Speech)
(3)从意向到语音的合成(Intention-to-Speech)
图7.1是文本到语音的转换过程:
文本处理语音合成韵律处理
语音数据库词典及语言规范
合成语音输出文本输入
图7.1从文本到语音转换过程示意
语音辨识:
语音辨识技术有三大研究范围:
口音独立,连续语音及可辨认字词数量.
口音独立:
1)早期只能辨认特定的使用者即特定语者(SpeakerDependent,SD)模式,使用者
可针对特定语者辨认词汇(可由使用者自行定义,如人名声控拨号),作简单快速的训
第7章凌阳音频压缩算法265
练纪录使用者的声音特性来加以辨认.随着技术的成熟,进入语音适应阶段SA(speaker
adaptation),使用者只要对于语音辨识核心,经过一段时间的口音训练后,即可拥有
不错的辨识率.
2)非特定语者模式(SpeakerIndependent,SI),使用者无需训练即可使用,并进行
辨认.任何人皆可随时使用此技术,不限定语者即男性,女性,小孩,老人皆可.
连续语音:
1)单字音辨认:
为了确保每个字音可以正确地切割出来,必须一个字一个字分开
来念,非常不自然,与我们平常说话的连续方式,还是有点不同.
2)整个句子辨识:
只要按照你正常说话的速度,直接将要表达的说出来,中间并
不需要停顿,这种方式是最直接最自然的,难度也最高,现阶段连续语音的辨识率及
正确率,虽然效果还不错但仍需再提高.然而,中文字有太多的同音字,因此目前所
有的中文语音辨识系统,几乎都是以词为依据,来判断正确的同音字.
可辨认词汇数量:
内建的词汇数据库的多寡,也直接影响其辨识能力.因此就语音辨识的词汇数量
来说亦可分为三种:
1)小词汇量(10-100)
2)中词汇量(100-1000)
3)无限词汇量(即听写机)
图7.2是简化的语音识别原理图,其中实线部分成为训练模块,虚线部分为识别
模块.
复杂声
学,言
语条件
下的语
音输入
语音模型声学模式训练
语音匹配
语音模式训练
语音处理
识别结果,理
解结果
语言模型
图7.2语音识别原理简图
第7章凌阳音频压缩算法266
7.2凌阳音频简介
7.2.1凌阳音频压缩算法的编码标准
表7.1是不同音频质量等级的编码技术标准(频响):
表7.1
信号类型频率范围(Hz)采样率(kHz)量化精度(位)
电话话音200~340088
宽带音频
(AM质量)
50~70001616
调频广播
(FM质量)
20~15k37.816
高质量音频
(CD质量)
20~20k44.116
凌阳音频压缩算法处理的语音信号的范围是200Hz-3.4KHz的电话话音.
7.2.2压缩分类
压缩分无损压缩和有损压缩.
无损压缩一般指:
磁盘文件,压缩比低:
2:
1~4:
1.
而有损压缩则是指:
音/视频文件,压缩比可高达100:
1.
凌阳音频压缩算法根据不同的压缩比分为以下几种(具体可参见语音压缩工具一
节内容):
SACM-A2000:
压缩比为8:
1,8:
1.25,8:
1.5
SACM-S480:
压缩比为80:
3,80:
4.5
SACM-S240:
压缩比为80:
1.5
按音质排序:
A2000>S480>S240
7.2.3凌阳常用的音频形式和压缩算法
1)波形编码:
sub-band即SACM-A2000
特点:
高质量,高码率,适于高保真语音/音乐.
2)参数编码:
声码器(vocoder)模型表达,抽取参数与激励信号进行编码.如:
SACM-S240.
特点:
压缩比大,计算量大,音质不高,廉价!
3)混合编码:
CELP即SACM-S480
特点:
综合参数和波形编码之优点.
除此之外,还具有FM音乐合成方式即SACM-MS01.
第7章凌阳音频压缩算法267
7.2.4分别介绍凌阳语音的播放,录制,合成和辨识
凌阳的SPCE061A是16位单片机,具有DSP功能,有很强的信息处理能力,最
高时钟频率可达到49MHz,具备运算速度高的优势等等,这些都无疑为语音的播放,
录放,合成及辨识提供了条件.
凌阳压缩算法中SACM_A2000,SACM_S480,SACM_S240主要是用来放音,可
用于语音提示,而DVR则用来录放音.对于音乐合成MS01,该算法较繁琐,而且需
要具备音乐理论,配器法及和声学知识,所以对于特别爱好者可以到我们的网站去了
解相关内容,这里只给出它的API函数介绍及程序代码的范例,仅供参考.
对于语音辨识主要有以下两种:
1)特定发音人识别SD(SpeakerDependent):
是指语音样板由单个人训练,
也只能识别训练人的语音命令,而他人的命令识别率较低或几乎不能识别.
2)非特定发音人识别SI(SpeakerIndependent):
是指语音样板由不同年龄,
不同性别,不同口音的人进行训练,可以识别一群人的命令.
语音识别电路基本结构如图7.3所示:
滤除噪音
预加重
滤波器组
PARCOR系数
线性预测系数
过零次数
能量
相关函数等
模式匹配
词典
语音分析
语音
识别
结果
输出
图7.3语音识别电路结构
具体应用及程序代码可参考7.3.4
7.3常用的应用程序接口API的功能介绍及应用
7.3.1概述
表7.2所列出的是凌阳音频的几种算法:
表7.2SACM-lib库中模块及其算法类型
模块名称(Model-Index)语音压缩编码率类型资料采样率
SACM_A200016Kbit/s,20Kbit/s,24Kbit/s16KHz
SACM_S480/S7204.8Kbit/s,7.2Kbit/s16KHz
第7章凌阳音频压缩算法268
SACM_S2402.4Kbit/s24KHz
SACM_MS01音乐合成(16Kbits/s,20Kbits/s,24Kbits/s)16KHz
SACM_DVR(A2000)16Kbit/s的资料率,8K的采样率,用于ADC通道录音功能16KHz
语音和音乐与我们的生活有着非常密切的关系,而单片机对语音的控制如录放音,
合成及辨识也广泛应用在现实生活中.我们知道对于语音处理大致可以分为A/D,编
码处理,存储,解码处理以及D/A等见图7.4所示.然而,通过前面介绍我们知道麦
克风输入所生成的WAVE文件,其占用的存储空间很大,对于单片机来说想要存储大
量的信息显然是不可能的,而凌阳的SPCE061A提出了解决的方法,即SACM-LIB,
该库将A/D,编码,解码,存储及D/A作成相应的模块,对于每个模块都有其应用程
序接口API,所以您只需了解每个模块所要实现的功能及其参数的内容,然后调用该
API函数即可实现该功能,例如在程序中插入语音提示,或连续播放一段语音或音乐,
也可以根据自己需要的空间或使用范围选择适合自己的算法如表7.2所示.
麦克风A/D转换
存储
喇叭编解码处理D/A转换
图7.4单片机对语音处理过程
以下就不同的算法具体介绍各自的API函数的格式,功能,参数,返回值,备注
及应用范例.
7.3.2SACM_A2000
该压缩算法压缩比较小(8:
1)所以具有高质量,高码率的特点适用于高保真音乐和
语音.
其相关API函数如下所示:
voidSACM_A2000_Initial(intInit_Index)//初始化
voidSACM_A2000_ServiceLoop(void)//获取语音资料,填入译码队列
voidSACM_A2000_Play(intSpeech_Index,intChannel,intRamp_Set)//播放
voidSACM_A2000_Stop(void)//停止播放
voidSACM_A2000_Pause(void)//暂停播放
voidSACM_A2000_Resume(void)//暂停后恢复
voidSACM_A2000_Volume(Volume_Index)//音量控制
unsignedintSACM_A2000_Status(void)//获取模块状态
第7章凌阳音频压缩算法269
voidSACM_A2000_InitDecode(intChannel)//译码初始化
voidSACM_A2000_Decode(void)//译码
voidSACM_A2000_FillQueue(unsignedintencoded-data)//填充队列
unsignedintSACM_A2000_TestQueue(void)//测试队列
CallF_FIQ_Service_SACM_A2000//中断服务函数
下面对各个函数进行具体介绍:
1)【API格式】C:
voidSACM_A2000_Initial(intInit_Index)
ASM:
R1=[Init_Index]
CallF_SACM_A2000_Initial
【功能说明】SACM_A2000语音播放之前的初始化.
【参数】Init_Index=0表示手动方式;Init_Index=1则表示自动方式.
【返回值】无
【备注】该函数用于对定时器,中断和DAC等的初始化.
2)【API格式】C:
voidSACM_A2000_ServiceLoop(void)
ASM:
CallF_SACM_A2000_ServiceLoop
【功能说明】从资源中获取SACM_A2000语音资料,并将其填入译码队列中.
【参数】无.
【返回值】无.
3)【API格式】
C:
voidSACM_A2000_Play(intSpeech_Index,intChannel,int
Ramp_Set);
ASM:
R1=[Speech_Index]
R2=[Channel]
R3=[Ramp_Set]
CallSACM_A2000_Play
【功能说明】播放资源中SACM_A2000语音或乐曲.
【参数】Speech_Index:
表示语音索引号.
Channel:
1.通过DAC1通道播放;
2.通过DAC2通道播放;
3.通过DAC1和DAC2双通道播放.
Ramp_Set:
0.禁止音量增/减调节;
1.仅允许音量增调节;
2.仅允许音量减调节;
3.允许音量增/减调节.
【返回值】无.
【备注】
①SACM_A2000的数据率有16Kbps\20Kbps\24Kbps三种,可在同一模块的几种算
法中自动选择一种.
第7章凌阳音频压缩算法270
②Speech_Index是定义在resource.inc文件中资源表(T_
SACM_A2000_SpeechTable)的偏移地址.
③中断服务子程序F_FIQ_Service_SACM_A2000必须安置在TMA_FIQ中断向量
上(参见第五章中断系统内容).
函数允许TimerA以所选的的数据采样率(计数溢出)中断.
程序7-1以自动方式播放一段SACM_A2000语音,并自动结束.(见光盘)
SACM_A2000自动方式主程序流程图:
SACM_A2000放音
的初始化
SACM_A2000压缩播放
获取语音数据并解
码等待中断播放
图7.5A2000自动方式主程序流程
前台程序:
#defineSpeech_10
#defineDAC11
#defineDAC22
#defineRamp_UpDn_Off0
#defineRamp_Up_On1
#defineRamp_Dn_On2
#defineRamp_UpDn_On3
Main()
{
SACM_A2000_Initial
(1);
SACM_A2000_Play(Speech_1,DAC1+DAC2,Ramp_UpDn_On);//放音
while(SACM_A2000_Status()&0x01)
{
SACM_A2000_ServiceLoop();
}
}
背景程序:
.TEXT
第7章凌阳音频压缩算法271
.INCLUDEhardware.inc
.INCLUDEA2000.inc
.INCLUDEResource.inc
//========================================================
//函数:
FIQ()
//语法:
voidFIQ(void)
//描述:
FIQ中服务断函数
//参数:
无
//返回:
无
//========================================================
.PUBLIC_FIQ;
_FIQ:
PUSHR1,R4TO[sp];//入栈保护
R1=0x2000;
TESTR1,[P_INT_Ctrl];//是否为定时器A中断
JNZL_FIQ_TimerA;
R1=0x0800;
TESTR1,[P_INT_Ctrl];//是否为定时器B中断
JNZL_FIQ_TimerB;
L_FIQ_PWM:
R1=C_FIQ_PWM;
[P_INT_Clear]=R1;//清中断
POPR1,R4from[sp];//恢复现场
RETI;
L_FIQ_TimerA:
//定时器A中断处理
[P_INT_Clear]=R1;//清中断
CALLF_FIQ_Service_SACM_A2000;//调用A2000中断服务函数
POPR1,R4FROM[sp];//恢复现场
RETI;
L_FIQ_TimerB:
//定时器B中断处理
[P_INT_Clear]=R1;//清中断
POPR1,R4FROM[sp];//恢复现场
RETI;//中断返回
/****************************************************************************/
注:
播放语音文件中数据,当出现FFFFFFH数据时便停止播放.
4)【API格式】C:
voidSACM_A2000_Stop(void);
ASM:
CallF_SACM_A2000_Stop
【功能说明】停止播放S