По итогам трех последний статей мы имеем граф для приема, и граф для передачи. От полнофункционального трансивера на HackRF нас отделяет лишь отсутсвие возможности переключиться с приема на передачу быстро. Давайте исправлять это упущение!
Включаем часть схемы ответственной за прием, которую мы временно выключили в прошлой части.
А теперь самое главное — укажем блокам Osmocom что нужно использовать драйвер SoapySDR для работы с HackRF. Укажем для блоков Osmocom в поле «Device Arguments»
soapy=0,driver=hackrf
Далее создадим схему коммутации и органы управления. Добавляем WX GUI Chooser который будет PTT кнопкой, и Selector который будет пропускать сигналы с передающей или приемной части в зависимости от состояния кнопки
Настроим WX GUI Chooser как показано ниже:
Для подробного знакомства с блоками WX GUI Chooser и Selector рекомендую ознакомиться со старой статьей. В нашем случае мы настраиваем Chooser работать как кнопку с 2 значениями: «[1,1]» и «[0,0]». Знакомые с языком Python сразу догадаются что параметр Choiсes является по своей природе списком, элементы которого в данном случае тоже являются списками. Значением по умолчанию у кнопки будет значение списка [1,1], a текстом — «RX»
Теперь конфигуруем Selector
Selector у нас имеет 2 входа и 2 выхода, а активный вход и выход будут определяться текущим значением нашей кнопки. Индекс активного входа будет равен первому элемента списка текущего значения кнопки, а индекс активного выхода определяется по второму элемента текущего значения кнопки.
Теперь скоммутируем потоки данных. Отключаем Osmocom Source от схемы. Выход с Osmocom Source коммутируем на вход «in1″ блока Selector, а выход «out1″ соединяем с входом Rational Resampler.
Далее коммутируем передающаю часть. Отсоединяем Osmocom Sink от схемы и соединяем выход Ratonal Resampler c входом «in0″ Selector’, а выход «out0″ соответсвенно прицепляем к входу Osmocom Sink.
Теперь вроде бы граф завершен. Но! Осталась небольшая тонкость обнаруженная мной в процессе проверки: в момент нажатия PTT кнопки происходит отключения блока приема от демодулирующей схемы, и данные в эту ветку схемы более не поступают. Это вызывает крайнее неудовольствие блока WX GUI FFT Sink (да и любых других графических визуализаторов типа водопада), что приводит к ошибке и вылету с графа при запуске. Дабы ублажить WX GUI FFT Sink блок, мы добавим на схему источник нулей «Null Source», и будем подключать его к приемной ветке когда работаем на передачу. Коммутацию с потока нулей на данные, как вы можете догадаться, выполним блоком Selector c 2 выходами и 1 выходом. Так же не забывайте после блока Null Source поставить ограничитель в виде Throttle блока с частотой семплирования равной 8 Msps.
Наш второй селектор настраиваем вот так:
Вот что у нас получилось в итоге:
И как обычно, видео с процессом сборки графа.
UPDATE:
Так как много людей интересуются готовым графом, вот ссылка на него:
nfm_transc.grc
Спасибо за статьи, очень полезно!
теперь вопрос: компонент Selector отмечен как устаревший, а вот чем заменён я что-то с ходу не нашёл
Хм… Похоже я что-то пропустил. У меня GnuRadio 3.7.9 и блок не сообщает что он устарел.
Хотя сейчас взглянул на репозиторий, и таки да, blks2_* ,блоки были помечены как устаревшие. В коммите не дается никаких пояснений что надо будет использовать.
Думаю надо будет написать в рассылку discuss-gnuradio за актуальной инфой.
Запустил , прием работает , но при передачи тх потрескивает и слабый голос .
отдельно передача работает как положено ,
что можно еще настроить?
Пробовали повысить выходую мощность? У меня вроде тоже потрескивало когда слабый сигнал был.
Кстати если я не ошибаюсь, можно попробовать выкинуть блок Throttle, ибо я в рассылке GnuRadio я читал что КРАЙНЕ нежелательно использовать этот блок когда в схеме присутсвует реальное железо.
и мигает прием на хакрф
Excellent project!
can you send a link for .grc file?
Thank you in advance !
Not working,
Resets USB, warns of Throttle block.
Do you know any method to switch an SDR from Tx to Rx while maintaining phase continuity of the local oscillator?
Thanks.