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
|