Matlabでの高速チャート作成

著者は、円形ビューのレーダーインジケーターを整理する例により、Matlabaでグラフ(より正確には画像)の迅速な再描画を整理した経験を共有したいと考えています。 (IKO、英文学の別名PPI)。

結論として、同じMatlabでレーダー信号のシミュレーターが送信され、ネットワーク経由でデータが送信されました。 また、チェックするために、マシンがMatlabに接続され、Matlabはネットワーク経由でデータを受信し、IKOのようなインジケータに表示しました。 レーダーのトピックから遠く離れている人でさえ、おそらく映画では少なくともIKOを見ました。 Matlabでは、このことは次のようになります。



画像



角度スライダーは、レーダーアンテナのビームの位置を示します。 実際のレーダーアンテナは4〜6秒で完全に回転し、可能な限りリアルタイムに近い表示速度を実現することがタスクでした。

しかし、そのような画像をグラフに表示する方法は? Matlabの極座標演算子を使用しますか? 実際には、出力速度は単なるカメになりません。

最初は、標準のMatlabツールを使用して画像を表示する試みが行われました:画像の指示(wellまたはimagesc)。 結果は悲しいものでした:画像は2分間、画面上で完全に1回転できました。 必要な速度の20倍遅い。



しかし、抜け道が見つかりました。 画面に画像を表示するはるかに高速な方法があることが判明しました。 このため、imageコマンドは1回だけ与えられ、そのコマンドへのリンクは記憶されます。



h = image(...
      
      





次に-マトリックスが作成されます-画像のコピー。 この行列の初期読み込みは、たとえば次のようにオブジェクトhのプロパティから実行できます。



 ImageMatrix = get(h,'CData');
      
      





ImageMatrixマトリックスに必要な計算と変更が実行されます。 次に、新しいマトリックスがコマンドとともに画面に表示されます



 set(h,'CData',ImageMatrix); drawnow;
      
      





このような結論は、イメージコマンドが毎回呼び出されるときよりも少なくとも1桁(実際にはそれ以上)速くなります。

マークアップとスライダーを再描画しないようにするため(特にグレーパレットが使用されているため、色で描画すると問題が発生します)、線、範囲円、角度スライダー、および数字は、線、テキスト、楕円などのコマンドで描画されます。 この間に発生した唯一の問題は、座標の再計算でした(グラフと線、悲しいかな、Matlabの異なる世界に住んでいます)。 また、 これらの再計算を徹底的に処理する時間がなかったのは非常に面倒でした。注釈メニューをオンにすることで、マークアップ要素が手で描かれ、コードに自動的に転送されました。 その結果、いくつかの不正確さがあります。図は、コーナースライダーの開始点がPPIの中心にわずかに落ちないことを示しています。

最終的に、i7プロセッサ、16 GBのRAM、およびGeForce 690グラフィックカードを搭載したマシンで、グラフィックカードのCUDA機能を使用すると、Matlabのオブジェクト指向プログラミングスタイルを使用していても、プログラムはリアルタイムに適合します。 これにより、プログラムをMatlabからC / C ++またはDelphiに移植するという面倒な段階が回避されました。



このテクニックが誰かに役立つことを願っています



All Articles