我有16个不同渠道收集的神经数据。此数据记录了30秒钟的时间。
在10s的时间内(从20s到30s),我要记录大于或等于指定阈值的神经数据点的数量。我想按照0.001秒的间隔进行此操作。
我正在使用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
当我运行循环时,仓1中的数据将被覆盖,而不是移至仓2、3 ... 10000。感谢您提供解决此问题的反馈。
非常感谢。
答案 0 :(得分:0)
您忘记了使用运行变量作为索引来访问数据。试试
% 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
的列索引