⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shuchubx.m

📁 语音处理平台 可以分析语音能量 第一振峰频率等数据
💻 M
字号:
%小波输出波形
close all;
clc;

PV=[235 180 664 463];



m_gui_win_h=figure('Position',PV,...
		'Resize','off',...
		'Numbertitle','off',...
		'Name','原始波形');
    
set(m_gui_win_h,'MenuBar','none');
uicontrol('Style','frame',...
      'Position',[5 5 180 455],...
      'Callback',[]);
  
count1=length(A);
noise=0.05*randn(1,count1);
for i=1:count1
signal(i)=A(i);
end
for i=1:count1
y(i)=signal(i)+noise(i);
end

%在小波基'db3'下进行一维离散小波变换
[coefs1,coefs2]=dwt(y,'db3'); %[低频 高频]

count2=length(coefs1);
count3=length(coefs2);

energy1=sum((abs(coefs1)).^2);
energy2=sum((abs(coefs2)).^2);
energy3=energy1+energy2;

for i=1:count2
recoefs1(i)=coefs1(i)/energy3;
end
for i=1:count3
recoefs2(i)=coefs2(i)/energy3;
end

%低频系数进行语音信号清浊音的判别
zhen=160;
count4=fix(count2/zhen);
for i=1:count4
n=160*(i-1)+1:160+160*(i-1);
s=A(n);
w=hamming(160);
sw=s.*w;
a=aryule(sw,10);
sw=filter(a,1,sw);
sw=sw/sum(sw);
r=xcorr(sw,'biased');
corr=max(r);
%为清音(unvoice)时,输出为1;为浊音(voice)时,输出为0
if corr>=0.8
output1(i)=0;
elseif corr<=0.1
output1(i)=1;
end
end
for i=1:count4
n=160*(i-1)+1:160+160*(i-1);
if output1(i)==1
switch abs(recoefs1(i))
case abs(recoefs1(i))<=0.002
recoefs1(i)=0;
case abs(recoefs1(i))>0.002 & abs(recoefs1(i))<=0.003
recoefs1(i)=sgn(recoefs1(i))*(0.003*abs(recoefs1(i))-0.000003)/0.002;
otherwise recoefs1(i)=recoefs1(i);
end
elseif output1(i)==0
recoefs1(i)=recoefs1(i);
end
end

%对高频系数进行语音信号清浊音的判别
count5=fix(count3/zhen);
for i=1:count5
n=160*(i-1)+1:160+160*(i-1);
s=A(n);
w=hamming(160);
sw=s.*w;
a=aryule(sw,10);
sw=filter(a,1,sw);
sw=sw/sum(sw);
r=xcorr(sw,'biased');
corr=max(r);
%为清音(unvoice)时,输出为1;为浊音(voice)时,输出为0
if corr>=0.8
output2(i)=0;
elseif corr<=0.1
output2(i)=1;
end
end
for i=1:count5
n=160*(i-1)+1:160+160*(i-1);
if output2(i)==1
switch abs(recoefs2(i))
case abs(recoefs2(i))<=0.002
recoefs2(i)=0;
case abs(recoefs2(i))>0.002 & abs(recoefs2(i))<=0.003
recoefs2(i)=sgn(recoefs2(i))*(0.003*abs(recoefs2(i))-0.000003)/0.002;
otherwise recoefs2(i)=recoefs2(i);
end
elseif output2(i)==0
recoefs2(i)=recoefs2(i);
end
end

%在小波基'db3'下进行一维离散小波反变换 
output3=idwt(recoefs1, recoefs2,'db3');

%对输出信号抽样点值进行归一化处理
maxdata=max(output3);
output4=output3/maxdata;




uicontrol('Style','pushbutton',...
      'Position',[10 340 165 30],...
      'FontSize',10.0,...
      'String','载入语音',...
      'Callback','loadsp');
  
uicontrol('Style','pushbutton',...
      'Position',[10 280 165 30],...
      'FontSize',10.0,...
      'String','原始信号',...
      'Callback','yuanshibx');   
   uicontrol('Style','pushbutton',...
      'Position',[10 220 165 30],...
      'FontSize',10.0,...
      'String','带噪信号',...
      'Callback','daizaobx');
     uicontrol('Style','pushbutton',...
      'Position',[10 160 165 30],...
      'FontSize',10.0,...
      'String','输出信号',...
      'Callback','shuchubx');
       
  uicontrol('Style','pushbutton',...
      'Position',[10 100 165 30],...
      'FontSize',10.0,...
      'String','返回',...
      'Callback','close_xiaobo');
ax1=axes('Position',[235 180 664 463]);
axes('Position',[.32 .7 .65 .25],'Box','on','Visible','on');
plot(A);
title('原始信号波形');
axes('Position',[.32 .35 .65 .25],'Box','on','Visible','on');
plot(y);
title('带噪信号波形');
axes('Position',[.32 .05 .65 .25],'Box','on','Visible','on');
plot(output4);
title('输出信号波形');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -