作者:專案組轉貼自:本站原創點選數:7423
一維小波變換演算法程式目錄
appcoef函式
%採用補零的擴充套件模式(參見dwtmode函式)%裝載一維尺度訊號
load leleccum; s = leleccum(1:3920);ls=length(s);
subplot(2,1,1);plot(s);title('原始訊號');
%使用db1小波在第3層進行分解[c,l] = w**edec(s,3,'db1');
%由小波分解框架[c,l],提取第3層係數近似值ca3 = appcoef(c,l,'db1',3);subplot(2,1,2);plot(ca3);
cwt函式
t = linspace(-1,1,512);
s = 1-abs(t);
c = cwt(s,1:32,'cgau4');
c = cwt(s,[64 32 16:-2:2],'morl');c = cwt(s,[3 18 12.9 7 1.5],'db2');
c = cwt(s,1:64,'sym4','abslvl',[100 400]);
detcoef函式
%採用補零的擴充套件模式(參見dwtmode函式)%裝載一維尺度訊號load leleccum;
s = leleccum(1:3920);
%使用db1在第3層進行分解[c,l] = w**edec(s,3,'db1');subplot(4,1,1);plot(s);title('原始訊號');
%從小波分解結構[c,l]中提取1、2及3層的細節係數[cd1,cd2,cd3] = detcoef(c,l,[1 2 3]);%繪圖命令
subplot(4,1,2);plot(cd3);ylabel('cd3');subplot(4,1,3);plot(cd2);ylabel('cd2');subplot(4,1,4);plot(cd1);ylabel('cd1');
dwt函式
%當前擴充套件模式是補零模式(詳見dwtmode函式)%構造原始一維尺度訊號randn('seed',531316785)
s = 2 + kron(ones(1,8),[1 -1]) + ((1:16).^2)/32 + 0.
2*randn(1,16);%進行單尺度離散haar小波變換[ca1,cd1] = dwt(s,'haar');
subplot(311); plot(s); title('原始訊號');
subplot(323); plot(ca1); title('haar低頻係數');subplot(324); plot(cd1); title('haar高頻係數');
%對於給定的小波,計算兩個相關的分解濾波器,並直接使用該濾波器計算低頻和高頻係數
[lo_d,hi_d] = wfilters('haar','d');[ca1,cd1] = dwt(s,lo_d,hi_d);
%進行單尺度db2離散小波變換並觀察最後係數的邊緣效果[ca2,cd2] = dwt(s,'db2');
subplot(325); plot(ca2); title('db2低頻係數');subplot(326); plot(cd2); title('db2高頻係數');
idwt函式
%當前擴充套件模式是補零%構造原始一維訊號s
randn('seed',531316785)
s = 2 + kron(ones(1,8),[1 -11:16).^2)/32 + 0.
2*randn(1,16);%使用db2進行單尺度dwt[ca1,cd1] = dwt(s,'db2');subplot(221); plot(ca1);title('db2低頻係數');subplot(222); plot(cd1);title('db2高頻係數');%進行單尺度離散小波逆變換ss = idwt(ca1,cd1,'db2');
err = norm(s-ss); %檢查重構subplot(212); plot([s;ss]');title('原始訊號和重構訊號');
xlabel(['誤差的2範數為= ',num2str(err)])
%對於給定小波,計算兩個相關重構濾波器,並直接利用它們進行逆變換[lo_r,hi_r] = wfilters('db2','r');ss = idwt(ca1,cd1,lo_r,hi_r);
iswt函式
%裝載一維訊號
load noisbloc; s = noisbloc;%畫出原始訊號subplot(311);plot(s);
title('原始訊號.');
%使用db1在第3層進行swt分解swc = swt(s,3,'db1');%第2種實現方法.
[swa,swd] = swt(s,3,'db1');
%從平穩小波分解結構swc中,重構sa0 = iswt(swc,'db1');%畫出原始訊號subplot(312);plot(a0);
title('重構訊號1.');%第2種實現方法
a0bis = iswt(swa,swd,'db1');%畫出原始訊號subplot(313);plot(a0bis);
title('重構訊號2.');%檢查重構的效果err = norm(s-a0)
errbis = norm(s-a0bis)
swt函式
%載入一維原始訊號
load noisbloc; s = noisbloc;%畫出原始訊號
subplot(4,2,1);plot(s);title('原始訊號');subplot(4,2,2);plot(s);title('原始訊號');%使用db1進行在第3層swt分解.[swa,swd] = swt(s,3,'db1');
%畫出從1~3層離散小波變換的低頻係數和高頻係數
subplot(4,2,3);plot(swa(3,:));title('第3層低頻係數');subplot(4,2,5);plot(swa(2,:));title('第2層低頻係數');subplot(4,2,7);plot(swa(1,:
));title('第1層低頻係數');subplot(4,2,4);plot(swd(3,:));title('第3層低頻係數');subplot(4,2,6);plot(swd(2,:));title('第2層低頻係數');subplot(4,2,8);plot(swd(1,:
));title('第1層低頻係數');
upcoef函式
%當前擴充套件模式是補零(參見dwtmode函式)%低頻訊號由1~6層係數獲得cfs = [1];essup = 10;figure(1)for i=1:6
rec = upcoef('a',cfs,'db6',i);% essup是重構訊號必須的
%當j等於essup時,rec(j)非常小
ax = subplot(6,1,i),h = plot(rec(1:essup));set(ax,'xlim',[1 325]);essup = essup*2;end
subplot(611)
title(['尺度1到6,由惟一的係數獲得的低頻訊號'])%同樣可以獲得高頻訊號
%高頻訊號可以由惟一係數從尺度1~6獲得cfs = [1];
mi = 12; ma = 30; % db6小波濾波器必須的rec = upcoef('d',cfs,'db6',1);figure(2)
subplot(611), plot(rec(3:12))for i=2:6
rec = upcoef('d',cfs,'db6',i);
subplot(6,1,i), plot(rec(mi*2^(i-2):ma*2^(i-2)))end
subplot(611)
title(['由惟一係數從尺度1到6獲得的高頻訊號'])
upwlev函式
%當前的延拓模式是補零(參見dwtmode函式)%裝載原始一維訊號
load sumsin; s = sumsin;%使用db1執行3層小波分解
[c,l] = w**edec(s,3,'db1');subplot(311); plot(s);title('原始訊號s.');subplot(312); plot(c);title(' 3層小波分解結構')
xlabel(['第3層的低頻係數以及第3、2和1層的高頻係數'])%對3層的小波分解結構進行重構
%因此新的結構[nc,nl]是2層小波分解結構[nc,nl] = upwlev(c,l,'db1');subplot(313); plot(nc);title(' 2層小波分解結構')
xlabel(['第2層的低頻係數及第1和2層的高頻係數'])
w**edec函式
%當前延拓模式是補零%裝載一維原始訊號
load sumsin; s = sumsin;subplot(2,1,1);plot(s);title('原始訊號');%使用db1進行3層分解
[c,l] = w**edec(s,3,'db1');
subplot(2,1,2);plot(c);title('小波分解結構');xlabel('低頻係數和第3,2,1層的高頻係數')
w**erec函式
%當前延拓模式是補零%裝載一維原始
load leleccum; s = leleccum(1:3920); ls = length(s);%使用db5進行尺度為3時的分解[c,l] = w**edec(s,3,'db5');%從小波分解結構[c,l]重構訊號sa0 = w**erec(c,l,'db5');%檢查重構效果.err = norm(s-a0)
subplot(2,1,1);plot(s);title('原始訊號')subplot(2,1,2);plot(a0);title('重構訊號')
wmaxlev函式
%對於一維訊號s = 2^10;w = 'db1';
%計算小波分解的最大尺度,規則時最大尺度至少乙個係數正確l1 = wmaxlev(s,w)%改變小波w = 'db7';
%計算最大分解尺度l2= wmaxlev(s,w)%對於二維訊號s = [2^9 2^7];w = 'db1';
%計算最大分解尺度l3 = wmaxlev(s,w)
%它和下面這個函式一樣l4 = wmaxlev(min(s),w)%改變小波w = 'db7';
%計算最大分解尺度l5 = wmaxlev(s,w)
wrcoef函式
%採用補零的擴充套件模式(參見dwtmode函式)%裝載一維訊號
load sumsin; s = sumsin;
subplot(2,1,1);plot(s);title('原始訊號');%使用sym4進行尺度為5的分解[c,l] = w**edec(s,5,'sym4');
%從小波分解結構[c,l],重構尺度為5的低頻部分a5 = wrcoef('a',c,l,'sym4',5);
subplot(2,1,2);plot(a5);title('重構低頻訊號');
一維離散小波變換
load noisbloc
s= noisbloc(1:1024);ls=length(s);
[ca1,cd1]=dwt(s,'db4');
a1=upcoef('a',ca1,'db4',1,ls);d1=upcoef('d',cd1,'db4',1,ls);
subplot(2,1,1);plot(a1);title('低頻a1')subplot(2,1,2);plot(d1);title('高頻d1')a0=idwt(ca1,cd1,'db4',ls);figure(2)
subplot(2,1,1);plot(s);title('原始訊號')subplot(2,1,2);plot(a0);title('重構訊號')
[c,l]=w**edec(s,5,'db4');ca5=appcoef(c,l,'db4',5);a5=wrcoef('a',c,l,'db4',3);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(3,2,1);plot(a5);title('低頻a5')subplot(3,2,2);plot(d1);title('高頻d1')subplot(3,2,3);plot(d2);title('高頻d2')subplot(3,2,4);plot(d3);title('高頻d3')subplot(3,2,5);plot(d3);title('高頻d4')subplot(3,2,6);plot(d3);title('高頻d5')figure(3)
a0=w**erec(c,l,'db4');
subplot(3,1,1);plot(s);title('原始訊號')subplot(3,1,2);plot(a0);title('重構訊號')subplot(3,1,3);plot(s- a0);title('誤差訊號')err = max(abs(s-a0))
一維連續小波變換%裝載實際訊號load vonkoch
vonkoch=vonkoch(1:510);lv = length(vonkoch);
subplot(311), plot(vonkoch);title('被分析訊號.');set(gca,'xlim',[0 510])
%執行離散5層sym2小波變換
%層數1~5分別對應尺度2, 4, 8, 16 and 32[c,l] = w**edec(vonkoch,5,'sym2');%擴充套件離散小波係數進行畫圖
%層數1~5分別對應尺度2, 4, 8, 16和32cfd = zeros(5,lv);for k = 1:5
d = detcoef(c,l,k);d = d(ones(1,2^k),:);
cfd(k,:) = wkeep(d(:)',lv);end
cfd = cfd(:);i = find(abs(cfd)
cfd(i)=zeros(size(i));cfd = reshape(cfd,5,lv);
%畫出離散係數
subplot(312), colormap(pink(64));
img = image(flipud(wcodemat(cfd,64,'row')));set(get(img,'parent'),'yticklabel',);title('離散變換,係數絕對值.')ylabel('層數')
%執行連續小波sym2變換,尺度從1~32subplot(313)
ccfs = cwt(vonkoch,1:32,'sym2','plot');title('連續變換,係數絕對值.')colormap(pink(64));ylabel('尺度')
實驗二影象變換演算法
影象變換演算法實驗 一.實驗目的 編寫快速傅利葉變換dft 或離散余弦變換dct 的演算法程式,驗證影象變換的平移性。二 實驗方法 1 驗證二維傅利葉變換平移性 先建立乙個二維圖象,然後再對其平移,通過觀察兩者的頻譜圖來觀察平移特性。為方便起見,可選擇特殊情況分析,令u0 v0 n 2,使f u n...
小波變換he傅利葉變換
如果有人問我,如果傅利葉變換沒有學好 深入理解概念 是否能學好小波。答案是否定的。如果有人還問我,如果第一代小波變換沒學好,能否學好第二代小波變換。答案依然是否定的。但若你問我,沒學好傅利葉變換,能否操作 程式設計 小波變換,或是沒學好第一代小波,能否操作二代小波變換,答案是肯定的。一 一 基的概念...
小波變換與傅利葉變換
如果有人問我,如果傅利葉變換沒有學好 深入理解概念 是否能學好小波。答案是否定的。如果有人還問我,如果第一代小波變換沒學好,能否學好第二代小波變換。答案依然是否定的。但若你問我,沒學好傅利葉變換,能否操作 程式設計 小波變換,或是沒學好第一代小波,能否操作二代小波變換,答案是肯定的。一 一 基的概念...