Mercurial > hg > aimmat
diff aim-mat/tools/@frame/crosschannelinfluence.m @ 0:74dedb26614d
Initial checkin of AIM-MAT version 1.5 (6.4.2011).
author | tomwalters |
---|---|
date | Fri, 20 May 2011 12:32:31 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/aim-mat/tools/@frame/crosschannelinfluence.m Fri May 20 12:32:31 2011 +0100 @@ -0,0 +1,130 @@ +% method of class @frame +% +% INPUT VALUES: +% +% RETURN VALUE: +% +% +% (c) 2003, University of Cambridge, Medical Research Council +% Stefan Bleeck (stefan@bleeck.de) +% http://www.mrc-cbu.cam.ac.uk/cnbh/aimmanual +% $Date: 2003/01/17 16:57:46 $ +% $Revision: 1.3 $ + +function ret=crosschannelinfluence(fr,erb) +% usage: ret=crosschannelinfluence(fr,erb) +% calculates the difference of the maxima from one channel to the next +% so many channels are calculated as in erb + +if nargin < 2 + erb=1; +end + +break_freq=2000; + +ret=frame(fr); + +vals=getvalues(fr); +vals=zeros(size(vals)); + +nr_chan=getnrchannels(fr); +cfs=getcf(fr); + +for i=1:nr_chan + chan=getsinglechannel(fr,i); + [maxpos{i},minpos{i},maxs{i},mins{i}]=getminmax(chan); +end +sig=chan; % KopieKonstruktor + +for i=1:nr_chan-erb + fre=cfs(i); + t_oszi=1/fre; % Die Zeitspanne zweier natürlicher peaks in dem Kanal + + if fre>break_freq + break + end + + nr_max=length(maxpos{i}); + difmin=zeros(nr_max,1); + for k=i+1:i+erb+1 + for j=1:nr_max; + xx=maxpos{i}(j); + maxleft=getmaximumleftof(xx+t_oszi/10,maxpos{k},minpos{k},maxs{k},mins{k}); + maxright=getmaximumrightof(xx-t_oszi/10,maxpos{k},minpos{k},maxs{k},mins{k}); + if isempty(maxleft) + difleft=t_oszi; + else + difleft=abs(xx-maxleft); + end + if isempty(maxright) + difright=t_oszi; + else + difright=abs(maxright-xx); + end + difmin(j)=difmin(j)+min(difleft,difright); + end + end +% difmin=difmin*200; + difmin=difmin/t_oszi; + difmin=1-difmin; + difmin(find(difmin < 0))=0; + + sig=buildspikesfrompoints(sig,maxpos{i},difmin); + vals(i,:)=getvalues(sig)'; +end + +ret=setvalues(ret,vals); + +return + + + +prev_chan=getsinglechannel(fr,1); +[prevmaxpos,prevminpos,prevmaxs,prevmins]=getminmax(prev_chan); +sig=prev_chan; + +for i=2:nr_chan + fre=cfs(i); + t_oszi=1/fre; % Die Zeitspanne zweier natürlicher peaks in dem Kanal + + if fre>break_freq + break + end + + now_chan=getsinglechannel(fr,i); + [nowmaxpos,nowminpos,nowmaxs,nowmins]=getminmax(now_chan); + difmin=zeros(size(nowmaxpos)); + + for j=1:length(nowmaxpos); + xx=nowmaxpos(j); + difleft=getmaximumleftof(xx+t_oszi/10,prevmaxpos,prevminpos,prevmaxs,prevmins); + difright=getmaximumrightof(xx-t_oszi/10,prevmaxpos,prevminpos,prevmaxs,prevmins); + if isempty(difleft) + difleft=inf; + else + difleft=abs(xx-difleft); + end + if isempty(difright) + difright=inf; + else + difright=abs(difright-xx); + end + difmin(j)=min(difleft,difright); + end + difmin=1-(difmin/t_oszi); + % sig=buildfrompoints(sig,nowmaxpos,difmin); + + sig=buildspikesfrompoints(sig,nowmaxpos,difmin); + + vals(i,:)=getvalues(sig)'; + + prev_chan=now_chan; + prevmaxpos=nowmaxpos; + prevminpos=nowminpos; + prevmaxs=nowmaxs; + prevmins=nowmins; + s=0; +end + +ret=setvalues(ret,vals); +