GNU Radio и отслеживание дикой природы

Я работаю с радиопередатчиками дикой природы и хотел бы создать что-то, что будет прослушивать эти сигналы и отслеживать то, что он услышал. Сигнал - это тон, который обычно передается 60 раз в минуту или 120, если датчик движения показывает, что животное умерло.

Мой план состоит в том, чтобы использовать GNU Radio для прослушивания и преобразования сигнала в матрицу определенного типа, которая сохраняется в файл, а затем анализируется во второй программе. Есть ли способ получить векторы мощности сигнала с интервалами 500 Гц через несколько мегагерц и объединить их в матрицу?

Вторичная программа будет интерпретировать этот вывод и находить передатчики живой природы и записывать их частоты пульса. Идея состоит в том, чтобы получать новый файл каждые 10 секунд или около того от GNU Radio и обрабатывать его со второй программой по мере ее поступления.

Я пытался использовать блок приемника файлов в GNU Radio, и понял, что это в двоичном формате. Также не уверен, что именно в нем содержится.

Любые предложенные подходы о том, как я должен сделать это, будут оценены

2 ответа

Решение

Мой план - использовать GNU Radio для прослушивания и преобразования сигнала.

Ну, вам понадобится оборудование для этого; какое устройство SDR вы имеете в виду?

Далее я предполагаю, что вы действительно используете классический подход SDR для получения устройства, которое дает вам необработанные образцы I & Q.

Если бы был способ получить векторы мощности сигнала с интервалами 500 Гц через несколько мегагерц и объединить их в матрицу.

Помедленнее с матрицей, давайте сосредоточимся на получении мощности от эквидистантных частот:

Это в значительной степени оценка спектральной плотности мощности (PSD). Самый простой, вероятно, самый быстрый и классический подход - просто взять квадрат величины БПФ вашего входного сигнала.

GNU Radio Companion имеет блок FFT с логарифмическим напряжением, который для входного потока выборки времени даст вам FFT size векторы (которые тогда, очевидно, должны быть = частота дискретизации / 500 Гц) при Frame rate темп; например:

Блок-схема от GNU Radio Companion

Сохранение этих векторов в файл будет достаточным, потому что:

Я пытался использовать блок приемника файлов в GNU, и понял, что это в двоичном формате. Также не уверен, что именно в нем содержится.

Это числа, сырые, непрерывные, как они будут в памяти. Об этом всегда есть некоторые заблуждения, поэтому есть запись в FAQ; ссылаясь на это:

Все файлы в чистом двоичном формате. Просто биты. Вот и все. Поток данных с плавающей запятой сохраняется в файле как 32 бита, один за другим. Сложный сигнал имеет 32 бита для реальной части и 32 бита для мнимой части. Чтение комплексного числа означает чтение в 32 бита, сохранение его в действительной части сложной структуры данных, а затем чтение в следующих 32 битах как мнимой части структуры данных. И просто продолжайте читать данные.

Таким образом, одним из методов будет использование Python / numpy, с помощью numpy.fromfile(file, dtype=numpy.float32), а потом numpy.reshape((rows,cols)) привести результирующий одномерный массив с плавающей точкой в ​​нужную вам форму матрицы.

Что касается ваших пожеланий по именованию файлов: это довольно алгоритмическая проблема (и почему я думаю, что этот вопрос очень актуален здесь). Скорее всего, вы сами не будете писать код; это действительно не так сложно сделать. Блок Python, который всегда занимает n векторы и записывает их в файл с именем, соответствующим текущему времени, полностью подходит для вашего приложения.

Написание блоков - одна из самых забавных вещей, которые вы можете делать в GNU Radio; Я думаю, что стоит обратить ваше внимание на учебники по радиоуправлению GNU. Их довольно весело читать, и вы можете следить за примерами без оборудования! Рекомендуется делать их по порядку.


Несколько комментариев:

  1. БПФ - это хорошая, простая в использовании, быстрая и эффективная оценка.
    Однако, в зависимости от характеристик ваших трекеров, использование набора фильтров, вероятно, превзойдет его в отношении точности / вероятности ошибки. Как только вы почувствуете себя комфортно с GNU Radio и DSP, взгляните на наборы многофазных фильтров, которые поставляются с GNU Radio. Они позволяют вам выбрать один "хороший" фильтр нижних частот, чтобы выбрать один канал, и реплицировать их через равные интервалы.
  2. Я очень привык не проводить анализ вне GNU Radio.
    Я нахожу, что гораздо проще написать другой блок python, который просто берет сэмплы, которые исходят из оценщика (в вашем случае, например, FFT логарифмической мощности), и делает с ними полезные вещи, и соединяет выходные данные этого, например, с Qt GUI. Частотный приемник, чем, скажем, брать образцы измерений и проталкивать их через Matlab или R.
    Большую часть времени я генерирую файл Python, который запускает мой график потока измерений, который сохраняет свои результаты в векторном приемнике. Из этого файла Python после завершения выполнения потокового графа я использую numpy, чтобы немедленно выполнить собственный анализ в автономном режиме.
    Поставляется с преимуществом мгновенной повторяемости!

Заключительные замечания: Вы говорите, что у вас уже есть устройство SDR (ключ RTL). Замечательно!

Подключите его к компьютеру; используйте librtl / gr-osmosdr с помощью osmocom -s 1e6 -W получить "отображаемую" полосу пропускания 1 МГц; Настройтесь на частоту вашего передатчика и смотрите спектр. Вы многому научитесь!

Если у вас еще нет всего этого программного обеспечения: просто скачайте и загрузите среду SDR GNU Radio live. Подключи и играй!

В GNU Radio Companion просто замените источник UHD: USRP на источник osmocom (который может общаться с ключами RTL).

Я бы сделал некоторые исследования на передатчиках. Ищите веб-страницы и (особенно) найдите идентификатор FCC от передатчика и найдите его на веб-сайте FCC. Тогда мы можем помочь больше.

Где мы можем найти трекеры? Получение записи сигнала для использования дома было бы удобно.

Другие вопросы по тегам