matlab 男女声识别+源码

举报
川川菜鸟 发表于 2021/10/28 22:53:13 2021/10/28
【摘要】 代码: file='lixiyang.wav' %file='girl1.mp3' [x,fs]=audioread(file); % 读入声音文件,返回样本数据 y 以及该数据的采样率 Fs。 %...

代码:



file='lixiyang.wav'
%file='girl1.mp3'
[x,fs]=audioread(file); % 读入声音文件,返回样本数据 y 以及该数据的采样率 Fs。
%======时域图像======  随着时间声音赋值震荡图
data=x(:,1);            %取单声道
n=0:length(x)-1;        %建立一个信号等长的序列
time=n/fs;              %建立时间序列,作为横坐标
figure(1);              %图1:时域波形图
plot(time,data);        %作图
title('音频信号时域图')  %标题
xlabel('时间/s');       %标注横坐标
ylabel('幅值');         %标注纵坐标
grid on;                %打开网格线
 
%=======频域图======
N=length(data);         %取信号矩阵的长度
Y1=fft(data,N);         %N点傅里叶变换
mag=abs(Y1);            %取模
f=n*fs/N;               %频率序列
figure(2);              %图2:频谱图
plot(f(1:fix(N/2)),mag(1:fix(N/2)));
title('音频信号fft频谱图');%标题
xlabel('频率/Hz');       %标注横坐标
ylabel('幅度');          %标注纵坐标
grid on;                 %打开网格线
 
%======基音频率提取======
[~,index]=max(data);          % 返回最大值 最大值索引
timewin=floor(0.015*fs);%向负无穷舍入
xwin=data(index-timewin:index+timewin);
[y,~]=xcov(xwin);%计算xwin的互协方差
ylen=length(y);%求音频长度
halflen=(ylen+1)/2 +30;
yy=y(halflen: ylen);%选中见到末尾一段数据
[~,maxindex] = max(yy);%yy矩阵的最大值传递出去
fmax=fs/(maxindex+30);
disp([file,'基音频率为 ', num2str(fmax), ' Hz'])%显示频率结果
%======通过基音频率判断男女声======
if fmax<200
    disp([file,' 是男声文件']);%频率小于200的为男生
else
    disp([file,' 是女声文件']);%频率大于200为女生
end
 


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

结果:
在这里插入图片描述

文章来源: chuanchuan.blog.csdn.net,作者:川川菜鸟,版权归原作者所有,如需转载,请联系作者。

原文链接:chuanchuan.blog.csdn.net/article/details/121006005

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。