|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
%此程序实现构造小波基
%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 |
评分
-
1
查看全部评分
-
|