問題タブ [software-defined-radio]

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 投票する
1 に答える
1677 参照

python - Python でバイナリ プロトコルをデコードする

sdrdaemonというプログラムから生成されたバイナリストリームをデコードする単純な python クライアントを作成しようとしています。

プロトコルはここで説明されています(便宜上、以下にコピーされています)。私の理解では、最初の 42 バイトには、python構造体モジュールで読み取り/デコードすると考えていたメタ フレームが含まれている必要があります。

私は非常に単純なことから始めました。

ただし、この種のことについては、同期する方法を理解するのに十分なほど慣れていないため、正しいセクションをデコードしています。以下の説明はCRCを指していますが、どうすればよいかわかりません。少しのガイダンスは素晴らしいでしょう。github の問題に応答がありませんでした。

プロトコルの完全な説明はここにありますが、以下にもコピーされています。

包装

ハードウェア デバイスから取得されたデータのブロックは、UDP ペイロード サイズのブロックにスライスされます。以下、この一連のブロックを「フレーム」と呼びます。「メタ」ブロックと呼ばれる特別なブロックがフレームの前に送信されます。フレームとそれに続くデータに関する「メタ」データを伝達するために使用されます。この「メタ」データに対して 64 ビットの CRC が計算され、追加されます。これは検証として機能し、データ ブロックから「メタ」ブロックを認識して同期を実現します。それをデータブロックと混同する可能性は事実上非常に低いです。

圧縮ストリームは、圧縮効率を向上させるために、ハードウェアから取得した複数のデータ ブロックを 1 つのフレームにパックする場合があります。そのため、メタデータの変更が同じフレーム内の 1 つの「ハードウェア」ブロックから次のブロックに発生する場合があります。この場合、フレームが分割され、メタデータが変更されたブロックの開始「メタ」ブロックで新しいフレームが構築されます。元のフレームの最初の部分が UDP 経由ですぐに送信されます。これにより、データ フレームとその「メタ」ブロックが常に一貫していることが保証されます。

メタデータ ブロック

「メタ」データのブロックは、次のもので構成されます (値はバイト単位で表されます)。

メタブロック - パッキングなし

合計サイズは、8 バイトの CRC を含めて 42 バイトです。

データブロック

ストリームが圧縮されていない場合、ペイロード サイズの UDP ブロックに完全な I/Q サンプルが詰め込まれ、ブロックの最後に I/Q サンプル未満の未使用のギャップが残る可能性があります。最後のブロックは、残りのサンプルのみで埋められます。最後のブロックで最大に満たされたブロックと残りのサンプルの数は、「メタ」データで指定されます。もちろん、データ ストリームは圧縮されていないため、これらの値はサンプルの総数とペイロード サイズから計算することもできます。

ストリームが圧縮されると、UDP ブロックは圧縮ストリームのバイトで完全に詰め込まれます。最後のブロックは、残りのバイトのみで満たされています。完全なブロック数と残りのバイト数は「メタ」ブロックで指定され、これらの値はそれ以外では計算できません。

まとめ図

非圧縮ストリーム

編集::投稿後すぐにこのアプローチを (SoapySDR を支持して) 放棄することになるため、関連するコメントはもうできません。

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

linux - LoRa SDR for Pothos のインストール中にエラーが発生しました

https://github.com/myriadrf/LoRa-SDRから複製した Pothos 用の LoRa SDR ブロックをインストールしようとすると、次のエラーが発生します。

ファイルへのフルパスを挿入すると

/ポトス/システム/Version.hpp

PothosConfig.cmake では、最初のエラーは消えますが、これはまだ表示されます:

私の場合、Pothos と LoRa-SDR のディレクトリは /home/jernej/ フォルダーにあります。

どのパスに POTHOS_INCLUDE_DIR を設定する必要がありますか、それとも何か他のことをする必要がありますか?