❶ 三級提升小波變換怎麼用matlab實現

[YC,YS]=wavedec2(Y,2,'db1');
Y為要分解的圖像矩陣,2為分解的層數,『db1'為採用的小波基

返回兩個矩陣YC和YS。Yh2=detcoef2('h',YC,YS,2);這是提取出圖像2層分解後的水平分量,h改v是垂直分量,h該d是對角分量。細節分量用另外一個方法提取。

❷ 求提取小波系數的matlab程序

% 裝載leleccum信號
load leleccum;
s = leleccum(1:3920);
% 用db1小波函數對信號進行三尺度小波分解
[C,L]=wavedec(s,2,'db1');
figure(1);
plot(s);
title('leleccum原始信號');
% 提取尺度1的低頻系數
cA1 = appcoef(C,L,'db1',1); %用小波分解框架[C.L]計算1層低頻系數的近似值,小波基為db1
% 提取尺度2的低頻系數
cA2 = appcoef(C,L,'db1',2);
figure(2);
subplot(2,1,1);
plot(cA1);
title('尺度1的低頻系數');
subplot(2,1,2);
plot(cA2);
title('尺度2的低頻系數');
% 提取尺度1的高頻系數
cD1 = detcoef(C,L,1); %用小波分解框架[C.L]計算1層高頻系數的近似值,小波基為db1
% 提取尺度2的高頻系數
cD2 = detcoef(C,L,2);
figure(3);
subplot(2,1,1);
plot(cD1);
title('尺度1的高頻系數');
subplot(2,1,2);
plot(cD2);
title('尺度2的高頻系數');

❸ 用MATLAB 進行整數小波分解的程序,最好有程序詳細介紹的,謝謝!

舉個例子,希望有所幫助。clc;clearall;closeall;X=rgb2gray(imread('lena.jpg'));x=X;x=double(x);line=250;column=250;J=6;Tu=7;smooth_area_num=20;edge_area_num=40;fori=1:linecoef1(i,:)=cwt(x(i,:),1,'bior4.4');coef2(i,:)=cwt(x(i,:),2,'bior4.4');coef3(i,:)=cwt(x(i,:),J,'bior4.4');endmax=0;max_loc=0;max_num=15;fori=1:linej=1;whilej0&coef3(i,j+1)0)%找到左位置jfork=j+1:column-1ifcoef3(i,k)*coef3(i,j)>=0%找到右位置kform=j:kifabs(coef3(i,m))>maxmax=abs(coef3(i,m));max_loc=m;endendifmax>max_numform(i,max_loc)=1;endj=k;max=0;break;endend%forkifk==column-1j=column-1;endelsej=j+1;end%ifend%whileend%對列作小波變換x=x';fori=1:linecoef1(i,:)=cwt(x(i,:),1,'bior4.4');coef2(i,:)=cwt(x(i,:),2,'bior4.4');coef3(i,:)=cwt(x(i,:),J,'bior4.4');end%正值1,負值0的矩陣temp表示(突變點左位置)max=0;max_loc=0;fori=1:linej=1;whilej0&coef3(i,j+1)0)%找到左位置jfork=j+1:column-1ifcoef3(i,k)*coef3(i,j)>=0%找到右位置kform=j:kifabs(coef3(i,m))>maxmax=abs(coef3(i,m));max_loc=m;endendifmax>max_numform(max_loc,i)=1;endj=k;max=0;break;endend%forkifk==column-1j=column-1;endelsej=j+1;end%ifend%whileendfori=2:line-2forj=2:column-2%鏈長為1ifform(i,j-1)==0&form(i,j+1)==0&form(i-1,j-1)==0&form(i-1,j)==0&form(i-1,j+1)==0&form(i+1,j-1)==0&form(i+1,j)==0&form(i+1,j+1)==0form(i,j)=0;%endifform(i,j)==1&form(i,j+1)==1&sum(sum(form(i-1:i+1,j-1:j+2)))==2form(i,j)=0;form(i,j+1)=0;endifform(i,j)==1&form(i+1,j)==1&sum(sum(form(i-1:i+2,j-1:j+1)))==2form(i,j)=0;form(i+1,j)=0;endifform(i,j)==1&form(i+1,j+1)==1&sum(sum(form(i:i+1,j:j+1)))==2ifsum(sum(form(i-1:i+2,j-1:j+2)))==3&(form(i-1,j+2)==1|form(i+2,j-1)==1)form(i,j)=0;form(i+1,j+1)=0;endifsum(sum(form(i-1:i+2,j-1:j+2)))==4&form(i-1,j+2)==1&form(i+2,j-1)==1form(i,j)=0;form(i+1,j+1)=0;endendifform(i,j+1)==1&form(i+1,j)==1&sum(sum(form(i:i+1,j:j+1)))==2ifsum(sum(form(i-1:i+2,j-1:j+2)))==3&(form(i-1,j-1)==1|form(i+2,j+2)==1)form(i,j+1)=0;form(i+1,j)=0;endifsum(sum(form(i-1:i+2,j-1:j+2)))==4&form(i-1,j-1)==1&form(i+2,j+2)==1form(i,j+1)=0;form(i+1,j)=0;endendendendmax=0;fori=3:line-3forj=3:column-3s=sum(sum(form(i-2:i+2,j-2:j+2)));form=i-2:i+2forn=j-2:j+2ifs>=7&abs(coef3(m,n))<=s*3form(m,n)=0;endendendendendfigure;imshow(form,[]);

❹ matlab小波包程序

t = wpdec(x,3,'db1','shannon');改為抄T = wpdec(x,3,'db1','shannon');

plot(t)改為plot(T);

rcfs = wprcoef(t,[2 1]);改為rcfs = wprcoef(T,[2 1]);

變數名除非用襲於遞歸,不要前後重復使用。後面的t只是部分覆蓋了開頭的t所以會出現問題。
希望對你能有所幫助。

❺ 求一個可運行的5/3或者9/7小波提升演算法的MATLAB源代碼

您好,定義二維5/3小波提升方案的分解函數如下:
int multilevel_decomposition_2D( int * image, int width, int height, int * wavelet_data, int
levels );
定義二維5/3小波提升方案的重構函數如下:
int multilevel_reconstruction_2D ( int * image, int width, int height, int * wavelet_data, int levels );
類似地,對於9/7小波,我們用C++語言分別實現了二維的多層9/7小波提升方案的分解和重構函數如下:
void WaveletForward2D(int *data, int height, int width, int level); void WaveletInvert2D(int *data, int height, int width, int level);
值得注意的是,DSP平台上實現的5/3、9/7小波提升演算法的輸入和輸出都是整型,這十分有利於直接對圖像進行變換。另外,9/7小波提升演算法中將對每次乘積的結果通過floor函數進行取整,從而實現了整型到整型的無失真變換。DSP上只實現了CDF97小波。
在CCS 2 ('C6000)編譯環境下編程,程序編譯優化後,載入到DSP工作平台上。由於本演算法使用的存儲空間較多,程序中大量使用了堆空間,默認的存儲分配方式無法滿足要求,所以重新編寫cmd文件分配堆棧空間大小如下:
-stack 0xf00 -heap 0x20000

❻ 怎樣在matlab中自己編寫一個小波的程序

怎樣在matlab中自己編寫一個小波的程序
a1.a2,d2,d1是ca1,ca2,cd1,cd2這些小波系數的重構。ca1,ca2,cd1,cd2是小波系數,它們的數據點內數隨分解層次的增容大而減少,這就難以與原始信號對比分析,通常會經過重構變為與原始信號個數相同的a1.a2,d2,d1,從物理意義上講,只有a1.a2,d2,d1才是有實際量綱的信號,ca1,ca2,cd1,cd2是沒有量綱和物理意義的。

❼ 關於小波變換的Matlab編程

這是一個帶參數的函數 根據下面的參數校驗可以看出你應該是直接點運行了吧 所以報錯了
你至少應該產生一個輸入信號,比如一個正弦信號來做輸入進行變換
。。。誰給你的程序啊 這bug也太多了 很多低級bug 我只是改的能運行了
function [WT,FreqBins,Scales]=CWT_Morlet(Sig,WinLen,nLevel)
%continuous Wavelet Transform using Morlet function
%Sig:信號
%WinLen:小波函數在尺度參數a=1時的長度(默認為10)
%nLevel:頻率軸劃分區間段(默認為1024)
%
%WT:返回的小波變換計算結果
%FreqBins:返回頻率軸劃分結果(歸一化頻率,最高頻率為0.5)
%Scales:返回與頻率軸劃分值相對應的尺度劃分(頻率0.5對應的尺度為1)
if (nargin==0),
error('At least 1 parameter required!');
end;

if (nargin<3),
nLevel=1024;
end
if (nargin<2),
WinLen=10;
end
Sig=hilbert(real(Sig));%計算信號的解析信號
SigLen=length(Sig);%獲取信號的長度
fmax=0.5;%設置最高分析頻率
fmin=0.005;%設置最低分析頻率
FreqBins=logspace(log10(fmin),log10(0.5),nLevel);%將頻率軸在分析范圍內等
%對數坐標劃分
Scales=fmax*ones(size(FreqBins))./FreqBins;%計算響應的尺度參數
omg0=WinLen/6;
WT=zeros(nLevel,SigLen);%分配計算結果的存儲單元
wait=waitbar(0,'Under calculation,please wait');
for m=1:nLevel,
waitbar(m/nLevel,wait);
a=Scales(m);%提取尺度參數
t=-round(a*WinLen):1:round(a*WinLen);
Mor1=pi^(-1/4)*exp(1i*2*pi*0.5*t/a).*exp(-t.^2/2/(2*omg0*a)^2);
%計算當前尺度下的小波函數
temp=conv(Sig,Mor1)/sqrt(a); %計算信號與小波函數的卷積
WT(m,:)=temp(round(a*WinLen)+1:length(temp)-round(a*WinLen));
end;
close(wait);
WT=WT/WinLen;

%%%%%%運行示例%%%%%%%%%
Fs=100;
t=0:1/Fs:2*pi;
sig=sin(t);
[WT,FreqBins,Scales]=CWT_Morlet(sig);