%matlab甄别男女声
%limit——平均最大频率低于limit赫兹判断是男声
%fs——采样频率
clear;
clc;
fs=8000;
[x,fs,bits]=wavread('录音.wav');
sound(x,fs,bits);
f=x(:,1);
OMG=4000*pi;%频带宽度
k=1000;%频带采样点个数
omg=linspace(0,OMG-OMG/k,k);
l=length(f);
piece=500;
r=5; %样本重复次数
t=linspace(0,r*(piece-1)/fs,r*piece);%样本播放时间为音频长度/fs秒
W=1/fs*exp(-1i*kron(omg',t));
F=zeros(k,1);
for i=1:l/piece
sample=f((i-1)*piece+1:i*piece);
F=F+abs(W*repmat(sample,r,1))/l*piece;
end
figure();
plot(omg/2/pi,F);
xlabel('frequency');ylabel('amplitude');
[~,f]=max(F);
justify=f*OMG/k/2/pi; %Hz
limit=300;
if justify<limit %limitHz以下判断是男的
display '男'
else
display '女'
end
评论1