声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3649|回复: 18

[编程技巧] instfreq 调用错误问题

[复制链接]
发表于 2006-10-10 09:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
各位高手:
        能否告诉我一下,计算瞬时频率的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,不甚感激!
回复
分享到:

使用道具 举报

发表于 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 ...



出错是什么意思,语法没错,表达式也没错
 楼主| 发表于 2006-10-10 15:30 | 显示全部楼层

回答

就是上面提示的出错啊,
发表于 2006-10-10 16:05 | 显示全部楼层
断点调试,看问题出在那里?
发表于 2006-10-10 16:14 | 显示全部楼层
我猜测还是楼主没有把问题写全,从错误信息来看,是在笫66语句中使用了instfreq函数,错误发生在对该函数的调用中。
发表于 2006-10-10 16:45 | 显示全部楼层
原帖由 computer 于 2006-10-10 15:30 发表
就是上面提示的出错啊,



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

评分

1

查看全部评分

 楼主| 发表于 2006-10-10 17:38 | 显示全部楼层
我的程序是别人传给我的,程序首先是对调频信号进行EMD分解,没有错误,然后再就是计算Hilbert谱,其中这里调用了hhspectrum这个函数,其中这个函数又调用了instfreq函数,就是在运行这里的时候出现上述提到的错误,望指点!
 楼主| 发表于 2006-10-10 17:43 | 显示全部楼层
还有就是能不能告诉我你说的那个flandrin那个网站,我下了看看.不甚感激!
发表于 2006-10-10 18:03 | 显示全部楼层
原帖由 computer 于 2006-10-10 17:43 发表
还有就是能不能告诉我你说的那个flandrin那个网站,我下了看看.不甚感激!



google搜索“emd.m”,第一个链接
发表于 2006-10-10 19:34 | 显示全部楼层
请注意发帖注意含义明确,以方便管理同时也能帮助你尽快得到需要答案
 楼主| 发表于 2006-10-11 09:10 | 显示全部楼层
To  风流才子,我找到了那个网站,可上面只有hhspetrum代码啊,没有计算instfreq的代码.我这里有个程序,EMD分解都是正确的,就是到了调用hhspetrum就有上述说的错误,你能否告诉我你的邮箱,我发给你帮我看看,我已经弄了很久了.
发表于 2006-10-11 10:23 | 显示全部楼层
原帖由 computer 于 2006-10-11 09:10 发表
To  风流才子,我找到了那个网站,可上面只有hhspetrum代码啊,没有计算instfreq的代码.我这里有个程序,EMD分解都是正确的,就是到了调用hhspetrum就有上述说的错误,你能否告诉我你的邮箱,我发给你帮我看看,我已经弄了 ...



网页上面有 Time-Frequency ToolBox,下载以后好好找一下吧。我看好多人都不知道instfreq这个函数在哪里,不会那么难吧?上次看到某人在简历里面介绍自己具有google搜索的能力,看来这的确是一个标准,呵呵
发表于 2006-10-11 10:36 | 显示全部楼层
  1. function [fnormhat,t]=instfreq(x,t,L,trace);
  2. %INSTFREQ Instantaneous frequency estimation.
  3. %        [FNORMHAT,T]=INSTFREQ(X,T,L,TRACE) computes the instantaneous
  4. %        frequency of the analytic signal X at time instant(s) T, using the
  5. %        trapezoidal integration rule.
  6. %        The result FNORMHAT lies between 0.0 and 0.5.
  7. %
  8. %        X : Analytic signal to be analyzed.
  9. %        T : Time instants                (default : 2:length(X)-1).
  10. %        L : If L=1, computes the (normalized) instantaneous frequency
  11. %            of the signal X defined as angle(X(T+1)*conj(X(T-1)) ;
  12. %            if L>1, computes a Maximum Likelihood estimation of the
  13. %            instantaneous frequency of the deterministic part of the signal
  14. %            blurried in a white gaussian noise.
  15. %            L must be an integer               (default : 1).
  16. %        TRACE : if nonzero, the progression of the algorithm is shown
  17. %                                        (default : 0).
  18. %        FNORMHAT : Output (normalized) instantaneous frequency.
  19. %        T : Time instants.
  20. %
  21. %        Examples :
  22. %         x=fmsin(70,0.05,0.35,25); [instf,t]=instfreq(x); plot(t,instf)
  23. %         N=64; SNR=10.0; L=4; t=L+1:N-L; x=fmsin(N,0.05,0.35,40);
  24. %         sig=sigmerge(x,hilbert(randn(N,1)),SNR);
  25. %         plotifl(t,[instfreq(sig,t,L),instfreq(x,t)]); grid;
  26. %         title ('theoretical and estimated instantaneous frequencies');
  27. %
  28. %        See also  KAYTTH, SGRPDLAY.

  29. %        F. Auger, March 1994, July 1995.
  30. %        Copyright (c) 1996 by CNRS (France).
  31. %
  32. %        ------------------- CONFIDENTIAL PROGRAM --------------------
  33. %        This program can not be used without the authorization of its
  34. %        author(s). For any comment or bug report, please send e-mail to
  35. %        f.auger@ieee.org

  36. if (nargin == 0),
  37. error('At least one parameter required');
  38. end;
  39. [xrow,xcol] = size(x);
  40. if (xcol~=1),
  41. error('X must have only one column');
  42. end

  43. if (nargin == 1),
  44. t=2:xrow-1; L=1; trace=0.0;
  45. elseif (nargin == 2),
  46. L = 1; trace=0.0;
  47. elseif (nargin == 3),
  48. trace=0.0;
  49. end;

  50. if L<1,
  51. error('L must be >=1');
  52. end
  53. [trow,tcol] = size(t);
  54. if (trow~=1),
  55. error('T must have only one row');
  56. end;

  57. if (L==1),
  58. if any(t==1)|any(t==xrow),
  59.   error('T can not be equal to 1 neither to the last element of X');
  60. else
  61.   fnormhat=0.5*(angle(-x(t+1).*conj(x(t-1)))+pi)/(2*pi);
  62. end;
  63. else
  64. H=kaytth(L);
  65. if any(t<=L)|any(t+L>xrow),
  66.   error('The relation L<T<=length(X)-L must be satisfied');
  67. else
  68.   for icol=1:tcol,
  69.    if trace, disprog(icol,tcol,10); end;
  70.    ti = t(icol); tau = 0:L;
  71.    R = x(ti+tau).*conj(x(ti-tau));
  72.    M4 = R(2:L+1).*conj(R(1:L));
  73.    
  74.    diff=2e-6;
  75.    tetapred = H * (unwrap(angle(-M4))+pi);
  76.    while tetapred<0.0 , tetapred=tetapred+(2*pi); end;
  77.    while tetapred>2*pi, tetapred=tetapred-(2*pi); end;
  78.    iter = 1;
  79.    while (diff > 1e-6)&(iter<50),
  80.     M4bis=M4 .* exp(-j*2.0*tetapred);
  81.     teta = H * (unwrap(angle(M4bis))+2.0*tetapred);
  82.     while teta<0.0 , teta=(2*pi)+teta; end;
  83.     while teta>2*pi, teta=teta-(2*pi); end;
  84.     diff=abs(teta-tetapred);
  85.     tetapred=teta; iter=iter+1;
  86.    end;
  87.    fnormhat(icol,1)=teta/(2*pi);
  88.   end;
  89. end;
  90. end;
复制代码
 楼主| 发表于 2006-10-11 15:13 | 显示全部楼层
大哥大姐们:
    救救俺啊,我刚才把院长给我的insfreq代码放到我的程序里去(其实跟我以前的一样)还是跟原来一样的错误,有谁能指点一下啊,我都弄了很久了,不甚感激啊!可以加我的QQ54810912,救一下我啊!
发表于 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));

[imf,ort,nbits] = emd(x); % <-------- adapted to current emd.m

emd_visu(x,t,imf,1);

hhspectrum(imf);
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-25 02:40 , Processed in 0.067576 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表