2

私はPythonの世界に不慣れで、プログラミングスキルはかなり貧弱ですが、Pythonを使用してEEG回路からの出力を表示する方法を見つけようとしています(OpenEEG回路http://openeeg.sourceforge.netを使用) )

アナログ出力は、ADC (ATmega8 マイクロコントローラ内) を介して増幅および処理され、MAX232 によって RS232 に変換されます。

RS232 信号は次のとおりです。

バイト 1: 同期値 0xa5
バイト 2: 同期値 0x5a
バイト 3: バージョン
バイト 4: フレーム番号
バイト 5: チャネル 1 下位バイト
バイト 6: チャネル 1 上位バイト
バイト 7: チャネル 2 下位バイト
バイト 8: チャネル 2 上位バイト
. ..
バイト 9 ~ 16 は追加の電極チャンネル用ですが、最初の 2 つしか使用しないためデータは必要ありません
...
バイト 17: ボタンの状態 (b1-b4)

私はいくつかの基本的な PySerial 機能を持っていますが、受信データをバッファリングし、有用な値を 2 つのリアルタイム xy 波形 (時間対電圧) としてプロットすることで、受信データを利用する方法を理解する必要があります。

質問の更新:

PySerialの明らかな数行でコードを印刷していますが、意味不明です。データを、プロットできる値の形式に分解しようとしています。17 バイトのデータは、現在 256 フレーム/秒で受信されています。(2 つの) チャネルは、それぞれ 10 ビットのデータで構成されます (残りの 2 バイトを構成するために 6 つのゼロが含まれます)。それらは、0 から 1023 の可能な値を与える符号なしです。これらは、正と負としてプロットする必要がある値に対応するため、512 のバイナリ値はゼロ (マイクロ) ボルトのプロットに対応します....

受信ストリームを 8 ビット バイナリとして読み取り (不要なデータを取り除き)、必要な各チャネルから 2 つの関連するバイトを結合するにはどうすればよいですか (必要に応じて余分な 6 つのゼロを削除する可能性があります)。

4

2 に答える 2

2

複雑なバイナリ データ形式を処理するには、numpy で構造化配列を使用することができます (素敵な紹介については、こちらも参照してください)。データの構造を定義した後は、非常に簡単に読み取ることができます。その後、numpy の機能を使用して、データを必要なものに分解できます。

于 2009-11-25T14:48:07.887 に答える
2

良いリアルタイム プロットの例がここにあります。これは、自己生成データで実行されるため、テストが容易であるという点で良い例ですが、実際のデータをプロットするためにコードを変更する場所も明らかであり、コードは簡単に追跡できます。

基本的な考え方は、プロット ウィンドウを作成し、そのデータを使用して更新することです。

set_xdata(np.arange(len(self.data)))
set_ydata(np.array(self.data))

(ただし、matplotlib の現在のバージョンでは、set_data(xdata, ydata)代わりに使用したい場合があります。)

シリアル ポート データの解析については、別の質問として行う方がよいでしょう。

于 2009-12-01T06:37:42.107 に答える