«Hello world» для GNU Radio

Hello World для GNU Radio

Как установить GNU Radio на OC Ubuntu я уже рассказывал, пришло время написать первую простую программы, так сказать «Hello world».  Для этого у нас все есть — OC Ubuntu-12.04,  GNU Radio-3.7 и незаменимый помощник в написании python скриптов IDE PyCharm-3.4.1, который вообщем можно заменить текстовым редактором.  В качестве «hello world» в официальном tutorials выбран 2-х тональный генератор гармонических колебаний, с частотами 350 Гц и 440 Гц. Для этого не потребуется дополнительное оборудование, разве что компьютер должен быть оснащен звуковой картой. 

Полный код скрипта:

# /usr/bin/python
# -*- coding:utf-8 -*-
from gnuradio import gr
from gnuradio import audio, analog
class MyBlock(gr.top_block):
    def __init__(self):
        gr.top_block.__init__(self)
        sample_rate = 32000
        ampl = 0.1
        src0 = analog.sig_source_f(sample_rate, analog.GR_SIN_WAVE, 350, ampl)
        src1 = analog.sig_source_f(sample_rate, analog.GR_SIN_WAVE, 440, ampl)
        dst = audio.sink(sample_rate, '')
        self.connect(src0, (dst, 0))
        self.connect(src1, (dst, 1))
if __name__ == '__main__':
    try:
        MyBlock().run()
    except [[KeyboardInterrupt]]:
        pass

Рассмотрим код подробнее.  Создадим файл:

touch myblock.py

Для начала, как и в большенстве python скриптов, нужно подключить необходимые для работы модули. В нашем случае их три:

  • -gr — базовый модуль, который импортируется во все приложения GNU Radio;
  • -analog — содержит объекты, для работы с аналоговыми сигналами;
  • audio — модуль для работы со звуковой картой
from gnuradio import gr
from gnuradio import audio, analog<br /><br />

Определим класс нашего блока, который наследует функционал потокового графа из базового класса gr.top_block. Потоковый граф — это основная концепция всех приложений GNU Radio, функционал которого как раз и реализован в классе gr.top_block

class MyBlock(gr.top_block):     def __init__(self):         gr.top_block.__init__(self)

Добавим в базовую конструкцию функционал  2-х тонального генератора, для этого определим частоту дискретизации  и амплитуду генераторов

      ample_rate = 32000         ampl = 0.1

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

src0 = analog.sig_source_f(sample_rate, analog.GR_SIN_WAVE, 350, ampl) src1 = analog.sig_source_f(sample_rate, analog.GR_SIN_WAVE, 440, ampl) dst = audio.sink(sample_rate, '')

Метод sig_source_f () это генератор, свойства которого определяются параметрами: — частота дискретизации, тип, частота, амплитуда, фаза сигнала. Функция возвращает число с плавающей точкой.

Метод sink(), создает «приемник»  из звуковой платы. 

Осталось соединить ребрами узлы графа. Ребра графа: — это «проводники», которые соединяют узлы («блоки») графа. Такими «проводниками» будет метод connect() базового класса top_block, входными параметрами которого будет узел-источник и узел-приемник.

 self.connect(src0, (dst, 0))
 self.connect(src1, (dst, 1))

В заключение, что бы скрип запускать как выполняемую программу и останавливать выполнение при нажатии CTRL+C добавим такой код:

if __name__ == '__main__':
    try:
        MyBlock().run()
    except [[KeyboardInterrupt]]:
        pass

Все можно запускать:

python myblock.py

GNU Radio, как технология лежит на границе двух знаний: — программирования и радиотехники, поэтому есть смысл радиотехникам прочесть'Марк Лутц. Изучаем Python, 4-ое издание', а программистам — 'Юкио Сато. Без паники! Цифровая обработка сигналов'.

73!

2 комментария

Я конечно извиняюсь, но прочтя все статьи на этом сайте, я, вобщем-то, так толком и не понял, что же это такое GNU Radio.

Кто нибудь может написать внятную статью об этом gnuradio. Что это такое в сущности? для каких целей его можно использовать? и т.д.

 

GNU Radio — это программное обеспечение для цифровой обработки сигналов, написанное и используещее языки программирования C++ и Python. В его состав входят различные модули для выполнения оперции ЦОС.

Для работы с GNU Radio нужно знать цифровую обработку. С помощью GNU radio можно делать цифровые приемники/передачики, радиолокационные системы, обработку звука, видео, сигналов Wi-FI, GSM и т.д., но для этого нужно иметь как минимум устройства оцифровывающие эти сигналы.

у GNU Radio есть графическая утилита gnuradio-companion, которая в некотором роде избавляет от глубокого знания языков программирования, но от знаний хотя бы основ ЦОС не уйти

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.