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

📄 eeg_matchchans.m

📁 含有多种ICA算法的eeglab工具箱
💻 M
字号:
% eeg_matchchans()  - find closest channels in a larger EEGLAB chanlocs structure%                     to channels in a smaller chanlocs structure% Usage:%        >> [selchans,distances,selocs] = eeg_matchchans(BIGlocs,smalllocs,'noplot');% Inputs:%        BIGlocs    - larger (or equal-sized) EEG.chanlocs structure array%        smalllocs  - smaller (or equal-sized) EEG.chanlocs structure array%        'noplot'   - [optional string 'noplot'] -> do not produce plots {default: %                     produce illustrative plots of the BIG and small locations}% Outputs:%        selchans   - indices of BIGlocs channels closest to the smalllocs channels%        distances  - vector of distances between the selected BIGlocs and smalllocs chans%        selocs     - EEG.chanlocs structure array containing nearest BIGlocs channels %                     to each smalllocs channel: 1, 2, 3,... n. This structure has%                     two extra fields: %                                    bigchan  - original channel index in BIGlocs%                                    bigdist  - distance between bigchan and smalllocs chan %                     ==> bigdist assumes both input locs have sph_radius 1.%% Author: Scott Makeig, SCCN/INC/UCSD, April 9, 2004%123456789012345678901234567890123456789012345678901234567890123456789012% Copyright (C) 2004 Scott Makeig, SCCN/INC/UCSD, smakeig@ucsd.edu%% This program is free software; you can redistribute it and/or modify% it under the terms of the GNU General Public License as published by% the Free Software Foundation; either version 2 of the License, or% (at your option) any later version.%% This program is distributed in the hope that it will be useful,% but WITHOUT ANY WARRANTY; without even the implied warranty of% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the% GNU General Public License for more details.%% You should have received a copy of the GNU General Public License% along with this program; if not, write to the Free Software% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA% History: began Jan 27, 2004 as selectchans.m(?) -smfunction [selchans,dists,selocs] = eeg_matchchans(bglocs,ltlocs,noplot)no_plot = 0; % yes|no flagif nargin > 2 & strcmp(lower(noplot),'noplot')  no_plot = 1;endif ~isstruct(bglocs) | ~isstruct(ltlocs)   help eeg_matchchansendltchans = length(ltlocs);bgchans = length(bglocs);if ltchans > bgchans  fprintf('BIGlocs chans (%d) < smalllocs chans (%d)\n',bgchans,ltchans);  returnendselchans = zeros(ltchans,1);dists    = zeros(ltchans,1);bd       = zeros(bgchans,1);%%%%%%%%%%%%%%%%%% Compute the distances %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%fprintf('BIG  ltl  Dist\n');for c=1:ltchans   for C=1:bgchans      if ~isempty(ltlocs(c).X) & ~isempty(bglocs(C).X)        bd(C) = sqrt((ltlocs(c).X/ltlocs(c).sph_radius - bglocs(C).X/bglocs(C).sph_radius)^2 + ...                    (ltlocs(c).Y/ltlocs(c).sph_radius - bglocs(C).Y/bglocs(C).sph_radius)^2 + ...                    (ltlocs(c).Z/ltlocs(c).sph_radius - bglocs(C).Z/bglocs(C).sph_radius)^2);      end   end   %   %%%%%%%%%%%%%%%%% Find the nearest BIGlocs channel %%%%%%%%%%%%%%%%%%%%%%%   %   [bd ix] = sort(bd); % find smallest distance c <-> C   bglocs(1).bigchan = [];   k=1;   while ~isempty(bglocs(ix(k)).bigchan) & k<=bgchans % avoid empty channels     k=k+1;   end   if k>bgchans     fprintf('No match found for smalllocs channel %d - error!?\n',c);     return % give up - should not reach here!   end   while k<length(ix)     if c>1 & sum(ismember(ix(k),selchans(1:c-1)))>0 % avoid chans already chosen         k = k+1;     else        break     end   end   if k==length(ix)      fprintf('NO available nearby channel for littlechan %d - using %d\n',...                  c,ix(k));   end   selchans(c) = ix(k); % note the nearest BIGlocs channel   dists(c)    = bd(k); % note its distance   bglocs(ix(k)).bigchan = selchans(c); % add this info to the output   bglocs(ix(k)).bigdist = dists(c);   fprintf('.bigchan %4d, c %4d, k %d, .bigdist  %3.2f\n',...        bglocs(ix(k)).bigchan,c,k,bglocs(ix(k)).bigdist); % commandline printoutend; % cselocs = bglocs(selchans); % return the selected BIGlocs struct array subset%%%%%%%%%%%%%%%%%% Plot the results %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if ~no_plot    figure;    titlestring = sprintf('%d-channel subset closest to %d channel locations',ltchans,bgchans);    tl=textsc(titlestring,'title');    set(tl,'fontweight','bold');    set(tl,'fontsize',15);    sbplot(7,2,[3 13]);    hist(dists,length(dists));    title('Distances between corresponding channels');    xlabel('Euclidian distance (sph. rad. 1)');    ylabel('Number of channels');    sbplot(7,5,[8,35]);    topoplot(dists,selocs,'electrodes','numbers','style','both');    title('Distances');    clen = size(colormap,1);    sbnull = sbplot(7,2,[10 12])    cb=cbar;    cbar(cb,[clen/2+1:clen]);    set(sbnull,'visible','off')        axcopy; % turn on axcopyend

⌨️ 快捷键说明

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