По итогам трех последний статей мы имеем граф для приема, и граф для передачи. От полнофункционального трансивера на 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.
Дякую, корисна інформація, підскажіть чи є блок який буде автоматично вмикати передачу коли буде сигнал на прийом і навпаки. І якщо є як його встановити?