問題タブ [data-acquisition]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
4987 参照

callback - コールバックと永続変数を使用して MATLAB でデータを継続的に取得する

最近、MATLAB を使用してデータ収集ボードからデータを収集し始めたばかりで、継続的にデータを収集する関数が必要でした (つまり、ctrl^C で関数を終了するまで)。これを行うために、32 ビット Windows OS でデータ取得ツールボックスを使用しています。

matlab ヘルプのドキュメントとこのサイトのいくつかの回答に基づいて、チャネルを入力ハンドルに追加した後、次のことを行う必要があることがわかりました。

  1. 「SamplesPerTrigger」を Inf に設定します
  2. 「TimerPeriod」を何らかの値に設定して、「TimerFcn」をトリガーします
  3. 「TimerFcn」を、データを永続変数に追加するサブ関数コールバックに設定します

これは正しい方法ですか?

私のコードは次のとおりです。

初期のアナログ入力は間違いなく正常に機能しています。「TimerFcn」に AcquireData コールバックを与える多くの順列を試しました。私が受け取るエラーは

??? ==> acquire_arena_test>AcquireData の使用エラー 入力引数が多すぎます。

警告: TimerFcn コールバックが無効になっています。コールバックを有効にするには、TimerFcn プロパティを設定します。`

助けてくれてありがとう。

0 投票する
2 に答える
605 参照

c++ - 画像データ取得および時間的ピクセル分析のためのC++ライブラリ

私は、手術中に人間の組織が無線周波数と融合したかどうかを監視するプロジェクトに取り組んでいます。そのため、非常に高速なカメラ(1800fps)と、組織およびフレームグラバー(1GBメモリ)のレーザー照明を使用しています。

現時点では、グラバーからデータを取得してPCに渡すだけの、Cベースのソフトウェアがあり、画面にも画像が表示されますが、フレームグラバーからすべてのフレームを取得して分析するアルゴリズムを追加する必要があります。マスクし、時間画像のコントラスト偏差をリアルタイムで計算します。

C++での画像分析に役立つフレームワークがそこにあるに違いないと思います。何を指示してるんですか?Zhatは、リアルタイムで可能な限り高速に処理を行うための最良のオプションでしょうか?OpenCV?OpenGL?GLPlus?

0 投票する
1 に答える
4259 参照

arm - STM32F103のADCは最大3Mspsをサンプリングできますか?

stm32マイクロコントローラーは初めてです。STM32F103データシートで、それぞれ最大1Mspsを実行できる3つのADCコンバーターがあることを読みました。これらの3つのコンバーターを利用して、最大3 Mspsの1チャネルをサンプリングすることは可能ですか?あるコンバーターから別のコンバーターへの時間差0.333usで、各コンバーターの変換を順番に開始すれば可能だと思います。したがって、1usの期間ごとに3つのコンバーターから3つの変換結果を取得します。

それは実行可能ですか?ご意見をお聞かせください。ありがとう。

0 投票する
2 に答える
662 参照

java - Matlab2011a および 64 ビット Win7 の Java GUI

今年の初めに、画像取得の目的で Matlab 環境で動作するように Java GUI をコーディングしました。matlab 内で Java_Gui.jar を呼び出すことができ、.jar ファイルからいくつかのクラスを使用することもできました。GUI は、WinXP 32 ビット、Matlab2006b および Matlab 2008a でテストされました。Java クラスを呼び出すための Matlab コード:

ただし、64 ビットの Win7 と Matlab2011a で同じプログラムを試したところ、おなじみの問題が発生しました。

なぜこれが起こっているのですか?jar ファイルを 64 ビット バージョンでコンパイルする必要があるのでしょうか。コードはまだ 32 ビット Win で動作しており、チェックしたところです。

回答: 64 ビット Windows 7 上の 32 ビット バージョンの Matlab で動作します!

0 投票する
3 に答える
640 参照

c++ - 計測器キャプチャ データの処理

データのストリームを生成する機器があります。私のコードは callback を介してこのデータにアクセスしますonDataAcquisitionEvent(const InstrumentOutput &data)。データ処理アルゴリズムは、データの到着速度よりも大幅に遅くなる可能性があるため、すべてのデータを処理することは期待できませんが (そうする必要はありません)、できるだけ多くのデータを処理したいと考えています。私が制御できないデータ取得速度を備えた環境センサーとしての機器に感謝します。InstrumentOutputたとえば、異なる場所での 3 つの同時圧力測定値を含むクラスである可能性があります。

また、データの簡単な履歴を保持する必要があります。たとえば、データのサンプルを 200 ミリ秒ごとに処理することが合理的に期待できると仮定します。ほとんどの場合、最後のサンプルを 1 つだけ処理しても問題ありませんが、最後のサンプルに異常な読み取り値が存在するかどうかに応じて、その最新のサンプルの前に到着した数秒分のデータを確認する必要がある場合があります。

onDataAcquisitionEvent()もう 1 つの要件は、センサーでのデータ損失を回避するために、できるだけ早くコールバックから抜け出すことです。

データ取得ライブラリ (サードパーティ) は、別のスレッドで機器データを収集します。

次のデザインを考えました。単一のプロデューサー/単一のコンシューマー キューを持ち、データ トークンを onDataAcquisitionEvent() コールバックの同期キューにプッシュします。
受信側では、キューからデータをポップするループがあります。データ到着率が高いため、ループはほとんどスリープしません。各反復で、次のことが起こります。

  1. 利用可能なすべてのデータをキューからポップし、
  2. ポップされたデータは循環バッファーにコピーされます (ブースト循環バッファーを使用しました)。このようにして、履歴が常に利用可能になります。
  3. バッファ内の最後の要素を処理します (そして、前の要素を調べる可能性があります)。
  4. ループを繰り返します。

質問:

  1. この設計は適切ですか? また、落とし穴は何ですか? と
  2. より良いデザインは何でしょうか?

編集:私が考えた1つの問題は、循環バッファのサイズが必要な履歴を保持するのに十分な大きさではない場合です。現在、単純に循環バッファーを再割り当てして、そのサイズを 2 倍にしています。1回か2回だけでいいと思います。

0 投票する
2 に答える
817 参照

python - Python io モジュールを使用してメモリ常駐データ構造を構築するにはどうすればよいですか?

データ取得システムから収集されたデータをメモリ内の場所に書き込んでから、データに対して非同期でさらに処理を実行するか、オフライン処理のためにファイルに書き出そうとしています。このアーキテクチャをこのようにして、データの取得をデータの分析と転送から分離し、将来の拡張と改善のための柔軟性を確保しようとしていますが、単純にデータを直接ファイルに書き込むよりも明らかに複雑です。

ここに私が書いたいくつかの探索的コードがあります。

ここにはいくつかの問題があります (おそらくもっと!):

-> 'data' は、私が組み立てようとしている構造 (Python の外部) をピックアップする変数名です。これは、配列のような構造であり、各レコードにはいくつかのプロセス データ測定値が含まれている連続したレコードを保持する必要があります。検索のキーとして使用できるタイムスタンプによって。コードが曖昧すぎて本当の質問を反映できない場合に備えて、これを設計意図の背景として提供しました。

-> 「データ」オブジェクトが作成されていないため、このコードは機能しません。後で埋めるために空のバッファを開こうとしていますが、Python は 2 つのオブジェクトを探しています。1 つは読み取り可能、もう 1 つは書き込み可能で、コードには存在しません。このため、正しい構成を使用しているかどうかさえわかりません。これにより、次のような疑問が生じます。

  1. io.BufferedRWPair は、このデータを処理する最良の方法ですか? 私はPython 2.7.2を使用しているので、StringIOを試しましたが、うまくいきませんでした。タイムスタンプキーを持つレコードのアイデアが好きなので、dict 構造を選択しましたが、代替案を検討したいと思います。代わりに見るべき他のioクラスはありますか?

  2. 私が調べた代替案の 1 つは、NumPy/SciPy/Pandas の世界で定義されている DataFrame コンストラクトです。面白そうですが、追加のモジュールがたくさん必要なように見えるので、私はそれを避けてきました。私はこれらのモジュールの経験がありません - 必要なものを得るために、これらのより複雑なモジュールを検討する必要がありますか?

皆さん、提案やフィードバックを歓迎します...この質問をチェックしてくれてありがとう!

0 投票する
1 に答える
3224 参照

android - Android ライブ レンダリング ストリップ チャート ライブラリ

データ取得デバイスからライブ データを受信する Android アプリに最適なグラフ作成ライブラリを見つけようとしています (1 秒あたり最大 800 サンプルをサポートします)。ズームイン、ズームアウト、チャートのトレースバックなどの追加機能を備えた、ライブで移動するストリップ チャートを表示する必要があります。achartengine、のようないくつかのオープン ソース ライブラリを見てきましたがafreechartgraphView十分な例と情報が不足しているため、どのライブラリを使用するべきかを実際に判断できないようです。役立つリンクはありますか?推奨事項はありますか?

0 投票する
2 に答える
947 参照

python - Python を使用した長期的な機器データの取得 - 「While」ループとスレッド化されたプロセスの使用

ハードワイヤードのイーサネット LAN を介して 1 台の制御 PC に 4 台のハードウェア データ収集ユニットを接続します。このアプリケーションのコーディングは PC 上にあり、完全に Python ベースです。各データ取得ユニットは同じように構成され、同じ方法で PC からポーリングされます。それらが接続されているテストボックスは、テストを実行しようとする可変出力を提供します。

これらのテストは長期的 (8 ~ 16 か月またはそれ以上) であり、データ取得率は比較的低く (1 分あたり 500 サンプル未満、おそらく 200 近く) なります。一般的なプロセス フローも単純です。各データ取得デバイスをループして、次のことを行います。

  • デバイスからデータを読み取ります。
  • データに対していくつかの計算を行います。
  • カルクが何かを言う場合は、ヒーターをオンにしてください。
  • 彼らが何か他のことを言ったとしても、何もしません。
  • 後続の処理のためにデータをディスクとファイルに書き込みます

しばらく待ってから、プロセスをもう一度繰り返します。ここに私の質問があります:

  1. ループを使用して、while TRUE:上で概説したシーケンスの実行を開始し、例外を介してループを終了できるようにする予定ですが、チェックする必要がある特定の例外に関するアドバイスを歓迎します。 AT ALLを取るための最良のアプローチは?もう 1 つのアプローチは次のとおりです。whileループ内に入ったら、構造体を使用しtry: - except: - finally:てループを終了できます。
  2. 上で概説したプロセスは主なデータ取得に関するものですが、収集期間の長さを考えると、ハードウェアユニットが正常に動作していることを確認し、テストスタンドをオンまたはオフラインにするなど、他のことも行う必要があります。これらの「管理」機能はメイン ループとは別のものなので、別のものにしておきたいと思います。このアクティビティを同じスクリプト内の別のスレッドに設定する必要がありますか、それともより良い方法がありますか?

よろしくお願いします。すべてのフィードバックを歓迎します!

0 投票する
0 に答える
210 参照

matlab - putdata を介してキューをスケジュールし、複数のトリガーを介して不連続に実行します

Matlab データ集録ツールボックスを使用して、National Instruments デバイス (NI USB 6229) の出力を制御しています。analogoutputこれまでのところ、と を介して出力オブジェクトを作成しaddchannel、 を介してデータをキューに入れ、 を介しputdataてデータ出力を開始することができますtrigger

しかし、一度トリガーされると、キューは全体として実行され、特定の数のサンプルのみを実行できるかどうか疑問に思っていました。

したがって、たとえば を介して 10.000 個のサンプルをキューに入れると想像してくださいputdata。その後、トリガーが発生するたびに、キューが空になるまで (つまり、10 回のトリガー後にキューが空になるまで) 1.000 サンプルのみが実行されます。

それは Matlab のデータ取得ツールボックスで可能でしょうか。

0 投票する
3 に答える
873 参照

python - Linux でのソフト リアルタイム データ取得に適したストレージ候補は何ですか?

データ取得のためのシステムを構築しています。取得したデータは通常、15 個の信号で構成され、それぞれが (たとえば) 500 Hz でサンプリングされます。つまり、毎秒約 15 x 500 x 4 バイト (signed float) が到着し、永続化する必要があります。

以前のバージョンは、データ ストレージに DB4O データベースを使用して .NET (C#) 上に構築されていました。これはかなり効率的で、うまく機能しました。

新しいバージョンは Linux ベースで、Python (またはおそらく Erlang) を使用し、... はい! 適切なストレージ候補は何ですか?

私は MongoDB を考えており、各サンプル (または実際にはそれらの束) を BSON オブジェクトとして保存しています。各サンプル (ブロック) には、キー (インデックス付き) フィールドとしてのサンプル カウンターと、信号源の識別情報があります。

問題は、サンプルをかなり迅速に取得できなければならないことです。要求された場合、サンプル カウンター範囲と要求された信号ソースを使用して、最大 30 秒のデータを 1 秒未満で取得する必要があります。現在の (C#/DB4O) バージョンは、この OK を管理し、100 ミリ秒未満でデータを取得します。

Python がパフォーマンス面で理想的ではないかもしれないことはわかっていますが、それについては後で説明します。

システム (「サーバー」) には複数の取得クライアントが接続されるため、アーキテクチャは適切に拡張する必要があります。

編集: さらに調査した後、おそらくサンプルデータにはHDF5を使用し、ドキュメントのような情報にはCouchまたはMongoのいずれかを使用します。お知らせします。

編集: 最終的な解決策は、HDF5 と CouchDB に基づいていました。Python で実装され、Raspberry Pi で実行され、問題なく動作しました。