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

📄 fastica.asv

📁 独立成分分析算法
💻 ASV
📖 第 1 页 / 共 2 页
字号:
displayInterval   = 1;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Parameters for fastICA - i.e. this fileb_verbose = 1;jumpPCA = 0;jumpWhitening = 0;only = 3;userNumOfIC = 0;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Read the optional parametersif (rem(length(varargin),2)==1)  error('Optional parameters should always go by pairs');else  for i=1:2:(length(varargin)-1)    if ~ischar (varargin{i}),      error (['Unknown type of optional parameter name (parameter' ...	      ' names must be strings).']);    end    % change the value of parameter    switch lower (varargin{i})     case 'stabilization'      stabilization = lower (varargin{i+1});     case 'maxfinetune'      maxFinetune = varargin{i+1};     case 'samplesize'      sampleSize = varargin{i+1};     case 'verbose'      verbose = lower (varargin{i+1});      % silence this program also      if strcmp (verbose, 'off'), b_verbose = 0; end     case 'firsteig'      firstEig = varargin{i+1};     case 'lasteig'      lastEig = varargin{i+1};     case 'interactivepca'      interactivePCA = lower (varargin{i+1});     case 'approach'      approach = lower (varargin{i+1});     case 'numofic'      numOfIC = varargin{i+1};      % User has suplied new value for numOfIC.      % We'll use this information later on...      userNumOfIC = 1;     case 'g'      g = lower (varargin{i+1});     case 'finetune'      finetune = lower (varargin{i+1});     case 'a1'      a1 = varargin{i+1};     case 'a2'      a2 = varargin{i+1};     case {'mu', 'myy'}      myy = varargin{i+1};     case 'epsilon'      epsilon = varargin{i+1};     case 'maxnumiterations'      maxNumIterations = varargin{i+1};     case 'initguess'      % no use setting 'guess' if the 'initState' is not set      initState = 'guess';      guess = varargin{i+1};     case 'displaymode'      displayMode = lower (varargin{i+1});     case 'displayinterval'      displayInterval = varargin{i+1};     case 'pcae'      % calculate if there are enought parameters to skip PCA      jumpPCA = jumpPCA + 1;      E = varargin{i+1};     case 'pcad'      % calculate if there are enought parameters to skip PCA      jumpPCA = jumpPCA + 1;      D = varargin{i+1};     case 'whitesig'      % calculate if there are enought parameters to skip PCA and whitening      jumpWhitening = jumpWhitening + 1;      whitesig = varargin{i+1};     case 'whitemat'      % calculate if there are enought parameters to skip PCA and whitening      jumpWhitening = jumpWhitening + 1;      whiteningMatrix = varargin{i+1};     case 'dewhitemat'      % calculate if there are enought parameters to skip PCA and whitening      jumpWhitening = jumpWhitening + 1;      dewhiteningMatrix = varargin{i+1};     case 'only'      % if the user only wants to calculate PCA or...      switch lower (varargin{i+1})       case 'pca'	only = 1;       case 'white'	only = 2;       case 'all'	only = 3;      end           otherwise      % Hmmm, something wrong with the parameter string      error(['Unrecognized parameter: ''' varargin{i} '''']);    end;  end;end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% print information about dataif b_verbose  fprintf('Number of signals: %d\n', Dim);  fprintf('Number of samples: %d\n', NumOfSampl);end% Check if the data has been entered the wrong way,% but warn only... it may be on purposeif Dim > NumOfSampl  if b_verbose    fprintf('Warning: ');    fprintf('The signal matrix may be oriented in the wrong way.\n');    fprintf('In that case transpose the matrix.\n\n');  endend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Calculating PCA% We need the results of PCA for whitening, but if we don't% need to do whitening... then we dont need PCA...if jumpWhitening == 3  if b_verbose,    fprintf ('Whitened signal and corresponding matrises suplied.\n');    fprintf ('PCA calculations not needed.\n');  end;else    % OK, so first we need to calculate PCA  % Check to see if we already have the PCA data  if jumpPCA == 2,    if b_verbose,      fprintf ('Values for PCA calculations suplied.\n');      fprintf ('PCA calculations not needed.\n');    end;  else    % display notice if the user entered one, but not both, of E and D.    if (jumpPCA > 0) & (b_verbose),      fprintf ('You must suply all of these in order to jump PCA:\n');      fprintf ('''pcaE'', ''pcaD''.\n');    end;        % Calculate PCA    [E, D]=pcamat(mixedsig, firstEig, lastEig, interactivePCA, verbose);  endend% skip the rest if user only wanted PCAif only > 1    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  % Whitening the data    % Check to see if the whitening is needed...  if jumpWhitening == 3,    if b_verbose,      fprintf ('Whitening not needed.\n');    end;  else        % Whitening is needed    % display notice if the user entered some of the whitening info, but not all.    if (jumpWhitening > 0) & (b_verbose),      fprintf ('You must suply all of these in order to jump whitening:\n');      fprintf ('''whiteSig'', ''whiteMat'', ''dewhiteMat''.\n');    end;        % Calculate the whitening    [whitesig, whiteningMatrix, dewhiteningMatrix] = whitenv ...						     (mixedsig, E, D, verbose);  end  end % if only > 1% skip the rest if user only wanted PCA and whiteningif only > 2    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  % Calculating the ICA    % Check some parameters  % The dimension of the data may have been reduced during PCA calculations.  % The original dimension is calculated from the data by default, and the  % number of IC is by default set to equal that dimension.    Dim = size(whitesig, 1);    % The number of IC's must be less or equal to the dimension of data  if numOfIC > Dim    numOfIC = Dim;    % Show warning only if verbose = 'on' and user suplied a value for 'numOfIC'    if (b_verbose & userNumOfIC)      fprintf('Warning: estimating only %d independent components\n', numOfIC);      fprintf('(Can''t estimate more independent components than dimension of data)\n');    end  end    % Calculate the ICA with fixed point algorithm.  [A, W] = fpica (whitesig,  whiteningMatrix, dewhiteningMatrix, approach, ...		  numOfIC, g, finetune, a1, a2, myy, stabilization, epsilon, ...		  maxNumIterations, maxFinetune, initState, guess, sampleSize, ...		  displayMode, displayInterval, verbose);    % Check for valid return  if ~isempty(W)    % Add the mean back in.    if b_verbose      fprintf('Adding the mean back to the data.\n');    end    icasig = W * mixedsig + (W * mixedmean) * ones(1, NumOfSampl);    %icasig = W * mixedsig;    if b_verbose & ...	  (max(abs(W * mixedmean)) > 1e-9) & ...	  (strcmp(displayMode,'signals') | strcmp(displayMode,'on'))      fprintf('Note that the plots don''t have the mean added.\n');    end  else    icasig = [];  endend % if only > 2%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The output depends on the number of output parameters% and the 'only' parameter.if only == 1    % only PCA  Out1 = E;  Out2 = D;elseif only == 2  % only PCA & whitening  if nargout == 2    Out1 = whiteningMatrix;    Out2 = dewhiteningMatrix;  else    Out1 = whitesig;    Out2 = whiteningMatrix;    Out3 = dewhiteningMatrix;  endelse      % ICA  if nargout == 2    Out1 = A;    Out2 = W;  else    Out1 = icasig;    Out2 = A;    Out3 = W;  endend

⌨️ 快捷键说明

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