NFM transmitter using HackRF and GnuRadio

HackRF как трансивер: Часть 4. Переключение между приемом и передачей

По итогам трех последний статей мы имеем граф для приема, и граф для передачи. От полнофункционального трансивера на HackRF нас отделяет лишь отсутсвие возможности переключиться с приема на передачу быстро. Давайте исправлять это упущение!

Включаем часть схемы ответственной за прием, которую мы временно выключили в прошлой части.

А теперь самое главное — укажем блокам Osmocom что нужно использовать драйвер SoapySDR для работы с HackRF. Укажем для блоков Osmocom в поле «Device Arguments»
soapy=0,driver=hackrf

rxtx_ctl_step1_sinkrxtx_ctl_step1_source
Далее создадим схему коммутации и органы управления. Добавляем WX GUI Chooser который будет PTT кнопкой, и Selector который будет пропускать сигналы с передающей или приемной части в зависимости от состояния кнопки

Настроим WX GUI Chooser как показано ниже:

rxtx_ctl_step2_buttonДля подробного знакомства с блоками WX GUI Chooser и Selector рекомендую ознакомиться со старой статьей. В нашем случае мы настраиваем Chooser работать как кнопку с 2 значениями: «[1,1]» и «[0,0]». Знакомые с языком Python сразу догадаются что параметр Choiсes является по своей природе списком, элементы которого в данном случае тоже являются списками. Значением по умолчанию у кнопки будет значение списка [1,1], a текстом  — «RX»

Теперь конфигуруем Selector

rxtx_ctl_step3_selectorSelector у нас имеет 2 входа и 2 выхода, а активный вход и выход будут определяться текущим значением нашей кнопки. Индекс активного входа будет равен первому элемента списка текущего значения кнопки, а индекс активного выхода определяется по второму элемента текущего значения кнопки.

Теперь скоммутируем потоки данных. Отключаем Osmocom Source от схемы.  Выход с Osmocom Source коммутируем на вход «in1″ блока Selector,  а выход «out1″ соединяем с входом Rational Resampler.

rxtx_ctl_step4_input_selectorДалее коммутируем передающаю часть. Отсоединяем Osmocom Sink  от схемы  и соединяем выход Ratonal Resampler c входом «in0″ Selector’, а выход «out0″ соответсвенно прицепляем к входу Osmocom Sink.

rxtx_ctl_step5_output_selector

Теперь вроде бы граф завершен. Но! Осталась небольшая тонкость обнаруженная мной в процессе проверки: в момент нажатия PTT кнопки происходит отключения блока приема от демодулирующей схемы, и данные в эту ветку схемы более не поступают. Это вызывает крайнее неудовольствие блока WX GUI FFT Sink (да и любых других графических визуализаторов типа водопада), что приводит к ошибке и вылету с графа при запуске.  Дабы ублажить WX GUI FFT Sink блок, мы добавим на схему источник нулей «Null Source», и будем подключать его к приемной ветке  когда работаем на передачу. Коммутацию с потока нулей на данные, как вы можете догадаться, выполним блоком Selector c 2 выходами и 1 выходом. Так же не забывайте после блока Null Source поставить ограничитель в виде Throttle блока с частотой семплирования равной 8 Msps.
Наш второй селектор настраиваем вот так:

rxtx_ctl_step6_null_com_paramВот что у нас получилось в итоге:

NFM transmitter using HackRF and GnuRadio

И как обычно, видео с процессом сборки графа.

UPDATE:
Так как много людей интересуются готовым графом, вот ссылка на него:
nfm_transc.grc

HackRF как трансивер: Часть 4. Переключение между приемом и передачей: 7 комментариев

  1. mike

    Спасибо за статьи, очень полезно!
    теперь вопрос: компонент Selector отмечен как устаревший, а вот чем заменён я что-то с ходу не нашёл

    1. Igor Автор записи

      Хм… Похоже я что-то пропустил. У меня GnuRadio 3.7.9 и блок не сообщает что он устарел.
      Хотя сейчас взглянул на репозиторий, и таки да, blks2_* ,блоки были помечены как устаревшие. В коммите не дается никаких пояснений что надо будет использовать.
      Думаю надо будет написать в рассылку discuss-gnuradio за актуальной инфой.

  2. Aksandr

    Запустил , прием работает , но при передачи тх потрескивает и слабый голос .
    отдельно передача работает как положено ,
    что можно еще настроить?

    1. Igor Автор записи

      Пробовали повысить выходую мощность? У меня вроде тоже потрескивало когда слабый сигнал был.

      1. Igor Автор записи

        Кстати если я не ошибаюсь, можно попробовать выкинуть блок Throttle, ибо я в рассылке GnuRadio я читал что КРАЙНЕ нежелательно использовать этот блок когда в схеме присутсвует реальное железо.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">