THG_FASTER_1_channel_artifacts_20140302.m 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. function [index parm zval] = cm_FASTER_1_channel_artifacts_20140302(cfg,data)
  2. %% defaults
  3. if ~isfield(cfg,'criterion'); criterion = 3; else criterion = cfg.criterion; end
  4. if ~isfield(cfg,'recursive'); recursive = 1; else recursive = strcmp(cfg.recursive,'yes'); end
  5. %% mean correlation between channels
  6. tmp = cell2mat(data.trial);
  7. % correlation
  8. cor = corr(tmp');
  9. % set autocorrelation to NaN
  10. for j = 1:length(cor)
  11. cor(j,j) = NaN;
  12. end; clear j
  13. % z statistic
  14. parm.chan_cor = cm_inv_fisher_Z_20130605(nanmean(cm_fisher_Z_20130426(cor))');
  15. zval.chan_cor = zscore(parm.chan_cor);
  16. %% channel variance
  17. % z statistic
  18. parm.chan_var = var(tmp',1)';
  19. zval.chan_var = zscore(parm.chan_var);
  20. %% hurst exponent
  21. % calculate hurst exponent
  22. for t = 1:length(data.trial)
  23. display(['processing trial ' num2str(t)])
  24. for c = 1:length(data.label)
  25. hurst(c,t) = cm_heuristic_hurst_exponent_20140302(data.trial{t}(c,:));
  26. end; clear c
  27. end; clear t
  28. % z statistic of average hurst exponent
  29. parm.chan_hurst = mean(hurst,2);
  30. zval.chan_hurst = zscore(parm.chan_hurst);
  31. %% find outlier
  32. % temporary zscores
  33. tmpz = zval;
  34. % correlation outlier
  35. tmpz.chan_cor = cm_outlier2nan_20140311(tmpz.chan_cor,'<',criterion,recursive);
  36. % variance outlier
  37. tmpz.chan_var = cm_outlier2nan_20140311(tmpz.chan_var,'>',criterion,recursive);
  38. % hurst exponent outlier
  39. tmpz.chan_hurst = cm_outlier2nan_20140311(tmpz.chan_hurst,'>/<',criterion,recursive);
  40. %% mark outlier
  41. index = find( isnan(tmpz.chan_cor) | isnan(tmpz.chan_var) | isnan(tmpz.chan_hurst) );