声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 9707|回复: 19

[小波] 连续小波变换程序及算例-重发

[复制链接]
发表于 2007-4-24 23:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
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 < 4),
     iShow = 1;
elseif (nargin < 3),
     nLevel = 1024;
elseif (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);   
    Morl = pi^(-1/4)*exp(i*2*pi*0.5*t/a).*exp(-t.^2/2/(2*omg0*a)^2);   % 计算当前尺度下的小波函数
    temp = conv(Sig,Morl) / sqrt(a);                                                           % 计算信号与小波函数的卷积  
    WT(m,:) = temp(round(a*WinLen)+1:length(temp)-round(a*WinLen));  
   
end;
close(wait);

WT = WT / WinLen;

[ 本帖最后由 zhangnan3509 于 2007-9-22 16:41 编辑 ]
回复
分享到:

使用道具 举报

 楼主| 发表于 2007-4-24 23:38 | 显示全部楼层
SampFreq = 30;
t=0:1/SampFreq:4;
sig = sin(12*pi*t);
sig(1:end/2) = sig(1:end/2) + sin(6*pi*t(1:end/2));
sig(end/2+1:end) = sig(end/2+1:end) + sin(18*pi*t(end/2+1:end));
WinLen = 10;
[WT, FreqBins, Scales] = CWT_Morlet(sig,WinLen,512);

FreqBins = FreqBins * SampFreq;
clf
set(gcf,'Position',[20 100 300 220]);            
set(gcf,'Color','w');                                            
pcolor(t,FreqBins,abs(WT));
colormap jet;
shading interp;
axis([min(t) max(t) min(FreqBins) max(FreqBins)]);
colorbar;
ylabel('Frequency / Hz');
xlabel('Time / sec');

评分

1

查看全部评分

发表于 2007-4-28 17:05 | 显示全部楼层
有重构的程序吗?
发表于 2007-11-16 17:57 | 显示全部楼层
初次涉入小波应用,看了搂主的小波程序受益匪浅。但程序中有条语句感觉有疑问:
"WT(m,:) = temp(round(a*WinLen)+1:length(temp)-round(a*WinLen));"
该语句从temp数组中提取小波系数赋给WT.但我觉得地从temp数组提取index的范围不准确。
他的长度范围应该是信号的length(Sig);  length(temp)=length(Sig)+round(a*WinLen)-1;但是程序中提取的范围是length(temp)-2*round(a*WinLen)。即:length(Sig)-round(a*WinLen)-1.还往搂主给于解释。
发表于 2007-11-16 18:21 | 显示全部楼层

回复 #4 xinglong-liu 的帖子

楼上搞错了小波的长度。
发表于 2007-11-18 12:08 | 显示全部楼层
谢谢zhong的回复!
的确是我搞错了。
发表于 2007-12-18 11:27 | 显示全部楼层
本帖最后由 wdhd 于 2016-3-17 14:58 编辑
原帖由 pengzk 于 2007-4-24 23:38 发表
SampFreq = 30;
t=0:1/SampFreq:4;
sig = sin(12*pi*t);
sig(1:end/2) = sig(1:end/2) + sin(6*pi*t(1:end/2));
sig(end/2+1:end) = sig(end/2+1:end) + sin(18*pi*t(end/2+1:end));
WinLen = 10;
[WT, F ...

我在引用这个函数时,出现下列错误
??? Attempt to execute SCRIPT cwt_morlet as a function.
Error in ==> E:\学习\论文\MORLET\Untitled4.m
On line 9  ==> [WT, FreqBins, Scales] = CWT_Morlet(sig,WinLen,512);
发表于 2009-9-14 15:44 | 显示全部楼层

回复 沙发 pengzk 的帖子

楼主,出现这样的错误是乍回事?
??? Error using ==> pcolor
Matrix dimenions must agree.

Error in ==> Wavelet_morlet at 11
pcolor(t,FreqBins,abs(WT));
发表于 2010-1-11 15:05 | 显示全部楼层
原帖由 kevin19821 于 2007-12-18 11:27 发表

我在引用这个函数时,出现下列错误
??? Attempt to execute SCRIPT cwt_morlet as a function.
Error in ==> E:\学习\论文\MORLET\Untitled4.m
On line 9&#160;&#160;==> [WT, FreqBins, Scales] = CWT_Morlet(sig,WinLen, ...

将Function改成function
发表于 2011-10-18 22:26 | 显示全部楼层
运行程序没有报错。图片很漂亮的说!
发表于 2012-3-6 23:19 | 显示全部楼层
谢谢楼主详细的解答啊!!
发表于 2012-10-11 14:25 | 显示全部楼层
非常好~~~~
发表于 2013-3-11 18:07 | 显示全部楼层
发表于 2013-5-13 20:55 | 显示全部楼层
发表于 2014-7-14 11:17 | 显示全部楼层
谢谢你的程序,很有用
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-20 15:03 , Processed in 0.060939 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表