中易网

关于小Matlab编程的小波变换

答案:2  悬赏:30  
解决时间 2021-03-07 04:01
这个例子是书上的Morlet小波程序,运行时总是出错。包括
??? Error using ==> CWT_Morlet at 11
At least 1 parameter required!
这个问题是怎么回事?error的用法错在哪里了?还有,这个程序还有哪些错误呢?比如函数定义之类的问题?请各位大侠帮帮我吧。
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=zero(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(i*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;
最佳答案
呵呵,这个程序是告诉你用morlet小波进行连续小波变换时的程序,相当于是matlab中的底层程序,function [WT,Freqbins,Scales]=CWT_Morlet(Sig,WinLen,nLevel);这个是定义了这样的一个函数,其中Sig,WinLen,nLevel这几个变量为输入变量,分别指信号,信号的长度以及分解的层数。WT,Freqbins,Scales这些为输出变量,分别指小波变换的系数,频率以及尺度。就是对信号Sig进行nLevel层小波变换。在实际使用的时候,只要把输入量给定,然后直接调用这个函数[WT,Freqbins,Scales]=CWT_Morlet(Sig,WinLen,nLevel)。就可以得到输出结果。
全部回答
这是一个带参数的函数 根据下面的参数校验可以看出你应该是直接点运行了吧 所以报错了 你至少应该产生一个输入信号,比如一个正弦信号来做输入进行变换 。。。谁给你的程序啊 这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);
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
当兵退伍后国家发生战争需要参战吗 具体是怎
找一首歌歌词好像是如果你真的要离去
无知堕胎后的悔改弥补怎么做
皇室战争在博应用可以找到最新版本的下载链接
龙口市七甲镇七甲中学地址在哪,我要去那里办
关于利物浦大学,诺丁汉大学,西交利物浦,宁
唯物主义好还是唯心主义好,为什么政治课要我
白天做梦和上司吵架有什么寓意
拿刀打人,但伤势不严重,要负刑事责任吗
G4011/镇荣公路(路口)地址在什么地方,想过去
《中国多层次人际网络直销业》是违法的吗??
人为什么会有恐婚症?
建创厨卫吊顶装饰材料店地址在哪,我要去那里
为什么男人一抽烟,我一闻到烟味就头晕!
路由器连接3太电脑,两台正常,一台网络异常
推荐资讯
为什么豌豆荚刀塔传奇卡在选区界面一直进不去
税率等于什么除以收入总额
没有红绿灯的路口被撞死,如何认定责任?
我想通过触摸屏直接改动S7-300里的定时器值,
中国移动通信常州荆川综合市场指定专营店地址
女孩学计算机网络技术以后可以做什么工作
确山服务区这个地址在什么地方,我要处理点事
SE越狱之后cydia闪退,想通过助手删除cydia目
业主拒交物业费时物业会采取哪些措施
天谕解冻之后卖钱还会没收吗
比喻长久的词语
vivox6的手机壳和vivox6d的手机壳一样吗
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?