matlab识别性别怎么办,MATLAB说话人性别的简单判断(GUI界面)

function varargout = GUI(varargin)

gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ...

'gui_Singleton', gui_Singleton, ...

'gui_OpeningFcn', @GUI_OpeningFcn, ...

'gui_OutputFcn', @GUI_OutputFcn, ...

'gui_LayoutFcn', [] , ...

'gui_Callback', []);

if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1});

end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

else

gui_mainfcn(gui_State, varargin{:});

end

function GUI_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;

guidata(hObject, handles);

function varargout = GUI_OutputFcn(hObject, eventdata, handles)

varargout{1} = handles.output;

function pushbutton1_Callback(hObject, eventdata, handles)

set(handles.text1,'Visible','off');

[filename pathname]=uigetfile({'*.WAV';'*.*'},'¿ªÊ¼'); %%读取音频文件

str=[pathname filename];

[Y,fs]=audioread(str);

L=length(Y); %原信号点数

N=fix(fs*0.015); %帧长

frameN=fix(L/N); %帧数

Y=Y/max(abs(Y)); %归一化

%%

%%%%%%短时能量%%%%%%%%

En=zeros(1,frameN);

Mn=zeros(1,frameN);

for i=1:frameN

Yn=Y(((i-1)*N+1):i*N);

En(i)=sum(Yn.*Yn);

end

%%

%%%%%%浊音提取%%%%%%%%

Emax=max(En);

ref=0.08*Emax;

for i=1:frameN

if(En(i)>ref)

Mn(i)=1;

end

end

%%

%%%%%%基音频率%%%%%%%%

for i=1:frameN

if(Mn(i)==1)

Yn=Y(((i-1)*N+1):i*N);

Yn0=Yn;

R=Relation(Yn0,N);

[Rmax1,Rdot1]=max(R(18:160));

f1(i)=fs/(Rdot1+17);

end

end

%%%%%%某帧采样点%%%

for i=140:140

if(Mn(i)==1)

Yn=Y(((i-1)*N+1):i*N);

Yn0=Yn;

R1=Relation(Yn0,N);

end

end

axes(handles.axes1);

plot(Y),xlabel('帧数'),ylabel('幅度'),title('原信号');

axes(handles.axes2);

plot(En),xlabel('帧数'),ylabel('En'),title('短时能量');

axes(handles.axes3);

plot(f1),xlabel('帧数'),ylabel('f'),title('基音频率');

axes(handles.axes4);

plot(R1),xlabel('帧数'),title('自相关');

%%%%男女声判断%%%%

sum1=0;

s=0;

for i=1:frameN

if(Mn(i)==1)

s=s+1;

sum1=sum1+f1(i);

end

end

Final=mean(sum1);

if Final>200

set(handles.text2,'String','判断结果:女声');

else

set(handles.text2,'String','判断结果:男声');

end

function pushbutton2_Callback(hObject, eventdata, handles)

close;

自相关函数另外编写(放在主程序里运行时间长)function Re=Relation(X,N)

for i=0:(N-1)

Re(i+1)=0;

for n=1:(N-i)

Re(i+1)=Re(i+1)+X(n)*X(n+i);

end

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值