人能够很容易的听出说话人的性别,我们能不能让机器也像人一样,听声辨别性别?这个答案是肯定的,特别是随着人工智能算法的发展,识别性能是不断的提升。识别男女声,也变的相对容易了。

人类基音的范围约为70~350Hz左右,由于生理结构的不同,男性与女性的声音呈现出不同的听觉特征,男声的基音频率大都在100—200HZ之间,而女声则在200—350HZ之间;在会话中,同一发音者的基音频率变化的统计结果,如图一所示。女声与男声相比,前者的平均值、标准差都为后者的两倍左右。不同发音者的基音频率分布如图二所示,在对数频率轴上男声,女声分别呈现正态分布,男声的基音频率的平均值和标准差分别为125HZ及其20HZ。女声约为男声的2倍。鉴于男女声存在基音频率的明显差异,基音频率可作为男女声识别的依据。

代码分为几个部分,不同的部分实现不同的功能;
通过录入一段音频;代码名称:luru.m

fs=16000;
fprintf('testing...\n');y=audiorecorder(fs, 16, 1);  % 16000Hz  16bit  单声道
recordblocking(y,5);%录制5秒rbd=get(con_rbd,'value') ;
if (rbd)delete('test_record/*.wav');m=1;%从头开始
endname=strcat('test_record\',...num2str(m),'.wav');
y1 = getaudiodata(y,'int16');
audiowrite(name,y1,fs);  %生成音频文件 1.wav
cut(name);
result = PitchDetect(name);
disp(result);
m=m+1;
set(con_text,'string',result);

剪掉静音时间段,代码名称:jiandiao.m

function y1=cut(s_address)y=audioread(s_address);
h=hamming(320);% 计算短时平均能量SAE(short average energe)
%信号的平方在与窗函数相卷
% E(n)=[x(m)]^2*h(n-m),m从负无穷到正无穷求和,h(n-m)为汉明窗
e=conv(y.*y,h);    % y.*2对y中各元素平方;conv(u,v) 求u与v的卷积% 对语音信号进行切割,当SAE小于能量大值的1/100时,认为是起点或终点mx=max(e);
n=length(e);
y(n)=0; % 将原始语音信号矩阵扩充至n维
for i=1:nif e(i)<mx*0.01e(i)=0;else e(i)=1;    % e中非0的数用1来代替end
end
y1=y.*e;
y1(find(y1==0))=[]; % 把0元素剔除
fs=16000;
audiowrite(s_address,y1,fs);

男女声基因频率识别,代码名称:shibie.m

function   pd=PitchDetect(s_address)waveFile = s_address;
% fs = 16000
% y = cut(s_address);
[y, fs] = audioread(waveFile);
time=(1:length(y))/fs;
frameSize=floor(40*fs/1000);     %帧长40ms 一共640个点   floor不大于x的最大整数
startIndex=round(7000);         %起始序号
endIndex=startIndex+frameSize-1; %结束序号
frame = y(startIndex:endIndex);  %取出该帧
frameSize=length(frame);
frame2=frame.*hamming(length(frame));  % 加hamming窗
rwy = rceps(frame2);                   % 求倒谱
ylen=length(rwy);
cepstrum=rwy(1:ylen/2); %基音检测
LF=floor(fs/500);     %设置基音搜索的范围  点数
HF=floor(fs/70);      %设置基音搜索的范围  点数
cn=cepstrum(LF:HF);   %求倒谱
[mx_cep ind]=max(cn); %设置门限,找到峰值位置
if mx_cep > 0.08 & ind >LF  a= fs/(LF+ind);
elsea=0;
end
figure(2);
plot(time, y); title(waveFile); axis tight
ylim=get(gca, 'ylim');
line([time(startIndex), time(startIndex)], ylim, 'color', 'r');
line([time(endIndex), time(endIndex)], ylim, 'color', 'r');
title('语音波形');
figure(3);
subplot(2,1,1);
plot(frame);
title('取出帧的波形');
subplot(2,1,2);
plot(cepstrum);
title('倒谱图');[x,sr]=audioread(s_address);
meen=mean(x);
x= x - meen;
updRate=floor(20*sr/1000);          %每20ms更新
fRate=floor(40*sr/1000);            %40ms一帧
n_samples=length(x);
nFrames=floor(n_samples/updRate)-1; %帧数
k=1;
pitch=zeros(1,nFrames);
f0=zeros(1,nFrames);
LF=floor(sr/500);
HF=floor(sr/70);
m=1;
avgF0=0;
for t=1:nFramesyin=x(k:k+fRate-1);cn1=rceps(yin);cn=cn1(LF:HF);[mx_cep ind]=max(cn);if mx_cep > 0.08 & ind >LFa= sr/(LF+ind);elsea=0;endf0(t)=a;if t>2 & nFrames>3   %中值滤波对基音轨迹图进行平滑z=f0(t-2:t);md=median(z);pitch(t-2)=md;if md > 0avgF0=avgF0+md;m=m+1;endelseif nFrames<=3pitch(t)=a;avgF0=avgF0+a;m=m+1;endendk=k+updRate;
end
figure(4)
subplot(211);
plot((1:length(x))/sr, x);
ylabel('幅度');
xlabel('时间');
subplot(212);
xt=1:nFrames;
xt=20*xt;
plot(xt,pitch)
xlim([0,3]);
axis([xt(1) xt(nFrames) 0 max(pitch)+50]);
ylabel('基音频率/HZ');
xlabel('时间');Mypitch = max(pitch)
if Mypitch>220pd = ['Woman  ', num2str(Mypitch)];
elseif Mypitch<200pd = ['Man  ', num2str(Mypitch)];
else pd = ['Sorry  ', num2str(Mypitch)];
end

一个非常简陋的界面,不得不说MATLAB功能还是比较强大的,代码名称:UI.m

clear;clc;close all;
global n;
n=1;set(0,'defaultfigurecolor','w');
%归一化图形界面
con_car=figure('position',[400 200 680 380],...'numbertitle','off',...'name','Man or Woman');
set(con_car,'defaultuicontrolunits','normalized');rbd=0;
con_rbd=uicontrol('Style','radiobutton',...'Position',[0.15  0.62  0.15  0.05],...'Value',rbd,...   rbd的值为0或1,选中为1,未选中为0'String','重新测试','backgroundcolor',get(gcf,'color'));% 关闭按钮
con_close=uicontrol('style','pushbutton','position',[0.5 0.6 0.2 0.1],...'string','关闭','callback','close');% 测试按钮
con_test=uicontrol('style','pushbutton','position',[0.3 0.6 0.2 0.1],...'string','测试');       % [left bottom width height]% 显示字符串‘请一直说话’和测试结果
con_text=uicontrol('style','text','position',[0.3 0.1 0.4 0.4],...'FontSize',30,'string','请一直说话','backgroundcolor',get(gcf,'color'));% 调用录音测试程序
set(con_test,'callback','test_record');

最后的运行结果:

但在测试过程中,有时也会存在误判,这多半与说话的方式的有关,建议说数字0-9,正确率比较高!

Matlab2013a学习之男女的声音识别相关推荐

  1. 【组队学习】【24期】Datawhale组队学习内容介绍

    第24期 Datawhale 组队学习活动马上就要开始啦! 本次组队学习的内容为: 零基础入门语音识别(食物声音识别) Docker教程 数据挖掘实践(智慧海洋) 集成学习(中) 河北邀请赛(二手车价 ...

  2. 干货 :六招教你用Python分分钟构建好玩的深度学习应用

    [导读]深度学习是近来数据科学中研究和讨论最多的话题.得益于深度学习的发展,数据科学在近期得到了重大突破,深度学习也因此得到了很多关注.据预测,在不久的将来,更多的深度学习应用程序会影响人们的生活.实 ...

  3. python中如何移动图形工作站_六招教你用Python分分钟构建好玩的深度学习应用

    原标题:六招教你用Python分分钟构建好玩的深度学习应用 导读]深度学习是近来数据科学中研究和讨论最多的话题.得益于深度学习的发展,数据科学在近期得到了重大突破,深度学习也因此得到了很多关注.据预测 ...

  4. 六招教你用Python构建好玩的深度学习应用

    摘要: 导读 深度学习是近来数据科学中研究和讨论最多的话题.得益于深度学习的发展,数据科学在近期得到了重大突破,深度学习也因此得到了很多关注.据预测,在不久的将来,更多的深度学习应用程序会影响人们的生 ...

  5. 【读书】男人来自火星 女人来自金星

    第一章 男人来自火星 女人来自金星 请想像男人来自火星,女人来自金星的景象.久远以前的某一天,火星人从天文望远镜中发现金星人,仅只一瞥,就觉得与金星人素未相识,但他们互相仰慕,火星人受邀做了一趟太空之 ...

  6. 【组队学习】【24期】零基础入门语音识别(食物声音识别)

    零基础入门语音识别(食物声音识别) 开源内容: https://github.com/datawhalechina/team-learning-nlp/tree/master/FoodVoiceRec ...

  7. svn差异查看器 编码_男女学习编码的9个差异

    svn差异查看器 编码 Technology jobs are primarily the domain of men. 技术工作主要是男人的领域. Although there has been a ...

  8. 让机器听声音识别男女(机器学习的方法)

    让机器听声音识别男女(机器学习的方法) 浏览更多内容,可访问:http://www.growai.cn 写在前面 欢迎您关注作者知乎:ML与DL成长之路 推荐关注公众号:AI成长社,ML与DL的成长圣 ...

  9. 天池学习赛 -【零基础入门语音识别-食物声音识别】Task1 食物声音识别-Baseline【代码详细手写解释】

    文章目录 一.Task1 食物声音识别-Baseline 二.对应解析 三.参考链接 一.Task1 食物声音识别-Baseline 天池对应代码链接 二.对应解析 三.参考链接 tqdm的解释 深度 ...

最新文章

  1. JButton 圆角_ProE、Creo在玩具轿车设计中的一个案例应用解析|轿车|玩具|圆角
  2. ECSHOP在商品详细页面上获取该商品的顶级分类id和名称
  3. Ubuntu14.04 + Matlab2014a + caffe + cuda + cudnn环境搭建
  4. 如何成为云原生时代的卓越架构师?
  5. 大数据世界要熟悉的5门语言
  6. Django 博客教程(三):创建应用和编写数据库模型
  7. python random库下载_Python---random库(随机数)
  8. 中软python编码规范考试试题_这些常见的python学习问题,你中枪了吗?
  9. Android Bitmap(位图)详解
  10. 结对项目——数独扩展
  11. java深度解析mp3文件
  12. OpenCV-Python教程(10、直方图均衡化)
  13. strcpy会覆盖原来的吗_你真的会拍合影照吗?原来高大上的合影照这样拍
  14. Linux 中文件压缩方法与tar打包详解
  15. wps页眉添加下划线
  16. Nodejs 中的非阻塞I/O、异步和事件驱动
  17. 三次握手和四次挥手知识总结(超详细)
  18. 微信小程序新手留言板
  19. 罗杨美慧 20190912-2 命令行
  20. 加拿大计算机cs专业,加拿大CS专业全面详解

热门文章

  1. 为你的 Linux 桌面设置一张实时的地球照片
  2. 升级Windows10,安装程序无法正常启动无法初始化工作目录
  3. b460和z490有什么区别?Z490主板和B460主板对比性能差距
  4. 论文阅读笔记:Multi-Turn Response Selection for Chatbots with Deep Attention Matching Network
  5. html5 canvas纯js开发战棋类rpg游戏
  6. VMware Ubuntu20.04设置共享文件夹
  7. QGIS之二拓扑检查
  8. canvas-图片的渲染
  9. ubuntu卸载旧的NVIDIA驱动,安装新驱动,并安装Nvidia-docker2
  10. Python:实现aliquot sum等分求和算法(附完整源码)