语音性别识别课设报告_第1页
语音性别识别课设报告_第2页
语音性别识别课设报告_第3页
语音性别识别课设报告_第4页
语音性别识别课设报告_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上课 程 设 计 报 告课程名称_语音信号处理课程设计题 目_基于语音的性别判别系统设计与开发 指导教师 _ _设计起止日期 _2017-5-16至2017-6-4_系 别 _通信工程学院_专 业 _电子信息工程_学生姓名 _ _班级/学号 _ _ 成 绩 _专心-专注-专业14级“语音信号处理课程设计”任务书题目2基于语音的性别判别系统设计与开发主要内容编程实现基于语音的性别判别系统,可以实时判别说话人是男生还是女生。设计要求1. 编程实现语音的分帧。2. 编程实现语音基音周期的计算。3. 根据男女基音频率的不同,设计一种算法,分辨男女。4. 编程实现基于语音的性别判

2、别系统。5. 对说话人实时进行判别6. 准确率应不低于80%。主要仪器设备计算机1台,安装MATLAB软件及cooledit录音软件主要参考文献数字语音处理及MATLAB仿真M.北京:电子工业出版社,2010.课程设计进度计划(起止时间、工作内容)本课程设计共安排3个题目,这是其中题目之一。具体进度如下:6学时复习题目相关知识,掌握实现的原理;16学时用MATLAB语言实现题目要求;6学时进一步完善功能,现场检查、答辩;4学时完成课程设计报告。课程设计开始日期2017.5.16课程设计完成日期2017.6.19课程设计实验室名称电子信息技术实验室地点实验楼3-501,507资料下载地址摘要本文

3、通过对男性和女性声音的语音特征的研究,发现男女声的基音频率存在较大的差异,并设计了基于基音频率分析的男女声识别系统。本题目要求设计一个系统,可以自动判断输入的语音信号源,是男性声音还是女性声音,其理论依据是男性和女性的基音频率存在着明显的差异,人类的基音频率范围约为60Hz 450Hz,男性的声音基音频率大约在60HZ-200HZ之间,女性声音基音频率大约在200HZ 450HZ之间,因此根据语音的基音频率可以判别说话人的性别。关键字:基音频率一、实验原理及步骤1、语音信号进行分帧处理语音信号具有短时平稳性(10-30ms内可以认为语音信号近似不变),、这样就可以把语音信号分为一些短段来来进行

4、处理,这就是分帧,语音信号的分帧是采用可移动的有限长度的窗口进行加权的方法来实现的。一般每秒的帧数约为33100帧,视情况而定。2、幅度差平方和函数SMDSF 定义为 D 2 ( ) = j=0L-1 sw 2 (j + ) - sw 1 (j) ²其中: sw 1 (j) = s(j)w 1 (j) , sw 2 (j) = s (j)w 2 (j) ,= 0, 1, ,L - 1。窗函数为 w 1 (j) = 1, j= 0, 1, ,L - 10,其他 . 和 w 2 (j) = 1, j= 0, 1, ,2L - 20,其他 利用 SMDSF 只能提取出时间短于窗长L 的基音

5、周 期, 即 SMDSF的窗长L 需要大于可能出现的最长 基音周期的时间, 一般取值大于 25m s。注意当等于基音周期 P 时, 函数值和信号中非周期成分的能量是成一定比例, 如果信号是准确的周期信号, 则 D 2 (P ) = 0。 SMDSF 不同处的函数值, 都计算了L个差 值的平方和, 这一点与 CAMDF 是一致的对于最小周期为 P 的严格周期信号有 D 2 (m P ) = D 2 (nP ) , 其中m、n 是正整数。 3.归一化幅度差平方和函数对 SMDSF 归一化是十分必要的, 目标是使其 函数取值能评价语音信号非周期性的程度, 以便在 后处理中使用。归一化 SMDSF 定

6、义为D 2norm ( ) = D 2 ( )L /k= 0L D 2 (k) , = 0, ,L - 1.如果信号是准周期的 , 其基音周期是 P , D 2 ( ) 与 信号中非周期性成分能量成比例, 而(k= 0L D 2 (k) )/ L 与信号总能量成比例。因此, D 2norm ( )的值体现信号中非周期成分能量与信号总能量的比例。信号周期性越差, D 2norm ( )越大; 信号周期性越好, D 2norm ( )越小; 严格周期信号D 2norm ( ) = 0, 因此D 2norm ( )可作为信号非周期性的度量。此外,可以通过D 2norm ()进行清浊音判定,一般情况下

7、小于0.5 的是浊音, 大于 0.5 的是清音或其他随机噪音。后面的实验均使用 0. 5作为阈值4、程序设计的基本思想: 先进行分帧处理,然后对语音信号的每一帧求幅度差平方和函数,同时求出归一化的幅度差平方和函数。根据归一化幅度差平方和函数的数值进行清浊音的判定一般情况下小于0.5 的是浊音,大于0.5的是清音或其他随机噪音。本次课设采用0.5作为阈值,将清音和噪音部分置零使其不影响后面波谷点的提取。然后提取波谷点,如果没有波谷点则将这一帧抛弃,有波谷点则将16(50Hz)160(500Hz)之间的点作为基音周期的候选点。由于D 2 (m P ) = D 2 (nP ),所以将各个候选周期与后

8、面的波谷点求商,取最靠近整数的点作为这一帧的候选基音周期,如果仅有两个候选点则看这两点是否为倍数关系,若是则选为这一帧的基音周期,若不是则抛弃。求出所有的基音周期后有两种判断方法一是求均值然后与判决门限进行比较,判断是男是女。二是求出大于200Hz所占的总比重然后与判决门限进行比较,判断是男是女。5、基音频率的判断和语音信号的鉴别。首先基因频率的判断可以利用时域分析(短时能量、短时自相关)方法的特征或某几个特征的结合,判定某一语音有效的清音和浊音段;其次,针对浊音段,可直接利用短时自相关函数估计基音频率,方法是:估算浊音段第一最大峰值的位置,再利用抽样率计算基音频率,例如:如果说某一语音浊音段

9、的第一最大峰值约为35个抽样点,设抽样频率为8kHz,则基音频率为8000/35=228Hz。也可以用平均幅度差函数,方法是估算浊音段第一最低波谷的位置,再利用抽样率计算基音频率,例如:如果说某一语音浊音段的第一最低波谷值约为35个抽样点,设抽样频率为8kHz,则基音频率为8000/35=228Hz。然后语音信号的鉴别,基音频率与个人声带的长短、薄厚、韧性、劲度和发音习惯等有关系,在很大程度上反应了个人的特征。在生活中,由于男性和女性的生理结构不同,通过耳朵就可以清楚地确定是男性声音还是女性声音,这是由于男性声音与女性声音体现出不同的听觉效果来判断的。本次实验的理论依据是男性和女性的基音频率存

10、在着明显的差异,人类的基音频率范围约为60Hz 450Hz,男性的声音基音频率大约在60HZ-200HZ之间,女性声音基音频率大约在200HZ 450HZ之间,因此根据语音的基音频率可以判别说话人的性别。2、 设计过程和波形1.首先我们输入语音clc,close all,clear all %清屏i=1; while i %等待命令input('按回车键开始说话,注意说完请等6秒钟听结果'); %程序中断,按回车键继续y=wavrecord(50000,8000,1); %录制音频,50000个点,采样频率8000Hz,单声道figure(1);plot(y);xlabel(&

11、#39;语音信号的幅度特性曲线');%输出语音信号的幅度响应图Q=fft(y);figure(2);plot(abs(Q);xlabel('语音信号的幅频响应');%输出语音信号的幅频响应图图2.1语音信号的幅度特性曲线图2.2语音信号的幅频响应2.分帧对每一帧求幅度差平方和并归一化space=400;N=round(length(y1)/space-0.5); %计算帧数l=0;%计算大于260Hz的帧数h=0;e=0;%小于500HZ的浊音帧数for i=1:Ns=y1(i-1)*320+1:(i*320);%选择一帧x=SMDSF(s);%求幅度差平方和函数c=n

12、omSMDSF(x);%求归一化幅度平方和函数a=;%用于存储各个候选周期与后面的波谷点的商值IndMin1=;%用于存储大于50Hz小于500Hz的候选基因周期%将清音和噪音部分置零使其不影响后面波谷点的提取for i1=1:length(x) if c(i1)>=0.5 x1(i1)=0; else x1(i1)=x(i1); endend3.选出候选基音周期IndMin=find(diff(sign(diff(x1)>0)+1;%寻找波谷点m,n=size(IndMin);%存储大于50Hz小于500Hz的候选基因周期for j1=1:n if IndMin(1,j1)>

13、;=16&&IndMin(1,j1)<=160 IndMin1(:,j1)=IndMin(1,j1); else IndMin(1,j1)=0; endend IndMin1(find( IndMin1=0)=;%删除0元素 IndMin(find( IndMin=0)=; %删除0元素if isempty(IndMin)&&n>1 %判断是否存在波谷点 k=behind(IndMin,160,16);%求出最靠近160的候选基音周期的个数 if k=1&&k=0%如果存在两个或两个以上的候选基音周期则求各个候选周期与后面的波谷点的商

14、值for i2=1:k if k<length(IndMin) for j2=length(IndMin):-1:i2+1 if (IndMin(i2)>=16&&IndMin(i2)<=160)&&j2<=length(IndMin) a(i2,:)=double(IndMin(j2)/IndMin(i2); end end elseif (k=length(IndMin)&&(length(IndMin)>2) %所有的波谷点均在50Hz500Hz内 for j3=length(IndMin):-1:i2+1 i

15、f (IndMin(i2)>=16&&IndMin(i2)<=160)&&j3<=length(IndMin) a(i2,:)=double(IndMin(j3)/IndMin(i2); end end else %仅有两个波谷点,取第一个为候选基音周期 if IndMin(1)>=16|IndMin(1)<=160 q= IndMin(2)/IndMin(1); q1=round(q); if abs(q-q1)=0 a(1,:)=IndMin(1); end end endend elseif k=1 %仅有一个候选基音周期 i

16、f n>2 for j4=length(IndMin):-1:2 if (IndMin(1)>=16&&IndMin(1)<=160)&&j4 <=length(IndMin) a(j4,:)=double(IndMin(j4)/IndMin(1); end end else %没有候选基音周期 a=; end else a=; end if isempty(a) b=round(a); i5,j5=size(a); for i6=1:i5 %将为零的情况控制住 for j6=1:j5 if a(i6,j6)=0 a(i6,j6)=0.9

17、; b(i6,j6)=0; end end endabs1=abs(a-b);%求出和整数的差距if i5>=2 %如果存在两个候选基音周期则将最靠近整数的一个作为本帧的基音周期Y0=sort(abs1,2); Y1=Y0(:,1);Y2,I2=sort(Y1); g=(8000/IndMin1(I2(1);%计算对应的频率并存储 if g<=500 e=e+1; h=h+g; end if g>=260 l=l+1; endelse %仅存在一个基音周期看是否严格成倍数,是则保留,不是则丢弃 for j7=1:j5 if abs1(j7)=0 g=(8000/IndMin1

18、(1); if g<=500 e=e+1; h=h+g; end if g>=260 l=l+1; end end endendelse %不存在候选基音周期则丢弃此帧 g=0; h=h+g; e=e+0; l=l+0 endelse %没有波谷点则为清音帧或噪声帧丢弃 g=0; h=h+g; e=e+0; l=l+0;end4.输出结果f=h/e;if f>200|l=0 '你是女生'end if f<200&&l=0 '你是男生'end if f=200 '无法判断' endi=input('重

19、新识别按1回车,结束按回车');end实验结束。 图2.3 男生测试结果 图2.4 女生声音频谱 图2.5 女生测试结果三、课设感想本次基于语音性别识别系统的课程设计,让我收获很多,学会了阅读文献,学会了调试,查错知道了科研项目的艰难但同时也极大地激发了我的兴趣,虽然这个程序判断的准确率不高并且极大地依赖于录音的质量,但也是我的一次冒险尝试,这次课设我做的很开心,这次我是真的学到了很多东西,我相信这些东西会帮助我在以后的学习中越走越远四、小组分工负责代码编写,参考文献查找,程序错误修改,报告制作。负责AMDF法原理,程序测试,查询文件资料参考文献1数字语音处理及MATLAB仿真M.北京

20、:电子工业出版社,2010.2韩纪庆,张磊郑铁然语音信号处理M北京:清华大学出版社,2004092215 3王炳锡,屈丹,彭煊实用语音识别基础M北京:国防工业出版社,20051 4刘健,郑方,吴文虎.基于幅度差平方和函数的基音周期提取算法J. 清华大学学报,2006,46(1):74-77附录:1.Main1clc,close all,clear all %清屏i=1; while i %等待命令input('按回车键开始说话,注意说完请等6秒钟听结果'); %程序中断,按回车键继续y=wavrecord(50000,8000,1); %录制音频,50000

21、个点,采样频率8000Hz,单声道figure(1);plot(y);xlabel('语音信号的幅度特性曲线');%输出语音信号的幅度响应图Q=fft(y);figure(2);plot(abs(Q);xlabel('语音信号的幅频响应');%输出语音信号的幅频响应图sound(y);y1=y(1:40000)' input('录音停止,按回车键进行下一步'); err=input('重录按1回车,确认按回车键');%将语音信号分为段长为160样本的若干段space=400;N=round(length(y1)/space

22、-0.5); %计算帧数h=0;e=0;%小于500HZ的浊音帧数for i=1:Ns=y1(i-1)*320+1:(i*320);%选择一帧x=SMDSF(s);%求幅度差平方和函数c=nomSMDSF(x);%求归一化幅度平方和函数a=;%用于存储各个候选周期与后面的波谷点的商值IndMin1=;%用于存储大于50Hz小于500Hz的候选基因周期%将清音和噪音部分置零使其不影响后面波谷点的提取for i1=1:length(x) if c(i1)>=0.5 x1(i1)=0; else x1(i1)=x(i1); endendIndMin=find(diff(sign(diff(x1

23、)>0)+1;%寻找波谷点m,n=size(IndMin);%存储大于50Hz小于500Hz的候选基因周期for j1=1:n if IndMin(1,j1)>=16&&IndMin(1,j1)<=160 IndMin1(:,j1)=IndMin(1,j1); else IndMin(1,j1)=0; endend IndMin1(find( IndMin1=0)=; IndMin(find( IndMin=0)=;if isempty(IndMin)&&n>1 %判断是否存在波谷点 k=behind(IndMin,160,16);%求出

24、最靠近160的候选基音周期的个数 if k=1&&k=0%如果存在两个或两个以上的候选基音周期则求各个候选周期与后面的波谷点的商值for i2=1:k if k<length(IndMin) for j2=length(IndMin):-1:i2+1 if (IndMin1(i2)>=16&&IndMin1(i2)<=160)&&j2<=length(IndMin) a(i2,:)=double(IndMin(j2)/IndMin1(i2); end end elseif (k=length(IndMin)&&am

25、p;(length(IndMin)>2) %所有的波谷点均在50Hz500Hz内 for j3=length(IndMin):-1:i2+1 if (IndMin1(i2)>=16&&IndMin1(i2)<=160)&&j3<=length(IndMin) a(i2,:)=double(IndMin(j3)/IndMin1(i2); end end else %仅有两个波谷点,取第一个为候选基音周期 if IndMin1(1)>=16|IndMin1(1)<=160 q= IndMin1(2)/IndMin1(1); q1=

26、round(q); if abs(q-q1)=0 a(1,:)=IndMin(1); end end endend elseif k=1 %仅有一个候选基音周期 if n>2 for j4=length(IndMin):-1:2 if (IndMin1(1)>=16&&IndMin1(1)<=160)&&j4 <=length(IndMin) a(j4,:)=double(IndMin(j4)/IndMin1(1); end end else %没有候选基音周期 a=; end else a=; end if isempty(a) b=r

27、ound(a); i5,j5=size(a); for i6=1:i5 %将为零的情况控制住 for j6=1:j5 if a(i6,j6)=0 a(i6,j6)=0.9; b(i6,j6)=0; end end endabs1=abs(a-b);%求出和整数的差距if i5>=2 %如果存在两个候选基音周期则将最靠近整数的一个作为本帧的基音周期Y0=sort(abs1,2); Y1=Y0(:,1);Y2,I2=sort(Y1); g=(8000/IndMin1(I2(1);%计算对应的频率并存储 if g<=500 e=e+1; h=h+g; end if g>=260 l

28、=l+1; endelse %仅存在一个基音周期看是否严格成倍数,是则保留,不是则丢弃 for j7=1:j5 if abs1(j7)=0 g=(8000/IndMin1(1); if g<=500 e=e+1; h=h+g; end if g>=260 l=l+1; end end endendelse %不存在候选基音周期则丢弃此帧 g=0; h=h+g; e=e+0;l=l+0; endelse %没有波谷点则为清音帧或噪声帧丢弃 g=0; h=h+g; e=e+0; l=l+0;endend%输出结果f=h/e;if f>200|l=0 '你是女生'e

29、nd if f<200&&l=0 '你是男生'end if f=200 '无法判断' endi=input('重新识别按1回车,结束按回车');end2.Main2clc,close all,clear all %清屏i=1; while i %等待命令input('按回车键开始说话,注意说完请等6秒钟听结果'); %程序中断,按回车键继续y=wavrecord(50000,8000,1); %录制音频,50000个点,采样频率8000Hz,单声道figure(1);plot(y);xlabel('语

30、音信号的幅度特性曲线');%输出语音信号的幅度响应图Q=fft(y);figure(2);plot(abs(Q);xlabel('语音信号的幅频响应');%输出语音信号的幅频响应图sound(y);y1=y(1:40000)' input('录音停止,按回车键进行下一步'); err=input('重录按1回车,确认按回车键');%将语音信号分为段长为160样本的若干段space=400;N=round(length(y1)/space-0.5); %计算帧数l=0;h=0;%大于200Hz的浊音帧数e=0;%小于500HZ的浊音

31、帧数max=0.60;min=0.54;for i=1:Ns=y1(i-1)*320+1:(i*320);%选择一帧x=SMDSF(s);%求幅度差平方和函数c=nomSMDSF(x);%求归一化幅度平方和函数a=;%用于存储各个候选周期与后面的波谷点的商值IndMin1=;%用于存储大于50Hz小于500Hz的候选基因周期%将清音和噪音部分置零使其不影响后面波谷点的提取for i1=1:length(x) if c(i1)>=0.5 x1(i1)=0; else x1(i1)=x(i1); endendIndMin=find(diff(sign(diff(x1)>0)+1;%寻找

32、波谷点m,n=size(IndMin);%存储大于50Hz小于500Hz的候选基因周期for j1=1:n if IndMin(1,j1)>=16&&IndMin(1,j1)<=160 IndMin1(:,j1)=IndMin(1,j1); else IndMin(1,j1)=0; endend IndMin1(find( IndMin1=0)=;%删除0元素 IndMin(find( IndMin=0)=;%删除0元素if isempty(IndMin)&&n>1 %判断是否存在波谷点 k=behind(IndMin,160,16);%求出最

33、靠近160的候选基音周期的个数 if k=1&&k=0%如果存在两个或两个以上的候选基音周期则求各个候选周期与后面的波谷点的商值for i2=1:k if k<length(IndMin) for j2=length(IndMin):-1:i2+1 if (IndMin(i2)>=16&&IndMin(i2)<=160)&&j2<=length(IndMin) a(i2,:)=double(IndMin(j2)/IndMin(i2); end end elseif (k=length(IndMin)&&(l

34、ength(IndMin)>2) %所有的波谷点均在50Hz500Hz内 for j3=length(IndMin):-1:i2+1 if (IndMin(i2)>=16&&IndMin(i2)<=160)&&j3<=length(IndMin) a(i2,:)=double(IndMin(j3)/IndMin(i2); end end else %仅有两个波谷点,取第一个为候选基音周期 if IndMin(1)>=16|IndMin(1)<=160 q= IndMin(2)/IndMin(1); q1=round(q); i

35、f abs(q-q1)=0 a(1,:)=IndMin(1); end end endend elseif k=1 %仅有一个候选基音周期 if n>2 for j4=length(IndMin):-1:2 if (IndMin(1)>=16&&IndMin(1)<=160)&&j4 <=length(IndMin) a(j4,:)=double(IndMin(j4)/IndMin(1); end end else %没有候选基音周期 a=; end else a=; end if isempty(a) b=round(a); i5,j5

36、=size(a); for i6=1:i5 %将为零的情况控制住 for j6=1:j5 if a(i6,j6)=0 a(i6,j6)=0.9; b(i6,j6)=0; end end endabs1=abs(a-b);%求出和整数的差距if i5>=2 %如果存在两个候选基音周期则将最靠近整数的一个作为本帧的基音周期Y0=sort(abs1,2); Y1=Y0(:,1);Y2,I2=sort(Y1); g=(8000/IndMin1(I2(1);%计算对应的频率并存储if g<=500 e=e+1;endif g>=200 h=h+1;endif g>=260 l=l+1; endelse %仅存在一个基音周期看是否严格成倍数,是则保留,不是则丢弃 for j7=1:j5 if abs1(j7)=0 g=(8000/IndMin1(1);if g<=500 e=e+1;endif g>=200 h=h+1;endif g>=260 l=l+1; end end

温馨提示

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

评论

0/150

提交评论