⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tfrqview.m

📁 matlab时间序列分析工具箱
💻 M
📖 第 1 页 / 共 2 页
字号:
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 computer

% Tests on the input arguments
if nargin<1,
 error('At least one parameter required'); % at least the tfr
end
[tfrrow,tfrcol]=size(tfr);
if nargin==1,
 sig=[]; t=1:tfrcol; method='type1'; % empty signal
elseif 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 vector
end;
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 frequency
method=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
% Ben Hirsh
%if exist('options.mat'),
% load options
%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=6;   % 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

%end;
fs=1.0;

% Test of analycity
if ~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
 end
end

% Test of reality
if (Ncol==2 & ~isreal(tfr)),
 disp('Cross distribution. As the result is complex, we display the real part.');
 tfr=real(tfr);
end

ChoiceDisplay     = 1; % All the possible values of the choice variable
ChoiceLayout      = 2;
ChoiceColormap    = 3;
ChoiceSampling    = 4;
ChoiceThreshold   = 5;
ChoiceLinlog      = 6;
ChoiceLevels      = 7;
ChoiceGrid        = 8;
ChoiceRedraw      = 9;
ChoiceNewFigure   =10;
ChoiceSaveResults =11;
ChoiceSaveOptions =12;
ChoicePrint       =13;
ChoiceClose       =14;

CallTfrView = 1; % 1 to call tfrview, 0 not to do it
RefreshFigure=1; % 1 to refresh figure every time, 0 to freeze

choice=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];
  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 ~issig & ~isspec,
  if isgridtfr,
   GridStr='Remove the grid';
  else
   GridStr='Add a grid';
  end;
 else
  GridStr='Grids';
 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 color map',...          % ChoiceColormap
              'Change the sampling frequency',... % ChoiceSampling
              'Change the threshold',...          % ChoiceThreshold
              linlogstr,...                       % ChoiceLinlog
              'Change the number of levels',...   % ChoiceLevels
              GridStr,...                         % ChoiceGrid
              redrawstr,...                       % ChoiceRedraw
              'New figure',...                    % ChoiceNewFigure
              'Save results',...                  % ChoiceSaveResults
              'Save options',...                  % ChoiceSaveOptions
              'Print',...                         % ChoicePrint
              'Close');                           % ChoiceClose
 
 if (choice==ChoiceDisplay),                   % Change the display mode
 
  display=menu('DISPLAY MODE :',...
               'contour',...             % 1
               'imagesc',...             % 2
               'pcolor',...              % 3
               'surf',...                % 4
               'mesh',...                % 5
               'cancel');                % 6

  if (display==6),
   CallTfrView=0;
  else
   CallTfrView=1;
  end;

 elseif (choice==ChoiceLayout),                 % Change the display layout
 
  layout=1;
  if issig==0, 
   SignalStr= 'display signal';
  else
   SignalStr='remove signal';
  end;
 
  if isspec==0, 
   SpectrumStr= 'display spectrum';
  else
   SpectrumStr='remove spectrum';
  end;
 
  if iscolorbar==0,
   ColorbarStr='display colorbar';
  else
   ColorbarStr='remove colorbar';
  end;
  
  layout=menu('DISPLAY LAYOUT',...
              SignalStr,...
              SpectrumStr,...
              ColorbarStr,...

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -