?? fastica.asv
字號(hào):
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
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -