gnu radio что это

Crafting.be

When engineering is in blood

Show menu Hide menu

@hobbyworld_twit a world war of cthulhu чей?

@turbojedi Клаву хардварную была попытка сделать?

@001iz @Graveraider Всегда был вопрос а как у Evil персонажей могут быть романтики. Там скорее как в KoToR прогибание под свою сторону силы.

@Graveraider @001iz Q: Есть ли в игре романы? A: Да. Вы можете завести роман с 4 компаньонами, 2 из которых бисексуальны.

Советуем посмотреть также Сайт Некроманта

Метки

Введение в GNU Radio и основы SDR

Попался мне тут в руки стик e4000, я решил его подключить. Но писать об этом слишком скучно, да и получается какая-то Windows TM магия с рассказыванием про то как запустить GUI и нажать там парочку кнопок

Я не начинающий радиолюбитель, у меня нет в запасе какого-то опыта, поэтому если Вам что-то не понятно или не нравится пишите, подправим/дополним

Table of Contents

Быстрый старт для E4000

Характеристики

Elonics E4000 — 52 — 2200 MHz with a gap from 1100 MHz to 1250 MHz (varies)

Установка

Ну в общем под Ubuntu все просто нужно PPA,которое под GUI оболочку Gqrx, но туда включено GNU Radio https://launchpad.net/

Затем вставляем донгл запускаем Gqrx

Также, дальше стоит воспользоваться подробными инструкциями о том как работать с GNU Radio и донглом.

Прослушивание указанной частоты из консоли

Ham it up v1.2 upconverter

Немного о конверторе

Конвертер Ham It Up v1.2 — RF Upconverter For Software Defined Radio высококачественный приемный КВ конвертер Hi-End КВ конвертер (RTLSDR/FUNCUBE)

Краткая справка по терминам

Чем меньше длинна волны тем больше частота.

У нас в отличии от «буржуев» все через длину волны выражается.

Русская
аббревиатура
Расшифровка Английская
аббревиатура
AM Амплитудная модуляция AM
ЧМ Частотная модуляция FM
ЛЧМ Линейная ЧМ Chirp
ФМ Фазовая модуляция PM
КАМ Квадратурная АМ QAM
Continuous wave(morse code) CW
CW Lower Sideband CWL
CW Upper Sideband CWU
Upper Sideband USB
Lower Sideband LSB
Спутниковый конвертер LNB
Цифровое(Аудио)радиовещание DAB
Набор технологий для DAB DRM

Что ловить

Очевидно- радио)))) Иногда можно определить что Вы поймали, что-то не то.

распределения полос частот между радиослужбами Российской Федерации

Небольшой перевод про о базовых концепциях GNU Radio — Источник

Базовые концепции GNU Radio

Потоковые графы – and what they’re made of

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

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

Любая фактическая обработка сигнала производится блоками. В идеале каждый блок должен делать только одну работу, этот путь позволяет оставаться GNU Radio модульным и гибким. Блоки обычно пишутся на C++ (также можно писать их на Python); писать новые блоки не очень сложно.

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

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

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

Так что же происходит здесь. Блок audio source подсоединен к драйверу звуковой карты и выводит аудио образцы. Это образцы дольше обрабатываются в фильтре низких частот. Наконец образцы(сэмплы), передаются в блок который записывает их в WAV файл.

Элементы

В основном, мы называем то что блок выводит — элементом. В предыдущем примере, один элемент это вещественное число представляло один сэмпл произведенный аудиодрайвером. Однако, элемент может быть представлен и в цифровом виде. Наиболее распространенный тип сэмплов это вещественные — real samples (как в примере выше), комплексные — complex samples (наиболее распространенные в software defined radio), целые — integer types и векторы — vectors этих скалярных типов.

Вот как это работает:

Здесь появился, новый блок названный ‘Stream to vector’. Его особенность в том что выводимое им значение отличатся от того что поступает на вход. Этот блок берет 1024 сэмпла (т.е. 1024 элемента) и посылает их на вывод в виде одного вектора из 1024 сэмплов (т.е. это его элемент ). Комплексный вывод БПФ затем преобразуется как величина площади в реальный тип данных (обратите внимание как мы используем различные цвета портов для указания различных типов данных).

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

Вот что вы должны знать:

So what does GNU Radio do?

С начала, вот что вы делаете: вы проектируете потоковый граф, выбираете блоки и задаете соединения и сообщаете об этом всем GNU Radio. С GNU Radio вы сталкиваетесь дважды: сперва, оно поставляет вам множество блоков. После того как потоковый граф задан, оно выполняет граф вызывая блоки один за другим и проверяет что элементы передаются от одного блока к другому.

Частота дискретизации

Конечно, если вы читаете эту статью, вы знаете что такое частота дискретизации (если это не так, отправляйтесь к картинке чтобы понять это).

Давайте посмотрим на потоковые графы. В первом примере, аудио источник обладает фиксированной частотой дискретизации 32кб/с. Так как фильтр никак не меняет частоту дискретизации, эта частота используется на протяжении всего потокового графа.

Прежде всего, что нового мы здесь видим здесь представлены один Сток и два Истока. Каждый порт представляет из себя один из каналов(левый и правый) звуковой карты, которые работают на фиксированной и разной частоте.

Подробнее о блоках (и атомарности) #

Давайте вернемся к блокам. Наибольшая часть GNU Radio это большое количество блоков.Когда вы начнете использовать GNU Radio, вы будете соединять блок за блоком. Рано или поздно Вам понадобится блок, который будет недоступен в GNU Radio, тогда вы лего можете написать его самостоятельно. Это не трудно.

Метаданные

Сохраняя поток на диск, метаданные также будут сохранены (смотри также Metadata Documentation Page).

Источник

Изучаем GNU Radio при помощи микрофона

Прошлая статья про SDR и GNU Radio показала, что тема интересна сообществу. Учитывая, что про пакет GNU Radio информации на русском языке почти нет, да и на английском не всё понятно, я решил описать свои опыты с GNU Radio.

Про SDR и GNU Radio я уже писал в предыдущей статье. Напомню, моя цель показать, как перехватывать и даже излучать радио сигнал для управления устройствами умного дома (да и вообще IoT). Считаю важным привлечь внимание к безопасности в IoT. Но до этого нам ещё далеко… Для начала разобраться бы с GNU Radio!

SDR-приёмник есть не у всех, и мне показалось, что будет полезным показать, что можно сделать с GNU Radio с тем, что есть у каждого — а именно с микрофоном вашего ПК и наушниками.

Под катом несколько интересных экзерсисов со звуком.

Звуки вокруг

Итак, начнём с простого: изучения спектра звуков вокруг. Будем считать, что установку пакета GNU Radio или запуск подготовленного образа Ubuntu/Windows с GNU Radio вы произвели. Если нет, то на сайте GNU Radio скачайте образ на базе Ubuntu.

Начнем с создания простого проекта захвата звука с микрофона. Для этого добавим блок Audio Source, выставим samp_rate 48000 (многие карты работатю на 44100 Гц, а не на 48000 Гц).

Если обратиться к теореме Котельникова-Найквиста-Шеннона, то станет понятно, что частота дискретизации должна в 2 раза превышать верхнюю частоту полезного сигнала. Итак, 24 кГц — уже ближе. Неплохо об этом написано тут.

Вообще числа 48 кГц и 44.1 кГц — дань прошлому. Они связаны с количеством кадров в секунду и строками развёртки в древних системах записи видео, потом с форматом CD. В наши дни эти значения так и осталось стандартами.

Вернёмся к нашей схеме GNU Radio. К Audio Source подключим WX FFT. Не забываем QT GUI заменить на WX GUI в top_block, а так же изменить тип входа на Float. А теперь будем бегать по квартире, издавая разные звуки. Школьная физика нам много рассказала о том, что мы увидим, но все это забыто, да и своими глазами увидеть всегда интересней, чем просто прочесть в учебнике.

Первое, что мы увидим — ничего не видно! Вся значимая часть спектра сосредоточена в первых 2 или 3 кГц. Ну, ок, давайте добавим между источником и WX FFT новый блок: Rational Resampler — он позволит изменить Sample Rate, оставив только нужную часть спектра. Для удобства заведём новый блок Variable (переменную), назовём resamp и зададим значение, например, 15. В блок ресемплера в поле Decimation впишем имя этой переменной. Теперь на WX FFT будет подаваться сигнал с Sample Rate равным samp_rate/resamp, т.е. в этом блоке в поле Sample Rate нужно вставить именно это выражение. Теперь наш сигнал будет простираться до 1.5 кГц, что уже лучше. Ну, теперь всё видно!

Итак, начните с ноты ля 440 Гц. Проверим свой голос на частоту чистоту. Сразу интересная находка (напомню, мы это должны знать из школы): мы издаем не одну частоту, а набор кратных частот — тон и обертоны. У кого есть дома пианино или другой инструмент, можно попробовать и их. Вот так нота ля первой октавы выглядит на пианино.

А вот ля малой октавы. Всё как по учебнику — пиков стало в 2 раза больше, низший пик стал в 2 раза ниже (220 Гц)

Кратные частоты присутствуют не случайно. Ведь в случае пианино/гитары/… (струнных) звук извлекается колебанием струны. А у струны два закреплённых конца, т.е. могут излучаться только моды с длинной волны λ/2 = L*n, где n=1,2,3…

Аналогично с голосом. Связки позволяют менять характеристики гортани, которая выступает резонатором (да простят меня любители анатомии за неточности названий). Опять же, стенки закреплены, там у колебаний узловые точки, т.е. опять же та же формула для возбуждаемых мод.


(синее — спектр «тишины», зелёное — спектр хлопка)

Ой, тут прямо все частоты видны (обратите внимание на шкалу частот и уровень сигнала в сравнении с графиками выше!). Логично, ведь хлопок — это кратковременное повышение давления (очень резкое), т.е. почти δ-функция, а её спектр содержит все частоты.

Это кстати можно использовать. Кто помнит из 90-ых такие брелоки для поиска ключей, которые на свист начинали звуки издавать? Удобная штука была. Так вот они на хлопок тоже реагировали, т.к. в звуке хлопка есть в том числе и частота, соответствующая свисту.

Спектр алфавита

А теперь давайте послушаем себя. Произносите разные буквы алфавита и смотрите на спектр (лучше без ресемплинга, чтоб видеть, какие частоты используются в диапазоне 0-20 кГц). Человек использует несколько видов генерации звуков: губные (начинаются с размыкания губ, что создаёт много частот сразу), гортанные, зубные, язычные и носовые. Особенно интересно выглядят шипящие и свистящие (это гортанные и зубные) — их спектр очень широк и в основном располагается в спектре > 2.5 кГц (у звука «с» даже > 5 кГц). Это объясняет, почему слова с этим звуком плохо слышны по телефону (в былые времена полоса пропускания была на уровне 3 кГц или даже ниже — попробуйте добавить Low Pass фильтр и направить результат в Audio Sink с наушниками — результат будет напоминать старый добрый проводной телефон).

У кого есть дети, послушайте их — они сильно звонче, их голос содержит много высоких частот. Именно поэтому их голос по телефону всегда странный, а понять их частенько просто невозможно (искажения голоса сильно больше, чем у взрослого).

Кстати, я попробовал выдавить из себя самую высокую ноту. Ну, выше 700 Гц я не взял. Сын взял 1200 Гц! Я такой ограниченности от себя не ожидал — это же меньше 5% слышимого мной спектра. Почувствовал себя ущербным…

Поговорим с дельфинами

Ну ок, мы не можем так высоко звучать, так воспользуемся этой полосой для другого. Теперь попробуем сделать передачу голоса по ультразвуку. Поставим Low Pass фильтр (низких частот) после блока Audio Source, умножим на косинус 15 кГц (тем самым перенесём наш сигнал на 15 кГц выше) и отправим в динамик (он так себе с этим справляется). Но такой файл можно записать, используя File Sink. Проиграв такой файл, сторонний слушатель разобрать, что там сказано, не сможет. Шпионская игра на уровне 2 класса.

А теперь произведём обратное — восстановим закодированный сигнал. Обычный микрофон ноута плоховато воспринимает высокие частоты, а вот из файла — легко (для наших-то тестов достаточно). Голос после восстановления весьма неплохо воспринимается.

Примерно таким способом можно даже данные передавать: вот пример сетевого интерфейса на базе ультразвуковой передачи.

Данный пример показывает, что с GNU Radio и звуковой картой можно делать уже немало!

Обзор блоков GNU Radio

В GNU Radio очень много разных блоков, и разобраться в них не просто. Причём самое сложное — понять, что тут вообще есть. Ниже я приведу лишь наиболее популярные блоки, используемые «в быту».

Математические операции:

Add — сложение двух сигналов
Mulitly — перемножение двух сигналов (например, для АМ)
Add Const — прибавить (вычесть) константу (например, при демодуляции АМ убрать DC-составляющую)
Multiply Const — умножение сигнала на константу (для усиления, например)
Char/Integer/Float/Complex to Char/Integer/Float/Complex — преобразование типов данных

Источники:

Constant Source — источник, выдающий всегда одно и то же значение
Signal Source — источник, выдающий синусоидальный сигнал (для синтетического сигнала)
Audio Source/Sink — захват со звуковой карты или вывод в неё
File Source/Sink — чтение из файла (используйте Throttle для ограничения скорости чтения до нужного Sample Rate) и запись в файл
Wav File Source/Sink — чтение/запись WAV-файла
TCP/UDP Source/Sink — возможность стыковать проект с сетевым ПО посредством TCP или UDP сокетов
osmocom Source/Sink — приём данных от RTL-SDR или HackRF One или передача (для HackRF One)
Vector Source — источник последовательности чисел

Фильтры и модуляция:

Low/High/Band Pass Filter — низкочастотный/высокочастотный/полосовой фильтры
Frequency Xlating FIR Filter — совмещает сдвиг частоты и Low Pass фильтр для выделения нужной полосы частот
AM/FM/GFSK/… Mod/Demod — различные модуляторы и демодуляторы

Семплинг:

Rational Resampler — позволяет преобразовать входящую последовательность отсчётов из одного Sample Rate в другой путём децимации и интерполяции (используется для «подгона» под нужный Sample Rate)
Throttle — ограничение скорости подачи отсчётов до нужного Sample Rate (если в проекте нед ни одного блока, ограничивающего скорость обработки)
Delay — задерживает поток на нужное число отсчётов

WX GUI FFT Sink — графический вывод спектра сигнала
WX GUI Waterfall Sink — вывод спектральной мощности в режиме «водопада» (по оси X — частота, по Y — время, Z (цвет) — амплитуда). Полезно для поиска частоты излучения редко передающего источника в заданном диапазоне
WX GUI Constellation Sink — вывод фазовой диаграммы сигнала (разность фаз между колебаниями действительной и мнимой частей сигнала)
WX GUI Scope Sink — осциллограф

Разное:

Variable — переменная, позволяет использовать переменные вместо чисел в множестве блоков
Selector — мультиплексор, в сочетании с WX Slider позволит «на лету» переключать входы и выходы
Pack/Unpack K bits — преобразует из байтов 0/1 в последовательность из K бит и наоборот из байта в последовательность байт 0/1, соответствующую битам (удобно для кодирования/декодирования пакетов — байты 0/1 можно умножать на несущую, например)

Что ещё нужно знать о GNU Radio Companion (GRC)?

Все блоки в GRC, имеющие входы или выходы, требуют определения типа данных. Тип выхода одного блока должен быть таким же, как и входной тип связанного с ним блока. Выходные данные из одного блока можно передать в несколько блоков (т.е. нарисовать несколько связей). Но в один вход может входить только один поток!

Большинство блоков имеют минимальную документацию во вкладке в окне настроек, а так же в сносках к параметрам. Хотя обычно этого недостаточно. Немного устаревшая дока есть тут.

Все параметры у блоков могут быть выражениями Python. Т.е. вместо числа можно подставить формулу с участием переменных, определённых блоками Variable.

Часто хочется «покрутить» параметры проекта путём изменения значений переменных. Для этого используйте WX Slider или аналогичный компонент UI, используя его имя вместо нужной переменной. После запуска проекта в UI появится слайдер. Это удобно для перестройки частоты или параметров фильтров.

Ошибки в типе связей или в параметрах блока подсвечиваются красным. Они так же блокируют запуск проекта (в настройках блока, подсвеченного красным можно прочесть о проблеме). Есть run-time ошибки, которые проявляются уже при запуске проекта — лог внизу окна GRC подскажет, в чём проблема.

Некоторые блоки требуют целого числа в качестве параметра. Подстановка формулы может привести к несоответствию типов. Используйте Python-овскую функцию int() для преобразования к целому.

Для отключения блока используйте Disable/Enable. Это позволит не удалять блок, а просто исключить его из проекта на время с сохранением всех введённых параметров.

Все схемы в GRC преобразуются в скрипты на Python, что позволяет их потом изменять, а так же автоматизировать какие-то процессы минуя GRC.

Часто удобно сохранить звук/радио сигнал в файл для дальнейшего анализа. Для этого используйте блок File sink. Обратите внимание, что при чтении файла нужно помнить использованный формат данных при записи (тип числа), а так же Sample Rate. Рекомендую включать эти значения в имя файла помимо описания самого записываемого сигнала — это позволит не забыть, как его считать потом.

При проигрывании из файла обязательно используйте блок Throttle для ограничения скорости считывания. Это не требуется, если в схеме есть другой блок, который физически ограничивает скорость чтения данных. Например, блок Audio Sink итак ограничивает скорость подаваемых ему данных указанным в его настройках Sample Rate.

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

Старайтесь удобно располагать блоки в проекте. Это ни на что не влияет, кроме читабельности.

Надеюсь, данная статья побудит кого-то на эксперименты со звуком.

Источник

Делаем модем: передаем цифровые данные по воздуху с помощью OFDM и GNU Radio

Данный текст можно считать продолжением статьи «Разбираем звук Dial-up модема», в которой разбирался метод установки связи между модемами. Сегодня мы пойдем дальше, и посмотрим на практике как передаются данные, для чего создадим простую реализацию модема с помощью OFDM и GNU Radio.

Данные мы будем передавать по воздуху, в прямом смысле этого слова — для приема и передачи будет достаточно динамика и микрофона.

Для тех, кому интересно как это работает, продолжение под катом.

Итак, наша задача — сделать простейший модем, способный передать данные из точки А в точку Б. Существует много способов модуляции цифрового сигнала, мы воспользуемся OFDM — методом, широко используемым в современных системах связи. В OFDM цифровой сигнал с помощью преобразования Фурье преобразуется в несколько параллельных поднесущих, что обеспечивает высокую скорость и эффективность использования канала передачи. OFDM используется много где, от цифрового телевидения и радио, до LTE. Наш аудиоканал гораздо уже и скромнее по параметрам, так что и скорости будут поменьше, но принципиально суть, в общем, не меняется. Строго говоря, OFDM не предназначен для передачи данных по воздуху, хотя для небольших расстояний обычного микрофона и динамика будет вполне достаточно.

OFDM в GNU Radio

Минимальный граф для тестирования приема и передачи показан ниже:

Исходный код для GNU Radio 3.8:

В качестве источника данных используется обычный текстовый файл (в моем случае он содержит строку «Hello Habr!!»), затем данные разбиваются на блоки, которые подаются на OFDM Transmitter. OFDM это достаточно сложный вид модуляции, в настройках OFDM-кодера нужно указать достаточно много не совсем очевидных параметров.

Более детальный разбор значений можно найти здесь. Разумеется, параметры блока OFDM Receiver должны совпадать с параметрами передачи.

Блок Channel Model используется для симуляции канала связи, блок QT GUI Frequency Sink используется для визуализации спектра. Также стоит обратить внимание на невысокую частоту дискретизации (sample rate = 2400), это специально сделано для того, чтобы сигнал занимал небольшую полосу спектра, пригодную для передачи по аудиоканалу.

К сожалению, встроенного блока для отображения принимаемых данных в GNU Radio я не нашел, так что приходится использовать UDP. Блок UDP Sink используется для вывода данных, для их приема используется программа на языке Python:

Это позволяет выводить принимаемые данные в консоли, что достаточно удобно. Возможно есть более простой способ вывода в GNU Radio, если кто знает, напишите в комментариях.

Если все было сделано правильно, мы можем запустить GNU Radio и наш скрипт для приема, результат должен выглядеть примерно так:

Казалось бы, тему можно закрывать? Нет, все интересное только начинается.

Выходим в эфир

В вышеприведенном примере все довольно просто. Но есть одно «но» — GNU Radio работает с так называемым «комплексным сигналом», фактически представляющим собой пары чисел, сдвинутых по фазе на 90 градусов. Это удобно для компьютерной обработки, но мы не можем просто взять и передать в эфир комплексное число.

И тут есть два варианта. Владельцы SDR-трансмиттеров (HackRF, LimeSDR, USRP и пр) могут дальше не читать, а просто взять готовый блок для GNU Radio, в котором все делается «автоматом». Но т.к. мы собираемся передать сигнал с помощью звуковой карты, мы должны сделать преобразование самостоятельно, для чего воспользуемся блок-схемой, которая есть в любой статье по ЦОС:

Здесь OFDM это наш передатчик, Fc частота несущей, мы зададим её равной 4КГц, чтобы сигнал попадал в максимум чувствительности колонок и микрофона. Блок-схема графа для передачи также соответственно, усложняется:

Для удобства тестирования я использую WAV File Sink, чтобы сохраненный файл можно было записать и воспроизводить отдельно. Также мы можем открыть файл и посмотреть его спектр, можно убедиться что центральная частота действительно равна 4КГц:

Прием

И наконец, последний шаг: создадим блок-схему для приема сигнала. Тут фактически все то же самое, только в обратном порядке.

Мы домножаем исходный сигнал на сдвинутые по фазе опорные сигналы, затем с помощью LPF отсекаем высокочастотные компоненты. На выходе получается комплексный сигнал, который может использоваться для дальнейшей обработки.

Граф для приема в GNU Radio имеет следующий вид:

Стоит отметить блок Audio Source для приема данных из звуковой карты, блок QT GUI Frequency Sink используется для визуализации принимаемого сигнала.

Для тестирования, я записал WAV-файл на смартфон, при поднесении его к микрофону компьютера, на экране появляется декодированный текст:

Заключение

Как можно видеть, прием и передача сигналов с помощью GNU Radio достаточно интересен и нагляден. OFDM имеет достаточно большое число параметров, желающие могут поэспериментировать самостоятельно с размером блока FFT, числом несущих, частотой передачи и пр.

Всем спасибо за внимание, и удачных экспериментов.

Источник

Читайте также:  enable dhcp relay что это
Сказочный портал