📄 ridges.m
字号:
function [pointst,pointsf]=ridges(tfr,hat,t,method,trace);%RIDGES Extraction of ridges.% [POINTST,POINTSF]=RIDGES(TFR,HAT,T,METHOD,TRACE) extracts the% ridges of a time-frequency distribution. These ridges are some% particular sets of curves deduced from the stationary points of% their reassignment operators.%% TFR : time-frequency representation% HAT : complex matrix of the reassignment vectors.% T : the time instant(s).% METHOD : the chosen representation (default: 'tfrrsp'). % TRACE : if nonzero, the progression of the algorithm is shown% (default : 0).%% POINTST,POINTSF are two vectors for the time and frequency % coordinates of the stationary points of the reassignment. % Therefore, PLOT(POINTST,POINTSF,'.') shows the squeleton of the % representation.%% Example :% sig=fmlin(128,0.1,0.4); g=window(21,'kaiser'); % h=window(47,'Kaiser'); t=1:2:127; % figure(1), [tfr,rtfr,hat]=tfrrspwv(sig,t,128,g,h); % ridges(tfr,hat,t,'tfrrspwv',1);% figure(2), [tfr,rtfr,hat]= tfrrsp(sig,t,128,h); % ridges(tfr,hat,t,'tfrrsp',1);%% See also : FRIEDMAN.% F. Auger, August 1994, December 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.orgif (nargin<2), error('at least 2 parameters required'); end;[tfrrow,tfrcol]=size(tfr);[hatrow,hatcol]=size(hat);if (nargin==2), t=1:tfrcol; method='tfrrsp'; trace=0;elseif (nargin==3), method='tfrrsp'; trace=0; elseif (nargin==4), trace=0; end;[trow,tcol] = size(t);if (trow~=1), error('T must only have one row'); elseif (tfrrow~=hatrow)|(tfrcol~=hatcol), error('TFR and HAT must have the same size');end;Nf=tfrrow; frequencies=(1:Nf)'; threshold=sum(sum(tfr))*0.5/(tfrrow*tfrcol);if trace, fprintf ('\nRidge extraction: \n'); end;method=upper(method);if strcmp(method,'TFRRPWV') | strcmp(method,'TFRRPMH'), for icol=1:tfrcol, ti=t(icol); if trace, disprog(icol,tfrcol,10); end; indices=find((tfr(:,icol)>threshold)&(hat(:,icol)-frequencies==0)); nbindices=length(indices); if (nbindices>0), pointst=[pointst;ones(nbindices,1)*ti]; pointsf=[pointsf;indices/(2.0*Nf)]; end; end;elseif strcmp(method,'TFRRSPWV'), for icol=1:tfrcol, ti=t(icol); if trace, disprog(icol,tfrcol,10); end; indices=find((real(hat(:,icol))-frequencies==0)&... (imag(hat(:,icol))-icol==0)&... (tfr(:,icol)>threshold)); nbindices=length(indices); if (nbindices>0), pointst=[pointst;ones(nbindices,1)*ti]; pointsf=[pointsf;indices/(2.0*Nf)]; end; end;elseif strcmp(method,'TFRRSP')|strcmp(method,'TYPE1') for icol=1:tfrcol, ti=t(icol); if trace, disprog(icol,tfrcol,10); end; indices=find((real(hat(:,icol))-frequencies==0)&... (imag(hat(:,icol))-icol==0)&... (tfr(:,icol)>threshold)); nbindices=length(indices); if (nbindices>0), pointst=[pointst;ones(nbindices,1)*ti]; pointsf=[pointsf;indices/Nf]; end; end;else error('unknown representation');end;if (nargout==0), clf; plot(pointst,pointsf,'.') axis([min(t) max(t) 0 0.5]); end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -