computer 发表于 2006-10-10 09:17

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,不甚感激!

eight 发表于 2006-10-10 09:59

原帖由 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 ...


出错是什么意思,语法没错,表达式也没错

computer 发表于 2006-10-10 15:30

回答

就是上面提示的出错啊,

jimin 发表于 2006-10-10 16:05

断点调试,看问题出在那里?

songzy41 发表于 2006-10-10 16:14

我猜测还是楼主没有把问题写全,从错误信息来看,是在笫66语句中使用了instfreq函数,错误发生在对该函数的调用中。

eight 发表于 2006-10-10 16:45

原帖由 computer 于 2006-10-10 15:30 发表
就是上面提示的出错啊,


没有错误,这个是计算瞬时频率的程序(从而计算IMF的hht谱),如果你是从flandrin的网页下载得到的话,应该没有问题,我刚运行过了,无任何问题

computer 发表于 2006-10-10 17:38

我的程序是别人传给我的,程序首先是对调频信号进行EMD分解,没有错误,然后再就是计算Hilbert谱,其中这里调用了hhspectrum这个函数,其中这个函数又调用了instfreq函数,就是在运行这里的时候出现上述提到的错误,望指点!

computer 发表于 2006-10-10 17:43

还有就是能不能告诉我你说的那个flandrin那个网站,我下了看看.不甚感激!

eight 发表于 2006-10-10 18:03

原帖由 computer 于 2006-10-10 17:43 发表
还有就是能不能告诉我你说的那个flandrin那个网站,我下了看看.不甚感激!


google搜索“emd.m”,第一个链接

FtpAdmin 发表于 2006-10-10 19:34

请注意发帖注意含义明确,以方便管理同时也能帮助你尽快得到需要答案

computer 发表于 2006-10-11 09:10

To风流才子,我找到了那个网站,可上面只有hhspetrum代码啊,没有计算instfreq的代码.我这里有个程序,EMD分解都是正确的,就是到了调用hhspetrum就有上述说的错误,你能否告诉我你的邮箱,我发给你帮我看看,我已经弄了很久了.

eight 发表于 2006-10-11 10:23

原帖由 computer 于 2006-10-11 09:10 发表
To风流才子,我找到了那个网站,可上面只有hhspetrum代码啊,没有计算instfreq的代码.我这里有个程序,EMD分解都是正确的,就是到了调用hhspetrum就有上述说的错误,你能否告诉我你的邮箱,我发给你帮我看看,我已经弄了 ...


网页上面有 Time-Frequency ToolBox,下载以后好好找一下吧。我看好多人都不知道instfreq这个函数在哪里,不会那么难吧?上次看到某人在简历里面介绍自己具有google搜索的能力,看来这的确是一个标准,呵呵

MVH 发表于 2006-10-11 10:36

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;

computer 发表于 2006-10-11 15:13

大哥大姐们:
    救救俺啊,我刚才把院长给我的insfreq代码放到我的程序里去(其实跟我以前的一样)还是跟原来一样的错误,有谁能指点一下啊,我都弄了很久了,不甚感激啊!可以加我的QQ54810912,救一下我啊!

eight 发表于 2006-10-11 15:28

原帖由 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
查看完整版本: instfreq 调用错误问题