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=sound(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;
%读出带噪语音信号,存为'101.wav wavwrite(y,5500,16,'c101');
%读出处理后语音信号,存为'102.wav' wavwrite(output4,5500,16,'c102'); de>
小波分析在分离信号的不同成分中的应用
1.正弦信号加白噪声
下面使用小波分析一个由正弦信号(正弦信号的周期约为200)加白噪声组成的信号,说 明小波分析如何分离这两种信号。
程序代码如下所示:
load noissin; x=noissin; figure;
subplot(611);
plot(x);
ylabel('x');
%使用 db5对信号进行 5层分解。 [c,l]=wavedec(x,5,'db5'); for i=1:5
%对分解的第 5层到第 1层的低频系数进行重构 a=wrcoef('a',c,l,'db5',6-i); subplot(6,1,i+1); plot(a);
ylabel(['a',num2str(6-i)]); end
figure;
subplot(611) plot(x); ylabel('x'); for i=1:5
%对分解的第 5层到第 1层的高频系数进行重构
d=wrcoef('d',c,l,'db5',6-i); subplot(6,1,i+1); plot(d);
ylabel(['d',num2str(6-i)]); end
小波分解的细节信号是由白噪声分解得到的,而正弦信号可以在图中的近似信号 a5得 到,因为这一层噪声对正弦信号的影响可以忽略了。
2.正弦信号加三角波
下面通过使用小波分析一个由正弦信号(正弦信号的周期为20)加三角波组成的信号,
说明小波分析如何分离这两种信号。 程序代码如下: load trsin; x=trsin;
subplot(711); plot(x); axis tight; ylabel('x');
%使用 db5对信号进行 6层分解。 [c,l]=wavedec(x,6,'db5'); for i=1:6
%对分解的第 6层到第 1层的低频系数进行重构 a=wrcoef('a',c,l,'db5',7-i); subplot(7,1,i+1); plot(a);
axis tight;
ylabel(['a',num2str(7-i)]); end
figure;
subplot(711); plot(x); axis tight;
ylabel('x'); for i=1:6
%对分解的第 5层到第 1层的高频系数进行重构 d=wrcoef('d',c,l,'db5',7-i); subplot(7,1,i+1); plot(d); axis tight;
ylabel(['d',num2str(7-i)]); end
例子 3 应用小波分析来识别某一频率区间上的信号
在本例中,使用小波分析一个由三个不同频率的正弦信号叠加的信号,看是否能将这三
个正弦信号区分开来,结果证明小波分析可以很好地识别某一频率区间的信号。 程序代码如下: load sumsin; x=sumsin;
figure;
subplot(611); plot(x); ylabel('x');
title('原始信号以及各层近似信号')
%使用 db3小波进行 5层分解 [c,l]=wavedec(x,5,'db3'); for i=1:5
%对分解的第 5层到第 1层的低频系数分别进行重构 a=wrcoef('a',c,l,'db3',6-i); subplot(6,1,i+1); plot(a);
ylabel(['a',num2str(6-i)]); end