小波变换原理。
目前创新互联已为上千的企业提供了网站建设、域名、网站空间、网站改版维护、企业网站设计、都江堰网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
CWT的变换过程是把小波ψt和原始信号ft的开始部分进行比较,计算系数为c。该系数表示该部分信号与小波的近似程度。系数c的值越高表示信号与小波越相似,因此系数c可以反映这种波形的相关程度把小波向右移,距离为k,得到的小波函数为ψt-k,然后重复步骤1和2。再把小波向右移,得到小波ψt-2k,重复步骤1和2。按上述步骤一直进行下去,直到信号ft结束扩展小波ψt,例如扩展一倍,得到的小波函数为ψt/2重复步骤1~4。
小波变换其实使用一个小波基取代了傅里叶变换中的三角函数。
(1)coefs=cwt(s,scales,‘wname’)
(2)coefs=cwt(s,scales,‘wname’,‘plot’)
说明:该函数为一维连续小波分析函数,其中coefs为连续小波变换后的返回系数Wf(a,b)矩阵,系数以行方向存储在矩阵中。
[例6-14]对MATLAB中所带有的noissin信号进行连续小波变换,尺度a分别为0.12,0.24,0.48,1.2,2,4,6,8,10,小波函数用db3,请求出连续小波变换后的系数。程序:
load noissin;%装载信号
s=noissin(1:100)
ls=length(s);%计算信号点的个数ls
%对s进行一维连续小波变换,把返回系数存到矩阵w中
w=cwt(s,[12.12,10.24,15.48,1.2,2:2:10],‘db3’,‘plot’)
Xlabel(‘时间’);
Ylabel(‘变换尺度’);
Title(‘对应于尺度a=0.12,0.24…小波变换系数的绝对值’);
执行程序后,返回矩阵为一个9×1000矩阵。在此为节省篇幅,我们不将结果打印出来,读者可自己上机运行该程序观察结果。
图6-41 一维离散小波变换dwt
c = cwt(tnt,1:10,'morl','plot');%Morlet wavelet.
c = cwt(tnt,1:10,'mexh','plot');%Mexican hat wavelet
(1)小波模极大值重构 MATLAB代码_天天向上_新浪博客
function
[signal,swa,swd,ddw,wpeak]=wave_peak(points,level,Lo_D,Hi_D,Lo_R,Hi_R,offset)
%
该函数用于读取ecg信号,找到小波变换模极大序列
warning off;
ecgdata=load('ecg.txt');
%需要分析的信号,自己加
plot(ecgdata(1:points)),grid on,axis
tight,axis([1,points,-50,300]);
signal=ecgdata(1:points)'+offset;
% 信号的小波变换,按级给出概貌和细节的波形
[swa,swd] =
swt(signal,level,Lo_D,Hi_D);
figure;
subplot(level,1,1);
plot(real(signal)); grid on;axis tight;
for i=1:level
subplot(level+1,2,2*(i)+1);
plot(swa(i,:)); axis
tight;grid on;xlabel('time');
ylabel(strcat('a
',num2str(i)));
subplot(level+1,2,2*(i)+2);
plot(swd(i,:)); axis
tight;grid on;
ylabel(strcat('d ',num2str(i)));
end
%求小波变换的模极大值及其位置
ddw=zeros(size(swd));
pddw=ddw;
nddw=ddw;
posw=swd.*(swd0);
pdw=((posw(:,1:points-1)-posw(:,2:points))0);
pddw(:,2:points-1)=((pdw(:,1:points-2)-pdw(:,2:points-1))0);
negw=swd.*(swd0);
ndw=((negw(:,1:points-1)-negw(:,2:points))0);
nddw(:,2:points-1)=((ndw(:,1:points-2)-ndw(:,2:points-1))0);
ddw=pddw|nddw;
ddw(:,1)=1;
ddw(:,points)=1;
wpeak=ddw.*swd;
wpeak(:,1)=wpeak(:,1)+1e-10;
wpeak(:,points)=wpeak(:,points)+1e-10;
%按级给出小波变换模极大的波形
figure;
for i=1:level
subplot(level,1,i);
plot(wpeak(i,:)); axis tight;grid
on;
ylabel(strcat('j= ',num2str(i)));
end
注:运行此程序时一定要将待处理信号添加进去,程序中的红色部分。
追问:
ecgdata=load('ecg.txt');