贵安室内有什么好玩的:一维离散小波MATLAB命令行的实现方法

来源:百度文库 编辑:偶看新闻 时间:2024/04/30 00:51:30

一维离散小波MATLAB命令行的实现方法

小波、小波包、MATLAB 2009-07-19 16:16:44 阅读245 评论5   字号: 订阅

noisbloc信号是MATLAB自带的含高频噪声的信号。


1.装载信号
  在MATLAB命令行中输入
     load noisbloc
    s=noisbloc(1:1024);
    ls=length(s);
    plot(s);


2.完成信号的单尺度一维离散小波分解

   采用db4基本小波分解信号
   在命令窗口中输入
      [cA1,cD1]=dwt(s,'db4');
  这就产生了低频系数cA1和高频系数cD1。
  可以通过whos命令查看cA1和cD1的长度:
  whos
     Name            Size                   Bytes  Class

    cA1              1x515                   4120  double array
    cD1              1x515                   4120  double array
    ls                  1x1                      8  double array
    noisbloc       1x1024                8192  double array
    s                  1x1024                8192  double array

Grand total is 3079 elements using 24632 bytes


3.从系数中重构低频部分和高频部分
   从第二步产生的系数cA1和cD1构造第一层的低频和高频(A1和D1)系数;
       A1=upcoef('a',cA1,'db4',1,ls);
      D1=upcoef('a',cD1,'db4',1,ls);
或用下面两个函数:
     A1=idwt(cA1,[],'db4',ls);
     D1=idwt(cD1,[],'db4',ls);


4.显示高频和低频部分
  为了显示第一层分解结果,输入
    subplot(211);  plot(A1);  title('低频A1');
    subplot(212);  plot(D1);  title('低频D1');


5.由小波逆变换恢复信号
   使用idwt函数很容易实现,在命令窗口输入
     subplot(211);  plot(s);  title('原始信号');
     subplot(212);  plot(A0);  title('重构信号');


6.多层一维分解

 为了完成一个5层的分解,输入:
   [C,L]=wavedec(s,5,'db4');


7.提取系数的低频和高频部分
  为了从上面的C中提取第3层的低频系数,输入:
     cA3=appcoef(C,L,'db4',3);


8.重构第3层的低频系数
   为了从上面的C中重构第3层的低频系数,输入:
      A3=wrcoef('a',C,L,'db4',3);


9.重构第1、2、3、4、5层的高频信号

   其方法是:
     cA5=appcoef(C,L,'db4',5);
    A5=wrcoef('a',C,L,'db4',5);
    D1=wrcoef('d',C,L,'db4',1);
    D2=wrcoef('d',C,L,'db4',2);
    D3=wrcoef('d',C,L,'db4',3);
    D4=wrcoef('d',C,L,'db4',4);
    D5=wrcoef('d',C,L,'db4',5);
下面显示多尺度一维分解的结果:
    subplot(322); plot(D1); title('低频D1');
   subplot(323); plot(D2); title('低频D2');
   subplot(323); plot(D3); title('低频D3');
   subplot(325); plot(A5); title('低频D4');
   subplot(326); plot(A5); title('低频D5');


 10.重构原始信号并显示
    A0=waverec(C,L,'db4');
   subplot(311);  plot(s);  title('原始信号');
   subplot(312);  plot(A0);  title('重构信号');
   subplot(313);  plot(s-A0);  title('误差信号');
 

用M文件一次运行可得结果
clc
clear all
 load noisbloc
 s=noisbloc(1:1024);
 ls=length(s);
figure
plot(s);

 [cA1,cD1]=dwt(s,'db4');
 whos
 
 A1=upcoef('a',cA1,'db4',1,ls);
D1=upcoef('a',cD1,'db4',1,ls);
A1=idwt(cA1,[],'db4',ls);
D1=idwt(cD1,[],'db4',ls);

figure
subplot(211);  plot(A1);  title('低频A1');
subplot(212);  plot(D1);  title('低频D1');

 [C,L]=wavedec(s,5,'db4');
cA3=appcoef(C,L,'db4',3);
A3=wrcoef('a',C,L,'db4',3);
cA5=appcoef(C,L,'db4',5);
A5=wrcoef('a',C,L,'db4',5);
D1=wrcoef('d',C,L,'db4',1);
D2=wrcoef('d',C,L,'db4',2);
D3=wrcoef('d',C,L,'db4',3);
D4=wrcoef('d',C,L,'db4',4);
D5=wrcoef('d',C,L,'db4',5);

figure
subplot(321); plot(A5); title('低频A5');
subplot(322); plot(D1); title('低频D1');
subplot(323); plot(D2); title('低频D2');
subplot(324); plot(D3); title('低频D3');
subplot(325); plot(A5); title('低频D4');
 subplot(326); plot(A5); title('低频D5');

A0=waverec(C,L,'db4');

figure
subplot(311);  plot(s);  title('原始信号');
subplot(312);  plot(A0);  title('重构信号');
subplot(313);  plot(s-A0);  title('误差信号');