您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 基于matlab鸟声识别
题目:基于matlab机场驱鸟装置姓名:姚访学院:工学院专业:自动化班级:自动化111学号:32211126指导教师:刘璎瑛2014年6月18日第1页基于MATLAB的机场驱鸟装置指导老师刘璎瑛【摘要】以往在电气自动化专业学生进行毕业设计过程中,常常需要进行大量的数学运算。在当今计算机时代,通常的做法是借助高级语言Basic、Fortran或C语言等编制计算程序,输入计算机做近似计算。但是这需要熟练的掌握所运用的语法规则与编制程序的相关规定,而且编制程序不容易,费时费力。目前,比较流行的控制系统仿真软件是MATLAB。MATLAB的使用极其容易,不要求使用者具备高深的数学与程序语言的知识,不需要使用者深刻了解算法与编程技巧,且提供了丰富的矩阵处理功能,因此控制理论领域的研究人员很快注意到了这样的特点。尤其MATLAB应用在电厂自动化专业的毕业设计的计算机仿真上,更体现出它巨大的优越性和简易性。本设计用电脑录音机采集了一段语音,对其进行了时域分析,频谱分析,分析语音信号的特性。然后进行相应处理,对比之后判断是否有鸟声。【关键词】频域;时域;滤波器;识别一.Matlab工具的介绍MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。二.课题的研究意义我们知道小鸟对飞机的影响很大,对飞机造成的损失和危害不可小视。本次项目内容就是基于matlab设计一个机场驱鸟系统,对机场的声音环境进行实时监测,一旦发现有鸟的叫声则启动报警器,以驱除鸟和提醒工作人员做好相关安全保障工作,确保航班的安全。三.课题的实现方法通过应用matlab,布局GUI界面,关联对应的m文件。首先我们要选取一个典型的鸟叫声音,通过画出它的时域图和频谱图,由相关的m文件提取它的一些参数特性作为模板。然后我们设置一个带通滤波器,将采集到的声音通过滤波器,与模板进行比较,如果与模板的误差在一定范围之内,则表示有鸟叫的声音,此时进行报警。四.相关GUI界面图览1.有鸟声时识别:第2页图①采集声音滤波前与模板比较图②采集声音滤波后与模板比较1.无鸟声时识别:第3页图③采集声音滤波前与模板比较图④采集声音滤波前与模板比较通过这四张图比较知道,只有周围有鸟声,并且把采集到的鸟声滤波之后,与模板比较才能识别出来。五.本人负责相关部分任务:语音识别(注:鉴于语音识别这块较为繁杂,故与喻金标同学一起完成)第4页1.识别主函数Shibiezhu.mfunctionfinalmsg=test()k=128;fs=50000;[m1,fs]=wavread('E:\e1.wav');[m2,fs]=wavread('E:\e2.wav');[m3,fs]=wavread('E:\e3.wav');[ce,fs]=wavread('D:\ssssss\bbb\bin\xm2\AA.wav');mm1=mfcc(m1,fs);%计算MFCC's提取特征特征,返回值是Mel倒谱系数,是一个log的dct得到的code1=Vqlbg(mm1,k);mm2=mfcc(m2,fs);%计算MFCC's提取特征特征,返回值是Mel倒谱系数,是一个log的dct得到的code2=Vqlbg(mm2,k);mm3=mfcc(m3,fs);%计算MFCC's提取特征特征,返回值是Mel倒谱系数,是一个log的dct得到的code3=Vqlbg(mm3,k);cce=mfcc(ce,fs);%得到测试人语音的mel倒谱系数d1=Disteu(cce,code1);%计算得到模板和要判断的声音之间的“距离”dist1=sum(min(d1,[],2))/size(d1,1);%变换得到一个距离的量d2=Disteu(cce,code2);%计算得到模板和要判断的声音之间的“距离”dist2=sum(min(d2,[],2))/size(d2,1);%变换得到一个距离的量d3=Disteu(cce,code3);%计算得到模板和要判断的声音之间的“距离”dist3=sum(min(d3,[],2))/size(d3,1);%变换得到一个距离的量%测试阈值数量msgc1=sprintf('与模板语音信号的差值为:%10f',dist1);msgc2=sprintf('与模板语音信号的差值为:%10f',dist2);msgc3=sprintf('与模板语音信号的差值为:%10f',dist3);disp(msgc1);disp(msgc2);disp(msgc3);distmin=0;distmax=5;ifdist1distmin&dist1distmax|dist2distmin&dist2distmax|dist3distmin&dist3distmaxmsgc1=sprintf('有鸟叫');msgbox(msgc1);[bj,fs]=wavread('E:\baojing.wav');sound(bj,fs);第5页elsemsgc2=sprintf('没有鸟叫');msgbox(msgc2);end2.特征提取函数mfcc.mfunctionr=mfcc(s,fs)m=100;n=256;l=length(s);nbFrame=floor((l-n)/m)+1;%沿-∞方向取整fori=1:nforj=1:nbFrameM(i,j)=s(((j-1)*m)+i);%对矩阵M赋值endendh=hamming(n);%加hamming窗,以增加音框左端和右端的连续性M2=diag(h)*M;fori=1:nbFrameframe(:,i)=fft(M2(:,i));%对信号进行快速傅里叶变换FFTendt=n/2;tmax=l/fs;m=Melfb(20,n,fs);%将上述线性频谱通过Mel频率滤波器组得到Mel频谱,下面面在将其转化成对数频谱n2=1+floor(n/2);z=m*abs(frame(1:n2,:)).^2;r=dct(log(z));3.计算距离函数Disteu.mfunctiond=disteu(x,y)[M,N]=size(x);%音频x赋值给【M,N】[M2,P]=size(y);%音频y赋值给【M2,P】if(M~=M2)error('不匹配!')%两个音频时间长度不相等endd=zeros(N,P);if(NP)%在两个音频时间长度相等的前提下copies=zeros(1,P);forn=1:Nd(n,:)=sum((x(:,n+copies)-y).^2,1);endelsecopies=zeros(1,N);forp=1:P第6页d(:,p)=sum((x-y(:,p+copies)).^2,1)';end%%成对欧氏距离的两个矩阵的列之间的距离endd=d.^0.5;4.特征提取辅助函数vqlbg.mfunctionr=vqlbg(d,k)e=.01;r=mean(d,2);dpr=10000;fori=1:log2(k)r=[r*(1+e),r*(1-e)];while(1==1)z=Disteu(d,r);[m,ind]=min(z,[],2);t=0;forj=1:2^ir(:,j)=mean(d(:,find(ind==j)),2);x=Disteu(d(:,find(ind==j)),r(:,j));forq=1:length(x)t=t+x(q);endendif(((dpr-t)/t)e)break;elsedpr=t;endendend6.Mel滤波器组函数melfb.mfunctionm=melfb(p,n,fs)f0=700/fs;fn2=floor(n/2);lr=log(1+0.5/f0)/(p+1);%converttofftbinnumberswith0forDCtermbl=n*(f0*(exp([01pp+1]*lr)-1));b1=floor(bl(1))+1;b2=ceil(bl(2));b3=floor(bl(3));b4=min(fn2,ceil(bl(4)))-1;pf=log(1+(b1:b4)/n/f0)/lr;fp=floor(pf);pm=pf-fp;第7页r=[fp(b2:b4)1+fp(1:b3)];c=[b2:b41:b3]+1;v=2*[1-pm(b2:b4)pm(1:b3)];m=sparse(r,c,v,p,1+fn2);六.感受1.通过实验,是我对MATLAB有了一个基础的了解,在学习MATLAB编程中需要很多的参考书,要尽量多的熟悉matlab自带的函数及其作用,因为matlab的自带函数特别多,基本上能够满足一般的数据和矩阵的计算,所以基本上不用你自己编函数。这一点对程序非常有帮助,可以使程序简单,运行效率高,可以节省很多时间。本次课设中用了很多MATLAB自带的函数,使程序变得很简单而有效。2.在编程的过程中学习,程序需要什么知识再去补充,编程是一点一点积累的,所以需要做一些随手笔记什么的。课题需要什么函数,需要什么模块就应该去着重看那个知识点,就应该一步一步学,如果太急于把所有东西都学到,也是不好的,更是实现不了的。3.总之,通过这次学习,我了解了一下这个软件总体的功能,以及通过自己编写一些代码也学到了一些用法和知识。我相信统统不时的积累,我会慢慢的学会使用MATLAB。4.这次我们四个人一起做这个驱鸟装置,感觉还有不足之处,还存在一些问题有待纠正。在此再次感谢刘刘璎瑛老师的指导!
本文标题:基于matlab鸟声识别
链接地址:https://www.777doc.com/doc-6697740 .html