我收集了16个不同通道的神经数据。这些数据是在30秒的时间内记录的。
在10秒的时间里(从20到30秒(,我想记录大于或等于指定阈值的神经数据点的数量。我想根据0.001s的仓来做这件事。
我正在使用MATLAB 2019b。
到目前为止,我的代码如下:
t1 = 20;
t2 = 30;
ind1 = find(tim_trl>=t1, 1);
ind2 = find(tim_trl>=t2, 1);
time1 = tim_trl(ind1:ind2); %10s window
sampRate = 24414; %sampling freq (Hz), samples per sec
muaWindow = 0.001; %1ms window
binWidth = round(muaWindow*sampRate); %samples per 1ms window
threshold = 0.018;
for jj = 1:16 %ch
data = AbData(ind1:ind2, jj); %10 sec of data
for kk = 1:10000
abDataBin = data(1:binWidth,jj); %data in 1 bin
dataThreshold = find(abDataBin >= threshold); %find data points >= threshold
mua(kk,jj) = sum(dataThreshold); %number of data pts over threshold per ch
end
end
到目前为止,我只是在这一点上遇到了一点麻烦:
abDataBin = data(1:binWidth,jj); %data in 1 bin
当我运行循环时,bin 1中的数据被覆盖,而不是转移到bin 2、3…10000。如果有任何关于修复此问题的反馈,我将不胜感激。
非常感谢。
您忘记将运行变量用作访问数据的索引。尝试
% create data with 16 channels
AbData = rand(10000,16);
binWidth = 24;
threshold = 0.001;
for channel=1:16
data = AbData(2001:3000,channel);
counter = 1; % needed for mua indexing
% looping over the bin starting indeces
for window=1:binWidth:length(data)-(binWidth)
% access data in one bin
bindata = data(window:window+binWidth);
% calculate ms above threshold
mua(counter, channel) = sum(bindata >= threshold);
counter = counter+1;
end
end
编辑:您的data
变量的维度为nx1,因此不需要使用jj
进行列索引