我正在使用 Polhemus Liberty 系统进行实时运动跟踪的项目。最近,我在 Matlab 的 GUIDE 中开发了一个 GUI,以 240Hz 的采样频率获取附加传感器的位置和方向。此外,我添加了一个人工神经网络 (ANN) 来实时对运动学参数进行一些预测。但是,在获得 ANN 的预测之后,我应该对多维数组进行一些数据分析。由于高维,在没有实时标准的情况下,这种特定的数据分析只能通过添加多个嵌套循环来完成。问题是,如果我在方法中添加 FOR 循环,那么实时(或接近实时)标准肯定会受到损害。为了避免添加嵌套的 FOR 循环,我想我可以创建一个缓冲区(FIFO 循环缓冲区)来临时存储预测数据并分析数据。我在以下链接下找到了一个智能解决方案:
1) 缓冲区初始化:
nBuffer = 10; % You can set this to whatever number of time points
% you want to store data for
nSamples = 2; % You can set this to the number of data values you
% need for each point in time
centroidBuffer = zeros(nSamples,nBuffer); % Initialize the buffer to zeroes
2)连续循环,缓冲区使用:
keepLooping = true;
processTime = 0;
while keepLooping,
% Capture your image
% Compute the centroid data and place it in the vector "centroidData"
centroidBuffer = [centroidBuffer(:,2:end) centroidData(:)];
processTime = processTime+1;
if (processTime == nBuffer),
% Do whatever processing you want to do on centroidBuffer
processTime = 0;
end
% Choose to set keepLooping to false, if you want
end
据我了解,上述解决方案是一种“1 帧/秒”的方法。因此,在捕获图像并定义其“质心数据”后,缓冲区机制中只会删除或扩展一列。在这种特殊情况下,这非常有效。如果采样率不是 1 个样本/秒而是 240Hz,会发生什么情况。给定一个无限的while循环,在不改变缓冲区参数的情况下,数据丢失将增加。
有人知道如何修改链接的解决方案或创建一个全新的解决方案吗?在缓冲区中,我应该有 100 个样本要分析。
让我们对此进行一些头脑风暴!我愿意有一些聪明的想法。在此先感谢,罗布