📄 tfrqview.m
字号:
function tfrqview(tfr,sig,t,method,p1,p2,p3,p4,p5);%TFRQVIEW Quick visualization of time-frequency representations.% TFRQVIEW(TFR,SIG,T,METHOD,P1,P2,P3,P4,P5) allows a quick % visualization of a time-frequency representation.%% TFR : time-frequency representation (MxN).% SIG : signal in time. If unavailable, put sig=[] as input% parameter. (default : []).% T : time instants (default : 1:N).% METHOD : name of chosen representation (default : 'TYPE1').% See the TFR* files for authorized names.% TYPE1 : the representation TFR goes in normalized% frequency from -0.5 to 0.5 ; % TYPE2 : the representation TFR goes in normalized% frequency from 0 to 0.5. % P1...P5 : optional parameters of the representation : run the % file TFRPARAM(METHOD) to know the meaning of P1..P5 % for your method. %% When you use the 'save' option in the main menu, you save all your% variables as well as two strings, TfrQView and TfrView, in a mat % file. If you load this file and do eval(TfrQView), you will restart% the display session under tfrqview ; if you do eval(TfrView), you% will obtain the exact layout of the screen you had when clicking on % the 'save' button. % % Example : % sig=fmsin(128); tfr=tfrwv(sig);% tfrqview(tfr,sig,1:128,'tfrwv');%% See also TFRVIEW, TFRSAVE, TFRPARAM.% F. Auger, September 1994, July 1995 % O. Lemoine, Oct 1995, May-July 1996.% F. Auger, May 1998.% 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 comp=computer; % so as to know the running computerMatlabVersion=version; MatlabVersion=str2num(MatlabVersion(1));% Tests on the input argumentsif nargin<1, error('At least one parameter required'); % at least the tfrend[tfrrow,tfrcol]=size(tfr);if nargin==1, sig=[]; t=1:tfrcol; method='type1'; % empty signalelseif nargin==2, t=1:tfrcol; method='type1';elseif nargin==3, method='type1';end[trow,tcol] = size(t);if (trow~=1), error('T must only have one row'); % t must be a row vectorend;if (tfrcol~=tcol), error('T must have as much elements as tfr has columns');end;[Nsig,Ncol]=size(sig);if Ncol>2, error('SIG must have one or two columns');end% Computation of Nf2, the number of interresting points in frequencymethod=upper(method);if istfr2(method), Nf2=tfrrow;elseif istfr1(method), Nf2=tfrrow/2; else error('Unknown representation. Use type1 or type2');end;% Computation of freq (vector of frequency samples) if istfraff(method), freq=eval(['p',num2str(nargin-4)]); % last input argument is freqs.else freq=(0.5*(0:Nf2-1)/Nf2);end% Initialization of the variables%if exist('options.mat'),% load options% colormap(SavedColorMap);%else threshold=5.0; % visualization threshold linlogtfr=0; % tfr visualization scale : 0 for linear 1 for logarithmic linlogspec=1; % spectrum visualization scale sigenveloppe=0; % signal enveloppe visualization levelnumb=64; % number of levels in the contour plot colmap=1; % colormap index display=2; % display index isgridsig=0; % grid on signal isgridspec=0; % grid on spectrum isgridtfr=0; % grid on tfr issig=0; % display signal isspec=0; % display spectrum iscolorbar=0; % display colorbar fs=1.0; % sampling frequency (Hz) fmin=0.0; % smallest displayed frequency fmax=0.5*fs; % highest displayed frequency%end;% Test of analycityif ~isempty(sig), for k=1:Ncol, % spec(:,k)=abs(fft(sig(min(t):max(t),k))).^2; Nsp=length(spec); % modifications : F. Auger (fog), 30/11/97 Lt_fog=max(t)-min(t)+1; Nb_tranches_fog = floor(Lt_fog/tfrrow); % fprintf('%f \n',Nb_tranches_fog); spec(:,k)=zeros(tfrrow,1); for Num_tranche_fog=0:Nb_tranches_fog-1, % fprintf('%f \n',Num_tranche_fog); spec(:,k)=spec(:,k)+abs(fft(sig(min(t)+tfrrow*Num_tranche_fog+(0:tfrrow-1),k))).^2; end; if (Lt_fog>Nb_tranches_fog*tfrrow), spectre_fog=fft(sig(min(t)+tfrrow*Nb_tranches_fog:max(t),k),tfrrow); spectre_fog=spectre_fog(:); spec(:,k)=spec(:,k)+abs(spectre_fog).^2; end; % spec1=sum(spec(1:tfrrow/2,k)); % spec2=sum(spec(tfrrow/2+1:Nsp,k)); spec1=sum(spec(1:tfrrow/2,k)); spec2=sum(spec(tfrrow/2+1:tfrrow,k)); if spec2>spec1/10, disp('Be careful : the signal is not analytic!'); end endend% Test of realityif (Ncol==2 & ~isreal(tfr)), disp('Cross distribution. As the result is complex, we display the real part.'); tfr=real(tfr);endChoiceDisplay = 1; % All the possible values of the choice variableChoiceLayout = 2;ChoiceSampling = 3;ChoiceFreqBounds = 4;ChoiceThreshold = 5;ChoiceLinlog = 6;ChoiceRedraw = 7;ChoiceNewFigure = 8;ChoiceSaveResults = 9;ChoiceSaveOptions = 10;ChoicePrint = 11;ChoiceClose = 12;CallTfrView = 1; % 1 to call tfrview, 0 not to do itRefreshFigure=1; % 1 to refresh figure every time, 0 to freezechoice=ChoiceSampling;while choice~=ChoiceClose, % while not close if RefreshFigure & CallTfrView, % Call to tfrview linlog=linlogtfr+2*linlogspec+4*sigenveloppe; isgrid=isgridsig+2*isgridspec+4*isgridtfr; layout=issig+isspec*2+iscolorbar*4+1; param = [display, linlog, threshold, levelnumb, Nf2, layout,... fs, isgrid, fmin, fmax]; if (nargin<=4), tfrview(tfr,sig,t,method,param); elseif (nargin==5), tfrview(tfr,sig,t,method,param,p1); elseif (nargin==6), tfrview(tfr,sig,t,method,param,p1,p2); elseif (nargin==7), tfrview(tfr,sig,t,method,param,p1,p2,p3); elseif (nargin==8), tfrview(tfr,sig,t,method,param,p1,p2,p3,p4); elseif (nargin==9), tfrview(tfr,sig,t,method,param,p1,p2,p3,p4,p5); end; end; if (linlogtfr==0), % Lin/log scale of the tfr linlogstr='Change to a logarithmic scale'; else linlogstr='Change to a linear scale'; end; if (RefreshFigure==1), redrawstr='Don''t redraw yet'; else redrawstr='Redraw now'; end; % Main menu choice=menu ('TFRQVIEW MENU :',... 'Change the display mode',... % ChoiceDisplay 'Change the display layout',... % ChoiceLayout 'Change the sampling frequency',... % ChoiceSampling 'Change the frequency bounds',... % ChoiceFreqBounds 'Change the threshold',... % ChoiceThreshold linlogstr,... % ChoiceLinlog redrawstr,... % ChoiceRedraw 'New figure',... % ChoiceNewFigure 'Save results',... % ChoiceSaveResults 'Save options',... % ChoiceSaveOptions 'Print',... % ChoicePrint 'Close'); % ChoiceClose if (choice==ChoiceDisplay), % Change the display mode OldDisplay=display; display=menu('DISPLAY MODE :',... 'contour',... % 1 'imagesc',... % 2 'pcolor',... % 3 'surf',... % 4 'mesh',... % 5 'change the color map',... % 6 'change the number of colors or levels',... % 7 'cancel'); % 8 if (display>=1)&(display<=5), CallTfrView=1; elseif (display==6), if MatlabVersion>=5, colmap=menu('COLOR MAP :',... 'hsv','jet','cool','bone','gray','hot','prism',... 'pink','colorcube','autumn','winter','spring','summer',... 'brighten','darken','permute','spin','cancel'); if colmap== 1, colormap(hsv(levelnumb)); elseif colmap== 2, colormap(jet(levelnumb)); elseif colmap== 3, colormap(cool(levelnumb)); elseif colmap== 4, colormap(bone(levelnumb)); elseif colmap== 5, colormap(gray(levelnumb)); elseif colmap== 6, colormap(hot(levelnumb)); elseif colmap== 7, colormap(prism(levelnumb)); elseif colmap== 8, colormap(pink(levelnumb)); elseif colmap== 9, colormap(colorcube(levelnumb)); elseif colmap==10, colormap(autumn(levelnumb)); elseif colmap==11, colormap(winter(levelnumb)); elseif colmap==12, colormap(spring(levelnumb)); elseif colmap==13, colormap(summer(levelnumb)); elseif colmap==14, brighten(+0.20); elseif colmap==15, brighten(-0.10); elseif colmap==16, MyMap = colormap; colormap(flipud(MyMap)); elseif colmap==17, spinmap; end else colmap=menu('COLOR MAP :',... 'hsv','jet','cool','bone','gray','hot','prism',... 'brighten','darken','permute','spin','cancel'); if colmap== 1, colormap(hsv(levelnumb)); elseif colmap== 2, colormap(jet(levelnumb)); elseif colmap== 3, colormap(cool(levelnumb)); elseif colmap== 4, colormap(bone(levelnumb)); elseif colmap== 5, colormap(gray(levelnumb)); elseif colmap== 6, colormap(hot(levelnumb)); elseif colmap== 7, colormap(prism(levelnumb)); elseif colmap== 8, brighten(+0.25); elseif colmap== 9, brighten(-0.25); elseif colmap==10, MyMap = colormap; colormap(flipud(MyMap)); elseif colmap==11, spinmap; end end display=OldDisplay; CallTfrView=0; elseif (display==7), fprintf(' Old number of levels: %f\n',levelnumb); levelold=levelnumb; levelnumb=input(' New number of levels: '); if isempty(levelnumb), levelnumb=levelold; CallTfrView=0; else if levelnumb<levelold, CallTfrView=1; MyMap = colormap; MyMap=MyMap(1:levelnumb,:); colormap(MyMap); elseif levelnumb>levelold, CallTfrView=1; MyMap = ones(levelnumb, 3); MyMap(1:levelold,:)=colormap; fprintf('warning : the colormap size has been increased by identical vectors\n'); fprintf('You should redefine the colormap\n'); else CallTfrView=0; end end display=OldDisplay; elseif (display==8), display=OldDisplay; CallTfrView=0; end; elseif (choice==ChoiceLayout), % Change the display layout
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -