function[fnormhat,t]=instfreq(x,t,L,trace);

%INSTFREQ Instantaneous frequency estimation.

%[FNORMHAT,T]=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); [instf,t]=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,[instfreq(sig,t,L),instfreq(x,t)]); grid;

% title ('theoretical and estimated instantaneous frequencies');

%

%See also KAYTTH, 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;

[xrow,xcol] = 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

[trow,tcol] = 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

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;

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐