function [time, rate] = convolution_rate(spikes, sigma, dt, t_max)
% PSTH computed with convolution method. 
%
% [time, rate] = convolution_rate(spikes, sigma, dt, t_max)
%
% Arguments: 
%   spikes: a vector containing the spike times.
%   sigma : the standard deviation of the Gaussian kernel in seconds.
%   dt    : the temporal resolution in seconds.
%   t_max : the trial duration in seconds.
%
% Returns:
%   two vectors containing the time and the rate.

    time = 0:dt:t_max - dt;
    rate = zeros(size(time));
    spike_indices = round(spikes / dt);
    rate(spike_indices) = 1;
    kernel = gaussKernel(sigma, dt);
    rate = conv(rate, kernel, 'same');
end


function y = gaussKernel(s, step)
    x = -4 * s:step:4 * s;
    y = exp(-0.5 .* (x ./ s).^ 2) ./ sqrt(2 * pi) / s;
end