📄 gui_cb.m
字号:
function gui_cb(action)%% This file is used by FASTICAG% This file holds the callbacks to the main window% @(#)$Id: gui_cb.m,v 1.5 2003/09/10 10:33:41 jarmo Exp $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Global variables% Handle to the main figureglobal hf_FastICA_MAIN;% Handles for needed controls in main figure;global ht_FastICA_mixedStatus;global ht_FastICA_dim;global ht_FastICA_numOfSamp;global ht_FastICA_newDim;global ht_FastICA_whiteStatus;global ht_FastICA_icaStatus;global hpm_FastICA_approach;global he_FastICA_numOfIC;global hpm_FastICA_g;global hpm_FastICA_stabilization;% Main values are stored hereglobal g_FastICA_mixedsig;global g_FastICA_mixedmean;global g_FastICA_pca_D;global g_FastICA_pca_E;global g_FastICA_white_sig;global g_FastICA_white_wm;global g_FastICA_white_dwm;global g_FastICA_ica_sig;global g_FastICA_ica_A;global g_FastICA_ica_W;global g_FastICA_initGuess;global g_FastICA_approach;global g_FastICA_numOfIC;global g_FastICA_g;global g_FastICA_finetune;global g_FastICA_a1;global g_FastICA_a2;global g_FastICA_myy;global g_FastICA_stabilization;global g_FastICA_epsilon;global g_FastICA_maxNumIte;global g_FastICA_maxFinetune;global g_FastICA_sampleSize;global g_FastICA_initState;global g_FastICA_displayMo;global g_FastICA_displayIn;global g_FastICA_verbose;% String values are hereglobal c_FastICA_appr_strV;global c_FastICA_g1_strD;global c_FastICA_g1_strV;global c_FastICA_g2_strD;global c_FastICA_g2_strV;global c_FastICA_finetune_strD;global c_FastICA_finetune_strV;global c_FastICA_stabili_strV;global c_FastICA_iSta_strV;global c_FastICA_dMod_strV;global c_FastICA_verb_strV;% What is the load type of load dialogglobal g_FastICA_loadType;% Global variable for stopping the ICA calculationsglobal g_FastICA_interrupt;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% What ever we do, it will take some time... not much, but some :-)watchonInFigure = watchon;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%switch action%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%case 'InitAll' % If the data is already loaded, then get the information from data % and show to the user (also set g_FastICA_numOfIC) if ~isempty(g_FastICA_mixedsig) set(ht_FastICA_mixedStatus, 'String', ''); [dim, numofsamp] = size(g_FastICA_mixedsig); set(ht_FastICA_dim, 'String', int2str(dim)); set(ht_FastICA_numOfSamp, 'String', int2str(numofsamp)); set(ht_FastICA_newDim, 'String', int2str(dim)); set(he_FastICA_numOfIC, 'String', int2str(dim)); g_FastICA_numOfIC = dim; g_FastICA_mixedmean = []; end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%case 'LoadData' handle = findobj('Tag','f_FastICALoad'); % Check if the window is already if isempty(handle) % open. If not then open it. pos = get(hf_FastICA_MAIN, 'Position'); % Based on the feedback obtained from some users, it seems % that at least in some systems, pos can sometimes be empty. A % similar check is done a few lines below. if ~isempty (pos), gui_l(pos(1), pos(2)); else gui_l (0, 0); end else if strcmp(g_FastICA_loadType, 'data') % Check if it was the same load figure(handle); % window. If it wasn't then else % close the other window first close(handle); % and then open the load window fprintf('''Load initial guess'' -dialog closed!\n'); pos = get(hf_FastICA_MAIN, 'Position'); if ~isempty (pos), gui_l(pos(1), pos(2)); else gui_l (0, 0); end end end % gui_cb NewData; - is called from the load function if not canceled...%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%case 'NewData' % New data is loaded or the old data changed. We need to find out % somethings about the new data... and do some other stuff also... [dim, numofsamp] = size(g_FastICA_mixedsig); set(ht_FastICA_dim, 'String', dim); set(ht_FastICA_newDim, 'String', dim); set(ht_FastICA_numOfSamp, 'String', numofsamp); set(he_FastICA_numOfIC, 'String', int2str(dim)); g_FastICA_numOfIC = dim; % Default for numOfIC = the new dimension % PCA needs to be calculated again. g_FastICA_pca_E = []; % We use this to check if PCA is calculated gui_cb NullWhite; % Whitening needs to be done again also %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%case 'NullWhite' % Whitening needs to done again next time it's needed g_FastICA_white_sig = []; % We use this to check if whitening is calculated gui_cb NullICA; % The FPICA must be calculated again%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%case 'NullICA' % If IC's are needed they have to bee calculated again g_FastICA_ica_sig = []; % We use this to check if FPICA is calculated set(ht_FastICA_icaStatus,'String','Not yet done');%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%case 'Transpose' if isempty(g_FastICA_mixedmean) g_FastICA_mixedsig = g_FastICA_mixedsig'; else g_FastICA_mixedsig = (g_FastICA_mixedsig + ... g_FastICA_mixedmean * ... ones(1,size(g_FastICA_mixedsig, 2)))'; g_FastICA_mixedmean = []; end gui_cb NewData; % Data has been changed%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%case 'DoPCA' if ~isempty(g_FastICA_mixedsig) % We'll remove mean of the data here also just in case... if isempty(g_FastICA_mixedmean) [g_FastICA_mixedsig, g_FastICA_mixedmean] = remmean(g_FastICA_mixedsig); end % Do PCA interactively: ask the user for eigenvalues [g_FastICA_pca_E, g_FastICA_pca_D] = pcamat(g_FastICA_mixedsig, ... 0, 0, 'gui', ... deblank(c_FastICA_verb_strV(g_FastICA_verbose,:))); newdim = size(g_FastICA_pca_D, 1); set(ht_FastICA_newDim, 'String', int2str(newdim)); set(he_FastICA_numOfIC, 'String', int2str(newdim)); g_FastICA_numOfIC = newdim; gui_cb NullWhite; % Whitening needs to be done again also % but we'll do it when it's needed. else fprintf('Data not loaded yet!\n\n'); end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%case 'OrigDim' gui_cb NewData;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%case 'ShowMixed' if ~isempty(g_FastICA_mixedsig) handle = findobj('Tag','f_FastICA_mix'); % Check if the window is already if isempty(handle) % open. If not then open it. figure('Tag', 'f_FastICA_mix', ... 'Name', 'FastICA: Plot data', ... 'NumberTitle', 'off'); else figure(handle); clf; % clear the figure for next plots end if isempty(g_FastICA_mixedmean) icaplot('dispsig',g_FastICA_mixedsig, 0, 0, 0, 'Mixed signals'); else icaplot('dispsig',g_FastICA_mixedsig + g_FastICA_mixedmean * ... ones(1, size(g_FastICA_mixedsig, 2)), 0, 0, 0, 'Mixed signals'); end else fprintf('Data not loaded yet!\n\n'); end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%case 'ShowWhite' if ~isempty(g_FastICA_mixedsig) if isempty(g_FastICA_white_sig) % if whitening is not done, we need to gui_cb Whiten; % do it before we can display the end % whitened signals handle = findobj('Tag','f_FastICA_white'); % Check if the window is already if isempty(handle) % open. If not then open it. figure('Tag', 'f_FastICA_white', ... 'Name', 'FastICA: Plot whitened', ... 'NumberTitle', 'off'); else figure(handle); clf; % clear the figure for next plots end icaplot('dispsig',g_FastICA_white_sig,0,0,0,'Whitened signals'); else fprintf('Data not loaded yet!\n\n'); end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%case 'Whiten' set(ht_FastICA_whiteStatus,'String','Computing...'); % If PCA is not calculated, we'll have to calculate it now, % we'll do it without guestions - we don't reduce the dimension % here - but PCAMAT might reduce the dimension automatically. if isempty(g_FastICA_pca_E) % We'll remove mean of the data here also just in case... if isempty(g_FastICA_mixedmean) [g_FastICA_mixedsig, g_FastICA_mixedmean] = remmean(g_FastICA_mixedsig); end [g_FastICA_pca_E, g_FastICA_pca_D] = pcamat(g_FastICA_mixedsig, 1, ... size(g_FastICA_mixedsig, ... 1), 'off', ... deblank(c_FastICA_verb_strV(g_FastICA_verbose,:))); % Check if the dimension was reduced automatically newdim = size(g_FastICA_pca_D, 1); set(ht_FastICA_newDim, 'String', int2str(newdim)); % Check if the numOfIC now has illegal value entered % We do that by telling the program that there is new value % entered for NumOfIC. gui_cb ChangeNumOfIC; end % And now we can calculate whitening... [g_FastICA_white_sig, g_FastICA_white_wm, g_FastICA_white_dwm] = ... whitenv(g_FastICA_mixedsig, g_FastICA_pca_E, g_FastICA_pca_D, deblank(c_FastICA_verb_strV(g_FastICA_verbose,:))); set (ht_FastICA_whiteStatus,'String','');%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%case 'ChangeApproach' % Get the old value for g eval(['g_str = c_FastICA_g' int2str(g_FastICA_approach) '_strV;']); old_g = deblank(g_str(g_FastICA_g,:)); % Get and set the new value for approach g_FastICA_approach = get(hpm_FastICA_approach, 'Value'); % The possible values for g depend on the value of approach... eval(['g_str = c_FastICA_g' int2str(g_FastICA_approach) '_strD;']);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -