matlab 小波的分解与重构

22 篇文章 2 订阅
15 篇文章 8 订阅

小波的分解和重构在很多领域都有运用。

第一: matlab中相关小波函数

   1、 wavedec:  Multilevel 1-D wavelet decomposition    小波分解

                  [C,L] = wavedec(X,N,'wname')    
                  [C,L] = wavedec(X,N,Lo_D,Hi_D)   

  • Lo_D, the decomposition low-pass filter

  • Hi_D, the decomposition high-pass filter

  • X is signal,N is layer,C 是小波系数 ,L是小波.  

 

     2、 detcoef:  Multilevel 1-D wavelet detail  coefficients    小波细节系数,目的是获取上图种的cDx

                  D = detcoef(C,L,N)
                  D = detcoef(C,L)

     3、appcoef :1-D approximation coefficients     小波近似系数, 目的是获取cA

                  A = appcoef(C,L,'wname',N)
                  A = appcoef(C,L,'wname')
                  A = appcoef(C,L,Lo_R,Hi_R)
                  A = appcoef(C,L,Lo_R,Hi_R,N)

   4、 waverec :   Multilevel 1-D wavelet reconstruction  小波重构

                   X = waverec(C,L,Lo_R,Hi_R)
                    X = waverec(C,L,'wname')
                    X = appcoef(C,L,'wname',0)

第二: 案例

           用小波分解重构函数后,用MSE 来进行比较分析 

          eg1:  小波信号分解到a1 ,和b1 然后重构信号。

 

               eg2: 小波分解到第三层重构信号

 eg3: 小波分解到第三层,但是通过第二层的a2,d2,d1,最后重构部分要加上length(ecg)

 eg4: idwt 重构函数:

 完整代码:

clc,clear all;close all;
fs=180;
N=2000;
t=(1:N-1)/fs;
s=1.2*sin(2*pi*t*20)+0.5*cos(2*pi*t*60);%%% 滤掉60Hz的信号
% level=8; wavename='bior2.6';
figure;
subplot(211); plot(t,s); title('原始信号') ;  grid on
[f, spectrum ] = gan_fft(s,fs,N);
subplot(212);plot(f,spectrum); title('原始信号pinpu');   grid on
[C,L]=wavedec(s,2,'db6');
X = waverec(C,L,'db6');

figure;
subplot(211);plot(t,X); title('原始信号分解后又重构的信号') ; grid on
[f, spectrum ] = gan_fft(X,fs,N);
subplot(212);plot(f,spectrum); title('原始信号分解后又重构pinpu');  grid on
%%%% 均方误差
MSE=sum((X-s).^2)/length(s);
function [f, spectrum ] = gan_fft(s,Fs,L)
%GAN_FFT 此处显示有关此函数的摘要
%   此处显示详细说明
y=fft(s);
p2=abs(y/L);
p1=p2(1:L/2+1);
p1(2:end-1)=2*p1(2:end-1);
f = Fs*(0:(L/2))/L;
spectrum=p1;
 
end
 

例子2:

clc,clear all;close all;
fs=180;
N=2000;
t=(1:N-1)/fs;
s=1.2*sin(2*pi*t*20)+0.5*cos(2*pi*t*60);%%% 滤掉60Hz的信号
% level=8; wavename='bior2.6';
figure;
subplot(211); plot(t,s); title('原始信号') ;  grid on
[f, spectrum ] = gan_fft(s,fs,N);
subplot(212);plot(f,spectrum); title('原始信号pinpu');   grid on
[C,L]=wavedec(s,3,'db6');
X = waverec(C,L,'db6');
[A1]=appcoef(C,L,'db6',1);
[A2]=appcoef(C,L,'db6',2);
[A3]=appcoef(C,L,'db6',3);
[D1,D2,D3]=detcoef(C,L,[1 2 3]);
C1=[A3,D3,D2,D1];%%% z注意此处是逗号还是分号
%[length(A3);length(D3);length(D2);length(D1);length(s)]
x2=waverec(C1,L,'db6');
MSE=sum((x2-s).^2)/length(s)

 

  • 27
    点赞
  • 288
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: 小波分解是一种信号处理方法,可以将一个信号分解成多个具有不同尺度和频率的子信号。在matlab中,小波分解可以通过使用wavedec函数来实现。该函数接受要分解的信号以及小波类型和分解层数作为输入参数。分解后,可以使用wrcoef函数根据不同的层级和小波系数重构分解信号。 小波分解在信号处理、图像处理和数据分析等领域得到广泛应用。例如,在音频信号处理中,可以使用小波分解来提取不同频率的声音成分,以便进一步分析和处理。在图像处理中,小波分解可以用于图像压缩和去噪。 需要注意的是,小波分解重构的过程中需要注意小波类型和分解层数的选择。不同的小波类型和分解层数会对分解结果和重构效果产生影响。因此,在实际应用中需根据具体情况进行选择和调整。 ### 回答2: 小波分解重构是数字信号处理领域中广泛应用的一种方法。matlab是一种强大的数学计算软件,可以帮助我们进行小波分解重构的相关计算。在matlab中进行小波分解重构,需要掌握以下几个方面的知识: 1. 小波基函数的选择:matlab提供了多种小波基函数,如Daubechies小波、Haar小波、db2小波等。选择适合当前实际情况的小波基函数非常重要。 2. 分解层数的确定:根据实际需要,可以选择不同的分解层数。一般情况下,分解层数越高,则能够捕捉到的信号细节就越细致,但计算复杂度也会增加。 3. 小波系数的计算:在matlab中,可以使用wavelet函数来进行小波分解,得到小波系数矩阵。小波系数矩阵中的每一行都对应不同的小波基函数,列数则与原始信号长度相同。 4. 重构信号的计算:在matlab中,可以使用waverec函数对小波系数进行重构,得到原始信号的估计值。重构时需要设置小波基函数和分解层数等参数,确保重构结果与原始信号尽可能接近。 总之,matlab小波分解重构是一种非常实用的数字信号处理方法,可以被广泛应用于各种领域,如图像处理、语音信号处理、生物信号分析等。掌握基本的matlab小波分解重构的实现方法和技巧,可以为后续的信号处理工作奠定坚实的基础。 ### 回答3: 小波分解是一种在信号处理、图像处理、音频处理等方面常用的算法,MATLAB作为一款常用的数据分析软件,其在实现小波分解重构方面非常方便。小波分解指的是将一个信号分解成多个小波,通过这些小波来描述该信号的特征,并从小波系数中提取出我们所关注的信息。小波重构则是将分解后的小波再组合,通过这些小波重构出原始的信号。 在MATLAB中,实现小波分解的函数为“wavedec”,需要分别输入信号、小波分解的层数,以及要使用的小波。例如,我们对一个长度为1024的信号进行4层深度的小波分解,并使用db4小波进行分解,可以使用如下代码: [c,l] = wavedec(signal, 4, 'db4'); 其中,波形系数存储在c中,而小波分解系数存储在l中。如果只需要提取某一层小波分解系数,可以使用“detcoef”函数,例如提取第三层小波分解系数: c3 = detcoef(c,l,3); 小波重构可以使用“waverec”函数,需要分别输入小波系数分解系数以及所使用的小波类型。例如,我们将刚才的小波系数分解系数输入“waverec”函数: reconstructed = waverec(c,l,'db4'); MATLAB还提供了一些可视化工具,可以帮助我们更好地理解小波分解重构过程。例如,“wenergy”函数可以绘制出各层小波系数的能量分布情况,“wcodemat”函数可以将小波系数以矩阵形式显示出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值