寂寞的部落 发表于 2014-11-12 12:07

求小波DB系列函数离散值程序

由于dB系列的小波函数没有解析表达式希望对需要的同学有一点帮助
本程序求是小波尺度函数的离散值(小波函数类似):
clc
clear all
%% 实现求解小波尺度函数离散整数点的值
MOMENT=2;%消失矩阶数
LEFT_SCALET=0;%尺度函数左支撑区间
RIGHT_SCALET=2*MOMENT-1;%尺度函数右支撑区间
LEFT_BASIS=1-MOMENT;    %小波基函数左支撑区间
RIGHT_BASIS=MOMENT;   %小波基函数右支撑区间
MIN_STEP=1/1024;          %最小离散步长
LEVEL=-log2(MIN_STEP);%计算需要的层数(离散精度)
MAX_LEVEL3=8;%周期小波最大计算层数
h=wfilters('db2','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
=eig(a);%求特征向量,解的基
s1=s(:,1);
s2=; %根据条件SUM(FI(T))=1,求解;
%% 实现尺度函数经伸缩后的离散值
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
s2=s2';

周文静 发表于 2014-12-12 11:01

谢谢啦{:{03}:}
页: [1]
查看完整版本: 求小波DB系列函数离散值程序