リアルタイムのモーショントラッキングにPolhemusLibertyシステムを使用するプロジェクトに取り組んでいます。最近、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つの列のみが削除または展開されます。これは、その特定の場合に非常にうまく機能します。サンプリングレートが1サンプル/秒ではなく240Hzの場合はどうなりますか。無限のwhileループが与えられると、バッファのパラメータを変更せずにデータ損失が増加します。
リンクされたソリューションを変更する方法、または完全に新しいソリューションを作成する方法を誰かが知っていますか?バッファーには、分析するサンプルが100個あるはずです。
ブレーンストーミングをしましょう!私はいくつかの賢いアイデアを持っていることに心を開いています。よろしくお願いします、ロブ