语音性别识别课设报告.docx

上传人:小飞机 文档编号:2772118 上传时间:2023-02-24 格式:DOCX 页数:21 大小:378.64KB
返回 下载 相关 举报
语音性别识别课设报告.docx_第1页
第1页 / 共21页
语音性别识别课设报告.docx_第2页
第2页 / 共21页
语音性别识别课设报告.docx_第3页
第3页 / 共21页
语音性别识别课设报告.docx_第4页
第4页 / 共21页
语音性别识别课设报告.docx_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《语音性别识别课设报告.docx》由会员分享,可在线阅读,更多相关《语音性别识别课设报告.docx(21页珍藏版)》请在三一办公上搜索。

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 定义为D 2n

6、orm ( ) = 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 ()进行清浊音判定,一般情况下小于0.5

7、的是浊音, 大于 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之间,因此根据语音的基音频率可以判别说话人的性别。二、 设计过程和波形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、音信号的幅度响应图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=nomSMDSF(x);%求归一化幅度平方和函数a=;%用于存储各个候选周

12、期与后面的波谷点的商值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)=16&IndMin(1,j1)1 %判断是否存在波谷点 k=behind(IndMin,16

13、0,16);%求出最靠近160的候选基音周期的个数 if k=1&k=0%如果存在两个或两个以上的候选基音周期则求各个候选周期与后面的波谷点的商值for i2=1:k if k=16&IndMin(i2)=160)&j22) %所有的波谷点均在50Hz500Hz内 for j3=length(IndMin):-1:i2+1 if (IndMin(i2)=16&IndMin(i2)=160)&j3=16|IndMin(1)2 for j4=length(IndMin):-1:2 if (IndMin(1)=16&IndMin(1)=160)&j4 =2 %如果存在两个候选基音周期则将最靠近整数的

14、一个作为本帧的基音周期Y0=sort(abs1,2); Y1=Y0(:,1);Y2,I2=sort(Y1); g=(8000/IndMin1(I2(1);%计算对应的频率并存储 if g=260 l=l+1; endelse %仅存在一个基音周期看是否严格成倍数,是则保留,不是则丢弃 for j7=1:j5 if abs1(j7)=0 g=(8000/IndMin1(1); 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+

15、g; e=e+0; l=l+0;end4.输出结果f=h/e;if f200|l=0 你是女生;end if f=0.5 x1(i1)=0; else x1(i1)=x(i1); endendIndMin=find(diff(sign(diff(x1)0)+1;%寻找波谷点m,n=size(IndMin);%存储大于50Hz小于500Hz的候选基因周期for j1=1:n if IndMin(1,j1)=16&IndMin(1,j1)1 %判断是否存在波谷点 k=behind(IndMin,160,16);%求出最靠近160的候选基音周期的个数 if k=1&k=0%如果存在两个或两个以上的候

16、选基音周期则求各个候选周期与后面的波谷点的商值for i2=1:k if k=16&IndMin1(i2)=160)&j22) %所有的波谷点均在50Hz500Hz内 for j3=length(IndMin):-1:i2+1 if (IndMin1(i2)=16&IndMin1(i2)=160)&j3=16|IndMin1(1)2 for j4=length(IndMin):-1:2 if (IndMin1(1)=16&IndMin1(1)=160)&j4 =2 %如果存在两个候选基音周期则将最靠近整数的一个作为本帧的基音周期Y0=sort(abs1,2); Y1=Y0(:,1);Y2,I2

17、=sort(Y1); g=(8000/IndMin1(I2(1);%计算对应的频率并存储 if g=260 l=l+1; endelse %仅存在一个基音周期看是否严格成倍数,是则保留,不是则丢弃 for j7=1:j5 if abs1(j7)=0 g=(8000/IndMin1(1); 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 f200|l=0

18、 你是女生;end if f=0.5 x1(i1)=0; else x1(i1)=x(i1); endendIndMin=find(diff(sign(diff(x1)0)+1;%寻找波谷点m,n=size(IndMin);%存储大于50Hz小于500Hz的候选基因周期for j1=1:n if IndMin(1,j1)=16&IndMin(1,j1)1 %判断是否存在波谷点 k=behind(IndMin,160,16);%求出最靠近160的候选基音周期的个数 if k=1&k=0%如果存在两个或两个以上的候选基音周期则求各个候选周期与后面的波谷点的商值for i2=1:k if k=16&

19、IndMin(i2)=160)&j22) %所有的波谷点均在50Hz500Hz内 for j3=length(IndMin):-1:i2+1 if (IndMin(i2)=16&IndMin(i2)=160)&j3=16|IndMin(1)2 for j4=length(IndMin):-1:2 if (IndMin(1)=16&IndMin(1)=160)&j4 =2 %如果存在两个候选基音周期则将最靠近整数的一个作为本帧的基音周期Y0=sort(abs1,2); Y1=Y0(:,1);Y2,I2=sort(Y1); g=(8000/IndMin1(I2(1);%计算对应的频率并存储if g

20、=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=200 h=h+1;endif g=260 l=l+1; end end endendelse %不存在候选基音周期则丢弃此帧 g=0; h=h+0; e=e+0; l=l+0; endelse %没有波谷点则为清音帧或噪声帧丢弃 g=0; h=h+0 e=e+0; l=l+0;endend%输出结果ratio=h/e;if ratio=max|l=0 %如果比

21、值大于等于最大值 你是女生 %输出 你是女生 endif ratiomin&ratiomax 你有点儿不男不女i=input(重新识别按1回车,结束按回车);endend3.SMDSF(幅度差平方和函数)function D =SMDSF( s )%UNTITLED2 Summary of this function goes here% Detailed explanation goes herel=800;%一般取大于25msw1=;w2=;sw1=;sw2=;D=;for n=1:1:l; w1(n)=1;endfor n=1:1:2*l-1; w2(n)=1;endif length(

22、s)l for n=1:l-length(s) s(length(s)+n)=0; endendfor n=1:1:l; a=s(n)*w1(n); sw1(n)=a;endfor n=1:1:l; b=s(n)*w2(n); sw2(n)=b;endfor n=l+1:1:2*l; sw2(n)=0;endfor t=1:1:l; D(t)=0;%初始化矩阵 for j=0:1:l-1; D(t)=D(t)+(sw2(t+j)-sw1(j+1)2;%计算幅度差平方和函数 endendend4.nomSMDSF(归一化幅度差平方和函数)function D3 = nomSMDSF( D)D3=

23、;l=800;%求和%sum=0;for n=1:1:l sum=sum+D(n);endfor n=1:1:l D3(n)=D(n)*l/sum;endend5.behind(查找候选基音周期个数)function b = behind( a,n,m )%UNTITLED2 Summary of this function goes here% Detailed explanation goes herel=length(a);c=;for i=1:l if a(i)=m c(i)=abs(a(i)-n); endendif isempty(c)Y1,I1=sort(c,ascend);b=I1(1);else b=0;endend

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号