matlab 男女声识别+源码
【摘要】
代码:
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)