diff --git a/programming/exercises/STA/p-unit_stimulus.mat b/programming/exercises/STA/p-unit_stimulus.mat index 1e88d5e..b6d0b25 100644 Binary files a/programming/exercises/STA/p-unit_stimulus.mat and b/programming/exercises/STA/p-unit_stimulus.mat differ diff --git a/programming/exercises/STA/sta.m b/programming/exercises/STA/sta.m index 50df6ff..0b4e3cb 100644 --- a/programming/exercises/STA/sta.m +++ b/programming/exercises/STA/sta.m @@ -1,11 +1,11 @@ -function [sta, std_sta, valid_spikes]= sta(stimulus, spike_times, count, sampling_rate) +function [st_avg, std_sta, valid_spikes]= sta(stimulus, spike_times, count, sampling_rate) snippets = zeros(numel(spike_times), 2*count); valid_spikes = 1; for i = 1:numel(spike_times) t = spike_times(i); index = round(t*sampling_rate); - if index < count || (index + count) > length(stimulus) + if index <= count || (index + count) > length(stimulus) continue end snippets(valid_spikes,:) = stimulus(index-count:index+count-1); @@ -14,5 +14,5 @@ end snippets(end-(end-valid_spikes):end,:) = []; -sta = mean(snippets, 1); +st_avg = mean(snippets, 1); std_sta = std(snippets,[],1); \ No newline at end of file diff --git a/programming/exercises/STA/sta_script.m b/programming/exercises/STA/sta_script.m index a5b6799..432f971 100644 --- a/programming/exercises/STA/sta_script.m +++ b/programming/exercises/STA/sta_script.m @@ -12,24 +12,24 @@ for i = 1:length(spike_times) all_times = cat(1, all_times, spike_times{i}); end -[sta, sta_sd, num] = sta(stimulus_strong(:,2), all_times, 1000, sample_rate); +[st_average, sta_sd, num] = sta(stimulus(:,2), all_times, 1000, sample_rate); fig = figure(); set(fig, 'PaperUnits', 'centimeters'); set(fig, 'PaperSize', [11.7 9.0]); set(fig, 'PaperPosition',[0.0 0.0 11.7 9.0]); set(fig,'Color', 'white') -plot(((1:length(sta))-1000)/sample_rate, sta) +plot(((1:length(st_average))-1000)/sample_rate, st_average) xlabel('time [s]') ylabel('stimulus') %% reverse reconstruction % make binary representation of the spike times -binary_spikes = zeros(size(stimulus_strong, 1), length(spike_times)); +binary_spikes = zeros(size(stimulus, 1), length(spike_times)); estimated_stims = zeros(size(binary_spikes)); for i = 1:length(spike_times) binary_spikes(round(spike_times{i}*sample_rate), i) = 1; - estimated_stims(:,i) = conv(binary_spikes(:,i), sta, 'same'); + estimated_stims(:,i) = conv(binary_spikes(:,i), st_average, 'same'); end fig = figure(); @@ -37,9 +37,9 @@ set(fig, 'PaperUnits', 'centimeters'); set(fig, 'PaperSize', [11.7 9.0]); set(fig, 'PaperPosition',[0.0 0.0 11.7 9.0]); set(fig,'Color', 'white') -plot(stimulus_strong(:,1), stimulus_strong(:,2), 'displayname','original') +plot(stimulus(:,1), stimulus(:,2), 'displayname','original') hold on -plot(stimulus_strong(:,1), mean(estimated_stims,2), 'r', 'displayname', 'reconstruction') +plot(stimulus(:,1), mean(estimated_stims,2), 'r', 'displayname', 'reconstruction') xlabel('time [s]') ylabel('stimulus') legend show @@ -49,14 +49,19 @@ legend show % we need to downsample the data otherwise the covariance matrixs gets too % large 20Khz to 1kHz -downsampled_binary = zeros(size(stimulus_strong, 1)/20, length(spike_times)); -downsampled_stim = zeros(size(downsampled_binary,1),1); +% downsampled_binary = zeros(size(stimulus, 1)/20, length(spike_times)); +downsampled_stim = zeros(size(stimulus,1)/20,1); -for i = 1:length(spike_times) - binary_spikes(round(spike_times{i}*1000), i) = 1; -end +% for i = 1:length(spike_times) +% indices = round(spike_times{i}.*1000); +% indices(indices < 1) = []; +% downsampled_binary(indices, i) = 1; +% end for i = 1:length(downsampled_stim) - start_index = (i-1) * 1000 + 1; - downsampled_stim(i) = mean(stimulus_strong()*20)) + start_index = (i-1) * 20 + 1; + downsampled_stim(i) = mean(stimulus(start_index:start_index+19,2)); end +[st_average, ~, ~] = sta(downsampled_stim, all_times, 50, 1000); + +