关于小波变换的Matlab编程
这个例子是书上的Morlet小波程序,运行时总是出错。包括???Errorusing==>CWT_Morletat11Atleast1parameterrequired!...
这个例子是书上的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;
没错,我确实直接点运行了!请问怎么产生输入信号,您能帮我添加一下吗? 展开
??? 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;
没错,我确实直接点运行了!请问怎么产生输入信号,您能帮我添加一下吗? 展开
2个回答
展开全部
这是一个带参数的函数 根据下面的参数校验可以看出你应该是直接点运行了吧 所以报错了
你至少应该产生一个输入信号,比如一个正弦信号来做输入进行变换
。。。谁给你的程序啊 这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);
你至少应该产生一个输入信号,比如一个正弦信号来做输入进行变换
。。。谁给你的程序啊 这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);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询