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

📄 234.txt

📁 包括2代小波示意程序
💻 TXT
📖 第 1 页 / 共 3 页
字号:
2代小波示意程序
2维小波变换经典程序
Daubechies小波基的构造
采用多孔trous算法(undecimated wavelet transform)实现小波变换
平移变换平移法(cycle_spinning)消除gibbs效应
提升法97经典程序
消失矩作用的程序
小波插值与小波构造
小波滤波器构造和消噪程序
小波谱分析mallat算法经典程序



2代小波示意程序 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%  此程序用提升法实现第二代小波变换
%%  我用的是非整数阶小波变换
%%  采用时域实现,步骤先列后行
%%  正变换:分裂,预测,更新;
%%  反变换:更新,预测,合并
%%  只做一层(可以多层,而且每层的预测和更新方程不同)
clear;clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%  1.调原始图像矩阵
load wbarb;  %  下载图像
f=X;         %  原始图像
% f=[0 0 0 0 0 0 0 0 ;...
%    0 0 0 1 1 0 0 0 ;...
%    0 0 2 4 4 2 0 0 ;...
%    0 1 4 8 8 4 1 0 ;...
%    0 1 4 8 8 4 1 0 ;...
%    0 0 2 4 4 2 0 0 ;...
%    0 0 0 1 1 0 0 0 ;...
%    0 0 0 0 0 0 0 0 ;];  %  原始图像矩阵
N=length(f);         %  图像维数
T=N/2;               %  子图像维数
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%正变换%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%   1.列变换
%  A.分裂(奇偶分开)
f1=f([1:2:N-1],:);  %  奇数
f2=f([2:2:N],:);    %  偶数
% f1(:,T+1)=f1(:,1);  %  补列
% f2(T+1,:)=f2(1,:);  %  补行
%  B.预测
for i_hc=1:T;
    high_frequency_column(i_hc,:)=f1(i_hc,:)-f2(i_hc,:);
end;
% high_frequency_column(T+1,:)=high_frequency_column(1,:);  %  补行
%  C.更新
for i_lc=1:T;
    low_frequency_column(i_lc,:)=f2(i_lc,:)+1/2*high_frequency_column(i_lc,:);
end;
%  D.合并
f_column([1:1:T],:)=low_frequency_column([1:T],:);
f_column([T+1:1:N],:)=high_frequency_column([1:T],:);
    
    
figure(1)
colormap(map);
image(f);
figure(2)
colormap(map);
image(f_column);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%   2.行变换
%  A.分裂(奇偶分开)
f1=f_column(:,[1:2:N-1]);  %  奇数
f2=f_column(:,[2:2:N]);    %  偶数

% f2(:,T+1)=f2(:,1);    %  补行
%  B.预测
for i_hr=1:T;
    high_frequency_row(:,i_hr)=f1(:,i_hr)-f2(:,i_hr);
end;
% high_frequency_row(:,T+1)=high_frequency_row(:,1);  %  补行
%  C.更新
for i_lr=1:T;
    low_frequency_row(:,i_lr)=f2(:,i_lr)+1/2*high_frequency_row(:,i_lr);
end;
%  D.合并
f_row(:,[1:1:T])=low_frequency_row(:,[1:T]);
f_row(:,[T+1:1:N])=high_frequency_row(:,[1:T]);
    
figure(3)
colormap(map);
image(f_row);
 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%反变换%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%   1.行变换
%   A.提取(低频高频分开)
f1=f_row(:,[T+1:1:N]);  %  奇数
f2=f_row(:,[1:1:T]);    %  偶数

% f2(:,T+1)=f2(:,1);    %  补行
%  B.更新
for i_lr=1:T;
    low_frequency_row(:,i_lr)=f2(:,i_lr)-1/2*f1(:,i_lr);
end;
%  C.预测
for i_hr=1:T;
    high_frequency_row(:,i_hr)=f1(:,i_hr)+low_frequency_row(:,i_hr);
end;
% high_frequency_row(:,T+1)=high_frequency_row(:,1);  %  补行

%  D.合并(奇偶分开合并)
f_row(:,[2:2:N])=low_frequency_row(:,[1:T]);
f_row(:,[1:2:N-1])=high_frequency_row(:,[1:T]);
    
figure(4)
colormap(map);
image(f_row);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%   2.列变换
%  A.提取(低频高频分开)
f1=f_row([T+1:1:N],:);  %  奇数
f2=f_row([1:1:T],:);    %  偶数
% f1(:,T+1)=f1(:,1);  %  补列
% f2(T+1,:)=f2(1,:);  %  补行
%  B.更新
for i_lc=1:T;
    low_frequency_column(i_lc,:)=f2(i_lc,:)-1/2*f1(i_lc,:);
end;
%  C.预测
for i_hc=1:T;
    high_frequency_column(i_hc,:)=f1(i_hc,:)+low_frequency_column(i_hc,:);
end;
% high_frequency_column(T+1,:)=high_frequency_column(1,:);  %  补行
 
%  D.合并(奇偶分开合并)
f_column([2:2:N],:)=low_frequency_column([1:T],:);
f_column([1:2:N-1],:)=high_frequency_column([1:T],:);
    
    
figure(5)
colormap(map);
image(f_column); 
 


2维小波变换经典程序 
 
%  FWT_DB.M;
%  此示意程序用DWT实现二维小波变换
%  编程时间2004-4-10,编程人沙威
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;clc;
T=256;       %  图像维数
SUB_T=T/2;   %  子图维数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  1.调原始图像矩阵
load wbarb;  %  下载图像
f=X;         %  原始图像
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  2.进行二维小波分解
l=wfilters('db10','l');    %  db10(消失矩为10)低通分解滤波器冲击响应(长度为20)
L=T-length(l);
l_zeros=[l,zeros(1,L)];    %  矩阵行数与输入图像一致,为2的整数幂
h=wfilters('db10','h');    %  db10(消失矩为10)高通分解滤波器冲击响应(长度为20)
h_zeros=[h,zeros(1,L)];    %  矩阵行数与输入图像一致,为2的整数幂
for i=1:T;   %  列变换
    row(1:SUB_T,i)=dyaddown( ifft( fft(l_zeros).*fft(f(:,i)') ) ).';    %  圆周卷积<->FFT
    row(SUB_T+1:T,i)=dyaddown( ifft( fft(h_zeros).*fft(f(:,i)') ) ).';  %  圆周卷积<->FFT
end;
for j=1:T;   %  行变换
    line(j,1:SUB_T)=dyaddown( ifft( fft(l_zeros).*fft(row(j,:)) ) );    %  圆周卷积<->FFT
    line(j,SUB_T+1:T)=dyaddown( ifft( fft(h_zeros).*fft(row(j,:)) ) );  %  圆周卷积<->FFT
end;
decompose_pic=line;  %  分解矩阵
%  图像分为四块
lt_pic=decompose_pic(1:SUB_T,1:SUB_T);      %  在矩阵左上方为低频分量--fi(x)*fi(y)
rt_pic=decompose_pic(1:SUB_T,SUB_T+1:T);    %  矩阵右上为--fi(x)*psi(y)
lb_pic=decompose_pic(SUB_T+1:T,1:SUB_T);    %  矩阵左下为--psi(x)*fi(y)
rb_pic=decompose_pic(SUB_T+1:T,SUB_T+1:T);  %  右下方为高频分量--psi(x)*psi(y)
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  3.分解结果显示
figure(1);
colormap(map);
subplot(2,1,1);
image(f);  %  原始图像   
title('original pic');
subplot(2,1,2);
image(abs(decompose_pic));  %  分解后图像
title('decomposed pic'); 
figure(2);
colormap(map);
subplot(2,2,1);
image(abs(lt_pic));  %  左上方为低频分量--fi(x)*fi(y)
title('\Phi(x)*\Phi(y)');
subplot(2,2,2);
image(abs(rt_pic));  %  矩阵右上为--fi(x)*psi(y)
title('\Phi(x)*\Psi(y)');
subplot(2,2,3);
image(abs(lb_pic));  %  矩阵左下为--psi(x)*fi(y)
title('\Psi(x)*\Phi(y)');
subplot(2,2,4);
image(abs(rb_pic));  %  右下方为高频分量--psi(x)*psi(y)
title('\Psi(x)*\Psi(y)');
 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  5.重构源图像及结果显示
% construct_pic=decompose_matrix'*decompose_pic*decompose_matrix;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
l_re=l_zeros(end:-1:1);   %  重构低通滤波
l_r=circshift(l_re',1)';  %  位置调整
h_re=h_zeros(end:-1:1);   %  重构高通滤波
h_r=circshift(h_re',1)';  %  位置调整
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
top_pic=[lt_pic,rt_pic];  %  图像上半部分
t=0;
for i=1:T;  %  行插值低频
  
    if (mod(i,2)==0)
        topll(i,:)=top_pic(t,:); %  偶数行保持
    else
        t=t+1;
        topll(i,:)=zeros(1,T);   %  奇数行为零
    end
end;
for i=1:T;  %  列变换
    topcl_re(:,i)=ifft( fft(l_r).*fft(topll(:,i)') )';  %  圆周卷积<->FFT
end;
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
bottom_pic=[lb_pic,rb_pic];  %  图像下半部分
t=0;
for i=1:T;  %  行插值高频
    if (mod(i,2)==0)
        bottomlh(i,:)=bottom_pic(t,:);  %  偶数行保持
    else
        bottomlh(i,:)=zeros(1,T);       %  奇数行为零
        t=t+1;
    end
end;
for i=1:T; %  列变换
    bottomch_re(:,i)=ifft( fft(h_r).*fft(bottomlh(:,i)') )';  %  圆周卷积<->FFT
end;
 
construct1=bottomch_re+topcl_re;  %  列变换重构完毕
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
left_pic=construct1(:,1:SUB_T);   %  图像左半部分
t=0;
for i=1:T;  %  列插值低频
  
    if (mod(i,2)==0)
        leftll(:,i)=left_pic(:,t); %  偶数列保持
    else
        t=t+1;
        leftll(:,i)=zeros(T,1);    %  奇数列为零
    end
end;
for i=1:T;  %  行变换
    leftcl_re(i,:)=ifft( fft(l_r).*fft(leftll(i,:)) );  %  圆周卷积<->FFT
end;
 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
right_pic=construct1(:,SUB_T+1:T);  %  图像右半部分

t=0;
for i=1:T;  %  列插值高频
    if (mod(i,2)==0)
        rightlh(:,i)=right_pic(:,t);  %  偶数列保持
    else
        rightlh(:,i)=zeros(T,1);      %  奇数列为零
        t=t+1;
    end
end;
for i=1:T; %  行变换
    rightch_re(i,:)=ifft( fft(h_r).*fft(rightlh(i,:)) );  %  圆周卷积<->FFT
end;
 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
construct_pic=rightch_re+leftcl_re;  %  重建全部图像
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  结果显示
figure(3);
colormap(map);
subplot(2,1,1);
image(f);  %  源图像显示
title('original pic');

subplot(2,1,2);
image(abs(construct_pic));   %  重构源图像显示
title('reconstructed pic');
error=abs(construct_pic-f);  %  重构图形与原始图像误值
figure(4);
mesh(error);  %  误差三维图像
title('absolute error display');  



Daubechies小波基的构造 
 
%  此程序实现构造小波基
%  periodic_wavelet.m
function ss=periodic_wavelet;
clear;clc;
% global MOMENT;  %  消失矩阶数
% global LEFT_SCALET;  %  尺度函数左支撑区间
% global RIGHT_SCALET;  %  尺度函数右支撑区间
% global LEFT_BASIS;  %  小波基函数左支撑区间
% global RIGHT_BASIS;  %  小波基函数右支撑区间
% global MIN_STEP;  %  最小离散步长
% global LEVEL;  %  计算需要的层数(离散精度)
% global MAX_LEVEL;  %  周期小波最大计算层数

[s2,h]=scale_integer;
[test,h]=scalet_stretch(s2,h);
wave_base=wavelet(test,h);
ss=periodic_waveletbasis(wave_base);
 

function [s2,h]=scale_integer;
%  本函数实现求解小波尺度函数离散整数点的值
%  sacle_integer.m
MOMENT=10;  %  消失矩阶数
LEFT_SCALET=0;  %  尺度函数左支撑区间
RIGHT_SCALET=2*MOMENT-1;  %  尺度函数右支撑区间
LEFT_BASIS=1-MOMENT;    %  小波基函数左支撑区间
RIGHT_BASIS=MOMENT;     %  小波基函数右支撑区间
MIN_STEP=1/512;          %  最小离散步长
LEVEL=-log2(MIN_STEP);  %  计算需要的层数(离散精度)
MAX_LEVEL=8;  %  周期小波最大计算层数

h=wfilters('db10','r');  %  滤波器系数
h=h*sqrt(2); % FI(T)=SQRT(2)*SUM(H(N)*FI(2T-N)) N=0:2*MOMENT-1;
for i=LEFT_SCALET+1:RIGHT_SCALET-1
    for j=LEFT_SCALET+1:RIGHT_SCALET-1
       k=2*i-j+1;
       if (k>=1&k<=RIGHT_SCALET+1)
       a(i,j)=h(k);  %  矩阵系数矩阵
       else
       a(i,j)=0;
       end
    end
end
[s,w]=eig(a);  %  求特征向量,解的基
s1=s(:,1);
s2=[0;s1/sum(s1);0]; %  根据条件SUM(FI(T))=1,求解;
 
 
%  本函数实现尺度函数经伸缩后的离散值
%  scalet_stretch.m
function [s2,h]=scalet_stretch(s2,h);
MOMENT=10;  %  消失矩阶数
LEFT_SCALET=0;  %  尺度函数左支撑区间
RIGHT_SCALET=2*MOMENT-1;  %  尺度函数右支撑区间
LEFT_BASIS=1-MOMENT;  %  小波基函数左支撑区间
RIGHT_BASIS=MOMENT;  %  小波基函数右支撑区间
MIN_STEP=1/512;  %  最小离散步长
LEVEL=-log2(MIN_STEP);  %  计算需要的层数(离散精度)
MAX_LEVEL=8;  %  周期小波最大计算层数

for j=1:LEVEL  %  需要计算到尺度函数的层数
   t=0;
   for i=1:2:2*length(s2)-3  %  需要计算的离散点取值(0,1,2,3 -> 1/2, 3/2, 5/2)
      t=t+1;
      fi(t)=0;
      for n=LEFT_SCALET:RIGHT_SCALET;  % 低通滤波器冲击响应紧支撑判断
          if ((i/2^(j-1)-n)>=LEFT_SCALET&(i/2^(j-1)-n)<=RIGHT_SCALET) %  小波尺度函数紧支撑判断
            fi(t)=fi(t)+h(n+1)*s2(i-n*2^(j-1)+1);  %  反复应用双尺度方程求解
          end
      end
   end
   clear s
   n1=length(s2);
   n2=length(fi);
   for i=1:length(s2)+length(fi)  %  变换后的矩阵长度
      if (mod(i,2)==1)
      s(i)=s2((i+1)/2);  %  矩阵奇数下标为小波上一层(0,1,2,3)离散值
      else
      s(i)=fi(i/2);  %  矩阵偶数下标为小波下一层(1/2,3/2,5/2)(经过伸缩变换后)的离散值
      end
   end
   s2=s;
end
 
 

%  采用双尺度方程求解小波基函数 PSI(T)
%  wavelet.m
function wave_base=wavelet(test,h);
MOMENT=10;  %  消失矩阶数
LEFT_SCALET=0;  %  尺度函数左支撑区间
RIGHT_SCALET=2*MOMENT-1;  %  尺度函数右支撑区间
LEFT_BASIS=1-MOMENT;  %  小波基函数左支撑区间
RIGHT_BASIS=MOMENT;  %  小波基函数右支撑区间
MIN_STEP=1/512;  %  最小离散步长
LEVEL=-log2(MIN_STEP);  %  计算需要的层数(离散精度)
MAX_LEVEL=8;  %  周期小波最大计算层数

i=0;
for t=LEFT_BASIS:MIN_STEP:RIGHT_BASIS;  %  小波基支撑长度 
    s=0;
    for n=1-RIGHT_SCALET:1-LEFT_SCALET  %  g(n)取值范围
        if((2*t-n)>=LEFT_SCALET&(2*t-n)<=RIGHT_SCALET)  %  尺度函数判断
          s=s+h(1-n+1)*(-1)^(n)*test((2*t-n)/MIN_STEP+1);  %  计算任意精度的小波基函数值  
        end 
    end
    i=i+1;
    wave_base(i)=s;
end
 
采用多孔trous算法(undecimated wavelet transform)实现小波变换 
 
clear;clc;
%%  1.生成信号
f=50;   %  频率
fs=800; %  采样率
T=128;  %  信号长度
n=1:T;
y=sin(2*pi*f*n/fs)+2*exp(-f*n/(4*fs));  %  信号
% y=circshift(y.',3).';
%%  2.正变换
l1=wfilters('db4','l')*sqrt(2)/2;     %  参考低通滤波器
l1_zeros=[l1,zeros(1,T-length(l1))];  %  低通滤波器1
h1=wfilters('db4','h')*sqrt(2)/2;     %  参考高通滤波器
h1_zeros=[h1,zeros(1,T-length(h1))];  %  高通滤波器1
low1=ifft(fft(y).*fft(l1_zeros));     %  低频分量1
high1=ifft(fft(y).*fft(h1_zeros));    %  高频分量1
l2=dyadup(l1);  %  原滤波器插值
l2_zeros=[l2,zeros(1,T-length(l2))];  %  低通滤波器2
h2=dyadup(h1);  %  原滤波器插值
h2_zeros=[h2,zeros(1,T-length(h2))];  %  高通滤波器2
low2=ifft(fft(low1).*fft(l2_zeros));  %  低频分量2
high2=ifft(fft(low1).*fft(h2_zeros)); %  高频分量2
%%  3.反变换
lr2=circshift(l2_zeros(end:-1:1).',1).';  %  重构低通滤波器2
hr2=circshift(h2_zeros(end:-1:1).',1).';  %  重构高通滤波器2
lr1=circshift(l1_zeros(end:-1:1).',1).';  %  重构低通滤波器1
hr1=circshift(h1_zeros(end:-1:1).',1).';  %  重构高通滤波器1
lowr=(ifft(fft(low2).*fft(lr2))+ifft(fft(high2).*fft(hr2)));  %  重构低频分量1(lowr=low1)
r_s=(ifft(fft(lowr).*fft(lr1))+ifft(fft(high1).*fft(hr1)));   %  重构源信号(r_s=y)

%%  4.绘图
figure(1);
plot(y);
title('源信号');
figure(2);
plot(low1,'r');
hold on;
plot(low2,'b');
legend('第一层低频','第二层低频');
figure(3);
plot(high1,'r');
hold on;
plot(high2,'b');
legend('第一层高频','第二层高频');
figure(4);
plot(low1,'r');
hold on;
plot(lowr,'b.');
legend('第一层低频','重构第一层低频');
figure(5);
plot(y,'r');
hold on;
plot(r_s,'b.');
legend('源信号','重构信号');
disp(norm(low1-lowr))
disp(norm(y-r_s)) 



平移变换平移法(cycle_spinning)消除gibbs效应 
 
clear;
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%  1.原始信号
f=50;    % 信号频率
fs=800;  % 采样频率

⌨️ 快捷键说明

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