首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >神经生理学记录MATLAB

神经生理学记录MATLAB
EN

Stack Overflow用户
提问于 2015-07-15 09:31:40
回答 1查看 109关注 0票数 1

我将我的数据存储在与神经元记录相关的结构中。神经元尖峰电位存储在逻辑数组中,其中尖峰电位为1,没有尖峰电位为0。

代码语言:javascript
复制
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 ...]

我要做的是用高斯滤波器将这些尖峰信号转换成平滑的曲线信号。

我有以下平滑函数:

代码语言:javascript
复制
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

我只是想知道如何从像上面的逻辑数组这样的尖峰信号中产生神经信号?

附言:我很迷茫,我的答案不能理解的贴在这里。

EN

回答 1

Stack Overflow用户

发布于 2015-07-15 18:07:12

如果我理解正确的话,你只需要增加采样频率和卷积。由于原始数组对应于采样频率为一个尖峰的信号,如果您想要提高尖峰的分辨率,则需要在尖峰之间人为地引入更多数据点。

代码语言:javascript
复制
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]

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31420042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档