一、信号采集
首先本人使用的自己制作的声音和来自一位女同学的录音分别保存为boy.mp3和girl.mp3,然后在matlab平台上运用audioread函数记住采样频率和采样点数。
file='girl1.mp3'
[x,fs]=audioread(file);
其中x表示音频数据,文件中的音频数据,返回为 m×n 矩阵,其中 m 是读取的音频样本数,n 是文件中的音频通道数。
fs表示采样率。
二、语音信号处理
由于男性和女性生理结构的不同,男性和女性呈现出不同的听觉特征,男声的基音频率大约在100-200Hz之间。而女声的基音频率大都在200—350Hz之间,鉴于男女声的基音频存在明显的差异,所以基音频可以作为男女声识别的依据。
因此,本文将上述采集到的自制男音和女音信号进行提取频率。从开始的data=x(:,1)提取单声道,使用xcov()函数对数据进行协方差处理,做协方差的意义度量各个维度偏离其均值的程度。协方差的值如果为正值,则说明两者是正相关的(从协方差可以引出“相关系数”的定义),结果为负值就说明负相关的,如果为0,也是就是统计上说的“相互独立”。通过这三段代码计算出提取音频的频率。
yy=y(halflen: ylen);%选中见到末尾一段数据
[~,maxindex] = max(yy);%yy矩阵的最大值传递出去
fmax=fs/(maxindex+30);%频率计算
三、最后判断
通过频率200作为界限来判断男女声音:
四、优缺点
优点:本次实验简单的通过频率来判断男女声。比较普遍性使用,整个过程思想也很简单。
缺点:虽然我们通过200Hz作为判断男女,但是个人认为这也不是很合理。比如有些男生的声音就很像女生的声音,那么我们测试的时候有可能会将男生的声音识别为女生,这样的数据我实际去测试过,因此不是很合理。如果想要获取更加真实的判断,我们可能需要使用神经网络来训练再来识别,可能效果会好很多。