Gnuradio windows как запустить

GnuRadio и все все все

Блог о ЦОС. И не только.

GnuRadio: Урок 1, Signal Source, Audio source, фильтры

GNU Radio Companion (GRC) представляет собой графический пользовательский интерфейс, который позволяет строить сигнальные графы GNURadio. Это отличный способ познакомиться с основами GNURadio. Это первая статья в сериии руководств, которые познакомят вас с использованием GRC.

  1. Откройте окно терминала с помощью: Приложения> Стандартные> Терминал. В командной строке введите:
    gnuradio-companion
    Должно открыться окно, подобное приведенному ниже.
  2. Выполните двойной щелчок на блоке Options. Этот блок устанавливает некоторые общие параметры для графа. Оставьте ID, значение top_block. Введите название проекта (например, Tutoral1) и имя автора.
    Установите параметру Generation Options значение WX GUI, параметру Run значение Autostart, и параметру Realtime sheduling значение Off. затем закройте окно свойств. Второй блок, который присутствует на поле является блоком-переменной. В данном случае он используется чтобы установить частоту дискретизации. Более подробно это будет обсуждаться позже.
  3. В правой части окна находится список блоков, которые вам доступны. Разворачивая любою из категорий (для разворота нажмите на треугольник слева) вы можете увидеть доступные блоки. Ознакомьтесь с каждой из категорий, и посмотрите, что доступно.
  4. Откройте список Waveform Generators и дважды щелкните по Signal Source (“Источник сигнала”). Обратите внимание, что блок “Signal Source” появится в главном окне. Дважды щелкните на блоке и откроется окно свойств данного блока. Измените настройки, как показано на рисунке ниже и закройте окно. Этот источник сигнала теперь установлен ​​для вывода вещественной синусоиды в 1 кГц и с амплитудой 0,5.
  5. Для того, чтобы просмотреть на сигнал, нам нужен один из графических выводов. Разверните раздел “Instrumentation — WX” и дважды щелкните по “Scope Sink”. Он должен появиться в главном окне. Дважды щелкните на блоке и измените параметр “Type” на “Float” (значение с плавающей точкой). Оставьте остальные параметры по умолчанию и закройте окно свойств.
  6. Для того, чтобы соединить эти два блока, следует один раз нажать на «out» порт источника сигнала, а затем один раз на «in» порт “Scope Sink”. Должен получиться следующий граф:
  7. Если вы запустите граф сейчас, внизу в окне сообщений заметите предупреждение “Warning: This flow graph may not have flow control: no audio or usrp blocks found. Add a Misc->Throttle block to your flow graph to avoid CPU congestion”. GNURadio предупрежает нас, что в графе нет никаких ограничителей, и возможно поглощение ресурсов процессора. Для того что бы этого избежать, добавим блок “Throttle”. между источником и “Scope Sink”, как показано на рисунке ниже. Убедитесь в том, чтобы “Throttle” блок имеет тип “Float”. Обратите внимание, что пока вы это не сделаете, кнопка “Execute the flow graph” не будет доступна. Это происходит потому, что имеются ошибки в графе.
  8. Для того, чтобы наблюдать за работой этой простой схемы, мы должны cгенерировать граф, а затем выполнить его. Нажмите сначала на кнопку «Generate the flow graph«. Появится окно, в котором нам будет нужно ввести имя файла. Задайте имя файла tutorial1.grc и сохраните его.
  9. Нажмите кнопку “Execute the flow graph”. Scope Sink откроет график с изображением нескольких периодов синусоиды. Убедитесь, что частота и амплитуда соответствует значению, которое вы задали источнику сигнала ранее. Теперь мы поэксперементируем с графическими элементами управления.
  10. В правой стороне окна, в разделе “Channel Options”, в выпадающем списке “Marker” выберете пункт “Dot Large” . Теперь вы можете видеть фактические значения выборок (сэмплов). Вспомним, что блок переменной samp_rate устанавливает частоту дискретизации в 48000 выборок / секунду или 48 выборки / мс. Убедитесь, что действительно обеспечивается 48 выборок в течение одного периода синусоиды.
  11. Закройте график и снизьте частоту дискретизации до 10000, дважды щелкнув по блоку перменной “samp_rate”. Повторно перегенерируйте, и выполните сигнальный граф. Заметьте, точек на один период стало меньше. Но насколько мы можем понизить частоту дискретизации? Вспомним, что теорема Найквиста требует, чтобы частота сэмплирования была вдвое больше самой высокой частоты. Поэкспериментируйте с этим, и посмотрите, как изменится выходной сигнал, если вы понизите частоту сэмплирования, ниже частоты Найквиста.
  12. Закройте график и изменить частоту дискретизации обратно до 48000. Добавьте блок “WX GUI FFT Sink” (из раздела Instrumentation — WX), на граф. Измените у блока “WX GUI FFT Sink” параметр “Type” на “Float” и оставьте остальные параметры без изменения.
  13. Подключите к выходу источника сигнала вход “WX GUIFFT Sink”, нажав на “Out” порт источника сигнала, а затем на “In” порт блока FFT. Сгенерируйте и выполните граф. Вы должны наблюдать за график сигнала вместе с графиком FFT правильно показывающим частоту на входе в 1 кГц. Закройте окно.
  14. Ознакомьтесь с другими графическими выводами (WX GUINumber Sink, WX GUIWaterfall Sink, и WX GUIHisto Sink), чтобы посмотреть, как они отображают сигнал.
  15. Создайте граф показаный ниже. Audio Sink находится в категории Audio.

    Выполните граф. Как и ранее, вы должны увидеть график сигнала, и график спектра. Однако, теперь вы также должны услышать тон в 1 кГц. Блок Audio Sink направляет сигнал на звуковую карту компьютера. В зависимости от частоты дискретизации звуковой карты в компьютере, вы можете получить сообщение об ошибке в окне GRCAudio_alsa_sink[hw:0,0]: unable to support sampling rate 48000, card requested 44100 insteadЕсли вы видите сообщение подобное этому, остановите выполнение графа и дважды щелкните на блоке переменной samp_rate, и измените частоту дискретизации до 44100 (или до той, которая отображется в ошибке).
    Запустите граф на выполнение, и сообщение об ошибке должно исчезнуть.
  16. Постройте граф как показано ниже. Установите частоту дискретизации в значение 48000. Два источника сигнала должны иметь частоты 1000 и 800 Гц соответственно. Блок “Add” (сложение) находится в разделе “Math Operators”.
  17. Запустите граф. О на графике вы должны увидеть сигнал, соответствующий сумме двух синусоид. На графике FFT спектра вы должны увидеть компоненты сигнала: 800 и 1000 Гц. К сожалению, спектр FFT не обеспечивает достаточное разрешение, чтобы четко увидеть два различных компонента. Обратите внимание, что максимальная частота, представленные на этом графике составляет 24 кГц. Это половина частоты дискретизации 48 кГц. Для того чтобы получить лучшее разрешение, мы можем снизить частоту дискретизации. Попробуйте снизить частоту дискретизации до 10 кГц
  18. Замените блок “Add” на “Multiply”(умножение) блок. Какой результат вы ожидаете от произведения двух синусоид? Проверьте свой ответ запустив граф.
  19. Измените граф, чтобы включив блок “Low Pass Filter ” (фильтр низких частот), как показано на рисунке ниже. Этот блок находится в категории Filters. Вспомним, что блок умножения выдает синусоиды в 200 Гц и 1.8 КГц. Создадим фильтр, который будет пропускать компоненту в 200Hz и блокировать компоненту в 1.8 КГц. Установите у фильтра нижних частот параметр “Cutoff frequency” (частота среза) в значение 1 кГц, и параметр “Transition width ”(ширина переходной полосы) в 200 Гц. Используйте окно Блэкмана (Window — Blackman). Выполните граф. Вы должны увидеть, что только компонента в 200 Гц проходит через фильтр. Поэксперементируйте с фильтром высоких частот (High Pass Filter).
  20. Используя тот же граф, измените переменную c частотой дискретизации до 20000. Измените параметр Decimation (прореживание) в фильтре низких частот до 2. Прореживание уменьшает количество выборок, которые обрабатываются. Прореживание в два раза означает, что вывод фильтра будет иметь частоту дискретизации равной половине частоты дискретизации на входе, в данном случае только 10000 выборок / сек.
    Это достаточная частота дискретизации для частоты, с которой мы имеем дело. Выполните граф. Какую частоту вы наблюдете на спектре FFT? Точно её измерить, можно наведя курсором мыши на пик наблюдаемого компонента.
  21. Вы должны были заметить, что в настоящее время спектр FFT отображет компонету сигнала около 400 Гц, а не 200 Гц, как ожидается. Почему эта ошибка происходит? Это происходит потому, что частота дискретизации на FFT не отрегулирована должным образом с частотой дискретизации на входе. Дважды щелкните на блоке FFT Sink и измените частоту дискретизации, задав ей значение samp_rate / 2. Выполните граф. Теперь вы должны увидеть правильную частоту в спектре.
  22. Перейдите в папку, содержащую файл GRC, с которым выработаете. Если вы не знаете где это, путь к этому файлу отображается в нижней части окна GRC. В дополнение к сохраненному вами «.grc» файлу вашего графа, обратите внимание, что в папке так же имеется файл под названием «top_block.py». Дважды щелкните на этом файле. Вам будет предложено запустить или отобразить этот файл. Выберите “Отобразить”. Как вы можете видеть, это Python скрипт, созданный GRC. Именно это файл запускается при выполнении графа потока. Если вы владеете языком программирования Python, вы можете сами изменить его. Это позволяет использовать функции, которые не включены в GRC, и сколь угодно расширять возможности. Имейте в виду, что каждый раз, когда вы запускаете граф в GRC, он переписывает Python скрипт заново. Так что, если вы вносите изменения непосредственно в Python скрипт, и хотите эти изменения сохранить, то сохраняйте модифицированный скрипт под другим именем.
Читайте также:  Autocad 360 для windows

GnuRadio: Урок 1, Signal Source, Audio source, фильтры : 7 комментариев

Доброе время суток!
А что делать если в разделе «Instrumentation» нет каталога «WX»?

Гнурадио в Виндовс у вас установлено?
Как вариант можно попробовать использовать инструментарий основанный на QT.
Instrumentation -> QT

Доброе время суток.
Гну радио установлено — все по инструкции. Компанион запускается. Вот только в QT я не нашел осцилkа и блок для hackRf.

Виндоус 8-ка, х64.

А вообще, Игорь, может быть подскажите, почему в Убунту Гну радио имеет значительно больше блоков чем в Виндоус.
И еще мое личное наблюдение. Если Компанион открывать через Питон (Виндоус), то появляется сообщение о том, что не все блоки из древа каталога загружаются.

Пытался повторить видео урок Майкла Османа, но… раздел «Source» отсутствует в правой панели GNU Radio Companion v. 3.7.9
Как понимать и что делать, подскажите пожалуйста.

Попробуйте воспользоваться строкой поиска над списком блоков. Возможно в новой новых версиях этот блок переместили куда-нибудь.

Software Defined Radio — как это работает? Часть 4

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

Для примера рассмотрим задачу параллельного приема нескольких FM-станций на один приемник. В качестве приемника будем использовать все тот же RTL SDR V3.

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

Установка

Для начала работы GNU Radio необходимо установить, дистрибутив для Windows можно скачать здесь. Система эта кроссплатформенная, версии есть также под Linux и под OSX (вроде бы GNU Radio успешно запускали и на Raspberry Pi, но 100% гарантии дать не могу).

Читайте также:  Запуск run астра линукс

По сути, GNU Radio это целый фреймворк для цифровой обработки сигналов, в котором программа «собирается» из отдельных модулей. Есть большое количество уже готовых блоков, при желании также можно создавать свои собственные. Сами модули написаны на С++, а для взаимодействия блоков друг с другом используется Python. Желающие могут посмотреть на API более подробно, но на практике это, скорее всего, не пригодится — все действия можно делать визуально в программе GNU Radio Companion.

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

Начало работы

Запускаем GNU Radio Companion, создаем новый проект, тип проекта выбираем WX GUI, добавляем на экран и соединяем два блока, как показано на скриншоте.

Мы видим два типа блоков — Source (источник) и Sink (выход, «слив»). RTL-SDR — это наш приемник, FFT GUI — это виртуальный спектроанализатор.

Переменную Sample Rate устанавливаем в 2048000, это частота дискретизации нашего приемника. Частоту RTL-SDR оставляем по умолчанию равной 100МГц.

Запускаем проект — все работает, мы видим спектр FM-станций. Первая программа для GNU Radio готова!

Если мы посмотрим лог, то увидим такие строки.

Generating: ‘D:MyProjectsGNURadiotop_block.py’
Executing: C:Python27python.exe -u D:MyProjectsGNURadiotop_block.py

Да, мы можем посмотреть файл top_block.py, который сгенерил нам GNU Radio Companion. Истинные джедаи могут писать непосредственно в Python, но требуемый код, как мы видим, довольно большой. Мы же создали его за 1 минуту.

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

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

Читайте также:  Как удалить скаченные файлы windows 10

Принимаем FM-радио

Теперь попробуем принять одну из станций. Как было видно из скриншотов, центральная частота приемника 100МГц и ширина полосы пропускания около 2МГц. На спектре мы видим две станции, на 100.1МГц и 100.7МГц соответственно.

Первым шагом необходимо перенести спектр станции в центр, сейчас он отстоит вправо на 100КГц. Для этого вспоминаем школьную формулу умножения косинусов — в результате будет две частоты, сумма и разность — нужная станция сдвинется в центр, что нам и нужно (а лишнее мы потом отфильтруем).

Создаем две переменные для хранения частоты freq_center=100000000 и freq_1=100100000, также добавляем генератор сигналов с частотой freq_center — freq_1.

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

Схема в итоге должна выглядеть так:

Теперь необходимо добавить сразу несколько блоков — уменьшить тактовую частоту входного сигнала (она равна 2048КГц), отфильтровать сигнал, подать его на FM-декодер, затем еще раз уменьшить тактовую частоту до 48КГц.

Результат показан на картинке:

Считаем внимательно. Мы делим тактовую частоту 2048КГц в 4 раза блоком Rational Resampler (получаем 512КГц), затем после Low Pass фильтра стоит WBFM-декодер с децимацией 10 (получаем 51.2КГц). В принципе, этот сигнал уже можно подать на звуковую карту, но высота тона будет чуть отличаться. Еще раз меняем тактовую частоту в 48/51, в результате будет тактовая частота 48.2КГц, разницей уже можно пренебречь.

Второй важный момент — тип входов. С приемника поступает комплексный IQ-сигнал (входы-выходы синего цвета), с FM-декодера выходит вещественный сигнал — входы и выходы желтого цвета. Если перепутать, ничего не заработает. Подробнее уже было на Хабре, нам достаточно понять общий принцип.

В общем, запускаем, убеждаемся что все работает. Можно запустить программу и слушать радио. Мы пойдем дальше — у нас же все-таки Software Defined радио — добавим одновременный прием второй станции.

Второй приемник добавляется любимым программистским методом — Ctrl+C/Ctrl+V. Добавляем переменную freq_2, копируем блоки и соединяем их точно также.

Результат вполне сюрреалистичный — две FM-станции можно слушать одновременно. Тем же самым методом (Ctrl+V) можно добавить и третью станцию.

Запись

Слушать две станции оригинально, но на практике мало полезно. Сделаем что-то более нужное, например добавим запись звука в отдельные файлы. Это может быть достаточно удобно — с одного физического приемника можно параллельно записывать несколько каналов.

Добавим к каждому выходу компонент File Sink, как показано на скриншоте.

Windows-версия почему-то требует абсолютные пути файлов, иначе запись не работает. Запускаем, убеждаемся что все нормально. Размер сохраняемых файлов довольно большой, т.к. по умолчанию записывается формат float. Запись в формате int оставлю читателям в качестве домашнего задания.

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

Разумеется, число записываемых каналов можно увеличить, оно ограничено только полосой пропускания приемника и можностью компьютера. Кроме File Sink можно использовать и UDP Sink, так что программу можно использовать для трансляции по сети.

Запуск из командной строки

И последнее. Если использовать программу автономно, например для многоканальной записи, то UI в принципе и не нужен. В верхнем левом блоке Options меняем параметр Run Options на No UI. Запускаем программу еще раз, убеждаемся что все работает. Теперь сохраняем сгенерированный файл top_block.py — мы можем просто запускать его из командной строки, например из bat-файла или из консоли.

Если кому интересно, сгенерированный файл сохранен под спойлером.

Удобно и то, что система является кросс-платформенной, и получившаяся программа может работать на Linux, Windows и OSX.

Заключение

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

Если не будет каких-то отдельных пожеланий, тему введения в SDR наверно можно закрыть — все основные моменты уже рассмотрены (да и количество просмотров от первой к третьей части падает почти по экспоненте;). Надеюсь все же, что некоторое понимание того как это работает, у читателей осталось. Ну и всем удачных экспериментов.

Оцените статью