Нейрофизиологическая запись MATLAB

Мои данные хранятся в структурах, касающихся записи с нейронов. Нейронные пики хранятся в логическом массиве, где пик равен 1, а пик не равен 0.

spike = <1x50 logical> 
spike = [1 0 0 0 1 0 0 1 0 0 0 0 0 0 1 1 1 0 1 0 1 0 0 0 1 1 0 0 ...]

Что мне нужно сделать, это преобразовать эти пики в сигнал с гладкой кривой, используя фильтр Гаусса.

У меня есть следующая функция для сглаживания:

function z = spikes(x, winWidth)
% places a Gaussian centered on every spike
% if x is matrix, then perform on the columns

winWidth = round(winWidth);

if winWidth == 0
    y = [0 1 0];
    w = 1;
else
    w = winWidth * 5;
    t = -w : w;
    y = normpdf(t,0,winWidth);
end

if isvector(x)
    z = conv(x,y);
    z = z(w+1 : end);
    z = z(1 : length(x));
else
    z = zeros(size(x));
    for i = 1 : size(x,2)
        z1 = conv(x(:,i),y);
        z1 = z1(w+1 : end);
        z1 = z1(1 : length(x));
        z(:,i) = z1;
    end
end

end

Мне просто интересно, как я могу сделать нервные сигналы от спайков, которые похожи на вышеупомянутый логический массив?

PS: я очень растерялся, и мои ответы непонятны для публикации здесь.

1 ответ

Если я правильно понял, вам просто нужно увеличить частоту дискретизации и свернуть. Поскольку ваш исходный массив соответствует сигналу с частотой дискретизации, равной одному пику, если вы хотите увеличить разрешение своих пиков, вам необходимо искусственно ввести больше точек данных между пиками.

spike = [1 0 0 0 1 0 0 1 0 0 0 0 0 0 1 1 1 0 1 0 1 0 0 0 1 1 0 0];

![n_samples = numel(spike);
resampling_f = 50;
new_signal = zeros(n_samples*resampling_f,1);

spikes_ind = find(spike);
new_signal((spikes_ind-1)*50+round(resampling_f/2)) = 1;

%here you can use the spikes function you defined
winWidth = 10;
w = winWidth * 5;
t = -w : w;
kernel = normpdf(t,0,winWidth);
spikes_sample = conv(x,kernel);

figure, hold on
subplot(1,2,1), hold on
plot(new_signal)

subplot(1,2,2), hold on
plot(spikes_sample)][1]

введите описание изображения здесь

Другие вопросы по тегам