?? matlab_wavelet.txt
字號(hào):
第 1 樓發(fā)表于 2006-3-31 08:34 資料 個(gè)人空間 短消息
[分享]個(gè)人收集的一些關(guān)于小波分析的matlab程序
都是從網(wǎng)上收集來的,由于時(shí)間比較久,處處都忘記了,如果是誰的原創(chuàng)請(qǐng)和我聯(lián)系,
我在帖子中標(biāo)出來的
內(nèi)容比較多,將會(huì)逐步貼出來
提升法97經(jīng)典程序 (二樓)
2代小波示意程序 (三樓)
二代小波漫談 (四樓)
小波濾波器構(gòu)造和消噪程序(2個(gè)) (五樓)
小波譜分析mallat算法經(jīng)典程序 (六樓)
2維小波變換經(jīng)典程序 (七樓)
基于LeventCodes平臺(tái)的小波去噪程序包 (十一樓)
連續(xù)小波和離散小波分析的應(yīng)用實(shí)例(十二樓)
小波插值與小波構(gòu)造(3個(gè)程序)(十三樓)
采用多孔trous算法(undecimated wavelet transform)實(shí)現(xiàn)小波變換(十四樓)
Daubechies小波基的構(gòu)造(十五樓)
消失矩作用的程序(二十三樓)
平移變換平移法(cycle_spinning)消除gibbs效應(yīng) (二十四樓)
第 2 樓發(fā)表于 2006-3-31 08:36 資料 個(gè)人空間 短消息
提升法97經(jīng)典程序
[Copy to clipboard]CODE:
%% 本程序?qū)崿F(xiàn)任意偶數(shù)大小圖像第二代雙正交97提升小波變換
%% 注1: 采用標(biāo)準(zhǔn)正交方法,對(duì)行列采用不同矩陣(和matlab里不同)
%% 注2: 為了保證正交,所有邊界處理,全部采用循環(huán)處理
%% 注3: 正交性驗(yàn)證,將單位陣帶入函數(shù),輸出仍是單位陣(matlab不具有此性質(zhì))
%% 注4: 此程序是矩陣實(shí)現(xiàn),所以圖像水平分量和垂直分量估計(jì)被交換位置
%% 注5: 此程序?qū)崿F(xiàn)的是類小波(wavelet-like)變換,是介于小波包變換與小波變換之間的變換
%% 注6: 此程序每層變換相對(duì)原圖像矩陣,產(chǎn)生的矩陣都是正交陣,這和小波包一致
%% 注7: 但小波變換每層產(chǎn)生的矩陣,是相對(duì)每個(gè)待分解子塊的正交矩陣,而不是原圖像的正交矩陣
%% 注8: 且小波變換產(chǎn)生的正交矩陣維數(shù),隨分解層數(shù)2分減少
%% 注9: 提升系數(shù)可以在MATLAB7.0以上版本,用liftwave('9.7')獲取,這里直接給出,考慮兼容性
%% 注10:由于MATLAB數(shù)組下標(biāo)從1開始,所以注意奇偶序列的變化
%% 注11:d為對(duì)偶上升,即預(yù)測(cè);p為原上升,即更新 %% 編程人 沙威 安徽大學(xué)
%% 編程時(shí)間 2004年12月18日 %% x輸入圖像,y輸出圖像
%% flag_trans為正變換或反變換標(biāo)志,0執(zhí)行正變換,1執(zhí)行反變換
%% flag_max,是否最大層數(shù)變換標(biāo)志,0執(zhí)行用戶設(shè)定層數(shù),1執(zhí)行最大層數(shù)變換
%% layer,用戶層數(shù)設(shè)置(小于最大層) function y=db97(x,flag_trans,flag_max,layer); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 1.輸入?yún)?shù)檢查 % 矩陣維數(shù)判斷
[sa,sb]=size(x); if (sa~=sb) % 防止非圖像數(shù)據(jù)
errordlg('非圖像數(shù)據(jù)!');
error('非圖像數(shù)據(jù)!');
end; % 變換標(biāo)志判斷
[sa,sb]=size(flag_trans);
if ((sa~=1) | (sb~=1)) % 變換標(biāo)志錯(cuò)誤
errordlg('變換標(biāo)志錯(cuò)誤!');
error('變換標(biāo)志錯(cuò)誤!');
end; if ((flag_trans~=1) & (flag_trans~=0)) % 變換標(biāo)志錯(cuò)誤
errordlg('變換標(biāo)志錯(cuò)誤!');
error('變換標(biāo)志錯(cuò)誤!');
end; % 最大層數(shù)標(biāo)志判斷
[sa,sb]=size(flag_max);
if ((sa~=1) | (sb~=1)) % 最大層數(shù)標(biāo)志錯(cuò)誤
errordlg('最大層數(shù)標(biāo)志錯(cuò)誤!');
error('最大層數(shù)標(biāo)志錯(cuò)誤!');
end; if ((flag_max~=1) & (flag_max~=0)) % 最大層數(shù)標(biāo)志錯(cuò)誤
errordlg('最大層數(shù)標(biāo)志錯(cuò)誤!');
error('最大層數(shù)標(biāo)志錯(cuò)誤!');
end; % 用戶設(shè)置層數(shù)判斷
if (flag_max~=1) [sa,sb]=size(layer);
if ((sa~=1) | (sb~=1)) % 層數(shù)設(shè)置錯(cuò)誤
errordlg('層數(shù)設(shè)置錯(cuò)誤!');
error('層數(shù)設(shè)置錯(cuò)誤!');
end; if (flag_max<0) % 層數(shù)設(shè)置錯(cuò)誤
errordlg('層數(shù)設(shè)置錯(cuò)誤!');
error('層數(shù)設(shè)置錯(cuò)誤!');
end;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2.提升系數(shù)確定
% t1=liftwave('9.7'); % 獲取提升系數(shù)(MATLAB7.0以后) d1=[-1.586100000000000e+000,-1.586134342069360e+000];
p1=[1.079600000000000e+000,-5.298011857188560e-002];
d2=[-8.829110755411875e-001,-8.829110755411875e-001];
p2=[4.435068520511142e-001,1.576123746148364e+000];
d3=-8.698644516247808e-001;
p3=-1.149604398860242e+000;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 3.分解層數(shù)確定
% 采用用戶輸入和自動(dòng)給出最大層數(shù)兩種方法 N=length(x); % 矩陣大小
S=N; % 變量
s=log2(N); % 最大循環(huán)次數(shù)
n1=N/2; % 初始一半矩陣大小
n2=N; % 初始矩陣大小
u=0; % 初始值 % 對(duì)非2的整數(shù)冪大小圖像確定最大分解層數(shù)
for ss=1:s
if (mod(S,2)==0)
u=u+1;
S=S/2;
end;
end;
u=u-1; % 分解最大層數(shù)減1(后面的邊界處理造成) % 最大層數(shù)確定
if (flag_max==0) % 手動(dòng)輸入
T=layer; % 用戶輸入值
else % 自動(dòng)確定最大層數(shù)
T=u; % 分解最大層數(shù)
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 4.最大層數(shù)和圖像大小檢查 if (T>u) % 防止用戶層數(shù)越界
errordlg('已超過最大分解層數(shù)!或者非偶數(shù)大小圖像!');
error('已超過最大分解層數(shù)!或者非偶數(shù)大小圖像!');
end; if (mod(N,2)~=0) % 防止圖像大小錯(cuò)誤
errordlg('非偶數(shù)大小圖像!');
error('非偶數(shù)大小圖像!');
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 5.提升法正變換 if (flag_trans==0)
for time=1:T; % 行正變換
% d;
x1(n1,:)=x(n2,:)+d1(2)*x(n2-1,:)+d1(1)*x(1,:);
x1([1:n1-1],:)=x([2:2:n2-2],:)+d1(2)*x([1:2:n2-3],:)+d1(1)*x([3:2:n2-1],:);
% p;
x(1,:)=x(1,:)+p1(2)*x1(n1,:)+p1(1)*x1(1,:);
x([2:n1],:)=x([3:2:n2-1],:)+p1(2)*x1([1:n1-1],:)+p1(1)*x1([2:n1],:);
x([n1+1:n2],:)=x1([1:n1],:);
% d;
x(n1+1,:)=x(n1+1,:)+d2(2)*x(n1,:)+d2(1)*x(1,:);
x([n1+2:n2],:)=x([n1+2:n2],:)+d2(2)*x([1:n1-1],:)+d2(1)*x([2:n1],:);
% p;
x(n1,:)=x(n1,:)+p2(2)*x(n1+1,:)+p2(1)*x(n1+2,:);
x(n1-1,:)=x(n1-1,:)+p2(2)*x(n2,:)+p2(1)*x(n1+1,:);
x([1:n1-2],:)=x([1:n1-2],:)+p2(2)*x([n1+2:n2-1],:)+p2(1)*x([n1+3:n2],:);
% 歸一
x([1:n1],:)=p3*x([1:n1],:);
x([n1+1:n2],:)=d3*x([n1+1:n2],:); clear x1;
% 列正變換
% d;
x1(:,[1:n1])=x(:,[2:2:n2]);
% p;
x(:,1)=x(:,1)-d1(1)*x1(:,n1)-d1(2)*x1(:,1);
x(:,[2:n1])=x(:,[3:2:n2-1])-d1(1)*x1(:,[1:n1-1])-d1(2)*x1(:,[2:n1]);
x(:,[n1+1:n2])=x1(:,[1:n1]);
% d;
x(:,n2)=x(:,n2)-p1(1)*x(:,n1)-p1(2)*x(:,1);
x(:,[n1+1:n2-1])=x(:,[n1+1:n2-1])-p1(1)*x(:,[1:n1-1])-p1(2)*x(:,[2:n1]);
% p;
x(:,n1,:)=x(:,n1)-d2(1)*x(:,n2)-d2(2)*x(:,n1+1);
x(:,[1:n1-1])=x(:,[1:n1-1])-d2(1)*x(:,[n1+1:n2-1])-d2(2)*x(:,[n1+2:n2]);
% d;
x(:,n1+1)=x(:,n1+1)-p2(1)*x(:,n1-1)-p2(2)*x(:,n1);
x(:,n1+2)=x(:,n1+2)-p2(1)*x(:,n1)-p2(2)*x(:,1);
x(:,[n1+3:n2])=x(:,[n1+3:n2])-p2(1)*x(:,[1:n1-2])-p2(2)*x(:,[2:n1-1]);
% 歸一
x(:,[1:n1])=d3*x(:,[1:n1]);
x(:,[n1+1:n2])=p3*x(:,[n1+1:n2]); clear x1;
n2=n2/2; % 原大小
n1=n2/2; % 一半大小
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 6.提升法反變換 else
n2=N/(2.^(T-1)); % 分解最小子塊維數(shù)
n1=n2/2;
for time=1:T; % 行反變換
% 去歸一
x([1:n1],:)=x([1:n1],:)/p3;
x([n1+1:n2],:)=x([n1+1:n2],:)/d3; % 反p;
x(n1,:)=x(n1,:)-p2(2)*x(n1+1,:)-p2(1)*x(n1+2,:);
x(n1-1,:)=x(n1-1,:)-p2(2)*x(n2,:)-p2(1)*x(n1+1,:);
x([1:n1-2],:)=x([1:n1-2],:)-p2(2)*x([n1+2:n2-1],:)-p2(1)*x([n1+3:n2],:);
% 反d;
x(n1+1,:)=x(n1+1,:)-d2(2)*x(n1,:)-d2(1)*x(1,:);
x([n1+2:n2],:)=x([n1+2:n2],:)-d2(2)*x([1:n1-1],:)-d2(1)*x([2:n1],:);
% 反p;
x1(1,:)=x(1,:)-p1(2)*x(n2,:)-p1(1)*x(n1+1,:);
x1([2:n1],:)=x([2:n1],:)-p1(2)*x([n1+1:n2-1],:)-p1(1)*x([n1+2:n2],:);
% 反d;
x(n2,:)=x(n2,:)-d1(2)*x1(n1,:)-d1(1)*x1(1,:);
x([2:2:n2-2],:)=x([n1+1:n2-1],:)-d1(2)*x1([1:n1-1],:)-d1(1)*x1([2:n1],:);
% 偶數(shù)
x([1:2:n2-1],:)=x1([1:n1],:);
clear x1;
% 列反變換
% 歸一
x(:,[1:n1])=x(:,[1:n1])/d3;
x(:,[n1+1:n2])=x(:,[n1+1:n2])/p3; % 反d;
x(:,n1+1)=x(:,n1+1)+p2(1)*x(:,n1-1)+p2(2)*x(:,n1);
x(:,n1+2)=x(:,n1+2)+p2(1)*x(:,n1)+p2(2)*x(:,1);
x(:,[n1+3:n2])=x(:,[n1+3:n2])+p2(1)*x(:,[1:n1-2])+p2(2)*x(:,[2:n1-1]);
% 反p;
x(:,n1,:)=x(:,n1)+d2(1)*x(:,n2)+d2(2)*x(:,n1+1);
x(:,[1:n1-1])=x(:,[1:n1-1])+d2(1)*x(:,[n1+1:n2-1])+d2(2)*x(:,[n1+2:n2]);
% 反d;
x(:,n2)=x(:,n2)+p1(1)*x(:,n1)+p1(2)*x(:,1);
x(:,[n1+1:n2-1])=x(:,[n1+1:n2-1])+p1(1)*x(:,[1:n1-1])+p1(2)*x(:,[2:n1]);
% 反p;
x1(:,1)=x(:,1)+d1(1)*x(:,n2)+d1(2)*x(:,n1+1);
x1(:,[2:n1])=x(:,[2:n1])+d1(1)*x(:,[n1+1:n2-1])+d1(2)*x(:,[n1+2:n2]); % 奇偶
x(:,[2:2:n2])=x(:,[n1+1:n2]);
x(:,[1:2:n2-1])=x1(:,[1:n1]); clear x1;
n2=n2*2; % 原大小
n1=n2/2; % 一半大小 end;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 7.結(jié)果輸出 y=x;
% 傳輸最后結(jié)果 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 8.內(nèi)存清理 clear x;
clear flag_max;
clear layer;
clear flag_trans;
clear N;
clear n1;
clear n2;
clear s;
clear ss;
clear u;
clear d1;
clear d2;
clear d3;
clear p1;
clear p2;
clear p3;
clear sa;
clear sb;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[ 本帖最后由 yejet 于 2006-8-31 20:32 編輯 ]
simon21
新科狀元
精華: 6
積分: 400
帖子: 670
威望: 321 點(diǎn)
振動(dòng)幣: 23552 個(gè)
管理積分: 0 點(diǎn)
人氣指數(shù): 0
閱讀權(quán)限: 80
注冊(cè): 2005-7-24
第 3 樓發(fā)表于 2006-3-31 08:38 資料 個(gè)人空間 短消息
2代小波示意程序
[Copy to clipboard]CODE:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 此程序用提升法實(shí)現(xiàn)第二代小波變換
%% 我用的是非整數(shù)階小波變換
%% 采用時(shí)域?qū)崿F(xiàn),步驟先列后行
%% 正變換:分裂,預(yù)測(cè),更新;
%% 反變換:更新,預(yù)測(cè),合并
%% 只做一層(可以多層,而且每層的預(yù)測(cè)和更新方程不同) clear;clc; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%
% 1.調(diào)原始圖像矩陣 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); % 圖像維數(shù)
T=N/2;
% 子圖像維數(shù) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%正變換%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%% 1.列變換
% A.分裂(奇偶分開) f1=f([1:2:N-1],:); % 奇數(shù)
f2=f([2:2:N],:); % 偶數(shù) % f1(:,T+1)=f1(:,1); % 補(bǔ)列
% f2(T+1,:)=f2(1,:); % 補(bǔ)行 % B.預(yù)測(cè) 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,:); % 補(bǔ)行 % 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]); % 奇數(shù)
f2=f_column(:,[2:2:N]); % 偶數(shù)
% f2(:,T+1)=f2(:,1); % 補(bǔ)行 % B.預(yù)測(cè) 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); % 補(bǔ)行 % 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.提?。ǖ皖l高頻分開) f1=f_row(:,[T+1:1:N]); % 奇數(shù)
f2=f_row(:,[1:1:T]); % 偶數(shù)
% f2(:,T+1)=f2(:,1); % 補(bǔ)行 % B.更新 for i_lr=1:T;
low_frequency_row(:,i_lr)=f2(:,i_lr)-1/2*f1(:,i_lr);
end; % C.預(yù)測(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); % 補(bǔ)行
% 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],:); % 奇數(shù)
f2=f_row([1:1:T],:); % 偶數(shù) % f1(:,T+1)=f1(:,1); % 補(bǔ)列
% f2(T+1,:)=f2(1,:); % 補(bǔ)行 % B.更新 for i_lc=1:T;
low_frequency_column(i_lc,:)=f2(i_lc,:)-1/2*f1(i_lc,:);
end; % C.預(yù)測(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,:); % 補(bǔ)行 % 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);
[ 本帖最后由 yejet 于 2006-8-31 20:32 編輯 ]
simon21
新科狀元
精華: 6
積分: 400
帖子: 670
威望: 321 點(diǎn)
振動(dòng)幣: 23552 個(gè)
管理積分: 0 點(diǎn)
人氣指數(shù): 0
閱讀權(quán)限: 80
注冊(cè): 2005-7-24
第 4 樓發(fā)表于 2006-3-31 08:40 資料 個(gè)人空間 短消息
回復(fù):(simon21)[分享]個(gè)人收集的一些關(guān)于小波分析的...
二代小波漫談
現(xiàn)在我就舉例,對(duì)一個(gè)8點(diǎn)序列,怎樣實(shí)現(xiàn)第二代小波變換。
1. 奇偶分開。
非常簡(jiǎn)單,就是[2,4,6,8]組成一列向量,[1,3,5,7]組成一列向量。
2. 預(yù)測(cè)。
用[2,4,6,8]來預(yù)測(cè)[1,3,5,7]。比如說1,3估計(jì)2; 3,5估計(jì)4; 5,7估計(jì)6; 7,1估計(jì)8。(邊緣處理,我采用循環(huán)方法)。估計(jì)公式可以用別人的,也可以自己做。舉一個(gè)線性的例子:2=1*a+3*b,4=3*a+5*b,...,其他的都一樣。這樣我們就可找到最優(yōu)的a,b,使得(2-(1*a+3*b)).^2+(4-(3*a+5*b)).^2+...最小化。就是最小均方準(zhǔn)則。若正好為零,說明偶可以完全預(yù)測(cè)奇,也就是我們只要存儲(chǔ)偶數(shù)列向量,和a,b就可以了,壓縮也就是實(shí)現(xiàn)了。對(duì)于信號(hào)很長(zhǎng)序列,就等于壓縮了一半。當(dāng)然,我們可以采用更復(fù)雜的立方差值預(yù)測(cè),多項(xiàng)式預(yù)測(cè),或其它的準(zhǔn)則,來使其最小,這樣我們的壓縮也就得到了最優(yōu)。
3. 提升。
我們總希望,均方為零,但可望不可及。于是,提升就需要了。我們經(jīng)過預(yù)測(cè)后,要存儲(chǔ)的是偶數(shù)序列[2,4,6,8],新的奇數(shù)序列[n1,n3,n5,n7]=[2-(1*a+3*b),4-(3*a+5*b),...]和線性變換系數(shù)(a,b)。這里新的奇數(shù)序列就是高頻分量。但偶數(shù)序列是不能完全代表信號(hào)的性質(zhì)的,有所差距。所以我們要對(duì)偶數(shù)序列進(jìn)行修正。即所謂的提升。我們這次用個(gè)簡(jiǎn)單的提升吧。[n2,n4,n6,n8]=[2,4,6,8]+k*[n1,n3,n5,n7]。[n2,n4,n6,n8],就是要分解的低頻分量。那k怎么求呢?因?yàn)橐3謓2,n4,n6,n8和原始信號(hào)[1,2,3,4,5,6,7,8]一樣的性質(zhì)。一般就是均值和高階矩。這里就一個(gè)未知數(shù)k,所以用均值相等,就行了。1/8*(1+2+3+..8)=1/4*(n2+n4+n6+n8)。k很容易就求出來了。我們最終存儲(chǔ)的就是[n1,n3,n5,n7]和[n2,n4,n6,n8]以及a,b,k。
現(xiàn)在,所謂的第二代就完了。再說幾句。
1.反變換,就是3->2->1。
2.二維。先行提升,再列提升。(我置頂?shù)馁N子里有harr二維提升的源代碼)。
3.整數(shù)階。就是加一個(gè)取整。
4.多層或小波包提升,就是在對(duì)序列[n1,n3,n5,n7]或[n2,n4,n6,n8],再做1->2->3。
5.靈活。不一定是a,b,也可能就一個(gè)a,或a,b,c;不一定是一個(gè)k,也可能是k1,k2。但越多計(jì)算量太大。最好是用大師們做好的CDF,5/3,7/9等。
6.最重要的,任何一代小波,總可以通過一次或多次提升實(shí)現(xiàn)。它和一代小波沒有本質(zhì)區(qū)別。
7.優(yōu)勢(shì)。文獻(xiàn)都有,我隨便談?wù)劇r(shí)域?qū)崿F(xiàn),最優(yōu)壓縮,無邊緣效應(yīng),靈活多變,無損壓縮,編程方便,速度快。
文章寫完了,希望對(duì)大家有幫助。最主要的,動(dòng)手編,不要依賴MATLABM,這樣才有所體會(huì)。希望和大家多交流。
simon21
新科狀元
精華: 6
積分: 400
帖子: 670
威望: 321 點(diǎn)
振動(dòng)幣: 23552 個(gè)
管理積分: 0 點(diǎn)
人氣指數(shù): 0
閱讀權(quán)限: 80
注冊(cè): 2005-7-24
第 5 樓發(fā)表于 2006-3-31 08:45 資料 個(gè)人空間 短消息
回復(fù):(simon21)[分享]個(gè)人收集的一些關(guān)于小波分析的...
小波濾波器構(gòu)造和消噪程序(2個(gè))
1.重構(gòu)
% mallet_wavelet.m
% 此函數(shù)用于研究Mallet算法及濾波器設(shè)計(jì)
% 此函數(shù)僅用于消噪
a=pi/8; %角度賦初值
b=pi/8;
%低通重構(gòu)FIR濾波器h0(n)沖激響應(yīng)賦值
h0=cos(a)*cos(b);
h1=sin(a)*cos(b);
h2=-sin(a)*sin(b);
h3=cos(a)*sin(b);
low_construct=[h0,h1,h2,h3];
L_fre=4; %濾波器長(zhǎng)度
low_decompose=low_construct(end:-1:1); %確定h0(-n),低通分解濾波器
for i_high=1:L_fre; %確定h1(n)=(-1)^n,高通重建濾波器
if(mod(i_high,2)==0);
coefficient=-1;
else
coefficient=1;
end
high_construct(1,i_high)=low_decompose(1,i_high)*coefficient;
end
high_decompose=high_construct(end:-1:1); %高通分解濾波器h1(-n)
L_signal=100; %信號(hào)長(zhǎng)度
n=1:L_signal; %信號(hào)賦值
f=10;
t=0.001;
y=10*cos(2*pi*50*n*t).*exp(-20*n*t);
figure(1);
plot(y);
title('原信號(hào)');
check1=sum(high_decompose); %h0(n)性質(zhì)校驗(yàn)
check2=sum(low_decompose);
check3=norm(high_decompose);
check4=norm(low_decompose);
l_fre=conv(y,low_decompose); %卷積
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -