您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > matlab甄别男女声测试代码
functionboy_or_girl()%matlab甄别男女声%limit——平均最大频率低于limit赫兹判断是男声%fs——采样频率clear;clc;limit=360;fs=8000;s=recorder(true,fs,2);display'Processing...'OMG=4000*pi;%频带宽度k=1000;%频带采样点个数omg=linspace(0,OMG-OMG/k,k);l=length(s);piece=500;r=5;%样本重复次数t=linspace(0,r*(piece-1)/fs,r*piece);%样本播放时间为音频长度/fs秒W=1/fs*exp(-1i*kron(omg',t));F=zeros(k,1);fori=1:l/piecesample=s((i-1)*piece+1:i*piece);F=F+abs(W*repmat(sample,r,1))/l*piece;end%figure(gcf);plot(omg/2/pi,F);%xlabel('frequency');ylabel('amplitude');[~,f]=max(F);justify=f*OMG/k/2/pi;%Hzifjustifylimit%limitHz以下判断是男的display'男'elsedisplay'女'endend%录音函数functions=recorder(auto,fs,t)%auto=1时是自动模式,检测到声音才开始录音,auto=0时从运行程序开始录音t秒%fs是采样频率Hz%不管手动模式还是自动模式,开始录音后t秒钟停if(auto==1)%自动模式a=0;r=audiorecorder(fs,16,1);record(r);pause(0.5);%停0.5秒是因为开始刚录音时有个冲击的噪声while(a0.01)%循环检测有无语音,一旦检测到就跳出循环r=audiorecorder(fs,16,1);record(r);pause(0.01);%循环周期是0.01秒pause(r);%只有暂停后才可获取语音,所以获得录音总会有一个空白间隙s=getaudiodata(r,'double');a=mean(abs(s));%计算这0.01秒内振幅的平均值enddisplay'Startrecord:'resume(r);%为了尽可能的保住语音,用resume而不重新生成pause(t);%录t秒stop(r);else%手动模式r=audiorecorder(fs,16,1);display'Ready'pause(1);%准备1秒再开始display'Startrecord:'record(r);pause(t);%录t秒stop(r);enddisplay'recorddone!'s=getaudiodata(r,'double');%获取录音信号end
本文标题:matlab甄别男女声测试代码
链接地址:https://www.777doc.com/doc-6072229 .html