instfreq 调用错误问题
各位高手:能否告诉我一下,计算瞬时频率的MATLAB的表达式,我这里有一个,可老出现错误,请指点
fnormhat=0.5*(angle(-x(t+1).*conj(x(t-1)))+pi)/(2*pi)
Error in ==> instfreq at 66
fnormhat=0.5*(angle(-x(t+1).*conj(x(t-1)))+pi)/(2*pi);
望知道的加我的QQ54810912,不甚感激! 原帖由 computer 于 2006-10-10 09:17 发表
各位高手:
能否告诉我一下,计算瞬时频率的MATLAB的表达式,我这里有一个,可老出现错误,请指点
fnormhat=0.5*(angle(-x(t+1).*conj(x(t-1)))+pi)/(2*pi)
Error in ==> instfreq at 66 ...
出错是什么意思,语法没错,表达式也没错
回答
就是上面提示的出错啊, 断点调试,看问题出在那里? 我猜测还是楼主没有把问题写全,从错误信息来看,是在笫66语句中使用了instfreq函数,错误发生在对该函数的调用中。 原帖由 computer 于 2006-10-10 15:30 发表就是上面提示的出错啊,
没有错误,这个是计算瞬时频率的程序(从而计算IMF的hht谱),如果你是从flandrin的网页下载得到的话,应该没有问题,我刚运行过了,无任何问题 我的程序是别人传给我的,程序首先是对调频信号进行EMD分解,没有错误,然后再就是计算Hilbert谱,其中这里调用了hhspectrum这个函数,其中这个函数又调用了instfreq函数,就是在运行这里的时候出现上述提到的错误,望指点! 还有就是能不能告诉我你说的那个flandrin那个网站,我下了看看.不甚感激! 原帖由 computer 于 2006-10-10 17:43 发表
还有就是能不能告诉我你说的那个flandrin那个网站,我下了看看.不甚感激!
google搜索“emd.m”,第一个链接 请注意发帖注意含义明确,以方便管理同时也能帮助你尽快得到需要答案 To风流才子,我找到了那个网站,可上面只有hhspetrum代码啊,没有计算instfreq的代码.我这里有个程序,EMD分解都是正确的,就是到了调用hhspetrum就有上述说的错误,你能否告诉我你的邮箱,我发给你帮我看看,我已经弄了很久了. 原帖由 computer 于 2006-10-11 09:10 发表
To风流才子,我找到了那个网站,可上面只有hhspetrum代码啊,没有计算instfreq的代码.我这里有个程序,EMD分解都是正确的,就是到了调用hhspetrum就有上述说的错误,你能否告诉我你的邮箱,我发给你帮我看看,我已经弄了 ...
网页上面有 Time-Frequency ToolBox,下载以后好好找一下吧。我看好多人都不知道instfreq这个函数在哪里,不会那么难吧?上次看到某人在简历里面介绍自己具有google搜索的能力,看来这的确是一个标准,呵呵 function =instfreq(x,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).
% 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.
% T : Time instants.
%
% Examples :
% x=fmsin(70,0.05,0.35,25); =instfreq(x); plot(t,instf)
% N=64; SNR=10.0; L=4; t=L+1:N-L; x=fmsin(N,0.05,0.35,40);
% sig=sigmerge(x,hilbert(randn(N,1)),SNR);
% plotifl(t,); grid;
% title ('theoretical and estimated instantaneous frequencies');
%
% See alsoKAYTTH, SGRPDLAY.
% F. Auger, March 1994, July 1995.
% Copyright (c) 1996 by CNRS (France).
%
% ------------------- 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 one parameter required');
end;
= size(x);
if (xcol~=1),
error('X must have only one column');
end
if (nargin == 1),
t=2:xrow-1; L=1; trace=0.0;
elseif (nargin == 2),
L = 1; trace=0.0;
elseif (nargin == 3),
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);
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; 大哥大姐们:
救救俺啊,我刚才把院长给我的insfreq代码放到我的程序里去(其实跟我以前的一样)还是跟原来一样的错误,有谁能指点一下啊,我都弄了很久了,不甚感激啊!可以加我的QQ54810912,救一下我啊! 原帖由 computer 于 2006-10-11 15:13 发表
大哥大姐们:
救救俺啊,我刚才把院长给我的insfreq代码放到我的程序里去(其实跟我以前的一样)还是跟原来一样的错误,有谁能指点一下啊,我都弄了很久了,不甚感激啊!可以加我的QQ54810912,救一下我啊!
试试运行以下代码(把相关函数放在同一个目录下),如果有错误的话请检查rp
N = 2000;% # of data samples
T = 1:4:N;
t = 1:N;
p = N/2;% period of the 2 sinusoidal FM's
% sinusoidal FM 1
fmin1 = 1/64;% min frequency
fmax1 = 1.5*1/8;% max frequency
x1 = fmsin(N,fmin1,fmax1,p,N/2,fmax1);
% sinusoidal FM 1
fmin2 = 1/32;% min frequency
fmax2 = 1.5*1/4;% max frequency
x2 = fmsin(N,fmin2,fmax2,p,N/2,fmax2);
% logon
f0 = 1.5*1/16;% center frequency
x3 = amgauss(N,N/2,N/8).*fmconst(N,f0);
a1 = 1;
a2 = 1;
a3 = 1;
x = real(a1*x1+a2*x2+a3*x3);
x = x/max(abs(x));
= emd(x); % <-------- adapted to current emd.m
emd_visu(x,t,imf,1);
hhspectrum(imf);
页:
[1]
2