如何使用for循环创建滑动窗口?

时间:2020-07-31 12:12:50

标签: matlab for-loop sliding-window

我有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。感谢您提供解决此问题的反馈。

非常感谢。

1 个答案:

答案 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的列索引