Привет, Хабр.

В предыдущей части был рассмотрен прием сигналов с помощью GNU Radio. Сейчас мы рассмотрим обратную задачу — передачу сигналов различного вида модуляции.



Как и в случае приема, с помощью GNU Radio можно создать сложную программную систему для передачи сигналов, не написав ни одной строчки кода. Но для начала рассмотрим SDR-устройства, способные работать не только на прием, но и на передачу, в диапазоне от мегагерц до гигагерц.

Продолжение под катом.

Железо


В отличие от дешевого приемника RTL SDR V3, купить который можно за 30$, для работы на передачу нужно железо посерьезнее и подороже. Впрочем, выбор сейчас достаточно велик. Я не рассматриваю здесь чисто «радиолюбительские» SDR-трансиверы (Flex/Icom/Yaesu и др), т.к. в них от SDR мало что осталось и нам они не подойдут, мы рассмотрим полноценные SDR, предназначенные для экспериментов с ЦОС, которые позволяют передавать что угодно в нужном нам формате.

LimeSDR и LimeSDR Mini



Интересная серия устройств, покрывают диапазон приема/передачи примерно от 10МГц до 3.5ГГц. LimeSDR формально работает от 100КГц, но чувствительность там по отзывам, никакая.
Цена вопроса около 200$, но плату бывает проблематично купить, т.к. продаются они исключительно через crowdsupply и не всегда бывают в наличии. Авторы собрали денег на 2млн.$ но так и не обзавелись собственным веб-сервером и полноценным магазином. Впрочем, к их чести, все заказы были отправлены.

Adalm Pluto SDR



Плата от Analog Devices, рассчитанная в основном на студентов. Дешевый вариант «SDR для бедных» примерно за 120$, диапазон приема/передачи от 300МГц до 3.8ГГц.

HackRF



Одна из первых плат такого рода, появившийся лет 5-6 назад, имеет частотный диапазон от 1МГц до 6ГГц. Плата довольно старая, и для своих параметров, дорогая (300-400$), не умеет работать в full duplex и имеет 8-битный ЦАП/АЦП. Сейчас появились китайские клоны, но про их качество ничего сказать не могу.

Есть и другие модели (Ettus Research, BladeRF, Red Pitaya), они интересны, но недешевы и большинство вряд ли будет их брать. Для начинающего LimeSDR наверно был бы наиболее оптимальным выбором. Но надо подчеркнуть, что все эти платы созданы для опытов с цифровой обработкой сигналов — это не трансиверы в радиолюбительском понимании, их выходная мощность порядка 50мВт, в устройстве нет аттенюаторов, усилителей, фильтров, и для «CQ DX» они не оптимизированы совсем (да и даже р/л софта под них обычно нет). Хотя я передавал с HackRF wspr-сигнал на 7 и 14МГц, и его принимали в 1000км, что для 50мВт и комнатной антенны вполне неплохой результат.

Разумеется, этот список не претендует на полный обзор, но для общего понимания, надеюсь, достаточно. Есть полезная табличка, хотя и немного устаревшая, но по ней можно примерно понять параметры разных устройств:



Софт


Для начала, важное примечание: все эксперименты при работе на передачу следует проводить с минимальной мощностью и в разрешенных диапазонах, чтобы не мешать другим службам. В принципе, с 10мВт сложно кому-то помешать, но радиоэфир тоже нужно содержать в чистоте ;)

Итак, запускаем GNU Radio и приступим (если кто пропустил предыдущую часть, желательно ее прочитать чтобы понять лучше как пользоваться этой программой).

Важно понять общий принцип — так как радио у нас Software Defined, то передавать мы можем что угодно, в пределах полосы пропускания устройства. Мы должны лишь сформировать нужный цифровой поток, а ЦАП передаст все «как есть» в эфир. Как было написано в предыдущей части, выход в GNU Radio называется Sink, конкретное название будет зависеть от модели устройства.

Простой тон

Простейший тест: просто соединим источник синусоидального сигнала с передатчиком.


Не особо интересно, но для какой-либо проверки, или как простейший генератор сигналов, может быть полезно. Запускаем в качестве контрольного приемника RTL SDR, и видим наш сигнал.



NFM

Пойдем дальше — рассмотрим, как передать что-то более полезное, например звук с WAV-файла или микрофона. Для этого в GNU Radio есть готовый блок NBFM Transmit. Он делает всю необходимую работу — преобразует наш аудиопоток в комплексный IQ-сигнал с частотной модуляцией, который «понимает» SDR.



Результат на скриншоте — звук передается, и его можно услышать, если выбрать FM. Принимать такой сигнал также можно на портативные радиостанции.



Как можно видеть, частота приема и передачи была изменена на 433МГц — безлицензионный LPD-диапазон.

Управление беспроводным выключателем

Рассмотрим теперь что-нибудь поинтереснее. Раз уж мы заговорили о диапазоне 433МГц, можно продемонстрировать один «грязный хак» — воспроизведение заранее записанного сигнала. Это позволит не разбираться с кодированием сигнала, а просто записать и передать его, не разбирая что внутри. Хак «грязный» практически буквально, т.к. мы будем воспроизводить записанный с эфира сигнал, который далеко не идеален.

Для примера возьмем дешевый беспроводной выключатель на 434МГц. Я использовал примерно такой, купленный в Mediamarkt.



Мы не будем разбираться с его форматом, а просто запишем сигнал «как есть». Для этого соберем несложную схему в GNU Radio.



Частота дискретизации была выбрана небольшой, чтобы не писать слишком широкую полосу — файл будет занимать много места, да и лишнее будет передаваться в эфир.

FFT Sink нужен для визуализации, чтобы убедиться что сигнал действительно есть:



Включаем запись, нажимаем кнопку на пульте, выключаем запись. Записанный файл, кстати, можно открыть в Cool Edit и убедиться, что сигнал записан нормально:



Теперь «собираем» передающую часть схемы: загружаем сигнал из файла и просто отправляем его на передачу.



Отдельно стоит отметить блок Throttle, который указывает, с какой частотой дискретизации читать данные из файла (в самом файле этой информации нет). Блок Multiply Const усиливает сигнал, на тот случай если его уровень в записи был недостаточен.

Дальше все просто — запускаем передатчик, убеждаемся что настольная лампа загорается :) На полной мощности передачи удалось зажечь лампу из другого конца квартиры. Однако, способ, как уже говорилось, достаточно «грязный» — сам сигнал неидеален, да и передается в эфир все что есть, включая записанные шумы и возможно, случайно попавшие в запись сигналы других устройств. Но для тестов или управления радиоуправляемой машинкой в пределах комнаты вполне сойдет.

Заключение


Как можно видеть, SDR предоставляет достаточно обширное поле для экспериментов с разными сигналами, и это вполне несложно.

В одну часть все задуманное опять не влезло. В следующей части будут рассмотрены более сложные виды модуляции.

Комментарии (27)


  1. Thetree
    26.05.2019 00:44

    Спасибо.Очень интересно.Много лет наблюдаю за развитием SDR. Очень интересны системы с двумя полностью когерентными приемниками. Можно ли получить такой режим в LimeSDR? Или может появились какие-то новые системы с такими возможностями?


    1. DmitrySpb79 Автор
      26.05.2019 00:47

      Судя по видео www.youtube.com/watch?v=aJyfT40i3Bg вроде можно, лично не пробовал.


      1. Thetree
        26.05.2019 02:09

        Спасибо всем за ссылки. Забыл упомянуть что хотелось бы сделать это в 2.4 ГГц, а по возможности и повыше. С более низкими частотами работает. Переживет ли коггерентность в LimeSDR переход на верх? Может кто-то уже пробовал и подводные камушки уже обнаружены?


    1. Zolg
      26.05.2019 00:53

      Если вас устроит RTL-SDR, то вот вам четыре когерентных приемника:
      https://www.indiegogo.com/projects/kerberossdr-4x-coherent-rtl-sdr#/


      Теоретически такое можно изобразить самостоятельно даже из шестибаксовых донглов:
      https://www.rtl-sdr.com/multi-rtl-a-gnu-radio-block-for-combining-and-time-synchronizing-multiple-rtl-sdr-dongles/ (в середине статьи)


  1. Zolg
    26.05.2019 00:47

    Незаслуженно обойден вниманием нищебродский very entry level SDR трансмиттер из переходника USB->VGA


    https://www.rtl-sdr.com/osmo-fl2k-a-tx-only-sdr-hacked-from-commodity-5-usb-to-vga-adapters-demos-available-for-transmitting-wbfm-gsm-umts-gps/


    1. DmitrySpb79 Автор
      26.05.2019 01:01

      Вживую (и даже онлайн) ни одного счастливого владельца пока не видел.


  1. I-denis
    26.05.2019 01:51

    " Я не рассматриваю здесь чисто «радиолюбительские» SDR-трансиверы, т.к. в них от SDR мало что осталось и нам они не подойдут"
    Ровно сколько sdr там было положено, столько и осталось. Поддержка gnuradio будет если трансивер известен osmo или у нее есть свои драйвера под gnuradio


    1. DmitrySpb79 Автор
      26.05.2019 08:00
      +1

      Назовите хоть один р/л трансивер (Icom, Sunsdr, Flex?) с поддержкой gnuradio, и я добавлю его в список.

      SDRa там положено ровно столько чтобы принимать CW или подключить скиммер ;)


      1. I-denis
        26.05.2019 11:31

        http://dl2stg.de/stefan/hiqsdr/gnuradio.html
        https://github.com/Tom-McDermott/gr-hpsdr/blob/master/README.md


        Вы уверены, что список радиолюбительских трансиверов состоит из трех брендов?


        1. DmitrySpb79 Автор
          26.05.2019 11:56

          Я больше продукцию «большой тройки» имел в виду (Yaesu/Kenwood/Icom/etc). Понятно что есть разные самоделки, продаваемые в частном порядке, их всех рассмотреть никакого времени не хватит.

          Если уже есть в продаже трансиверы с полноценной поддержкой SDR, а не только для подключения аудиокарты, VAC и телеграфного ключа, буду только рад.


          1. I-denis
            26.05.2019 23:20

            а что значит полноценная поддержка? трансивер может быть вполне себе DDC, обработка комплексного с гнала либо в железке трансивера, либо софтом на компе. причем софт заточен под радиолюбительские задачи и вполне может быть построен на библиотеках gnu-radio.зачем делать ещё драйвер под gnu-radio??? а вот в радиолюбительских конструкциях такую поддержку получить вероятность больше — примеры были выше


            1. DmitrySpb79 Автор
              27.05.2019 08:13

              Применительно к изучению/использованию ЦОС, полноценная поддержка — это наличие драйверов, SDK, примеров на С++ и Python и пр.
              Для примера посмотрите на kb.ettus.com/All_Pages

              В самодельные р/л конструкции я не вникал, мне это не особо актуально, я не работаю в эфире. Но если напишете обзор того, что есть сейчас на рынке, с удовольствием почитаю :)


      1. I-denis
        26.05.2019 11:55

        А если рассмотреть группу радиолюбительских sdr с переносом спектра в звуковую область, то при наличии выхода комплексного сигнала и поддержке hamlib управления синтезатором и ptt, ничего не мешает реализовать в gnu-radio и водопад и спектроанализаторы и пикать в эфир


        1. DmitrySpb79 Автор
          26.05.2019 12:04

          Да, GNU Radio может работать и со звуковой картой, так что некоторые тесты можно делать даже вообще без трансивера — habr.com/ru/company/zwave/blog/393713

          Но тема все же про SDR :)


          1. I-denis
            26.05.2019 15:03

            а, что если мы сигнал перенесли в звуковую область, дальнейшая его обработка, фильтрация, демодуляция, панорама, — перестает быть sdr?


  1. dilvar
    26.05.2019 11:39

    спасибо. тема SDR очень интересная
    возможно ли через SDR принимать, декодировать сигналы PLC Power Line Communication? Не хотелось бы изобретать велосипед а хотелось бы сделать универсальный приемник.

    PLC цифровой протокол поверх сети 220v AC работает в диапазоне 10k-1Мгц, используя OFDM модуляцию. Хотя диапазон частот и модуляция(ии) зависят от того стандарта, который разрешен регулятором в конкретном регионе.


    1. DmitrySpb79 Автор
      26.05.2019 11:48

      Поддержка ODFM в GNU Radio есть: wiki.gnuradio.org/index.php/Basic_OFDM_Tutorial

      Но все же GNU Radio больше для исследовательских задач подходит, для реального модема все эти алгоритмы все равно потом придется на выбранный контроллер/FPGA портировать.

      Ну и реальный модем кроме ODFM layer явно содержит еще какие-то алгоритмы установки связи, коррекции ошибок, так что так просто «в лоб» декодировать сообщения передаваемые через PLC наверно вряд ли выйдет — битовый поток вы получите, а что с ним делать дальше, второй вопрос.


      1. dilvar
        26.05.2019 12:02

        я понимаю. sdr для plc избыточен.

        в промышленности существует куча стандартов для кодирования/декодирования PHY для передачи PLC и производители выпускают чаще проприетарные решения, рассчитанные только на небольшой спектр.

        и чисто в исследователских целях хотелось бы получить на выходе некий снифер, способный весь этот зоопарк увидеть. Т.е. увидеть ВСЕ что происходит в линии передачи


        1. DmitrySpb79 Автор
          26.05.2019 12:10

          Попробуйте, есть много SDR-устройств, способных записывать сигналы с полосой в мегагерц: SDRPlay, Afedri, Elad. Только развязка нужна будет, чтобы 220В напрямую в антенный вход не подавать :)


          1. dilvar
            26.05.2019 12:23

            спасибо посмотрю. и постараюсь не подавать 220 на антенный вход :)

            я описал свою мотивацию.
            для меня вопрос наверное в том, что plc передача идет в момент перехода синусоиды через 0
            как выделить для анализа именно эту часть?


            1. DmitrySpb79 Автор
              26.05.2019 12:34

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


  1. Balling
    26.05.2019 15:11

    Хочу посоветовать вам тему для следующей статьи)) Есть такая штука, называется RDS-CT. Это такой стандарт, предназначенный для передачи информационных сообщений по каналам ЧМ-радиовещания. Попробуйте его декодировать через gnuradio, задачка та еще, хотя в интернете есть много инфы об этом.
    github.com/bastibl/gr-rds
    www.rtl-sdr.com/gr-rds-fm-rds-receiver-gnu-radio-supports-rtl-sdr
    Еще можно что-то про декодирование эфирных телеканалов (цифровых или аналоговых, в Москве всё еще целых 4 вещают, хотя большую часть уже отключили). Есть статья про декодирования американского стандарта цифрового эфирного телевиденья, очень интересная.
    medium.com/@rxseger/receiving-atsc-digital-television-with-an-sdr-76b03a863fea


    1. DmitrySpb79 Автор
      26.05.2019 21:00

      Спасибо.

      RDS я описывал пару лет назад: habr.com/ru/post/303104
      До написания полноценного декодера дело не дошло, т.к. бесплатный RDS Spy и так хорошо работает.

      Аналоговое ТВ это интересно, если кто запишет IQ минут на 5, можно посмотреть.


  1. dernuss
    26.05.2019 20:04

    Цена вопроса около 200$, но плату бывает проблематично купить, т.к. продаются они исключительно через crowdsupply и не всегда бывают в наличии.


    Три недели назад покупал limesdr mini. 159$ + 15$ доставка = 174 бакса, + надо будет заполнить пару анкет, сначала для американцев, потом для нашей таможни.
    Доставка была около одной недели.

    Дальше все просто — запускаем передатчик, убеждаемся что настольная лампа загорается :) На полной мощности передачи удалось зажечь лампу из другого конца квартиры.

    Именно по этому я не покураю такие девайсы. Ни какой защиты((


    1. DmitrySpb79 Автор
      26.05.2019 20:58

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


    1. r3pab
      27.05.2019 12:53

      И как аппарат?.. Может кто б/у продает?..


      1. dernuss
        27.05.2019 13:27

        Да норм аппарат. Своих денег стоит. В настройке моих модулей на 868 помогает.
        Ну греется только.

        Лучше конечно limeSDR большой. Если кому то mimo и когерентными делами хочется заниматься. Ну или полоса больше нужна.
        Но он и больше и дороже.