在Matlab下实现语音信号的频谱分析论文正文.docx
- 文档编号:3578645
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:15
- 大小:207.37KB
在Matlab下实现语音信号的频谱分析论文正文.docx
《在Matlab下实现语音信号的频谱分析论文正文.docx》由会员分享,可在线阅读,更多相关《在Matlab下实现语音信号的频谱分析论文正文.docx(15页珍藏版)》请在冰豆网上搜索。
在Matlab下实现语音信号的频谱分析论文正文
毕业设计(论文)
基于MATLAB实现对语音信号的频谱分析
学生姓名:
张彦利
学号:
所在系部:
信息工程学院
专业班级:
指导教师:
日期:
二○一贰年五月
基于MATLAB实现对语音信号的频谱分析
摘要
MATLAB是一个数据分析和处理功能十分强大的工程实用软件,运用它来进行信号的分析和处理相当便捷。
本文介绍了在Matlab环境中如何采集语音信号和语音信号采集后的频谱分析处理,并通过实例分析了语音信号处理的Matlab。
并以理想正弦分布的纹理图像的Matlab仿真和正弦纹理图像的频谱特征分析为例,叙述了基于傅立叶能量谱的纹理图像分析的基本原理和基本过程。
编写了程序,获得了具有理想正弦分布的空域纹理图像,并对其频谱特征进行了分析。
并且根据离散傅里叶变换DFT的定义,推导出一种用DFT计算离散信号幅值谱的方法,通过MATLAB仿真验证了该方法的有效性。
关键词:
MATLAB;频谱分析;傅里叶变换;语音信号;信号分析
AnalysisofSignalSpectrumBasedonMATLAB
Abstract
MATLABisverypowerfulandpracticalengineeringsoftwarewhichisusedindataanalysisandprocessingfraction,anduseittoanalysisandprocessvoicesignal,whichisveryconvenient.
ThispaperdescribestheMatlabenviironment,howtocollectandprocessspeechsignal,andthroughexampleanalysisofthespeechsignalprocessinginMatlab.
ThentaketheMatlabsimulationofidealsinusoidtextureimageandanalysisofitsspectrumcharacteristicsforexample;basicprinciplesandprocessofanalyzingthetextureimagebasedonFourierenergyspectrumweredescribed.Theprogramwaswrittenforobtainingspatialdomaintextureimagewithidealsinusoiddistribution.Anditsspectrumcharacteristicswereanalyzed.
Moreover,accordingtothedefinitionofDFT,acalculationmethodofamplitudespectrumforperiodicsignalisderivedinthispaper.ThroughsimulationofamplitudespectrumcalculationinMATLAB,theefficiencyofthemethodisvalidatedtosatisfytheneedforproject.Intheend,theproblemsofspectrumleakageandpicketfenceeffectareexplainedandthecorrespondingsolutionisproposed.
Keywords:
MATLAB;SpectrumAnalysis;FFT;Speechsignal;signalanalysis
1.绪论
1.1课题背景
随着信息时代和数字世界的到来,数字信号处理己成为当今一门极其重要的学科和技术领域,数字信号处理在通信、语音、图像、自动控制、医疗和家用电器等众多领域得到了广泛的应用。
任意一个信号都具有时域与频域特性,信号的频谱完全代表了信号,因而研究信号的频谱就等于研究信号本身。
通常从频域角度对信号进行分析与处理,容易对信号的特性获得深入的了解。
因此,信号的频谱分析是数字信号处理技术中的一种较为重要的工具[1-3]。
在工程领域中,MATLAB是一种倍受程序开发人员青睐的语言,对于一些需要做大量数据运算处理的复杂应用以及某些复杂的频谱分析算法MATLAB显得游刃有余[4]。
1.2研究意义
信号处理几乎涉及到所有的工程技术领域,而频谱分析又是信号处理中一个非常重要的分析手段。
一般的频谱分析都依靠传统频谱分析仪来完成,价格昂贵,体积庞大,不便于工程技术人员的携带。
虚拟频谱分析仪改变了原有频谱分析仪的整体设计思路,用软件代替了硬件,使工程技术人员可以用一部笔记本电脑到现场就可轻松完成信号的采集、处理及频谱分析[5-6]。
1.3本文研究内容
信号的频谱分析就是利用傅里叶分析的方法,求出与时域描述相对应的频域描述,从中找出信号频谱的变化规律,以达到特征提取的目的。
不同信号的傅里叶分析理论与方法,在有关专业书中都有介绍。
但实际的待分析信号一般没有解析式,直接利用公式进行傅里叶分析非常困难.DFT是一种时域和频域均离散化的傅里叶变换,适合数值计算且有快速算法,是分析信号的有力工具。
DFT及FFT是数字信号处理的重要内容。
DFT是FFT的基础,FFT是DFT的快速算法,在MATLAB中可以利用函数FFT来计算序列的离散傅里叶变换DFT。
基于此首先介绍了Matlab软件;其次给出了基于Matlab软件的DFT和FFT频谱分析的方法,利用Matlab软件方法,使得设计方便、快捷,大大减轻了工作量;最后结合实例给出了仿真结果。
本文将重点介绍基于MATLAB的频谱分析设计,包括:
(1)音频信号频谱分析;
(2)图像信号频谱分析;
(3)离散信号/序列频谱分析。
2.频谱分析及MATLAB简介
2.1频谱分析技术
2.1.1时域抽样定理[7]
时域抽样定理给出了连续信号抽样过程中信号不失真的约束条件:
对于基带信号,信号抽样频率
大于等于2倍的信号最高频率
,即
。
时域抽样是把连续信号
变成适于数字系统处理的离散信号
。
对连续信号
以间隔T抽样,则可得到的离散序列为
。
图2-1连续信号抽样的离散序列
若
,则信号
与
的频谱之间存在:
其中,
的频谱为
,
的频谱为
。
可见,信号时域抽样导致信号频谱的周期化。
(rad/s)为抽样角频率,
为抽样频率。
数字角频率Ω与模拟角频率ω的关系为:
Ω=ωT。
2.1.2离散傅立叶变换(DFT)[8]
有限长序列
的离散傅立叶变换(DFT)为
逆变换为
2.1.3快速傅立叶变换(FFT)[9]
在各种信号序列中,有限长序列占重要地位。
对有限长序列可以利用离散傅立叶变换(DFT)进行分析。
DFT不但可以很好的反映序列的频谱特性,而且易于用快速算法(FFT)在计算机上进行分析。
有限长序列的DFT是其z变换在单位圆上的等距离采样,或者说是序列傅立叶的等距离采样,因此可以用于序列的谱分析。
FFT是DFT的一种快速算法,它是对变换式进行一次次分解,使其成为若干小数据点的组合,从而减少运算量。
MATLAB为计算数据的离散快速傅立叶变换,提供了一系列丰富的数学函数,主要有Fft、Ifft、Fft2、Ifft2,Fftn、ifftn和Fftshift、Ifftshift等。
当所处理的数据的长度为2的幂次时,采用基-2算法进行计算,计算速度会显著增加。
所以,要尽可能使所要处理的数据长度为2的幂次或者用添零的方式来添补数据使之成为2的幂次。
Fft函数调用方式:
Y=fft(X);
Y=fft(X,N);
Y=fft(X,[],dim)或Y=fft(X,N,dim)。
函数Ifft的参数应用与函数Fft完全相同。
2.1.4频谱分析原理[10]
时域分析只能反映信号的幅值随时间的变化情况,除单频率分量的简单波形外,很难明确提示信号的频率组成和各频率分量大小,而频谱分析能很好的解决此问题。
由于从频域能获得的主要是频率信息,所以本节主要介绍频率(周期)的估计与频谱图的生成。
1、频率、周期的估计
对于Y(kΔf),如果当kΔf = f时,Y(kΔf)取最大值,则f为频率的估计值,由于采样间隔的误差,f也存在误差,其误差最大为Δf /2。
周期T=1/f。
从原理上可以看出,如果在标准信号中混有噪声,用上述方法仍能够精确地估计出原标准信号的频率和周期,这个将在下一章做出验证
2、频谱图
为了直观地表示信号的频率特性,工程上常常将Fourier变换的结果用图形的方式表示,即频谱图。
以频率f为横坐标,|Y(f)|为纵坐标,可以得到幅值谱;
以频率f为横坐标,arg Y(f)为纵坐标,可以得到相位谱;
以频率f为横坐标,Re Y(f)为纵坐标,可以得到实频谱;
以频率f为横坐标,Im Y(f)为纵坐标,可以得到虚频谱。
根据采样定理,只有频率不超过Fs/2的信号才能被正确采集,即Fourier变换的结果中频率大于Fs/2的部分是不正确的部分,故不在频谱图中显示。
即横坐标f ∈[0, Fs/2]
2.2MATLAB简介
2.2.1MATLAB软件的发展
MATLAB软件[11]是由美国Mathworks公司推出的用于数值计算和图形处理的科学计算系统环境。
MATLAB是英文MATrixLABoratory(矩阵实验室)的缩写。
它的第一版(DOS版本1.0)发行于1984年,经过10余年的不断改进,现今已推出它的Windows98/NT版本(6.1版)。
新的版本集中了日常数字处理中的各种功能,包括高效的数值计算、矩阵运算、信号处理和图形生成等功能。
在MATLAB环境下,用户可以集成地进行程序设计、数值计算、图形绘制、输入输出、文件管理等各项操作。
MATLAB提供了一个人机交互的数学系统环境,该系统的基本数据结构是矩阵,在生成矩阵对象时,不要求作明确的维数说明。
与利用c语言或FORTRAN语言作数值计算的程序设计相比,利用MATLAB可以节省大量的编程时间。
在美国的一些大学里,MATLAB正在成为对数值计算、算法预设计与验证,以及一些特殊的短阵计算应用,如自动控制理论、统计、数字信号处理(时间序列分拆)等。
MATLAB系统最初是由CieveMoler用FORTRAN语言设计的,有关矩阵的算法来自LINPACK和EISPACK课题的研究成果;现在的MATLAB程序是MathWorks公司用C语言开发的,第一版由steveBangert主持开发编译解释程序,SteveKleiman完成图形功能的设计,JohnLittle和CleveMoler主持开发各类数学分析的子模块,撰写用户指南和大部分M文件。
自从第1版发行以来,已有众多的科技工作者加入到ATLAB的开发队伍中,并为形成今天的MATLAB系统做出了巨大的贡献,MATLAB以商品形式出现后,仅短短几年,就以其良好的开放性和运行可靠性,使原先控制领域里的封闭式软件包(如英国的UMIST,瑞典的LUND,德国的KEDDC)纷纷淘汰,而改以MATLAB为平台加以重建。
在时间进入20世纪九十年代的时候,MATLAB已经成为国际控制界公认的标准计算软件。
到九十年代初期,在国际上30几个数学类科技应用软件中,MATLAB在数值计算方面独占鳌头。
2.2.2MATLAB组成
MATLAB系统由五个主要部分组成,下面分别加以介绍:
1.MATLAB语言体系。
MATLAB是高层次的矩阵/数组语言,具有条件控制、函数调用、数据结构、输入输出、面向对象等程序语言特性。
利用它既可以进行小规模编程,完成算法设计和算法实验的基本任务,也可以进行大规模编程,开发复杂的应用程序。
2.MATLAB工作环境。
这是对MATLAB提高给用户使用的管理功能的总称。
包括管理工作空间中的变量输入输出的方式和方法,以及开发、调试、管理M文件的各种工具。
3.图形句相系统。
这是MATLAB图形系统的基础,包括完成2D和3D数据图示、图象处理、动画生成、图形显示等功能的高层MATLAB命令,也包括用户对图形图象等对象进行野性控制的低层MATLAB命令,以及开发GUI应用程序的各种工具。
4.MATLAB数学函数库。
这是对MATLAB使用的各种数学算法的总称。
包括各种初等函数的算法,也包括矩阵运算、矩阵分析等高层次数学算法。
5.MATLAB应用程序接口(API)。
这是MATLAB为用户提供的一个函数库,使得用户能够在MATLAB环境中使用C程序或FORTRAN程序,包括从MATLAB中调用程序(动态连接),读写MAT文件的功能。
可以看出MATLAB是一个功能十分强大的系统,是集数值计算、图形管理、程序开发为一体的环境。
除此之外,MATLAB还具有很强的功能扩展能力,与它的系统一起,可以配备各种各样的工具箱。
2.3本章小结
本章详细介绍了频谱分析的基本原理,并对MATLAB软件的发展和组成展开介绍。
3.程序与算例
3.1声音信号频谱分析
Matlab语言是一种数据分析和处理功能十分强大的计算机应用软件,它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数字滤波、傅里叶变换、时域和频域分析、声音回放以及各种分析图的呈现等等。
下面以语音信号的波形图、频谱图和倒谱图分析为例来说明Matlab在语音信号处理中的具体实现方法。
程序代码:
S=wavread('1.wav')
subplot(3,1,1);plot(S);title('波形图')
n=size(S);
d=100;
L=512;
k=L-d;
t=fix(n/k);
frame_length=512;
r=(rectwin(frame_length));
fora=1:
t
n1=(L-d)*(a-1)+1;
n2=(L-d)*(a-1)+frame_length;
y=S(n1:
n2);
sf=fft(y'.*r',512);
X1(n1:
n2)=sf(1:
frame_length);
end
FFTSIZE=8000;
Y=zeros(FFTSIZE,1);
Y=20*log10(abs(X1));
subplot(3,1,2);plot(Y(1:
4000)),title('频谱图');
T1=length(X1);
t1=fix(T1/L);
fori=1:
t1
z=ifft(X1((i-1)*L+1:
i*L),512);
z=real(z./r');
y((i-1)*k+1:
i*k)=z(1:
k);
end
subplot(3,1,3);plot(y),title('倒谱图')
上程序将语音文件1.wav进行频谱分析,分析结果如图3-1所示。
图3-1声音信号的频谱分析结果
3.2图像信号频谱分析
纹理图像的频谱可以通过离散傅里叶变换(DFT)得到。
用
表示一幅空域纹理图像,用
表示该图像的频谱,图像的大小为M×N,则
和
质检可以通过DFT计算,计算公式如下:
其中能量谱可采用公式:
基于傅立叶能量谱的纹理图像分析的前提是假设纹理有不同的正弦波组成。
理想正弦分布的纹理图像,是最为典型的纹理图像之一,下面讨论理想正弦分布的纹理图像的仿真及其频谱特征分析。
编写下面的程序获得具有理想正弦分布的空域纹理图像,其中A为正弦纹理的幅值,uf0、vf0分别为x轴(垂直方向)、y轴(水平方向)方向的模拟频率,M、N分别为x轴、y轴的采样的点数,Tsu、Tsv分别为x、y轴的采样间隔,为了便于观察和处理,取Tsu=1/M、Tsv=1/N,即x轴、y轴的采样频率分别为M和N,这样在空域中得到了0~1范围的纹理图像(如考虑成时域抽样信号的话,相当于在0~1s间的抽样)。
A=1;
uf0=0;
vf0=25;
M=200;
N=200;
Tsu=1/M;
Tsv=1/N;
r=0:
M-1;
c=0:
N-1;
[C,R]=meshgrid(c,r);
g=A*sin(2*pi*uf0*R*Tsu+2*pi*vf0*C*Tsv);
f=mat2gray(g);
figure
imshow(f)
程序中输出变量g返回的是实际的理想正弦函数的取值,f返回的是g平移后的结果(取值限定在0~1范围内)。
在Matlab软件中仿真得到的一组具有理想正弦分布的纹理图像:
图3-2中各纹理的方向或周期是不同的。
其中(a)和(b)中纹理呈竖直方向分布(即水平方向变化),(a)的y轴方向的频率为25Hz,(b)的y轴频率为5Hz,即(b)图是周期为(a)图的5倍的竖直纹理,所以在整个图像范围内(相当于一秒内)(a)和(b)分别有25和5个周期。
(c)图纹理是x和y轴方向频率均为25Hz。
(a)(b)(c)
图3-2理想正弦纹理图像
然后利用FFT算法对以上面三个图像信号进行频谱分析。
程序代码为:
I=imread('1.tif')
I=rgb2gray(I);
imshow(I);
fftI=fft2(I);
sfftI=fftshift(fftI);
RR=real(sfftI);
II=imag(sfftI);
A=sqrt(RR.^2+II.^2);
A=(A-min(min(A)))/(max(max(A))-min(min(A)))*225;
figure;
imshow(A);
图3-3为对应的图中各图的傅立叶频谱能量图(在Matlab中执行了FFT(快速傅立叶变换)后,使用了fftshift函数调整,以使频谱图像的原点从起始点(0,0),移到图像的中心点(M/2,N/2))。
从图3-3中可以看出:
竖直方向理想单一频率的正弦分布纹理的频谱能量集中在水平方向的三个点上,而水平方向单一频率的正弦分布纹理的频谱能量集中在竖直方向的三个点上;对于单一频率的理想正弦分布的纹理图像,其纹理方向和其频谱能量图的频点连线方向相垂直,如图(c)纹理为图(b)的纹理顺时针倾斜45度,其频谱能量图中频点也相应顺时针倾斜45度;垂直方向纹理和水平方向纹理的叠加图像的频谱能量图表现为水平和竖直方向的五个点上;纹理周期越小,对应的频点到频谱中心(中心点,即频率为0)的距离越大,如图3-3(a)纹理的频点到中心的距离为图3-3(b)纹理的五倍。
(a)(b)(c)
图理想正弦纹理图像的频谱能量图
3.3离散信号/序列
以
,采样频率100Hz,采样100个点,形成离散信号,利用MATLAB进行频谱分析。
程序如下:
N=100;Fs=100;t=(0:
(N-1))/Fs;
xn=1+2*sin(2*pi*10*t)+3*sin(2*pi*15*t);
XK=abs(fft(xn,N));f=(0:
N/2)*Fs/N;
XK
(1)=XK
(1)/N;XK(2:
(N/2+1))=XK(2:
(N/2+1))*2/N;
stem(f,XK(1:
(N/2+1)));axis([-1N/205]);
gridon;xlabel('f(Hz)');ylabel('|X(f)|');
程序运行结果:
图3-4N=100的幅值频谱图
从图3-4可以看出,DFT法分析的结果和实际信号吻合得很好,说明该方法确实有效。
但是,需要注意的是,离散傅里叶变换在频域是离散的,即限制在基频整数倍上,只能得到信号K次谐波成分的幅值谱,而对于非K次谐波成分的频谱则无法检测出来,并且由于栅栏效应和频谱泄漏,对其它K次谐波的幅值也有影响。
如将上述程序中的N=100改为N=50,结果如图3-5所示。
图3-5N=50的幅值频谱图
从图3-5可以看出,由于基频频率为100/50=2Hz,x(t)中的15Hz分量未检测出来,其它频率分量的幅值也出现了误差,这种栅栏效应也是DFT应用中不可避免的问题之一。
要减小栅栏效应和频谱泄漏,可以减小采样频率,增加采样点数,以减小基频值,使谱线变密,这样原来漏掉的某些频谱成分就可以检测出来,但注意采样频率必须满足采样定理的要求,增加采样点数也会增加系统计算DFT的开销。
3.4本章小结
本章利用MATLAB分别对声音信号、图像信号和离散信号/序列开展频谱分析,得到频谱分析结果,并开展结果分析。
结论
本文主要是基于高级面向对象开发语言MATLAB的基本特征,以及MATLAB强大的工具箱功能,实现信号的预处理和频谱分析。
(1)通过实例说明,基于MATLAB可以很好的达到对语音信号的频谱的分析处理。
(2)采用频谱分析方法可以提取出纹理基本特征,如方向特征和周期特征。
本文以理想正弦分布的纹理图像的Matlab仿真和正弦纹理图像的频谱特征分析为例,叙述了基于傅立叶能量谱的纹理图像分析的基本原理和基本过程。
(3)通过离散傅里叶变换对和周期信号傅立叶级数的定义,清楚地推导出X(k)与信号幅值的关系,提出了一种有效的计算离散信号/序列幅值谱的方法。
致谢
本论文从拟定题目到定稿,从对论文设计原理一无所知到模糊了解再到逐渐清晰,此过程历时数月,我也经历了千辛万苦,但最终有一个结果,我感到很欣慰。
通过本次设计,我感觉自己成长了很多,对自己所学的知识有了更深刻的了解掌握,提高了自己的动手能力,能够运用所学的知识实现自己的需要。
而我这些进步和成长,都离不开XXX老师的帮助。
XXX治学严谨,学识渊博,平易近人,在教学期间以及指导毕业设计期间,不仅传授了我做学问的秘诀,还传授了做人的准则,这些都使我终生受益。
无论是在给我们上课期间,还是在我的论文选题、资料查询、开题、研究和撰写的每一个环节,都得到老师的悉心指导和帮助。
借此机会我向老师表示衷心的感谢!
同时,我要感谢所有教过我的老师,正是由于他们的传道、授业、解惑,让我学到了求知的秘诀和做人的道理。
我也要感谢我的母校湖北科技学院,是她提供了良好的学习环境和生活环境,让我的大学生活丰富多姿,为我的人生留下精彩的一笔。
另外,感谢08信本全体同学的帮助和勉励。
同窗之谊和手足之情,我将终生难忘!
我愿在未来的学习和研究过程中,以更加丰厚的成果来答谢曾经关心、帮助和支持过我的所有领导、老师、同学、和朋友。
学无止境。
明天,我将更加努力,更加完美!
参考文献
[1]黄植功.基于MATLAB的连续信号频谱分析[J].广西物理,2009,(03).
[2]刘小群,周云波.基于Matlab的DFT及FFT频谱分析[J].山西电子技术,2010,(04).
[3]董静薇,于广艳.基于Matlab的FFT频谱分析及IIR数字滤波器设计[J].软件导刊,2008,(10).
[4]赵淑敏.基于MATLAB实现对语音信号频谱分析[J].江西通
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab 实现 语音 信号 频谱 分析 论文 正文