缺少instfreq函数
我运行了一下emd的程序,提示:??? Undefined function or method 'instfreq' for input arguments of type 'double'.
Error in ==> hhspectrum at 79
f(i,:)=instfreq(an(i,:)',tt,l)';
你要的instfreq
function =instfreq(x,freq_sampling,t,L,trace);%INSTFREQ Instantaneous frequency estimation.
% =INSTFREQ(X,T,L,TRACE) computes the instantaneous
% frequency of the analytic signal X at time instant(s) T, using the
% trapezoidal integration rule.
% The result FNORMHAT lies between 0.0 and 0.5.
%
% X : Analytic signal to be analyzed.
% T : Time instants (default : 2:length(X)-1).
% FREQ_SAMPLING : sampling frequency
% L : If L=1, computes the (normalized) instantaneous frequency
% of the signal X defined as angle(X(T+1)*conj(X(T-1)) ;
% if L>1, computes a Maximum Likelihood estimation of the
% instantaneous frequency of the deterministic part of the signal
% blurried in a white gaussian noise.
% L must be an integer (default : 1).
% TRACE : if nonzero, the progression of the algorithm is shown
% (default : 0).
% FNORMHAT : Output (normalized) instantaneous frequency.
% FREQ_INST: Output actual instantaneous frequency(Hz)(non normalized)
% T : Time instants.
%
% ------------------- CONFIDENTIAL PROGRAM --------------------
% This program can not be used without the authorization of its
% author(s). For any comment or bug report, please send e-mail to
% f.auger@ieee.org
if (nargin == 0), %与原程序有所修改
error('At least two parameter required');
end;
if (nargin == 1), %与原程序有所修改
error('At least two parameter required');
end;
= size(x);
if (xcol~=1),
if(xrow==1)
x=x';
x=conj(x); %原程序有错
else
error('X must have only one column');
end
end
= size(x); %与原程序有所修改
if (nargin == 2), %与原程序有所修改
t=2:xrow-1; L=1; trace=0.0;
elseif (nargin == 3),
L = 1; trace=0.0;
elseif (nargin == 4),
trace=0.0;
end;
if L<1,
error('L must be >=1');
end
= size(t);
if (trow~=1),
error('T must have only one row');
end;
if (L==1),
if any(t==1)|any(t==xrow),
error('T can not be equal to 1 neither to the last element of X');
else
fnormhat=0.5*(angle(-x(t+1).*conj(x(t-1)))+pi)/(2*pi);
freq_inst=fnormhat*freq_sampling; %增加的部分程序
end;
else
H=kaytth(L);
if any(t<=L)|any(t+L>xrow),
error('The relation L<T<=length(X)-L must be satisfied');
else
for icol=1:tcol,
if trace, disprog(icol,tcol,10); end;
ti = t(icol); tau = 0:L;
R = x(ti+tau).*conj(x(ti-tau));
M4 = R(2:L+1).*conj(R(1:L));
diff=2e-6;
tetapred = H * (unwrap(angle(-M4))+pi);
while tetapred<0.0 , tetapred=tetapred+(2*pi); end;
while tetapred>2*pi, tetapred=tetapred-(2*pi); end;
iter = 1;
while (diff > 1e-6)&(iter<50),
M4bis=M4 .* exp(-j*2.0*tetapred);
teta = H * (unwrap(angle(M4bis))+2.0*tetapred);
while teta<0.0 , teta=(2*pi)+teta; end;
while teta>2*pi, teta=teta-(2*pi); end;
diff=abs(teta-tetapred);
tetapred=teta; iter=iter+1;
end;
fnormhat(icol,1)=teta/(2*pi);
end;
end;
end; 你只要把instfreq.m这个文件拷到EMD.m所在的文件夹,问题就解决了。 本帖最后由 wdhd 于 2016-9-21 11:29 编辑
原帖由 gaojunwxws 于 2008-12-17 21:50 发表
function =instfreq(x,freq_sampling,t,L,trace);
%INSTFREQ Instantaneous frequency estimation.
% =INSTFREQ(X,T,L,TRACE) computes the instantaneous
% frequency of th ...
你的这个函数怎么用呢?和原来的那个程序有点不一样。
回复 沙发 gaojunwxws 的帖子
程序运行时候报错了,??? Error using ==> instfreqT can not be equal to 1 neither to the last element of X
Error in ==> hhspectrum at 45
f(i,:)=instfreq(an(i,:)',tt,l)';
Error in ==> Untitled at 18
=hhspectrum(imf);麻烦看看是怎末一回事呢?
回复 楼主 lingyunzhi 的帖子
我的问题跟你的一样,同问:你找到问题所在了吗?我有把别人贴出的程序放到EMD中,但是一样的报错。 回复 aprilcat 的帖子我也同样的错误,怎么回事啊 去下载一个时频工具箱装上就可以了。
页:
[1]