📄 ifestar2.m
字号:
function [fnorm,t,rejratio]=ifestar2(x,t);%IFESTAR2 Instantaneous frequency estimation using AR2 modelisation. % [FNORM,T2,RATIO]=IFESTAR2(X,T) computes an estimate of the% instantaneous frequency of the real signal X at time% instant(s) T. The result FNORM lies between 0.0 and 0.5. This% estimate is based only on the 4 last signal points, and has% therefore an approximate delay of 2.5 points. % % X : real signal to be analyzed.% T : Time instants (must be greater than 4) % (default : 4:length(X)).% FNORM : Output (normalized) instantaneous frequency.% T2 : Time instants coresponding to FNORM. Since the% algorithm can not always give a value, T2 is % different of T. % RATIO : proportion of instants where the algorithm yields% an estimation%% Examples : % [x,if]=fmlin(50,0.05,0.3,5); x=real(x); [if2,t]=ifestar2(x);% plot(t,if(t),t,if2);%% N=1100; [deter,if]=fmconst(N,0.05); deter=real(deter);% noise=randn(N,1); NbSNR=101; SNR=linspace(0,100,NbSNR);% for iSNR=1:NbSNR,% sig=sigmerge(deter,noise,SNR(iSNR));% [if2,t,ratio(iSNR)]=ifestar2(sig); % EQM(iSNR)=norm(if(t)-if2)^2 / length(t) ;% end;% subplot(211); plot(SNR,-10.0 * log10(EQM)); grid;% xlabel('SNR'); ylabel('-10 log10(EQM)');% subplot(212); plot(SNR,ratio); grid;% xlabel('SNR'); ylabel('ratio');%% See also INSTFREQ, KAYTTH, SGRPDLAY.% F. Auger, April 1996.% This estimator is the causal version of the estimator called% "4 points Prony estimator" in the article "Instantaneous% frequency estimation using linear prediction with comparisons% to the dESAs", IEEE Signal Processing Letters, Vo 3, No 2, p% 54-56, February 1996. % 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');endx = real(x);if (nargin == 1), t=4:xrow; end;[trow,tcol] = size(t);if (trow~=1), error('T must have only one row'); elseif min(t)<4, error('The smallest value of T must be greater than 4');end;Kappa = x(t-1) .* x(t-2) - x(t ) .* x(t-3) ;psi1 = x(t-1) .* x(t-1) - x(t ) .* x(t-2) ;psi2 = x(t-2) .* x(t-2) - x(t-1) .* x(t-3) ;den = psi1 .* psi2 ;indices = find(den>0);arg=0.5*Kappa(indices)./sqrt(den(indices));indarg=find(abs(arg)>1);arg(indarg)=sign(arg(indarg));fnorm = acos(arg)/(2.0*pi);rejratio = length(indices)/length(t);t = t(indices);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -