基于matlab鸟声识别.doc_第1页
基于matlab鸟声识别.doc_第2页
基于matlab鸟声识别.doc_第3页
基于matlab鸟声识别.doc_第4页
基于matlab鸟声识别.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

题 目: 基于matlab机场驱鸟装置姓 名:姚访学 院: 工学院 专 业: 自动化 班 级: 自动化111 学 号: 32211126 指导教师: 刘璎瑛 2014年 6月 18日基于MATLAB 的机场驱鸟装置指导老师 刘璎瑛【摘要】以往在电气自动化专业学生进行毕业设计过程中,常常需要进行大量的数学运算。在当今计算机时代,通常的做法是借助高级语言Basic、Fortran或C语言等编制计算程序,输入计算机做近似计算。但是这需要熟练的掌握所运用的语法规则与编制程序的相关规定,而且编制程序不容易,费时费力。目前,比较流行的控制系统仿真软件是MATLAB。MATLAB的使用极其容易,不要求使用者具备高深的数学与程序语言的知识,不需要使用者深刻了解算法与编程技巧,且提供了丰富的矩阵处理功能,因此控制理论领域的研究人员很快注意到了这样的特点。尤其MATLAB应用在电厂自动化专业的毕业设计的计算机仿真上,更体现出它巨大的优越性和简易性。本设计用电脑录音机采集了一段语音,对其进行了时域分析,频谱分析,分析语音信号的特性。然后进行相应处理,对比之后判断是否有鸟声。【关键词】 频域; 时域; 滤波器;识别1 Matlab工具的介绍 MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。 是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。2 课题的研究意义我们知道小鸟对飞机的影响很大,对飞机造成的损失和危害不可小视。本次项目内容就是基于matlab设计一个机场驱鸟系统,对机场的声音环境进行实时监测,一旦发现有鸟的叫声则启动报警器,以驱除鸟和提醒工作人员做好相关安全保障工作,确保航班的安全。3 课题的实现方法通过应用matlab,布局GUI界面,关联对应的m文件。首先我们要选取一个典型的鸟叫声音,通过画出它的时域图和频谱图,由相关的m文件提取它的一些参数特性作为模板。然后我们设置一个带通滤波器,将采集到的声音通过滤波器,与模板进行比较,如果与模板的误差在一定范围之内,则表示有鸟叫的声音,此时进行报警。4 相关GUI界面图览1.有鸟声时识别: 图采集声音滤波前与模板比较 图采集声音滤波后与模板比较1. 无鸟声时识别: 图采集声音滤波前与模板比较 图采集声音滤波前与模板比较 通过这四张图比较知道,只有周围有鸟声,并且把采集到的鸟声滤波之后,与模板比较才能识别出来。5 本人负责相关部分任务:语音识别 (注:鉴于语音识别这块较为繁杂,故与喻金标同学一起完成) 1.识别主函数Shibiezhu.m function finalmsg = 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:ssssssbbbbinxm2AA.wav); mm1 = mfcc(m1, fs); % 计算 MFCCs 提取特征特征,返回值是Mel倒谱系数,是一个log的dct得到的 code1= Vqlbg(mm1, k); mm2 = mfcc(m2, fs); % 计算 MFCCs 提取特征特征,返回值是Mel倒谱系数,是一个log的dct得到的 code2= Vqlbg(mm2, k); mm3 = mfcc(m3, fs); % 计算 MFCCs 提取特征特征,返回值是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; if dist1distmin&dist1distmin&dist2distmin&dist3distmax msgc1 = sprintf(有鸟叫); msgbox(msgc1); bj, fs = wavread(E:baojing.wav); sound(bj,fs); else msgc2 = sprintf(没有鸟叫); msgbox(msgc2); end2. 特征提取函数mfcc.m function r = mfcc(s, fs)m = 100;n = 256;l = length(s);nbFrame = floor(l - n) / m) + 1; %沿-方向取整 for i = 1:nfor j = 1:nbFrameM(i, j) = s(j - 1) * m) + i); %对矩阵M赋值endendh = hamming(n); %加 hamming 窗,以增加音框左端和右端的连续性M2 = diag(h) * M;for i = 1:nbFrameframe(:,i) = fft(M2(:, i); %对信号进行快速傅里叶变换FFT endt = 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.mfunction d = 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 (N P)%在两个音频时间长度相等的前提下 copies = zeros(1,P); for n = 1:N d(n,:) = sum(x(:, n+copies) - y) .2, 1); endelse copies = zeros(1,N); for p = 1:P d(:,p) = sum(x - y(:, p+copies) .2, 1); end%成对欧氏距离的两个矩阵的列之间的距离endd = d.0.5;4. 特征提取辅助函数vqlbg.m function r = vqlbg(d,k)e = .01;r = mean(d, 2);dpr = 10000;for i = 1:log2(k) r = r*(1+e), r*(1-e); while (1= 1) z = Disteu(d, r); m,ind = min(z, , 2); t = 0; for j = 1:2i r(:, j) = mean(d(:, find(ind = j), 2); x = Disteu(d(:, find(ind = j), r(:, j); for q = 1:length(x) t = t + x(q); end end if (dpr - t)/t) e) break; else dpr = t; end endend6. Mel滤波器组函数melfb.mfunction m = melfb(p, n, fs) f0 = 700 / fs;fn2 = floor(n/2);lr = log(1 + 0.5/f0) / (p+1);% convert to fft bin numbers with 0 for DC termbl = n * (f0 * (exp(0 1 p p+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; r = fp(b2:b4) 1+fp(1:b3);c = b2:b4 1:b3 + 1;v = 2 * 1-pm(b2:b4) pm(1:b3);m = sparse(r, c, v, p, 1+fn2);6 感受 1.通过实验,是我对MATLAB有了一个基础的了解,在学习MATLAB编程中需要很多的参考书,要尽量多的熟悉matlab自带的函数及其作用,因为matlab的自带函数特别多,基本上能够满足一般的数据和矩阵的计算,所以基本上不用你自己编函数。这一点对程序非常有帮助,可以使程序简单,运行效率高,可以节省很多时间。本次课设中用了很多MATLAB自带的函数,使程序变得很简单而有效。 2.在编程的过程中学习,程序需要什么知识再去补充,编程是一点一点积累的,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论