4

私は野生生物の無線送信機を扱っており、これらの信号を聞き取り、聞いたことを追跡するものを構築したいと考えています。信号は、通常は 1 分間に 60 回送信されるトーンであり、動物が死亡したことをモーション センサーが示している場合は 120 回送信されます。

私の計画は、GNU Radio を使用して信号を聞き取り、ファイルに保存されたある種のマトリックスに変換してから、2 番目のプログラムで分析することです。数メガヘルツにわたって 500 Hz 間隔で信号強度のベクトルを取得し、それらを行列にまとめる方法はありますか?

二次プログラムは、この出力を解釈し、野生生物の送信機を見つけて、その脈拍数を記録します。GNU Radio から約 10 秒ごとに新しいファイルを取得し、受信した 2 番目のプログラムでそれを処理するという考えです。

私は GNU Radio でファイル シンク ブロックを使用しようとしてきましたが、それがバイナリであることに気付きました。また、何が含まれているのか正確にはわかりません。

これをどのように行うべきかについて提案されたアプローチをいただければ幸いです。

4

2 に答える 2

6

私の計画は、信号を聞いて変換するために GNU Radio を使用することです

そのためにはハードウェアが必要です。どのような SDR デバイスを考えていますか?

以下では、生の I & Q サンプルを提供するデバイスを取得するという従来の SDR アプローチを実際に使用していると仮定します。

数メガヘルツにわたって 500 Hz 間隔で信号強度のベクトルを取得し、それらを行列にまとめる方法があれば。

マトリックスでゆっくりと、等間隔の周波数から電力を得ることに焦点を当てましょう:

これはほとんどパワー スペクトル密度 (PSD) 推定量です。最も簡単で、おそらく最速で古典的なアプローチは、入力信号の FFT の振幅の 2 乗を取ることです。

GNU Radio Companion にはlog-power FFTブロックがあり、入力時間のサンプル ストリームに対して、FFT sizeレートでベクトル (明らかに = サンプル レート / 500 Hz になるはずです) が得られますFrame rate。例えば:

GNU Radio Companion のフロー グラフ

次の理由により、これらのベクトルをファイルに保存するだけで十分です。

GNU でファイル シンク ブロックを使用しようとしていて、それがバイナリであることに気付きました。また、何が含まれているのか正確にはわかりません。

それは、メモリ内にあるように、生の、連続した数字です。それについては常にいくつかの誤解があるので、それに関する FAQ エントリがあります。それを引用して:

すべてのファイルは純粋なバイナリ形式です。ただのビット。それでおしまい。浮動小数点データ ストリームは、ファイルに 32 ビットとして次々に保存されます。複素数信号には、実部が 32 ビット、虚部が 32 ビットあります。複素数を読み戻すということは、32 ビットを読み取り、それを複素数データ構造の実部に保存してから、次の 32 ビットをデータ構造の虚部として読み取ることを意味します。そして、データを読み続けてください。

したがって、使用する方法の 1 つは、 Python/numpyを使用しnumpy.fromfile(file, dtype=numpy.float32)、を使用numpy.reshape((rows,cols))して、結果の float の 1D 配列を必要なマトリックス形状にすることです。

あなたのファイル命名の希望について:それはかなりアルゴリズム的な問題です(そして、なぜこの質問がここで非常に話題になっていると思いますか)。おそらく、自分で少しコードを書くことは避けられないでしょう。それは本当に難しいことではありません。常にnベクトルを取得し、現在の時刻と一致する名前のファイルにそれらを書き込む Python ブロックは、アプリケーションにとって完全に機能します。

ブロックを書くことは、GNU Radio でできる最も楽しいことの 1 つです。GNU Radio Guided Tutorialsを紹介することは非常に価値があると思います。それらは読むのがとても楽しく、ハードウェアなしで例に従うことができます! 順番に行うことをお勧めします。


いくつかのコメント:

  1. FFT は、優れた、使いやすく、高速で効率的な推定器です。
    ただし、トラッカーの特性によっては、フィルターバンクを使用した方が精度/エラー確率の点で優れている可能性があります。GNU Radio と DSP に慣れてきたら、GNU Radio に付属の Polyphase Filter Banks を見てください。これにより、1 つの「適切な」ローパス フィルターを使用して 1 つのチャネルを選択し、それらを等間隔で複製することができます。
  2. 私は、GNU Radio の外で分析を行わないことに非常に慣れています。
    推定器から出てくるサンプル(あなたの場合は、対数パワーFFTなど)を取得し、それらを使用して有用なことを行い、その出力をQt GUIなどに接続するだけの別のpythonブロックを作成する方がはるかに簡単だと思いますたとえば、測定サンプルを取り、Matlab または R にプッシュするよりも、周波数シンクを使用します。
    ほとんどの場合、測定フロー グラフを実行する Python ファイルを生成し、その結果をベクトル シンクに保存します。その Python ファイルから、フローグラフの実行が完了したら、numpy を使用してすぐに独自のオフライン分析を行います。
    瞬時に再現できるメリットあり!

最後のコメント: あなたはすでに SDR デバイス (RTL ドングル) を持っていると言います。それは素晴らしいことです!

PC に接続します。librtl/gr-osmosdr を使用osmocom -s 1e6 -Wして、1 MHz の帯域幅を「表示」します。送信機の周波数に合わせてスペクトルを観察します。あなたはたくさん学ぶでしょう!

すべてのソフトウェアをまだ持っていない場合: GNU Radio live SDR 環境をダウンロードして起動するだけです。プラグ&プレイ!

GNU Radio Companion では、UHD: USRP ソースを osmocom ソース (RTL ドングルと通信可能) に置き換えるだけです。

于 2016-03-13T12:32:34.243 に答える
1

発信機について調べてみました。Web ページを探し、(特に) 送信機から FCC ID を見つけて、FCC Web サイトで調べます。そうすれば、もっと助けることができます。

どこでトラッカーを見つけることができますか? 自宅で使用するために信号の記録を取得すると便利です。

于 2016-03-13T14:03:14.403 に答える