基于MATLAB的声音文件播放器设计Word文档格式.docx
《基于MATLAB的声音文件播放器设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的声音文件播放器设计Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
![基于MATLAB的声音文件播放器设计Word文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/26/b6c49684-9835-4f4e-8fa7-56af60e2b6af/b6c49684-9835-4f4e-8fa7-56af60e2b6af1.gif)
本文结合“数字信号处理”课程和“Matlab程序设计”课程的相关知识,给出了基于Matlab的声音播放器的总体设计方案,介绍了播放器主要模块的功能,设计与实现方法"
我们将该设计作为电子信息类专业数字信号处理课程设计项目,有助于激发学生的学习兴趣,提高其综合设计和应用创新能力"
。
本设计针对现在大部分语音处理软件内容繁多、操作不便等问题,采用MATLAB7.0综合运用各种函数调用等来实现语音信号的变频、变幅、傅里叶变换及滤波,程序界面简练,操作简便,具有一定的实际应用意义。
关键词:
Matlab;
声音播放器;
傅里叶变换;
变频
AudiofileplayerdesignbasedonMATLAB
Student:
ZhaoBo(FacultyAdviser:
ChenShuai)
(CollegeofelectricalandInformationEngineering,HuainanNormalUniversity)
Abstract:
Accordingto"
therelevantknowledgeofdigitalsignalprocessingcourse"
and"
Matlabprogramdesign"
course,givesthegeneraldesignofMatlabaudioplayerbasedon,describesthemainmodulefunctionsandimplementationmethodsoftheplayer,"
wewilldesignasthedesignofelectronicinformationspecialtyofdigitalsignalprocessingcoursedesignprojects,helpstimulatestudentsinterestinlearning,improvethecomprehensivedesignandinnovationability"
.Thedesignfortheproblemnow,mostspeechprocessingsoftwarecontentisvarious,inconvenientoperation,usingMATLAB7.0comprehensiveuseofvariousfunctioncallstovoicesignalssuchasfrequency,amplitude,FuLiyetransformandfiltering,theprograminterfaceconcise,simpleoperation,andhascertainpracticalsignificance.
Keywords:
Matlab;
Soundplayer;
FuLiyetransform;
Frequency
前言
语音是语言的声学表现,是人类交流信息最自然、最有效、最方便的手段。
随着社会文化的进步和科学技术的发展,人类开始进入了信息化时代,用现代手段研究语音处理技术,使人们能更加有效地产生、传输、存储、和获取语音信息,这对于促进社会的发展具有十分重要的意义,因此,语音信号处理正越来越受到人们的关注和广泛的研究。
20世纪60年代中期形成的一系列数字信号处理的理论和算法,如数字滤波器、快速傅立叶变换(FFT)等是语音信号数字处理的理论和技术基础。
随着信息科学技术的飞速发展,语音信号处理取得了重大的进展:
进入70年代之后,提出了用于语音信号的信息压缩和特征提取的线性预测技术(LPC),并已成为语音信号处理最强有力的工具,广泛应用于语音信号的分析、合成及各个应用领域,以及用于输入语音与参考样本之间时间匹配的动态规划方法;
80年代初一种新的基于聚类分析的高效数据压缩技术—矢量量化(VQ)应用于语音信号处理中;
而用隐马尔可夫模型(HMM)描述语音信号过程的产生是80年代语音信号处理技术的重大发展,目前HMM已构成了现代语音识别研究的重要基石。
近年来人工神经网络(ANN)的研究取得了迅速发展,语音信号处理的各项课题是促进其发展的重要动力之一,同时,它的许多成果也体现在有关语音信号处理的各项技术之中。
语音信号处理是一门比较实用的电子工程的专业课程,语音是人类获取信息的重要来源和利用信息的重要手段。
通过语言相互传递信息是人类最重要的基本功能之一。
语言是人类特有的功能,它是创造和记载几千年人类文明史的根本手段,没有语言就没有今天的人类文明。
语音是语言的声学表现,是相互传递信息的最重要的手段,是人类最重要、最有效、最常用和最方便的交换信息的形式。
语音信号处理是研究用数字信号处理技术对语音信号进行处理的一门学科,它是一门新兴的学科,同时又是综合性的多学科领域和涉及面很广的交叉学科。
1设计背景与概述
1.1设计背景
随着软硬件技术的发展,仪器的智能化与虚拟化已成为未来实验室及研究机构的发展方向。
虚拟仪器技术的优势在于可由用户定义自己的专用仪器系统,且功能灵活,很容易构建,所以应用面极为广泛。
基于计算机软硬件平台的虚拟仪器可代替传统的测量仪器,如示波器、逻辑分析仪、信号发生器、频谱分析仪等。
从发展史看,电子测量仪器经历了由模拟仪器、智能仪器到虚拟仪器,由于计算机性能的飞速发展,已把传统仪器远远抛到后面,并给虚拟仪器生产厂家不断带来连锅端的技术更新速率。
目前已经有许多较成熟的频谱分析软件,如SpectraLAB、RSAVu、dBFA等。
声卡是多媒体计算机最基本的配置硬件之一,价格便宜,使用软件,他的数据采集工具箱为实现数据的输入和输出提供了十分方便的函数和命令。
本文将给出基于声卡与MATLAB的声音信号频谱分析仪的设计原理与实现方法,功能包括:
(1)音频信号信号输入,从声卡输入、从WAV文件输入、从标准信号发生器输入;
(2)信号波形分析,包括幅值、频率、周期、相位的估计,以及统计量峰值、均值、均方值和方差的计算;
(3)信号频谱分析,频率、周期的估计,图形显示幅值谱、相位谱、实频谱、虚频谱和功率谱的曲线。
1.2设计平台MATLAB概述
MATLAB是国际上公认的最优秀的科技应用软件,它在数据分析和处理功能都是很强大,利用它可以灵活方便地处理音频信号。
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB已成为国际公认的最优秀的科技应用软件之一,具有编程简单、数据可视化功能强、可操作性强等特点,而且配有功能强大、专业函数丰富的图像处理工具箱,是进行图像处理方面工作必备的软件工具。
MATLAB是矩阵实验室(MatrixLaboratory)的简称,和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
目前数字滤波器的设计有许多现成的高级语言设计程序,但他们都存在设计效率较低,不具有可视图形,不便于修改参数等缺点,而Matlab为数字滤波的研究和应用提供了一个直观、高效、便捷的工具。
它以矩阵运算为基础,把计算、可视化、程序设计融合到了一个交互式的工作环境中。
尤其是Matlab工具箱使各个领域的研究人员可以直观而方便地进行科学研究与工程应用。
其中的信号处理工具箱、图像处理工具箱、小波工具箱等更是为数字滤波研究的蓬勃发展提供了可能。
本文将使用matlab对MP3进行解码,做一个简易的MP3播放器。
2声音文件
首先,我们来明确一下数字音频的概念,它是指一个用来表示声音强弱的数据序列,由模拟声音经抽样、量化和编码后得到的。
简单地说,数字音频的编码方式就是数字音频格式,我们所使用的不同的数字音频设备一般都对应着不同的音频文件格式。
常见的数字音频格式有:
WAV格式、MIDI格式、CDA格式、MP3格式、WMA格式等。
1.WAV格式,是微软公司开发的一种声音文件格式,也叫波形声音文件,是最早的数字音频格式,被Windows平台及其应用程序广泛支持。
WAV格式支持许多压缩算法,支持多种音频位数、采样频率和声道,采用44.1kHz的采样频率,16位量化位数,跟CD一样,对存储空间需求太大不便于交流和传播。
2.MIDI,是MusicalInstrumentDigitalInterface的缩写,又称作乐器数字接口,是数字音乐/电子合成乐器的统一国际标准。
它定义了计算机音乐程序、数字合成器及其它电子设备交换音乐信号的方式,规定了不同厂家的电子乐器与计算机连接的电缆和硬件及设备间数据传输的协议,可以模拟多种乐器的声音。
MIDI文件就是MIDI格式的文件,在MIDI文件中存储的是一些指令。
把这些指令发送给声卡,由声卡按照指令将声音合成出来。
3.大家都很熟悉CD这种音乐格式了,扩展名CDA,其取样频率为44.1kHz,16位量化位数,跟WAV一样,但CD存储采用了音轨的形式,又叫“红皮书”格式,记录的是波形流,是一种近似无损的格式。
4.MP3全称是MPEG-1AudioLayer3,它在1992年合并至MPEG规范中。
MP3能够以高音质、低采样率对数字音频文件进行压缩。
换句话说,音频文件(主要是大型文件,比如WAV文件)能够在音质丢失很小的情况下(人耳根本无法察觉这种音质损失)把文件压缩到更小的程度。
5.WMA(WindowsMediaAudio),是微软在互联网音频、视频领域的力作。
WMA格式是以减少数据流量但保持音质的方法来达到更高的压缩率目的,其压缩率一般可以达到1:
18。
此外,WMA还可以通过DRM(DigitalRightsManagement)方案加入防止拷贝,或者加入限制播放时间和播放次数,甚至是播放机器的限制,可有力地防止盗版。
2.1MP3文件
MP3文件大体分为三部分:
TAG_V2(ID3V2),frame,TAG_V1(ID3V1);
它们的详细特征如下表:
表2.1MP3各类文件特点
ID3V2
包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量
Frame
一系列的帧,个数由文件大小和帧长决定每个FRAME的长度可能不固定,由位率bitrate决定每个FRAME又分为帧头和数据实体两部分帧头记录了mp3的位率,采样率版本等信息,每个帧之间相互独立
ID3V1
包含了作者,作曲,专辑等信息,长度为128BYTE
一个MPEG音频文件是许多的称为帧的较小部分组成的,通常,帧是独立的组成部分,每个帧都拥有之间的头和音频信息,没有文件头。
所以我们可以剪切MPEG文件的任何部分并且能够正常播放。
但在LayerIII中就并不总是正确的。
2.1.1帧头格式
下表2.2是一个头内容图示,使用字符A到M表示不同的区域AAAAAAAAAAABBCCDEEEEFFGHIIJJKLMM
A表示帧同步,都为1,长度为11;
B表示MPEG音频版本ID(00–MPEG2.5;
01–保留;
10–MPEG2;
11–MPEG1);
C表示Layer描述,(00–保留;
01-LayerIII;
10–LayerII;
11-LayerI);
D表示校验位(0有跟16位CRC校验位;
1无校验位);
E位率索引,长度为4,对不同的版本,不同层索引值表示不同的位率;
单位Kbit
F采样频率,单位:
Hz
G填充位(0–无填充;
1–额外的填充)
H私有bit,用做特殊应用
I声道(00–立体声;
01–联合立体声;
10–双声道;
11–单声道);
J扩展模式,仅在联合立体声有效
K版权(0–无版权;
1–有版权);
L原创(0–拷贝;
1–原创);
M强调(00–无;
01–50/15ms;
10–保留;
11–CCITJ.17);
表2.2帧头内容图表
MPEG1LayerI
MPEG1LayerII
MPEG1LayerIII
MPEG,2.5LayerI
LayerII&
LayerIII
0000
FREE
0001
32
8
0010
64
48
40
16
0011
96
56
48
24
0100
128
64
0101
160
80
40
0110
192
0111
224
112
1000
256
1001
288
144
1010
320
1011
352
176
1100
384
128
1101
416
1110
448
1111
Bits
MPEG1
MPEG2
MPEG2.5
00
44100
22050
11025
01
48000
24000
12000
10
32000
16000
8000
11
保留
2.1.2CRC校验
如果帧头的校验位为0,则帧头后就有一个16位的CRC值,这个值是big-endian的值,把这个值和该帧通过计算得出的CRC值进行比较就可以知道该帧是否有效。
2.1.3帧数据
在帧头后边是SideInfo(姑且称之为通道信息)。
对标准的立体声MP3文件来说其长度为32字节。
通道信息后面是Scalefactor(增益因子)信息。
当解码器在读到上述信息后,就可以进行解码了。
当MP3文件被打开后,播放器首先试图对帧进行同步,然后分别读取通道信息及增益因子等数据,再进行霍夫曼解码,至此我们已经获得解压后的数据。
但这些数据仍然不能进行播放,它们还处于频域,要想听到歌曲还要将它由频域通过特定的手段转换到时域。
接下来的处理分别为立体化处理;
抗锯齿处理;
IMDCT变换;
IDCT变换及窗口化滑动处理。
2.2lame编码器
LAME是最好的MP3编码器,编码高品质MP3的最好也是唯一的选择。
LAME本身是DOS下的文件,需要加外壳程序才比较容易使用,也可以在别的软件(比如EAC)中间调用。
是一款出色的MP3压缩程序,它使用了独创的人体听音心理学模型和声学模型,改变了人们对MP3高音发哑、低音发破的音质的印象。
LAME分DLL和EXE两种版本,DLL版本做为一个方便的接口程序在大多数抓轨软件中都能看到(比如AltoMP3Maker),但由于可控性差,与具备丰富调节参数的EXE版相比,其压缩出来的MP3效果稍逊一筹。
VBR(VariableBitrate)动态比特率。
也就是没有固定的比特率,压缩软件在压缩时根据音频数据即时确定使用什么比特率,这是以质量为前提兼顾文件大小的方式,推荐编码模式;
ABR(AverageBitrate)平均比特率,是VBR的一种插值参数。
LAME针对CBR不佳的文件体积比和VBR生成文件大小不定的特点独创了这种编码模式。
ABR在指定的文件大小内,以每50帧(30帧约1秒)为一段,低频和不敏感频率使用相对低的流量,高频和大动态表现时使用高流量,可以做为VBR和CBR的一种折衷选择。
CBR(ConstantBitrate),常数比特率,指文件从头到尾都是一种位速率。
相对于VBR和ABR来讲,它压缩出来的文件体积很大,而且音质相对于VBR和ABR不会有明显的提高。
3播放器的设计及方法
本毕业设计通过抽样插值来改变基频也使播放速度,播放时间发生改变,因此通过时长规整的方式来使播放速度和时间恢复到原来。
3.1重叠叠加算法
本程序使用的是用重叠叠加算法来达到时长规整。
重叠叠加算法原理:
它分为两个阶段——分解和合成。
将原始信号以帧长N,帧间距sa进行分解,然后以帧间距ss进行合成。
sa与ss的的比值决定了时长规整因子F=sa/ss。
为保证重叠区域幅度不变,加了汉明窗。
3.2Matlab的实现算法
Matlab的实现及程序流程分为编程和gui的设计编程,y=resample(x,i,d);
%重采样来达到抽值和插值的目的,然后就是时长规整。
在具体介绍算法之前,先简要地介绍一下几种参数:
1)W:
窗长度(WindowLength)。
它代表了接受处理的语音信号的最小长度。
2)Sa:
分析延时(Analysisshift)。
它代表了依次截取并进行处理的语音段首地址之间的间隔。
3)Ss:
综合延时(Synthesisshift)。
依次输出的语音段首地址之间的间隔。
4)kmax:
查找延时。
这一延时是指分析窗口为了与输出信号的尾部相一致而必须发生的一段延时。
5)Wov:
后一段语音与前一段语音相叠加的长度。
整个算法首先将语音段中的前W个数值取出来,直接存入到输出序列中。
然后根据Sa的值取出下一段语音,也就是从第Sa个点开始取,一直取W个点。
然后将这W个点中的前Wov个点与输出序列的最后Wov个点进行比较,比较它们之间的一致性。
记录下比较的情况,然后整个分析窗口(也就是截取W个点的窗口)向后移动一个样值,再将新的序列中的前Wov个点与输出序列中的后Wov个点进行比较,同时记录下比较结果。
这样依次做Kmax次,然后取出比较结果中最一致的那种情况。
将这种情况下,所截取的语音序列的前Wov个点与输出序列的最后Wov个点按某种方式进行叠加,然后再将W个点的窗口中剩余的Ss个点存入到输出序列中去。
至此完成了一轮语音操作。
下一轮语音段处理,与上面基本相同,只不过从输入序列中截取的语音段不是从原先的起点开始而是在原先的起点的基础上向后延时Sa个点。
如果我们用表示第m段语音信号,用表示原始信号的序列。
那么两者的关系可以用下面的等式表示:
km是第m个分析窗口的移动量。
km的值得变化范围是0至Kmax。
对于每一个分析窗口,km的值取遍这些值,同时比较每次语音段的前Wov个点与输出序列中的最后Wov个点的一致性。
取出其中一致性最好的那个语音段将其前Wov个点叠加到输出序列中去。
设叠加时所用的窗用表示,输出序列用那么
公式表明,已经在输出序列中的最后Wov个点通过与所选定的窗口中的前Wov个语音点以加权的方式叠加。
加权值与有关。
叠加后将W个点中剩余的Ss(Ss=W-Wov)个点补充到输出序列中去。
通过调整Sa的值和Ss的值(或者是Wov)的值就可以达到对语音信号进行时间长度上的变化。
那么具体的每一段语音的km值究竟如何确定呢?
要解决这一问题,关键在于解决一致性的判决标准。
我们采用互相关系数来表示一致性的程度。
那么对于第m轮处理,其中是所取的分析窗口的前Wov个点和输出序列的最后Wov个点之间的互相关性,它的定义是这样的:
几点初步的讨论:
1)首先从每一次处理后,我们从输入语音段中取序列的起点向后推迟了Sa个点,而输出序列的长度也增大了Ss个点。
所以可以认为每处理一次有Sa-Ss个点被丢弃(如果Sa要大于Ss),如果我们处理的语音信号长度较长。
可以很容易地证明,新旧序列的长度之比是:
Ss/Sa。
根据这一比例关系,我们就可以认为地控制输出序列的长度(当然,这种控制是十分粗略的,并且只是在语音信号较长时有效)。
2)的选取应当使得输入与输出序列之间实现平滑的连接。
实验表明,采用简单的斜坡函数也可以达到较好的语音效果(只要采样率足够大)。
3)对于km的求取是降低时间复杂度的重要一步。
实际上,我们不需要每轮处理数据时都去计算一遍km,计算一遍km会花去不少时间。
我们假定在任何一点,最多有两个窗会在这点上重叠。
现在考虑第m个窗,从输出端的最后Wov个点可以看出,它其实就是输入序列中的某些点:
其中从上面几个等式可以看出:
如果。
那么,不需要计算km的值,只需要将km的值直接取为tm就可以了。
而如果tm的值超出了上面的这个范围,就必须按照前面的计算方法进行计算。
3.2Gui设计
Gui设计的基本原则:
1、关注用户及其任务,而不是技术;
2、首先考虑功能,然后才是表示;
3、从用户的视角看问题,使用用户的词汇进行描述;
4、不要向用户暴露实现细节;
5、使常用的用户任务简单化,不要让用户解决额外的问题;
6、保持一致性,引导用户的使用习惯;
7、保持显示惯性,传递信息,而不仅仅是数据;
8、设计应满足响应需求;
使用Gui编程时需要注意以下几点:
1、同一页面包含重复功能的链接或按钮;
2、将复选框用作单选按钮;
3、无初始值的多选一设置;
4、在非开/关设置中使用复选框;
5、用文本框显示只读数据;
6、单选按钮之间间隔太大;
7、属性标记对齐方式不一致;
8、当前无效的控件不充分置灰;
9、显示对用户无意义的错误提示;
10、不同的类型页面窗口显示相同的标题;
11、窗口的标题和调用的命令不一致;
12、要求用户输入随机数;
13、相似的功能却有不一致的用户操作界面;
14、取消按钮无法真正取消操作;
15、网站结构反映公司的结构或网站升级的历史;
16、返回按钮不能达到预期的目的;
17、搜索选项过多,过度复杂;
18、使用容易被忽略的隐藏的图片链接;
19、需要向下滚动才能