GNU Radio Companion (GRC) представляет собой графический пользовательский интерфейс, который позволяет строить сигнальные графы GNURadio. Это отличный способ познакомиться с основами GNURadio. Это первая статья в сериии руководств, которые познакомят вас с использованием GRC.
- Откройте окно терминала с помощью: Приложения> Стандартные> Терминал. В командной строке введите:
gnuradio-companion
Должно открыться окно, подобное приведенному ниже.
- Выполните двойной щелчок на блоке Options. Этот блок устанавливает некоторые общие параметры для графа. Оставьте ID, значение top_block. Введите название проекта (например, Tutoral1) и имя автора.
Установите параметру Generation Options значение WX GUI, параметру Run значение Autostart, и параметру Realtime sheduling значение Off. затем закройте окно свойств. Второй блок, который присутствует на поле является блоком-переменной. В данном случае он используется чтобы установить частоту дискретизации. Более подробно это будет обсуждаться позже. - В правой части окна находится список блоков, которые вам доступны. Разворачивая любою из категорий (для разворота нажмите на треугольник слева) вы можете увидеть доступные блоки. Ознакомьтесь с каждой из категорий, и посмотрите, что доступно.
- Откройте список Waveform Generators и дважды щелкните по Signal Source (“Источник сигнала”). Обратите внимание, что блок “Signal Source” появится в главном окне. Дважды щелкните на блоке и откроется окно свойств данного блока. Измените настройки, как показано на рисунке ниже и закройте окно. Этот источник сигнала теперь установлен для вывода вещественной синусоиды в 1 кГц и с амплитудой 0,5.
- Для того, чтобы просмотреть на сигнал, нам нужен один из графических выводов. Разверните раздел “Instrumentation — WX” и дважды щелкните по “Scope Sink”. Он должен появиться в главном окне. Дважды щелкните на блоке и измените параметр “Type” на “Float” (значение с плавающей точкой). Оставьте остальные параметры по умолчанию и закройте окно свойств.
- Для того, чтобы соединить эти два блока, следует один раз нажать на «out» порт источника сигнала, а затем один раз на «in» порт “Scope Sink”. Должен получиться следующий граф:
- Если вы запустите граф сейчас, внизу в окне сообщений заметите предупреждение “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” не будет доступна. Это происходит потому, что имеются ошибки в графе.
- Для того, чтобы наблюдать за работой этой простой схемы, мы должны cгенерировать граф, а затем выполнить его. Нажмите сначала на кнопку «Generate the flow graph«. Появится окно, в котором нам будет нужно ввести имя файла. Задайте имя файла tutorial1.grc и сохраните его.
- Нажмите кнопку “Execute the flow graph”. Scope Sink откроет график с изображением нескольких периодов синусоиды. Убедитесь, что частота и амплитуда соответствует значению, которое вы задали источнику сигнала ранее. Теперь мы поэксперементируем с графическими элементами управления.
- В правой стороне окна, в разделе “Channel Options”, в выпадающем списке “Marker” выберете пункт “Dot Large” . Теперь вы можете видеть фактические значения выборок (сэмплов). Вспомним, что блок переменной samp_rate устанавливает частоту дискретизации в 48000 выборок / секунду или 48 выборки / мс. Убедитесь, что действительно обеспечивается 48 выборок в течение одного периода синусоиды.
- Закройте график и снизьте частоту дискретизации до 10000, дважды щелкнув по блоку перменной “samp_rate”. Повторно перегенерируйте, и выполните сигнальный граф. Заметьте, точек на один период стало меньше. Но насколько мы можем понизить частоту дискретизации? Вспомним, что теорема Найквиста требует, чтобы частота сэмплирования была вдвое больше самой высокой частоты. Поэкспериментируйте с этим, и посмотрите, как изменится выходной сигнал, если вы понизите частоту сэмплирования, ниже частоты Найквиста.
- Закройте график и изменить частоту дискретизации обратно до 48000. Добавьте блок “WX GUI FFT Sink” (из раздела Instrumentation — WX), на граф. Измените у блока “WX GUI FFT Sink” параметр “Type” на “Float” и оставьте остальные параметры без изменения.
- Подключите к выходу источника сигнала вход “WX GUI FFT Sink”, нажав на “Out” порт источника сигнала, а затем на “In” порт блока FFT. Сгенерируйте и выполните граф. Вы должны наблюдать за график сигнала вместе с графиком FFT правильно показывающим частоту на входе в 1 кГц. Закройте окно.
- Ознакомьтесь с другими графическими выводами (WX GUI Number Sink, WX GUI Waterfall Sink, и WX GUI Histo Sink), чтобы посмотреть, как они отображают сигнал.
- Создайте граф показаный ниже. 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 (или до той, которая отображется в ошибке).
Запустите граф на выполнение, и сообщение об ошибке должно исчезнуть. - Постройте граф как показано ниже. Установите частоту дискретизации в значение 48000. Два источника сигнала должны иметь частоты 1000 и 800 Гц соответственно. Блок “Add” (сложение) находится в разделе “Math Operators”.
- Запустите граф. О на графике вы должны увидеть сигнал, соответствующий сумме двух синусоид. На графике FFT спектра вы должны увидеть компоненты сигнала: 800 и 1000 Гц. К сожалению, спектр FFT не обеспечивает достаточное разрешение, чтобы четко увидеть два различных компонента. Обратите внимание, что максимальная частота, представленные на этом графике составляет 24 кГц. Это половина частоты дискретизации 48 кГц. Для того чтобы получить лучшее разрешение, мы можем снизить частоту дискретизации. Попробуйте снизить частоту дискретизации до 10 кГц
- Замените блок “Add” на “Multiply”(умножение) блок. Какой результат вы ожидаете от произведения двух синусоид? Проверьте свой ответ запустив граф.
- Измените граф, чтобы включив блок “Low Pass Filter ” (фильтр низких частот), как показано на рисунке ниже. Этот блок находится в категории Filters. Вспомним, что блок умножения выдает синусоиды в 200 Гц и 1.8 КГц. Создадим фильтр, который будет пропускать компоненту в 200Hz и блокировать компоненту в 1.8 КГц. Установите у фильтра нижних частот параметр “Cutoff frequency” (частота среза) в значение 1 кГц, и параметр “Transition width ”(ширина переходной полосы) в 200 Гц. Используйте окно Блэкмана (Window — Blackman). Выполните граф. Вы должны увидеть, что только компонента в 200 Гц проходит через фильтр. Поэксперементируйте с фильтром высоких частот (High Pass Filter).
- Используя тот же граф, измените переменную c частотой дискретизации до 20000. Измените параметр Decimation (прореживание) в фильтре низких частот до 2. Прореживание уменьшает количество выборок, которые обрабатываются. Прореживание в два раза означает, что вывод фильтра будет иметь частоту дискретизации равной половине частоты дискретизации на входе, в данном случае только 10000 выборок / сек.
Это достаточная частота дискретизации для частоты, с которой мы имеем дело. Выполните граф. Какую частоту вы наблюдете на спектре FFT? Точно её измерить, можно наведя курсором мыши на пик наблюдаемого компонента. - Вы должны были заметить, что в настоящее время спектр FFT отображет компонету сигнала около 400 Гц, а не 200 Гц, как ожидается. Почему эта ошибка происходит? Это происходит потому, что частота дискретизации на FFT не отрегулирована должным образом с частотой дискретизации на входе. Дважды щелкните на блоке FFT Sink и измените частоту дискретизации, задав ей значение samp_rate / 2. Выполните граф. Теперь вы должны увидеть правильную частоту в спектре.
- Перейдите в папку, содержащую файл GRC, с которым выработаете. Если вы не знаете где это, путь к этому файлу отображается в нижней части окна GRC. В дополнение к сохраненному вами «.grc» файлу вашего графа, обратите внимание, что в папке так же имеется файл под названием «top_block.py». Дважды щелкните на этом файле. Вам будет предложено запустить или отобразить этот файл. Выберите “Отобразить”. Как вы можете видеть, это Python скрипт, созданный GRC. Именно это файл запускается при выполнении графа потока. Если вы владеете языком программирования Python, вы можете сами изменить его. Это позволяет использовать функции, которые не включены в GRC, и сколь угодно расширять возможности. Имейте в виду, что каждый раз, когда вы запускаете граф в GRC, он переписывает Python скрипт заново. Так что, если вы вносите изменения непосредственно в Python скрипт, и хотите эти изменения сохранить, то сохраняйте модифицированный скрипт под другим именем.
Доброе время суток!
А что делать если в разделе «Instrumentation» нет каталога «WX»?
Гнурадио в Виндовс у вас установлено?
Как вариант можно попробовать использовать инструментарий основанный на QT.
Instrumentation -> QT
Доброе время суток.
Гну радио установлено — все по инструкции. Компанион запускается. Вот только в QT я не нашел осцилkа и блок для hackRf.
Виндоус 8-ка, х64.
А вообще, Игорь, может быть подскажите, почему в Убунту Гну радио имеет значительно больше блоков чем в Виндоус.
И еще мое личное наблюдение. Если Компанион открывать через Питон (Виндоус), то появляется сообщение о том, что не все блоки из древа каталога загружаются.
Пытался повторить видео урок Майкла Османа, но… раздел «Source» отсутствует в правой панели GNU Radio Companion v. 3.7.9
Как понимать и что делать, подскажите пожалуйста.
Попробуйте воспользоваться строкой поиска над списком блоков. Возможно в новой новых версиях этот блок переместили куда-нибудь.
Подскажите есть ли в гну радио подавление эха?