annotate aim-mat/tools/strf.m @ 4:537f939baef0 tip

various bug fixes and changed copyright message
author Stefan Bleeck <bleeck@gmail.com>
date Tue, 16 Aug 2011 14:37:17 +0100
parents 20ada0af3d7d
children
rev   line source
tomwalters@0 1 % support file for 'aim-mat'
tomwalters@0 2 %
tomwalters@0 3 % This external file is included as part of the 'aim-mat' distribution package
bleeck@3 4 % (c) 2011, University of Southampton
bleeck@3 5 % Maintained by Stefan Bleeck (bleeck@gmail.com)
bleeck@3 6 % download of current version is on the soundsoftware site:
bleeck@3 7 % http://code.soundsoftware.ac.uk/projects/aimmat
bleeck@3 8 % documentation and everything is on http://www.acousticscale.org
tomwalters@0 9
tomwalters@0 10 function retfld=strf(sig,spikes,start,stop,nrfre,maxfre)
tomwalters@0 11 % sig muss ein Signal sein
tomwalters@0 12 % st muss ein Spiketrain sein
tomwalters@0 13 % das Ergebnissignal hat die Länge bis-von
tomwalters@0 14 % das Ergebnis ist ein Feld mit der Länge stop-start und der Breite nrfre
tomwalters@0 15
tomwalters@0 16 if ~isobject(sig)
tomwalters@0 17 disp('error: Signal must be an Object signal')
tomwalters@0 18 end
tomwalters@0 19
tomwalters@0 20 if nargin < 6
tomwalters@0 21 maxfre=GetSR(sig)/2;
tomwalters@0 22 end
tomwalters@0 23 if nargin < 5
tomwalters@0 24 nrfre=512;
tomwalters@0 25 end
tomwalters@0 26 if nargin < 4
tomwalters@0 27 stop=0.01; %standart: 10 ms nach 0
tomwalters@0 28 end
tomwalters@0 29 if nargin < 3
tomwalters@0 30 start=-0.05; %standart: 50 ms vor 0
tomwalters@0 31 end
tomwalters@0 32
tomwalters@0 33
tomwalters@0 34 % make one big spectrogram of the whole signal and then split the important
tomwalters@0 35 % parts:
tomwalters@0 36 bigspectrum=spectrogram(sig,nrfre,maxfre);
tomwalters@0 37
tomwalters@0 38 avera=mean(mean(getvalues(bigspectrum)));
tomwalters@0 39 nr_t=getnrt(bigspectrum);
tomwalters@0 40 nr_f=getnrf(bigspectrum);
tomwalters@0 41
tomwalters@0 42
tomwalters@0 43 duration= stop-start; % so long is the signal that we want to analyse
tomwalters@0 44 nr_spikes=length(spikes);
tomwalters@0 45 orglen=GetLength(sig);
tomwalters@0 46
tomwalters@0 47
tomwalters@0 48 srf=getsr(bigspectrum);
tomwalters@0 49 res_nr_t=round(duration*srf);
tomwalters@0 50 all_vals=getvalues(bigspectrum);
tomwalters@0 51 fld=zeros(nr_f,res_nr_t);
tomwalters@0 52
tomwalters@0 53 for i=1:nr_spikes
tomwalters@0 54 spiketime=spikes(i);
tomwalters@0 55 t_start=spiketime+start;
tomwalters@0 56 % t_stop=spiketime+stop;
tomwalters@0 57
tomwalters@0 58 binstart=time2bin(srf,t_start);
tomwalters@0 59 binstop=binstart+res_nr_t-1;
tomwalters@0 60
tomwalters@0 61 % tempfeld=zeros(nr_f,res_nr_t);
tomwalters@0 62 % fill the rest of the signal with the average value so that its not going
tomwalters@0 63 % down im amplitude
tomwalters@0 64 tempfeld=ones(nr_f,res_nr_t).*avera;
tomwalters@0 65
tomwalters@0 66 if t_start >= orglen
tomwalters@0 67 break; % no more relevant spikes in this spiketrain
tomwalters@0 68 end
tomwalters@0 69
tomwalters@0 70 if binstart>0 & binstop <= res_nr_t % der "Normalfall" (full signal is in window)
tomwalters@0 71 tempfeld=all_vals(:,binstart:binstop);
tomwalters@0 72 else % either start or stop are out of signal window
tomwalters@0 73 if binstart<0 %wenn das Signal nicht so lang ist, müssen wir nullen vornedranhängen
tomwalters@0 74 tempfeld(:,-binstart+1:end)=all_vals(:,1:binstop+1);
tomwalters@0 75 end
tomwalters@0 76 if binstop>res_nr_t %wenn das Signal länger sein sollte hängen wir Nullen hintenan
tomwalters@0 77 nr_v=binstop-nr_t;
tomwalters@0 78 tempfeld(:,1:(res_nr_t-nr_v))=all_vals(:,binstart:binstart+(res_nr_t-nr_v)-1);
tomwalters@0 79 end
tomwalters@0 80 end
tomwalters@0 81 % if size(tempfeld,2)>res_nr_t
tomwalters@0 82 % o=0;
tomwalters@0 83 % end
tomwalters@0 84 tempfeld=tempfeld(:,1:res_nr_t);
tomwalters@0 85 fld=fld+tempfeld;
tomwalters@0 86
tomwalters@0 87 % if mod(i,1)==0
tomwalters@0 88 % figure(234)
tomwalters@0 89 % testfld=field(res_nr_t,nr_f,srf);
tomwalters@0 90 % testfld=setmaxfre(testfld,maxfre);
tomwalters@0 91 % testfld=setoffset(testfld,start);
tomwalters@0 92 % testfld=setvalues(testfld,fld);
tomwalters@0 93 % plot(testfld,'log')
tomwalters@0 94 % % plot(fld)
tomwalters@0 95 % drawnow
tomwalters@0 96 % end
tomwalters@0 97 end
tomwalters@0 98
tomwalters@0 99 retfld=field(res_nr_t,nr_f,srf);
tomwalters@0 100 retfld=setmaxfre(retfld,maxfre);
tomwalters@0 101 retfld=setoffset(retfld,start);
tomwalters@0 102 retfld=setvalues(retfld,fld);
tomwalters@0 103
tomwalters@0 104
tomwalters@0 105
tomwalters@0 106 % figure(23423)
tomwalters@0 107 % plot(fld,'log');
tomwalters@0 108 % drawnow