Mercurial > hg > aimmat
view 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 |
line wrap: on
line source
% support file for 'aim-mat' % % This external file is included as part of the 'aim-mat' distribution package % (c) 2011, University of Southampton % Maintained by Stefan Bleeck (bleeck@gmail.com) % download of current version is on the soundsoftware site: % http://code.soundsoftware.ac.uk/projects/aimmat % documentation and everything is on http://www.acousticscale.org function retfld=strf(sig,spikes,start,stop,nrfre,maxfre) % sig muss ein Signal sein % st muss ein Spiketrain sein % das Ergebnissignal hat die Länge bis-von % das Ergebnis ist ein Feld mit der Länge stop-start und der Breite nrfre if ~isobject(sig) disp('error: Signal must be an Object signal') end if nargin < 6 maxfre=GetSR(sig)/2; end if nargin < 5 nrfre=512; end if nargin < 4 stop=0.01; %standart: 10 ms nach 0 end if nargin < 3 start=-0.05; %standart: 50 ms vor 0 end % make one big spectrogram of the whole signal and then split the important % parts: bigspectrum=spectrogram(sig,nrfre,maxfre); avera=mean(mean(getvalues(bigspectrum))); nr_t=getnrt(bigspectrum); nr_f=getnrf(bigspectrum); duration= stop-start; % so long is the signal that we want to analyse nr_spikes=length(spikes); orglen=GetLength(sig); srf=getsr(bigspectrum); res_nr_t=round(duration*srf); all_vals=getvalues(bigspectrum); fld=zeros(nr_f,res_nr_t); for i=1:nr_spikes spiketime=spikes(i); t_start=spiketime+start; % t_stop=spiketime+stop; binstart=time2bin(srf,t_start); binstop=binstart+res_nr_t-1; % tempfeld=zeros(nr_f,res_nr_t); % fill the rest of the signal with the average value so that its not going % down im amplitude tempfeld=ones(nr_f,res_nr_t).*avera; if t_start >= orglen break; % no more relevant spikes in this spiketrain end if binstart>0 & binstop <= res_nr_t % der "Normalfall" (full signal is in window) tempfeld=all_vals(:,binstart:binstop); else % either start or stop are out of signal window if binstart<0 %wenn das Signal nicht so lang ist, müssen wir nullen vornedranhängen tempfeld(:,-binstart+1:end)=all_vals(:,1:binstop+1); end if binstop>res_nr_t %wenn das Signal länger sein sollte hängen wir Nullen hintenan nr_v=binstop-nr_t; tempfeld(:,1:(res_nr_t-nr_v))=all_vals(:,binstart:binstart+(res_nr_t-nr_v)-1); end end % if size(tempfeld,2)>res_nr_t % o=0; % end tempfeld=tempfeld(:,1:res_nr_t); fld=fld+tempfeld; % if mod(i,1)==0 % figure(234) % testfld=field(res_nr_t,nr_f,srf); % testfld=setmaxfre(testfld,maxfre); % testfld=setoffset(testfld,start); % testfld=setvalues(testfld,fld); % plot(testfld,'log') % % plot(fld) % drawnow % end end retfld=field(res_nr_t,nr_f,srf); retfld=setmaxfre(retfld,maxfre); retfld=setoffset(retfld,start); retfld=setvalues(retfld,fld); % figure(23423) % plot(fld,'log'); % drawnow