Радиоприёмник из dvb стика за $8 — изучаем sdr с gnuradio

Радиоприёмник из dvb стика за $8 — изучаем sdr с gnuradio

Ежедневно мы пользуемся множеством радио устройств. Но редко понимаем, как они трудятся. Эра радиолюбителей практически прошла, оставив в прошлом любителей спаять приёмник ДВ либо СВ собственными руками. Да и в способах кодирования техника ушла на большом растоянии вперёд. Мы довольно часто слышим рассуждения о взломе умных домов на радио протоколах, о ненадёжности радио связи и т.д. Но многие ли из вас пробовали, к примеру, подслушать Z-Wave сеть умного дома соседа и тем более поуправлять ей?

Как велика эта угроза для вас?
Смотрите кроме этого: не перевоплотит любой монитор либо ТВ в полноценный компьютер за $85

Asus and Гугл, наконец, запустили продажу Chromebit — миниатюрного ПК на базе Chrome OS по цене всего в $85. Гаджет возможно подключить к любому HDMI-порту. Затем остается только забрать Bluetooth-мышь и клавиатуру, включить кнопку питания на экране, и мы приобретаем готовый компьютер, что тяжелые игры не потянет, но в качестве офисного ПК в полной мере может употребляться.

Стик Chromebit есть чем-то наподобие миниатюрного и упрощенного Chromebook.

К счастью Сейчас стали дешёвы весьма эргономичные средства для работы с радио, в частности SDR.SDR (Software Defined Radio) разрешает программно перестраивать передатчик и приёмник для работы на разных частотах от 20 до 2000 МГц, по окончании чего произвести обработку сигнала на компьютере посредством цифровых способов. Это значительно отличает SDR от аналоговых схем радиопрёмников и передатчиков, разрешая легко поменять метод обработки взятого сигнала.Существует множество различных программ для обработки радио сигналов.

Я изучил самая популярную из них GNURadio. Данный пакет разрешает строить процесс обработки из разных блоков, стыкуя их между собой в формате потоковой обработки (pipe).

Любой следующий блок принимает этот от одного либо нескольких прошлых, а вывод передаётся вторым блокам.Под катом я поведаю об базах SDR и GNURadio и о том, как за 8 баксов сделать приёмник AM/FM, китайской управляемой розетки, телеметрии со спутника и всего, что вздумается.Для чего нам SDR?Бытовое радио разрешает вам слушать множество станций в разных диапазонах. Но в эфире имеется ещё большое количество всего другого!

И вам не требуется никуда подключаться для получения этих данных — эти сведенья за одну секунду пролетают в эфире мимо вас. Возможно сообщить, ежедневно нас пронзают гигабайты увлекательных данных. Достаточно их принять и детектировать. Не любопытно ли?

Лично мне весьма.Применяя SDR передатчик возможно ещё и самим создавать радио передатчики. К примеру, сделать радионяню. Либо руководить умными бытовыми устройствами на 433 МГц либо кроме того Z-Wave.Но хочется сходу предостеречь: изучите решения и законодательство ГКРЧ на применяемые вами диапазоны частот и не нарушайте их!Я пришёл к SDR, уже много лет занимаясь разработкой устройств Z-Wave.

Как я уже писал, разработчикам не дают доступ к радио приёмнику-передатчику. Потому мне всегда было весьма интересно, а смогу ли я перехватить сигнал соседской сети Z-Wave либо поиздеваться над соседом, включая его устройства (ещё не все устройства Z-Wave имеют шифрование, потому это до тех пор пока вероятно). Так как так же уязвима и моя Z-Wave сеть.

Выяснилось, это не верно легко (пока не смог сделать этого с GNURadio, не применяя готовые средства), но надеюсь, я к этому приду а также напишу в одной из будущих статей. А до тех пор пока (в следующей статье) будем ограничиваться приёмом команд от пульта к розетке из китайского комплекта на 433 МГц, и отправкой команд включения/выключения. Тут протокол был в разы несложнее.Но возвратимся к азам.МатчастьНачнём с маленького экскурса в теорию.

Я предполагаю, что читатель не забывает тригонометрию и может самостоятельно погуглить про преобразование Фурье либо почитать ссылки, каковые я привожу.Для передачи данных по радио применяют модуляцию. Модуляция — это метод преобразовать низкочастотный сигнал в высокочастотный, дабы позже, по окончании передачи, его демодулировать, т.е. преобразовать обратно в низкочастотный.

Высокую частоту наряду с этим именуют несущей, т.к. эта частота (а правильнее диапазон частот около несущей частоты) и будет переносить эти при передаче.К примеру, в случае если мы передаём команды между Z-Wave устройствами, несущая частота будет 869 МГц.Ясно, что оцифровывать сигнал на таковой частоте кроме того современным компьютерам не под силу — для надёжной оцифровки потребуется запускать АЦП приблизительно каждые 8000 раз в секунду (в случае если мы вычисляем 10 отсчётов на период достаточным шагом по времени). Но в этом и ненужно, поскольку интересует нас совсем маленькая полоса частот 869 МГц ± 200 кГц, т.е. менее 0.5 МГц шириной.Отыщем в памяти, что при умножениина , итог возможно представить в виде суммы двух синусоид с частотамии . Есливыбрана близко к несущей, то отбросив последнее слагаемое (применив фильтр низких частот — так как последнее слагаемое содержит удвоенную частоту несущей), мы исследуем низкочастотный сигнал от -200 кГц до +200 кГц, что уже под силу кроме того микроконтроллеру (к примеру, чипам Z-Wave SD3502 либо разным чипам TI либо SiLabs).

Те, кто не забывают устройство ветхих радиоприёмников, заметят тут аналогию с гетеродином.Работа SDR пребывает в том, дабы сгенерировать синтетический сигнал на нужной частоте, перемножить его с отфильтрованным входным знаком с антенны, пропустить через фильтр низких частота, убрав высокочастотную компоненту, и подать на АЦП. Подобно происходит передача — по окончании ЦАП сигнал умножается с высокочастотным знаком и излучается антенной.Блок-схема SDR приёмника показывает, как преобразуется входной сигнал с антенны.По окончании умножения и предварительной фильтрации входного сигнала на синтетический сигнал (и на перемещённый на 1/4 фазы, что соответствует переходу отк ), оба оказавшихся сигнала усиливаются, проходят фильтр низких частот (дабы убрать наложение высокочастотных составляющих при дискретизации) и оцифровываются.

Оцифровка в SDR приёмника в большинстве случаев проводится на скорости 50 МГц (в большинстве случаев пишут про 50 MSPS, Million Samples Per Second, миллионов отсчётов в секунду), по окончании чего используется ещё один фильтр, преобразующий поток в необходимое количество отсчётов в секунду (в большинстве случаев не более 2-5 MSPS). Данный последний процесс именуется децимацией. Полученные сигналы именуют I и Q соответственно.О децимацииДецимация нужна для «прореживания» входящих отсчётов с целью уменьшения количества данных на единицу времени.

Первое, что приходит в голову сделать — это откинуть каждое n-ое значение. Но этого делать категорически запрещено по двум обстоятельствам.Во-первых, такое вероятно при жажде проредить в целом соотношении, к примеру, 1:2 либо 1:3. Но так не окажется при жажде проредить в 1.5 раза.Во-вторых, представим, что отечественный сигнал имеет амплитуды 0 5 10 0 5 10 0 5 10.

При прореживании в 3 раза мы отбросим третье значения и каждое второе, взяв последовательность 0 0 0. Разумеется, это не соответствует действительности! Мы должны были взять 5 5 5.Исходя из этого децимация проводится путём сглаживания по нескольким последним значениям.

В случае если требуется прореживание с дробным соотношением, то предварительно проводится интерполяция.Эти две величины I и Q позволяют перейти от вещественного сигнала к комплексному представлению , гдев неспециализированном случае комплексное число, мнимая часть которого говорит о фазе, а настоящая об амплитуде. В таком виде математика выглядит намного проще.

К примеру, указанный сдвиг частоты в таком представлении производится путём несложного умножения на .Необходимо помнить, что физически значимый сигнал — это настоящая часть Re отечественного комплексного представления.ЖелезоСпециализированная радиоаппаратура стоит дорого. Но нам повезло — большая часть современных передатчиков и приёмников являются как раз SDR, т.е. программно настраиваются на необходимые частоты. И кое-какие из дешёвых недорогих приёмников кроме того дают доступ к данным с АЦП.

самые популярными примерами таких SDR приёмников являются DVB-тюнеры. самые популярными и эргономичными являются RTL-SDR, основанные на чипах Realtek RTL2832U. На AliExpress их представлено разное множество при средней цене $8 (ищите по словам RTL2832U и R820T либо E4000).Вот к примеру два донгла из всей подборки, что я приобрел для тестов.Кроме этого необходимо подчеркнуть более опытные, но всё ещё дешёвые железки для игр с SDR: HackRF One и Rad1o badge, сделанный на CCC 2015.

Эти железки разрешают не только принимать, но и излучать в широком диапазоне частот.GNURadio CompanionИтак, взяв последовательность значений I и Q мы можем приступить к цифровой обработке сигнала.Пакет GNURadio включает в себя не только множество программных блоков для обработки сигналов, но и графический дизайнер, разрешающий рисовать блок-схему обработки сигнала, преобразуемую при запуске в готовый код программы обработчика. Это весьма эргономичный метод обработки данных, т.к. он разрешает следить только за смыслом обработки и не обращать внимание на подробности кода программы.Какие конкретно же действия разрешают делать блоки в GNURadio?

Это базисные математические операции над знаком (сложение/вычитание сигналов, умножение), и более сложные, к примеру та же децимация, интерполяция, и разные фильтры.Большая часть фильтров трудятся не с самим знаком, а с его спектром. К примеру, фильтр низких частот трудится по принципу преобразования спектра сигнала, уменьшая высокие частоты, по окончании чего полученный спектр обратно преобразуется в сигнал.

По большому счету, спектр занимает важное место в обработке цифровых сигналов.спектр и Дискретизация сигнала (снова матчасть)Пожалуй самыми серьёзными чертями при построении блок-схемы обработки сигнала являются sample rate (какое количество отсчётов в секунду мы приобретаем), измеряемая в MSPS и спектр сигнала. Они очень сильно связаны между собой.Как мы знаем из математики, любую периодическую функцию возможно представить в виде преобразования Фурье, а любую периодическую функцию возможно разложить последовательность Фурье с нескончаемым числом слагаемых.

В случае если же мы говорим о последовательности дискретных значений, т.е. нам серьёзны значения лишь в определённые моменты времени, то последовательность Фурье будет складываться из конечного количества слагаемых, равного количеству исходных значений:Такое разложение именуется Дискретным Преобразованием Фурье либо ДПФ.Видно, что наивысшая циклическая частота, которая участвует в спектре сигнала, образовывает . Так как sample rate — это количество значенийв секунду (N штук), т.е. ход по времени составляетсекунд, а наивысшая частотаГц. К примеру, в случае если sample rate образовывает 2 000 000, то большая частота будет 2 МГц.

Сейчас делается ясно, что для анализа полосы от -200 до 200 кГц нам необходимо иметь sample rate не меньше 400 000.Имеется ещё одно увлекательное и неочевидное свойство ДПФ: спектр дискретной функции периодичен, т.е. . Математически это легко доказывается. Из-за чего именно это нам принципиально важно? При изучении спектра в окне, отображающим спектр в GNURadio, вы станете довольно часто вспоминать о том, что в том месте справа и слева (так как в том месте должны быть видны спектры соседних радиостанций, подсказывает нам интуиция).

Но это не верно, вне окна спектр повторяется совершенно верно так же ещё раз, и ещё раз. Но как же радиостанции и соседние частоты? Куда они делись? Информация о них потерялась в тот момент, в то время, когда мы с определённой частотой дискретизации (sample rate) оцифровали сигнал около несущей.Сейчас, надеюсь, стало ясно, из каких мыслей нужно выбирать sample rate: спектр изучаемого сигнала обязан уместиться в спектральную ширину окна, соответствую выбранному sample rate.

У многих SDR sample rate не имеет возможности быть больше 2-5 MSPS.Очень прекрасно о преобразовании Фурье, ДПФ и БПФ (Стремительном Преобразовании Фурье) написано тут.Итак, мы разобрались, что для вычисления спектра сигнала при помощи ДПФ, значения планируют в последовательность N штук. Каждое следующее значение добавляется, вытесняя самое старое (FIFO).Практика. FM приёмника на GNURadioИтак, у меня имеется китайский стик на базе RTL2832U и R820T2. Первое, что мы попытаемся сделать — это сделать FМ приёмник.

Частотная модуляция не самая несложная и я сперва желал всё показать на примере амплитудной модуляции. Но увы в диапазоне 20 МГц нет станций с AM модуляцией.Откройте GNURadio Companion и в блоке Options сходу выберем WX GUI (самостоятельно изучите интерфейс, предоставляемый QT). Для этого два раза кликните на блок и измените свойство.Добавьте блок osmocom source и сходу измените значение Ch0: Frequency на freq.

GNURadio написана на Python, и в каждые числовые поля возможно подставлять выражения на питоне. Пристально смотрите за типом полей — в случае если это float, то результатом должно быть настоящее число, в случае если int, то целое. Обратите внимание, что sample rate уже связана с переменной samp_rate, определённой в отдельном блоке.

Измените samp_rate на 2e6, т.е. мы зададим полосу отечественного сигнала 2 МГц.Переменная freq будет задаваться слайдером. Для этого добавьте блок WX GUI Slider, смените ему ID на freq и установите Default, Minimum и Maximum на 100e6, 50e6 и 150e6, соответственно (увидим, что запись 100e6 есть валидным числом nbgf float в Python). При перемещении слайдера значение freq будет изменяться от 50 000 000 до 150 000 000 с шагом в 1 000 000 (100 делений, наблюдай поле Num Steps).Сейчас добавим блок WX GUI FTT Sink (графическое отображение результатов ДПФ).

Соедините вентиль in этого блока с вентилем out блока osmocom source. Этим мы указали GNURadio, что вывод одного блока нужно передать на вход другого блока.Запустим отечественный проект. В показавшемся окне возможно видеть спектр с частотами от -1 МГц до 1 МГц (как мы и заказывали, диапазон 2e6 МГц в соответствии с samp_rate).

Но так как мы наблюдаем на диапазон 100 МГц, а не -1 – +1 МГц! Всё дело в том, что в SDR уже случилось умножение частот, и поступающий с SDR сигнал вправду уже не имеет информации об исходной частоте. Исходя из этого для удобства в блоке WX GUI FTT Sink в поле Baseband Frequency укажите также значение переменной freq. По окончании перезапуска шкала частот будет смотреться наглядней.Итак, подвигайте слайдер в диапазоне 60–110 МГц и понаблюдайте за спектром: вы видите множество FM станций.

Кроме этого посмотрите, как очень сильно изменяется приём при приближении вашей руки к антенне. Штатная антенна запланирована на диапазон приблизительно 800 МГц, и ваше тело изменяет действенную длину антенны, делая приём лучше.А сейчас предлагаю послушать вашу любимую станцию. FM демодуляция не весьма несложна в математике, исходя из этого в GNURadio кроме того имеется готовый блок FM Demod. Ему необходимо указать ширину канала и децимацию для выходного аудио сигнала.

Последняя обязана равняться отношению текущего sample rate к тому, что должен быть у аудио сигнала (48 кГц). Подключите выход этого блока к Audio Sink. Для удобства заведём ещё одну переменную audio_samp_rate = 48000 (это int!) для битрейта звуковой карты, а децимацию int(samp_rate/audio_samp_rate).

Но в случае если таковой проект запустить и настроить частоту на одну из станций в вашем городе, то вещание станции будет очень сильно забито шумами. И это ясно, мы забыли выделить одну станцию из всего диапазона.Добавим между блоками osmocom source и FM Demod ещё один блок Low Pass Filter. Это фильтр низких частот. Настроим его, дабы он обрезал всё за пределами 100 кГц с переходом шириной 100 кГц (возможно позже подобрать параметры получше). Сейчас звук будет намного чище.

Кроме этого в случае если громкости мелка, то возможно перед Audio Sink добавить Multiply Const для повышения амплитуды выходного аудио сигнала.Пара нужных советовОт одного блока возможно передавать эти не только в один, но и в пара блоков.При проектировании блок-схем в GNURadio довольно часто комфортно додавать окно FFT Sink и другие средства визуализации. Но их много изрядно нагружает процессор. Возможно, само собой разумеется, удалять такие блоки, в то время, когда они уже не необходимы.

Но в GNURadio имеется эргономичная возможность отключить блок, не удаляя его. Это возможно сделать из контекстного меню либо надавив стремительные клавиши D[isable] и E[nable].При анализе сигнала от электронных устройств довольно часто необходимо нажимать на них на кнопки для получения радио последовательности. Но возможно единожды записать последовательность в файл, по окончании чего проигрывать его и отрабатывать блок-схему. Для записи применяйте блок File Sink, а для проигрывания File Source.

Тут имеется подводный камень: при проигрывании из файла GNURadio не знает ничего о скорости, с которой необходимо «подавать» данные в остальные блок, и будет пробовать трудиться на большой скорости, загружая процессор. Для ограничения скорости чтения нам необходимо добавить особый блок Throttle, указав желаемый sample rate.В случае если необходимо переместить спектр вправо либо влево на какую-то величину (к примеру, для применения позже Low Pass фильтра), возможно умножить сигнал на синусоиду.

Для этого воспользуйтесь блоком Signal Source и перемножьте их при помощи Multiply. Ровно так и делается в SDR приёмнике. К примеру, возможно послать сигнал в две последовательности блоков. В одной переместить на одну боковую частоту, во второй на другую боковую частоту. Потом в оба отфильтровать фильтром низких частот и сравнивать два сигнала.

Как раз так делается при детектировании частотной манипуляции.Кстати, в случае если сделать слайдером изменение частоты Signal Source, то вы на практике заметите, как сдвигаемый за правый край спектр сигнала появляется в противоположной стороне, и напротив.При изучении спектров сигналов с некоторыми RTL-SDR вы столкнётесь с постоянным пиком ровно в середине спектра. Причём данный пик не двигается при перестройке частоты, неизменно оставаясь посередине. Это явление именуется DC spike.

Разумеется, эта частота (0 Гц) соответствует константе. Связана она с тем, что в приёмнике перед АЦП не редкость присутствует маленькая постоянная составляющая. В GNURadio у блоков osmocom source и RTL-SDR source имеется галочка DC Offset Mode, разрешающая убрать эту составляющую.Кроме записи в файл GNURadio имеет блоки для передачи в UDP/TCP получения и сокеты данных из них. К примеру, возможно кроме того сделать радио — UDP broadcast вещание.Хочется попытаться передачу данных, но пока не обзавелись Hack RF One либо аналогом?

Не беда. Возможно потренироваться применять Audio Sink с Audio Source. К примеру, возможно обучиться передавать эти через ультразвуковые волны, применяя колонки и микрофон. Вот пример для того чтобы проекта: www.anfractuosity.com/projects/ultrasound-via-a-laptopЧто ещё почитать?gnuradio.org/redmine/projects/gnuradio/wikigreatscottgadgets.com/hackrfhabrahabr.ru/post/204310

Случайная статья:

GNU Radio — Декодирование RDS


Похожие статьи:

Комментирование и размещение ссылок запрещено.

Обсуждение закрыто.