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

📄 语音信号进行小波分解重构.txt

📁 信号傅立叶变换的幅度图和频谱图的示例 信号傅立叶变换的幅度图和频谱图的示例
💻 TXT
字号:
用MATLAB对语音信号进行小波分解重构

用MATLAB对一语音信号进行小波分解,然后对其各层系数进行处理以达到小波抑制的目的,重构处理后的信号,画出波形分析。


CODE:[Copy to clipboard]%装载原始信号
load sumsin;
s=sumsin;
%==============================
%设置小波名并利用coif3小波进行4层分解
w='coif3';
maxlev=4;
[c,l]=wavedec(s,maxlev,w);
newc=c;
%==============================
%将分解后的第三、四层细节系数值为0
newc=wthcoef('d',c,l,[3,4]);
%==============================
%在原始信号的时间区间[400,600]内将第一层细节系数值为0
%并且将其他系数进行衰减,求出第一层系数起始点和终止点的
%索引值
k=maxlev+1;
first=sum(l(1:k-1))+1;
last=first+l(k-1);
indd1=first:last;
%==============================
%将系数除以3,进行信号衰减
newc(indd1)=c(indd1)/3;
%==============================
%在区间[400,600]上求出第一层系数索引
indd1=(first+400/2):(first+600/2);
%==============================
%将该索引值置为0
newc(indd1)=zeros(size(indd1));
%==============================
%将第二层中相应于原始信号t=500的时间点处的系数置为4
k=maxlev;
first=sum(l(1:k-1))+1;
newc(first+500/2^2)=4;
%==============================
%综合修改后的分解结构
synth=waverec(newc,l,w);
%==============================
%用图示出上述修改结果
subplot(2,2,1);
plot(s);
title('原始信号');
subplot(2,2,2);
plot(c);
title('coif3小波分解后的系数');
subplot(2,2,3);
plot(synth);
title('小波抑制后的信号');
subplot(2,2,4);
plot(newc);
title('修改后的小波分解系数');



 
 
2006-10-10 10:03 #1 
          
 
  
suffer (离线) 
系主任
 
   
UID 97
精华 4 
积分 384
帖子 928
威望 283 点
金钱 5792 ¥
阅读权限 120
注册 2005-6-26 
 用MATLAB实现对一语音信号用不同小波进行分解,提取各层的高低频系数,画出各系数波形,并重构。


CODE:[Copy to clipboard]t=0:1:100*pi;
s=sin(3*t)+sin(0.3t)+sin(0.03t);
subplot(6,2,1);plot(s);
title('原始信号s');
%====================================
%对s进行小波分解:db3   5层
[c,l]=wavedec(s,5,'db3');
%====================================
%提取小波分解的低频系数
a5=appcoef(c,l,'db3',5);
a4=appcoef(c,l,'db3',4);
a3=appcoef(c,l,'db3',3);
a2=appcoef(c,l,'db3',2);
a1=appcoef(c,l,'db3',1);
%====================================
%提取小波分解的各层高频系数
d5=detcoef(c,l,5);
d4=detcoef(c,l,4);
d3=detcoef(c,l,3);
d2=detcoef(c,l,2);
d1=detcoef(c,l,1);        
%====================================
%绘出各系数的图形
subplot(6,2,3);plot(a5);
Ylabel('a5');
subplot(6,2,5);plot(a4);
Ylabel('a4');
subplot(6,2,7);plot(a3);
Ylabel('a3');
subplot(6,2,9);plot(a2);
Ylabel('a2');
subplot(6,2,11);plot(a1);
Ylabel('a1');
subplot(6,2,4);plot(d5);
Ylabel('d5');
subplot(6,2,6);plot(d4);
Ylabel('d4');
subplot(6,2,6);plot(d3);
Ylabel('d3');
subplot(6,2,8);plot(d2);
Ylabel('d2');
%====================================
%重构信号s
s1=waverec(c,l,'db1');
subplot(5,2,9);plot(s1);
Ylabel('s1');
%====================================
%下面用小波‘coif3’重复上述过程
[c,l]=wavedec(s,3,'coif3');
a3=appcoef(c,l,'coif3',3);
d3=detcoef(c,l,3);
d2=detcoef(c,l,2);
d1=detcoef(c,l,1);
subplot(5,2,2);plot(a3);
Ylabel('a3');
subplot(5,2,4);plot(d3);
Ylabel('d3');
subplot(5,2,6);plot(d2);
Ylabel('d2');
subplot(5,2,8);plot(d1);
Ylabel('d1');
s2=waverec(c,l,'coif3');
subplot(5,2,10);plot(s2);
Ylabel('s2');



 
 
2006-10-10 10:04 #2 
          
 
  
suffer (离线) 
系主任
 
   
UID 97
精华 4 
积分 384
帖子 928
威望 283 点
金钱 5792 ¥
阅读权限 120
注册 2005-6-26 
 用MATLAB对一图象分别用不同小波分解,观察高低频部分进行重构,比较重构误差,再进行阈值消噪,比较消噪前后图象。


CODE:[Copy to clipboard]load noiswom; %装载图像信号
whos
[swa,swh,swv,swd] = swt2(X,1,'db1'); %完成图像的单层次小波分解
whos %观察各个系数向量的结构
figure(1);
map = pink(size(map,1)); %显示低频和高频系数
colormap(map)
subplot(2,2,1), image(wcodemat(swa,192));
title('Approximation swa')
subplot(2,2,2), image(wcodemat(swh,192));
title('Horiz. Detail swh')
subplot(2,2,3), image(wcodemat(swv,192));
title('Vertical Detail swv')
subplot(2,2,4), image(wcodemat(swd,192));
title('Diag. Detail swd')
A0 = iswt2(swa,swh,swv,swd,'db1'); %通过平稳小波逆变换重构图像
err = max(max(abs(X-A0))) %检查重构误差
nulcfs = zeros(size(swa)); %从第三步中产生的系数swa、swh、swv和swd构造第一层的低频和高频(A1、H1、V1和D1)部分
A1 = iswt2(swa,nulcfs,nulcfs,nulcfs,'db1');
H1 = iswt2(nulcfs,swh,nulcfs,nulcfs,'db1');
V1 = iswt2(nulcfs,nulcfs,swv,nulcfs,'db1');
D1 = iswt2(nulcfs,nulcfs,nulcfs,swd,'db1');
figure(2); %显示第一层的分解结果
colormap(map)
subplot(2,2,1), image(wcodemat(A1,192));
title('Approximation A1')
subplot(2,2,2), image(wcodemat(H1,192));
title('Horiz. Detail H1')
subplot(2,2,3), image(wcodemat(V1,192));
title('Vertical Detail V1')
subplot(2,2,4), image(wcodemat(D1,192));
title('Diag. Detail D1')
[swa,swh,swv,swd] = swt2(X,3,'db1'); %采用db1来完成多尺度二维离散平稳小波分解
clear A0 A1 D1 H1 V1 err nulcfs %观察swa,swh,swv,swd的存储结构
whos
figure(3); %显示多尺度二维平稳小波分解结果
colormap(map)
kp = 0;
for i = 1:3
subplot(3,4,kp+1), image(wcodemat(swa(:,:,i),192));
title(['Approx. cfs level ',num2str(i)])
subplot(3,4,kp+2), image(wcodemat(swh(:,:,i),192));
title(['Horiz. Det. cfs level ',num2str(i)])
subplot(3,4,kp+3), image(wcodemat(swv(:,:,i),192));
title(['Vert. Det. cfs level ',num2str(i)])
subplot(3,4,kp+4), image(wcodemat(swd(:,:,i),192));
title(['Diag. Det. cfs level ',num2str(i)])
kp = kp + 4;
end
mzero = zeros(size(swd)); %从系数中重构第3层的低频信号
A = mzero;
A(:,:,3) = iswt2(swa,mzero,mzero,mzero,'db1');
H = mzero; V = mzero; %重构第1、2、3层的高频信号
D = mzero;
for i = 1:3
swcfs = mzero; swcfs(:,:,i) = swh(:,:,i);
H(:,:,i) = iswt2(mzero,swcfs,mzero,mzero,'db1');
swcfs = mzero; swcfs(:,:,i) = swv(:,:,i);
V(:,:,i) = iswt2(mzero,mzero,swcfs,mzero,'db1');
swcfs = mzero; swcfs(:,:,i) = swd(:,:,i);
D(:,:,i) = iswt2(mzero,mzero,mzero,swcfs,'db1');
end
A(:,:,2) = A(:,:,3) + H(:,:,3) + V(:,:,3) + D(:,:,3); %通过第3层的低频部分和第1、2、3层的高频部分重构第1、2层的低频部分
A(:,:,1) = A(:,:,2) + H(:,:,2) + V(:,:,2) + D(:,:,2);
figure(4); %显示第1、2、3层的低频和高频部分
colormap(map)
kp = 0;
for i = 1:3
subplot(3,4,kp+1), image(wcodemat(A(:,:,i),192));
title(['Approx. level ',num2str(i)])
subplot(3,4,kp+2), image(wcodemat(H(:,:,i),192));
title(['Horiz. Det. level ',num2str(i)])
subplot(3,4,kp+3), image(wcodemat(V(:,:,i),192));
title(['Vert. Det. level ',num2str(i)])
subplot(3,4,kp+4), image(wcodemat(D(:,:,i),192));
title(['Diag. Det. level ',num2str(i)])
kp = kp + 4;
end;
thr = 44.5; %阈值消噪
sorh = 's';
dswh = wthresh(swh,sorh,thr);
dswv = wthresh(swv,sorh,thr);
dswd = wthresh(swd,sorh,thr);
clean = iswt2(swa,dswh,dswv,dswd,'db1');
thr = 44.5;
sorh = 's';
dswh = wthresh(swh,sorh,thr);
dswv = wthresh(swv,sorh,thr);
dswd = wthresh(swd,sorh,thr);
clean = iswt2(swa,dswh,dswv,dswd,'db1');
figure(5); %对比消噪前后的图像
colormap(map)
subplot(1,2,1), image(wcodemat(X,192));
title('Original image')
subplot(1,2,2), image(wcodemat(clean,192));
title('De-noised image')
end



 
 
2006-10-10 10:05 #3 
          
 
  
suffer (离线) 
系主任
 
   
UID 97
精华 4 
积分 384
帖子 928
威望 283 点
金钱 5792 ¥
阅读权限 120
注册 2005-6-26 
 用MATLAB对一语音信号进行小波分解,分别用强阈值,软阈值,默认阈植进行消噪处理。


CODE:[Copy to clipboard]%装载采集的信号leleccum.mat
load leleccum;
%=============================
%将信号中第2000到第3450个采样点赋给s
indx=2000:3450;
s=leleccum(indx);
%=============================
%画出原始信号
subplot(2,2,1);
plot(s);
title('原始信号');
%=============================
%用db1小波对原始信号进行3层分解并提取系数
[c,l]=wavedec(s,3,'db1');
a3=appcoef(c,l,'db1',3);
d3=detcoef(c,l,3);
d2=detcoef(c,l,2);
d1=detcoef(c,l,1);
%=============================
%对信号进行强制性消噪处理并图示结果
dd3=zeros(1,length(d3));
dd2=zeros(1,length(d2));
dd1=zeros(1,length(d1));
c1=[a3 dd3 dd2 dd1];
s1=waverec(c1,l,'db1');
subplot(2,2,2);
plot(s1);grid;
title('强制消噪后的信号');
%=============================
%用默认阈值对信号进行消噪处理并图示结果
  %用ddencmp函数获得信号的默认阈值
[thr,sorh,keepapp]=ddencmp('den','wv',s);
s2=wdencmp('gbl',c,l,'db1',3,thr,sorh,keepapp);
subplot(2,2,3);
plot(s2);grid;
title('默认阈值消噪后的信号');
%=============================
%用给定的软阈值进行消噪处理
softd1=wthresh(d1,'s',1.465);
softd2=wthresh(d2,'s',1.823);
softd3=wthresh(d3,'s',2.768);
c2=[a3 softd3 softd2 softd1];
s3=waverec(c2,l,'db1');
subplot(2,2,4);
plot(s3);grid;
title('给定软阈值消噪后的信号');
 
 

⌨️ 快捷键说明

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