Text
                    https://liveinternet.club/


Дэвид Кларк, Поль Кларк SDR на практике: основы разработки программно-определяемого радио https://liveinternet.club/
PRACTICAL SDR Getting Started with Software-Defined Radio by David Clark and Paul Clark San Francisco https://liveinternet.club/
SDR НА ПРАКТИКЕ Основы разработки программно-определяемого радио Дэвид Кларк и Поль Кларк 2026 https://liveinternet.club/
УДК 621.37:004 ББК 32.84 К47 К47 Кларк Д., Кларк П. SDR на практике: основы разработки программно-определяемого радио / пер. с англ. Ю. В. Ревича. – Астана: Books.kz, 2025. – 314 с.: ил. ISBN 978-6-01140-651-2 Эта книга поможет читателям освоить основы разработки и применения прог­рамм­но-определяемой радиосвязи (software-defined radio, SDR). Благодаря сочетанию обучающих материалов с примерами продвинутых приложений вы получите надежную основу для углубленного изучения современных беспроводных систем. Издание будет полезно инженерам, разрабатывающим прототипы радио­ устройств, студентам, изучающим беспроводную связь, и радиолюбителям, интересующимся современными технологиями. УДК 621.37:004 ББК 32.84 Title of English-language original: Practical SDR: Getting Started with Software-Defined Radio, ISBN 9781718502543, published by No Starch Press Inc. 245 8th Street, San Francisco, California United States 94103. The Russian-language 1st edition Copyright © 2025 by Books.kz LLC under license by No Starch Press Inc. All rights reserved. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. ISBN 978-1-7185-0254-3 (англ.) Copyright © 2025 by David Clark and Paul Clark. ISBN 978-6-01140-651-2 (казах.) © Перевод, оформление, издание, ДМК Пресс, 2024 https://liveinternet.club/
Спасибо бесконечно поддерживающим нас Дженнифер и Джессике, молодеющей с каждым днем. И нашим родителям, вложившим в нас любовь и знания https://liveinternet.club/
СОДЕРЖАНИЕ От издательства. ............................................................................................................ 11 Об авторах......................................................................................................................... 12 О техническом рецензенте............................................................................................. 12 Введение.............................................................................................................................. 13 Часть I. СОЗДАНИЕ БАЗОВОГО ПРИЕМНИКА ................................ 23 Глава 1. Что такое радио....................................................................................... 24 Простая модель радиоприемника. .............................................................................. 24 Сигналы. ....................................................................................................................... 25 Модуляция.................................................................................................................... 26 Более детализированная модель радиоприемника. ............................................... 26 AM-радиосигналы...................................................................................................... 28 Амплитудная модуляция.......................................................................................... 29 Итоги................................................................................................................................... 31 Глава 2. Компьютеры и сигналы...................................................................... 32 Оцифровка......................................................................................................................... 32 Аналого-цифровое преобразование...................................................................... 33 Цифроаналоговое преобразование........................................................................ 37 Частота дискретизации. ................................................................................................. 37 SDR с расстояния 15 километров. ................................................................................ 40 Итоги................................................................................................................................... 41 Глава 3. Начинаем работу с GNU Radio........................................................ 42 Установка GNU Radio....................................................................................................... 42 Linux............................................................................................................................... 43 Windows и macOS........................................................................................................ 43 Виртуальная машина................................................................................................. 43 6 Содержание https://liveinternet.club/
GNU Radio Companion. .................................................................................................... 44 Источники.................................................................................................................... 46 Блоки вывода............................................................................................................... 47 Hello, SDR!.......................................................................................................................... 47 Добавление блоков..................................................................................................... 47 Соединения блоков.................................................................................................... 50 Сохранение и запуск программы........................................................................... 50 Изменение свойств блока......................................................................................... 51 Между входом и выходом.............................................................................................. 54 Итоги................................................................................................................................... 57 Глава 4. Создание AM-приемника................................................................... 58 Настройка переменных и входов................................................................................. 59 Добавление источника радиоданных......................................................................... 62 Обработка сигналов......................................................................................................... 63 Выход. ................................................................................................................................. 70 Итоги................................................................................................................................... 73 Часть II. ВНУТРИ ПРИЕМНИКА .................................................................... 75 Глава 5. Основы обработки сигналов........................................................... 76 Частота................................................................................................................................ 76 Изучение звукового спектра.................................................................................... 77 Визуализация сигналов в частотной области...................................................... 84 Коэффициент усиления.................................................................................................. 95 Применение коэффициента усиления к сигналу............................................... 96 Мыслим децибелами................................................................................................101 Фильтры. ...........................................................................................................................106 Фильтры низких частот. ..........................................................................................107 Фильтры высоких частот.........................................................................................113 Полосовые фильтры..................................................................................................118 Режекторные фильтры.............................................................................................120 Создание эквалайзера..............................................................................................120 Итоги..................................................................................................................................122 Глава 6. Принцип работы AM-приемника.................................................123 Изучаем входные радиочастотные данные..............................................................124 Настройка..........................................................................................................................128 Сдвиг частоты.............................................................................................................130 Фильтрация.................................................................................................................134 Учет реальных частот...............................................................................................142 Настройка реального AM-приемника..................................................................144 Демодуляция....................................................................................................................146 Просмотр модулированных и демодулированных сигналов.........................148 Содержание https://liveinternet.club/ 7
Настройка свойств блока AM Demod....................................................................150 Передискретизация........................................................................................................151 Прореживание............................................................................................................151 Интерполяция............................................................................................................155 Передискретизация в AM-приемнике. ................................................................156 Итоги..................................................................................................................................157 Глава 7. Создание FM-радиоприемника.....................................................158 Преобразование приемника из AM в FM. .................................................................159 Улучшение работы FM-приемника.............................................................................164 Более эффективная настройка...............................................................................164 Автоматическое обновление переменных. ........................................................169 Управление громкостью..........................................................................................172 Настройка на другие сигналы. ...............................................................................174 Итоги..................................................................................................................................176 Часть III. РАБОТА С SDR-АППАРАТ УРОЙ .............................................177 Глава 8. Физика радиосигналов......................................................................178 Электромагнитные волны.............................................................................................179 Распространение радиоволн..................................................................................180 Диапазоны частот. ....................................................................................................181 Ширина полосы частот..................................................................................................184 Шум.....................................................................................................................................192 Визуализация радиочастотного шума. ................................................................193 Нахождение отношения сигнал/шум. ..................................................................194 Итоги..................................................................................................................................195 Глава 9. Работа блок-схем GNU Radio с SDR-оборудованием. ....196 Создание блок-схемы с аппаратной поддержкой...................................................197 Подключение оборудования. .......................................................................................199 Работа с аппаратным SDR-приемником...................................................................202 Использование аппаратуры USRP...............................................................................203 Использование другого оборудования......................................................................205 Итоги..................................................................................................................................205 Глава 10. Модуляция..............................................................................................206 Сигналы базовой полосы частот.................................................................................206 Амплитудная модуляция. .............................................................................................209 Работа с отрицательными значениями базовой полосы частот. ..................212 Предотвращение перемодуляции.........................................................................215 Частотная модуляция.....................................................................................................218 Использование несущей с нулевой частотой.....................................................219 Интерпретация каскадных графиков...................................................................222 8 Содержание https://liveinternet.club/
Настройка чувствительности FM-модулятора...................................................223 Фазовая модуляция. .......................................................................................................226 Несколько слов о цифровой модуляции....................................................................229 Выбор схемы модуляции...............................................................................................230 Итоги..................................................................................................................................231 Глава 11. Под капотом SDR-аппаратуры...................................................233 Классическое радио в сравнении с SDR.....................................................................233 IQ-дискретизация...........................................................................................................236 IQ-сигналы..................................................................................................................236 Ширина полосы пропускания SDR и частота дискретизации..............................247 Определение пределов полосы пропускания.....................................................248 Эффект переполнения..............................................................................................248 Предотвращение переполнения............................................................................253 Усиление и SDR-аппаратура.........................................................................................254 Три ступени усиления..............................................................................................254 Как настроить коэффициент усиления................................................................256 Как усиление влияет на сигнал..............................................................................257 Улучшенная модель SDR................................................................................................260 Смещение по постоянному току.................................................................................261 Важные характеристики SDR.......................................................................................266 Итоги..................................................................................................................................268 Глава 12. Периферийное оборудование. ..................................................270 Антенны. ...........................................................................................................................270 Характеристики.........................................................................................................272 Конструктивные типы..............................................................................................274 Поляризация...............................................................................................................279 Эксперимент с антенной...............................................................................................280 Влияние компьютеров на работу SDR........................................................................283 Снижение уровня шума.................................................................................................284 Разъемы.......................................................................................................................285 Создание SDR-инструментария. .................................................................................289 Антенны.......................................................................................................................289 Адаптеры.....................................................................................................................290 Повышающие преобразователи............................................................................290 Балун-устройства. .....................................................................................................291 Разное...........................................................................................................................291 Итоги..................................................................................................................................293 Глава 13. Передача..................................................................................................294 Построение FM-модулятора.........................................................................................294 Настройка источника звука....................................................................................295 Модуляция сигнала...................................................................................................296 Преобразование сигнала с повышением частоты.............................................296 Содержание https://liveinternet.club/ 9
Фильтрация после интерполяции.........................................................................299 Правила RF-передач.......................................................................................................300 Юридические вопросы.............................................................................................301 Практические вопросы. ...........................................................................................302 Тестирование FM-передатчика. ..................................................................................304 Восстановление сигнала..........................................................................................305 Работа блок-схемы....................................................................................................306 Моделирование шума...............................................................................................308 Итоги..................................................................................................................................311 Предметный указатель.........................................................................................312 https://liveinternet.club/
ОТ ИЗДАТЕЛЬСТВА Отзывы и пожелания Мы всегда рады отзывам наших читателей. Расскажите нам, что вы ду­маете об этой книге – что понравилось или, может быть, не понравилось. Отзывы важны для нас, чтобы выпускать книги, которые будут для вас максимально полезны. Вы можете написать отзыв на нашем сайте www.dmkpress.com, зайдя на страницу книги и оставив комментарий в разделе «Отзывы и рецензии». Также можно послать письмо главному редактору по адресу dmkpress@gmail.com; при этом укажите название книги в теме письма. Если вы являетесь экспертом в какой-либо области и заинтересованы в написании новой книги, заполните форму на нашем сайте по адресу http://dmkpress.com/authors/publish_book/ или напишите в издательство по адресу dmkpress@gmail.com. Список опечаток Хотя мы приняли все возможные меры для того, чтобы обеспечить высокое качество наших текстов, ошибки все равно случаются. Если вы найдете ошибку в одной из наших книг, мы будем очень благодарны, если вы сообщите о ней главному редактору по адресу dmkpress@ gmail.com. Сделав это, вы избавите других читателей от недопонимания и поможете нам улучшить последующие издания этой книги. Нарушение авторских прав Пиратство в интернете по-прежнему остается насущной проблемой. Издательство «Books.kz» очень серьезно относится к вопросам защиты авторских прав и лицензирования. Если вы столкнетесь в интернете с незаконной публикацией какой-либо из наших книг, пожалуйста, пришлите нам ссылку на интернет-ресурс, чтобы мы могли применить санкции. Ссылку на подозрительные материалы можно прислать по адресу элект­ронной почты dmkpress@gmail.com. Мы высоко ценим любую помощь по защите наших авторов, благодаря которой мы можем предоставлять вам качественные материалы. https://liveinternet.club/
Об авторах Дэвид Кларк — инженер, интересующийся тем, как все устроено; он с удовольствием делится своими знаниями. Дэвид имеет дело с радиотехникой с конца 1980-х годов и применял программно-определяемое радио (software-defined radio, SDR) еще до того, как оно стало популярным. Пол Кларк — владелец и главный инженер Factoria Labs, организации, занимающейся распространением SDR. Он обладает обширным опытом в области проектирования микросхем, разработки микропрограммного обеспечения и реверс-инжиниринга радиоаппаратуры. Пол проводит занятия и семинары по SDR в Соединенных Штатах и за рубежом. О техническом рецензенте Джош Мормон — старший научный сотрудник в области беспровод­ ной связи, работающий в основном над приложениями SDR. В настоя­ щее время он является президентом проекта GNU Radio и активно участвует в разработке GNU Radio 4.0. https://liveinternet.club/
ВВЕДЕНИЕ В технологиях беспроводной связи происходит революция, затрагивающая все сферы — от разработки аппаратного обеспечения до информационной безопас­ности и от аэрокосмической инженерии до любительской радиосвязи. Профессиональные разработчики электроники, исследователи в области кибербезопасности, хакеры, работающие с аппаратным обеспечением, и операторы любительских радиостанций — каждый может воспользоваться преимуществами нового прекрасного сочетания: программного обеспечения и радио. С момента появления первых радиопередач Маркони более 100 лет назад почти все радиоприемники были стационарными устройствами. Любой радиоприемник мог настраиваться только на относительно узкий диапазон час­тот и передавать или принимать определенный тип сигнала. В лучшем случае у вас были комбинированные устройства, например те, которые принимают как AM-, так и FM-сигналы, но в основном это было объединение двух (или более) стационарных радиостанций в одном корпусе. Эти устройства старой школы являются чисто аппаратными радиостанциями (hardware-defined radios, HDR). Что определяет час­то­ты, на которых может работать один из этих радиоприемников или передатчиков? Оборудование. Что определяет, будет ли это FM-радио или Wi-Fi-роутер? Оборудование. Почти каждое свойство этих радиостанций определяется раз и навсегда настроенным аппаратным обеспечением. Программно-определяемое радио (software-defined radio, SDR) обеспечивает программируемость всей архитектуры радиостанции. Когда вы хотите изменить работу SDR-станции, не нужно заново подключать новое оборудование: вы просто заменяете программу на плате SDR, а также, возможно, на подключенном главном компьютере. Введение https://liveinternet.club/ 13
Эта книга рассказывает, как создавать удивительно гибкие аналоговые радиостанции, используя SDR и программу под названием GNU Radio, а также познакомит с необходимыми базовыми основами теории, чтобы понять, как работают эти радиостанции. Неделя с SDR Возможно, не сразу становится очевидным, насколько универсальной может быть SDR-станция. Как иллюстрацию приведем неделю возможной жизни в качестве пользователя SDR. Сегодня понедельник, и вам нужно что-то, что позволяет взаимодействовать с несколькими устройствами Wi-Fi. Вы создаете проект на своем компьютере, подключаетесь к SDR, и у вас волшебным образом появляется точка доступа Wi-Fi. И не просто точка доступа, а такая, с помощью которой вы можете управлять различными аспектами используемых каналов и отправляемых пакетов. Во вторник вам понадобятся географические данные места, которое вы собираетесь посетить. Всего лишь внесите некоторые изменения в программное обеспечение — и вы получите SDR в качестве GPS-приемника. Как и в предыдущем случае, вы не ограничены только базовыми функциями — можете отслеживать количество наблюдаемых спутников в созвездии GPS и уровень сигнала каждого из них. На обратном пути с посещенного места вы перепрограммируете свой SDR на выбор радиостанций FM-вещания, чтобы во время движения можно было послушать музыку. Где-то в среду вы обнаруживаете, что в сети Wi-Fi возникли какие-­ то неполадки. Подозревая проблемы с безопасностью, вы перенастраиваете SDR для одновременного сканирования всех 14 доступных каналов Wi-Fi и определения типа трафика. Вы сохраняете все необработанные радиочастотные данные в файл для дальнейшей обработки на досуге. В четверг вы вспоминаете про сигналы, которые обнаружили днем ранее в диапазоне Wi-Fi 2,4 ГГц. Не зная, что это за сигналы, вы начинаете анализировать сеть с помощью мощного, но при этом бесплатного и простого в использовании программного обеспечения. Узнаете, что в настоящее время неизвестные сигналы не передаются, но это не проблема, поскольку у вас есть запись данных за вчерашний день. Просмотрев данные, вы можете определить, что поблизости есть сеть домашней автоматизации ZigBee, а также устройство «радионяня» и плохо экранированная микроволновая печь. Наступает пятница, и вы решаете проехаться по окрестностям и проверить радиочастотную активность в различных точках вашего города. Воспользовавшись преимуществами Wi-Fi и GPS, которые вы использовали ранее на этой неделе, вы можете написать приложение 14 Введение https://liveinternet.club/
для регистрации данных с учетом местоположения, состоящее всего из пары десятков строк кода на Python. Наконец-то наступили выходные, и вы решили отправиться в поход. Прежде чем отправиться в путь, вы перепрограммируете SDR на несколько различных режимов любительской радиосвязи в надежде связаться с другими радиолюбителями, пока вы находитесь в горах. Возможно, вы даже сможете связаться с Международной космической станцией! Начинаете понимать, насколько мощные эти устройства? Вы можете не только легко внедрять новые схемы радиосвязи, но и переключаться между ними, используя всего несколько нажатий клавиш или вызывая функцию в коде станции. Помимо простой передачи и приема, вы можете сканировать, находить и анализировать доступные сигналы. Для полноты картины следует упомянуть, что во всем этом есть одна сложность: несмотря на то что радиостанции стали программируемыми, их создатели до сих пор не придумали, как сделать доступные программируемые антенны. По крайней мере на данный момент при значительных изменениях час­то­ты вам, вероятно, придется менять антенны. SDR и разработка аппаратного обеспечения Есть еще одно ключевое применение SDR-метода: создание прототипов новых продуктов, содержащих радиочастотный компонент. На ранних стадиях разработки продукта важно быстро вносить изменения в проект. Терпите неудачу и быстро проверяете как можно больше новых идей. SDR-станции позволяют внедрять радиообмен в вашу конструкцию гораздо быстрее, чем при его разработке на основе готовых компонентов. Вы также можете гораздо быстрее изменять ее функциональность. Из-за повышенных затрат вы, скорее всего, не запустите проект в массовое производство с SDR-компонентом, но вы можете оптимизировать проект на более позднем этапе. Мы уже сталкивались с этим раньше. На протяжении десятилетий цифровая логика, как правило, была встроенной. Вы берете набор микросхем, содержащих логические элементы, соединяете их между собой, и ваша система готова. Если требуется высокая производительность или низкая стоимость, можно даже изготовить чип на заказ — такие микросхемы называются специализированными интегральными схемами (application-specific integrated circuits, ASIC). Затем появилась новая технология, которая изменила многое. ASIC до сих пор популярны в массовом производстве, но для разработки прототипов инженеры стали использовать различные типы программируемой логики с сомнительно полезными аббревиатурами Введение https://liveinternet.club/ 15
в названиях, таких как PLA, PAL и PLD1. Наиболее часто используемой формой на сегодняшний день является программируемая вентильная матрица (FPGA2). В результате в процессе разработки произошли интересные изменения. В некоторых случаях инженеры начали осознавать, что стои­ мость программируемого решения, в конце концов, не намного выше, чем у решения с фиксированной функциональностью. Если учесть время, затраченное инженерами на разработку реализации с фиксированной функцией, нередко программируемое решение обходится дешевле. Кроме того, дополнительным преимуществом стала возможность обновлять аппаратные возможности продукта на любом этапе производственного процесса и за его пределами — даже когда продукт уже находится в руках клиентов. Хотя этот небольшой урок истории был посвящен цифровой логике, аналогичные программируемые технологии в настоящее время су­ ществуют и для аналоговых схем. Можно даже считать, что 3D-прин­ те­ры работают в рамках той же парадигмы: программно-определяемая материальная вещь. Все эти технологии сокращают время проектирования и ускоряют выпуск продукции. И хотя самые ранние SDR, FPGA и им подобные в основном использовались для создания прототипов, их более зрелые аналоги все чаще находят применение в выпускаемых продуктах. Это происходит в основном при двух обстоятельствах. Во-первых, когда время вывода на рынок имеет решающее значение, дополнительные затраты на внедрение одной из этих технологий могут быть приемлемыми. Во-вторых, когда вы производите небольшое количест­во вашего продукта, нет смысла тратить время на разработку, чтобы оптимизировать его стоимость. Сколько времени потребуется, чтобы SDR стали повсеместными на рынке? Трудно сказать наверняка, но, возможно, вы захотите поискать по запросу «RTL-SDR»3. В прошлом именно этот дизайн SDR использовался в ряде потребительских товаров (в основном в цифровых ТВ-тюнерах), в то время как радиолюбители взломали эти продукты, превратив их в чрезвычайно дешевые устройства для собственных экспериментов. 1 2 3 PLA — программируемый логический массив (programmable logic array), PAL — программируемый массив логики (programmable array logic), в русскоязычной литературе одинаково называются ПЛМ. PLD — программируемая логическая интегральная схема, ПЛИС (programmable logic device). — Здесь и далее примечания переводчика. Field-programmable gate array, устоявшийся перевод на русский «программируемая пользователем вентильная матрица», ППВМ. В русскоязычной литературе вместо сокращения ППВМ часто употребляется более общее ПЛИС. Сокращение RTL в названии означает «register transfer level», так называется способ программирования, представляющий программу в виде последовательности логических операций. 16 Введение https://liveinternet.club/
Цель этой книги Цель этой книги не только в том, чтобы вы узнали о SDR, но и в том, чтобы вам было интересно этим заниматься. Слово «fun» (развлечение, удовольствие) родственно слову «fundamentals» (основы); доскональное изучение того, как что-то работает (например, радио), делает это устройство не только более полезным для вас, но и более увлекательным в использовании. Изучите основы, а затем используйте их для получения удовольствия. Эта книга ориентирована на то, чтобы учиться на практике. В ней не будет тысяч страниц сухого изложения электромагнитной теории и математических основ обработки сигналов. Мы не считаем, что новичкам в SDR полезно глубокое, формализованное погружение в эти темы. Безусловно, в книге будут рассмотрены самые основы, но иначе, чем в академическом учебнике: мы начнем с самых простых принципов, сопоставим их с реальными экспериментами, а затем, развивая то, что узнали ранее, будем постепенно углубляться. Цель состоит в том, чтобы дать представление о терминах и концепциях, необходимых для создания практических систем SDR, и мы будем стремиться не просто рассказать вам об этих терминах и концепциях, но и показать их на практике. Представьте себе SDR в виде луковицы. В каждой главе этой книги мы будем снимать с нее следующий тонкий слой. Не волнуйтесь, если вы не до конца усвоите тему в первой главе: принципы будут раскрываться более подробно по мере чтения книги и работы над новыми проектами. Мы думаем, что после прочтения нескольких глав вы будете приятно удивлены тем, насколько глубоко проникли вглубь. Однако есть одна загвоздка: обучение на практике требует, чтобы вы действительно что-то делали. Потратьте время на установку необходимого программного обеспечения, затем следуйте инструкциям и поработайте с примерами из книги, чтобы вы могли активно манипулировать радиоприемниками, как эмулируемыми программно, так и реальными. Что мы подразумеваем под эмуляцией? Оказывается, основное программное обеспечение SDR под названием GNU Radio обладает способностью не только управлять оборудованием, но и имитировать работу реального радио без подключения какого-либо оборудования вообще. Такая возможность моделирования аппаратуры значительно облегчает вхождение в тему разработки SDR. Начав с эмулятора, вы быстрее усваиваете идеи, не прибегая к сложностям, связанным с интеграцией аппаратного обеспечения и обработкой радиоданных в режиме реального времени. Однако не волнуйтесь: к аппаратному обеспечению мы вернемся в следующих главах. Введение https://liveinternet.club/ 17
Для кого предназначена эта книга Эта книга адресована как новичкам, не имеющим опыта работы с SDR, так и тем, кто пробовал SDR, но испытывал трудности. Возможно, вы домашний умелец, радиолюбитель или студент. Вы также можете быть инженером, который забыл большую часть теории радио, изучаемую им в учебном заведении, и хочет освежить ее в памяти. Мы просто надеемся на ваш интерес к этому предмету. Интернет полезен для поиска информации практически по любой теме, но иногда может потребоваться некоторое время, чтобы собрать данные с огромного количества различных веб-сайтов в единую связную массу знаний. Многие люди говорили нам, что они могли бы поискать в интернете программное обеспечение для работы с аппаратным обеспечением SDR, но было не ясно, как работают различные компоненты. В описании различных функций SDR было либо «слишком много математики», либо слишком мало практической информации. Если вам знакомо такое разочарование, то эта книга для вас. Это не избавит вас от необходимости проводить собственные исследования по мере роста ваших амбиций, но даст некоторые основы для лучшего понимания увлекательного мира SDR. Основное внимание в нашей книге уделяется аналоговым радиостанциям. Многие из вас, читая эту книгу, захотят заняться созданием аналоговых радиостанций для приема широковещательных передач или работы с любительским радио, но изложенные в ней концепции также важны для тех, кто интересуется цифровыми приложениями, такими как реверс-инжиниринг или информационная безопасность. Цифровые радиостанции построены на тех же базовых принципах, что и аналоговые, поэтому закрепление этих принципов с помощью простых аналоговых приложений поможет вам перейти на цифровую связь. Что вам понадобится Для аппаратных действий, описанных в этой книге, мы рекомендуем использовать платы HackRF One SDR1. Они широко доступны, относительно недороги по сравнению со многими SDR профессионального уровня и хорошо поддерживаются GNU Radio и другим программным обеспечением с открытым исходным кодом. Если у вас другой SDR, например PlutoSDR или LimeSDR, не волнуйтесь: в главе 9 рассказывается, как адаптировать аппаратные проекты, описанные в книге, для работы с другими распространенными устройствами. Вам также понадобится антенна, которую можно подключить к SDR. Для целей этой книги мы рекомендуем ANT500, но подойдет и другая антенна, 1 Платы HackRF One выпускаются в том числе российской компанией Элерон (https://elron.tech/russian-hack-rf-one/). 18 Введение https://liveinternet.club/
которая может работать с сигналами FM-вещания. Многие SDR продаются в комплекте с совместимой антенной. Тем не менее вы можете начать изучать SDR прямо сейчас, даже если у вас еще нет никакого оборудования, поскольку эта книга начинается с моделирования радиоприемников. Просто перейдите к главе 1 и начните читать, пока не получите заказанную SDR-плату. Поскольку можно многое сделать моделированием с помощью GNU Radio (и предоставляемых нами конфигурационных файлов), вы действительно можете начинать, используя только свой компьютер. Как построена эта книга Эта книга состоит из трех основных частей. Вот краткое описание того, что вы узнаете в каждом разделе. Часть I «Создание базового приемника» посвящена теории и программному обеспечению, достаточному для создания вашего первого SDR. Мы пока не используем реальную SDR-станцию, а работаем в среде программного эмулятора. На данном этапе вам также не обязательно полностью разбираться во всех компонентах радиоприемника и в том, как они работают, — эта первая часть закладывает основу для более глубокого изучения в последующих главах. Глава 1 «Что такое радио» на самом базовом уровне дает определение того, что такое радиосистема. Вы узнаете, что такое радиосигналы, и увидите, как радиосистемы используют модуляцию и демодуляцию для передачи значимой информации с помощью этих сигналов. В главе 2 «Компьютеры и сигналы» рассматривается, как происходят дискретизация и оцифровка радиосигналов, чтобы ваш компьютер мог их хранить и обрабатывать. Мы обсудим аналого-цифровое и цифроаналоговое преобразования и подчеркнем важность час­то­ты дискретизации в этих процессах. В главе 3 «Начинаем работу с GNU Radio» рассказывается о программном обеспечении, которое вы будете использовать на протяжении всей книги: GNU Radio и ее графическом пользовательском интерфейсе GNU Radio Companion (GRC). Мы установим и протестируем программное обеспечение и познакомимся с его интерфейсом для создания визуальных программ, называе­ мых потоковыми графами (flowgraph)1. 1 Англ. flowgraph в русскоязычной литературе обычно переводится дословно как «потоковый граф». В результате словесные конструкции на русском языке с участием этого термина получаются малопонятными и громоздкими. Так как за этим термином, как вы увидите, скрывается ряд блоков, соединенных стрелками, а процесс их настройки по сути является написанием программы, то в дальнейшем в большинстве случаев мы будем называть «flowgraph» просто блок-схемой, а алгоритм, который она обозначает, просто программой. Подробнее см. раздел «GNU Radio Companion» в главе 3. Введение https://liveinternet.club/ 19
Глава 4 «Создание AM-приемника» знакомит с процессом создания базового AM-радиоприемника с использованием GNU Radio. Мы протестируем приемник в эмуляторе, передав ему файл с ранее полученными данными реального радио. В части II «Внутри приемника» постепенно раскрываются концепции и компоненты, лежащие в основе радиоприемника, описанного в главе 4. Это дает более глубокое представление о том, как работают радиоприемники, и показывает, как можно улучшить конструкцию. В главе 5 «Основы обработки сигналов» более подробно рассматриваются три основополагающих понятия из области обработки сигналов: час­то­та, усиление и фильтры. Из практических экспериментов мы узнаем о звуковом спектре, частотных составляющих сигналов, научимся применять коэффициент усиления для усиления и ослабления и использовать различные фильтры для выделения различных составляющих сигнала. Глава 6 «Принцип работы AM-приемника» возвращает нас к AM-приемнику из главы 4. Вооружившись новыми знаниями об обработке сигналов, мы познакомимся поближе с каждым узлом приемника, чтобы понять, как он работает и почему мы его настроили именно таким образом. Мы также узнаем, как приемник может настраиваться на различные сигналы. В главе 7 «Создание FM-радиоприемника» показано, как адаптировать AM-приемник для работы с FM-сигналами (все еще в эмуляторе). По ходу дела дается несколько советов по созданию более чистых и чувствительных приемников. Часть III «Работа с SDR-аппаратурой» в основном оставляет позади мир эмулируемого радио и поможет объединить аппаратные средства SDR с блок-схемами GNU Radio. Вы узнаете, как работает аппаратный вариант SDR, и получите дополнительное представление об обработке сигналов, в том числе о том, как сигналы отправляются и принимаются. Глава 8 «Физика радиосигналов» дополнительно заполняет пробелы в информации о свойствах и распространении радиосигналов. Мы узнаём про свойства электромагнитных волн, значение полосы пропускания сигналов и изучаем влияние шума на радиоданные. В главе 9 «Работа блок-схем GNU Radio с SDR-оборудо­ва­ ни­ем» описаны шаги по модификации программного обеспечения FM-радиостанции, рассмотренные в главе 7, для работы с физическим SDR-оборудованием. Наконец, мы сможем протес­ тировать приемник на радиоданных, которые записаны вами самостоятельно, в режиме реального времени. 20 Введение https://liveinternet.club/
В главе 10 «Модуляция» подробно описаны три основных вида модуляции: амплитудная, частотная и фазовая. Мы проведем эксперименты, демонстрирующие каждый тип, и узнаем, как избежать перемодуляции, настроить чувствительность модулятора и многое другое. Глава 11 «Под капотом SDR-аппаратуры» приоткрывает завесу тайны над тем, как аппаратные средства SDR способны перехватывать сигналы по радио и отправлять их на ваш компьютер (и наоборот). Вы узнаете об IQ-выборках, вернетесь к таким понятиям, как аналого-цифровое преобразование и коэффициент усиления, а также познакомитесь с некоторыми важными характеристиками, на которые следует обратить внимание в отношении SDR. В главе 12 «Периферийное оборудование» рассматриваются некоторые практические вопросы, связанные с использованием SDR-оборудования, в том числе вопрос о том, какую антенну следует использовать, с какими типами разъемов и кабелей и как снизить уровень шума. В главе 13 «Передача» рассказывается о том, как создать SDRпередатчик с использованием FM-модуляции, и освещаются некоторые практические и юридические вопросы, связанные с передачей. Вы протестируете передатчик в эмуляторе, подключив его к SDR-приемнику. Текстовые соглашения Названия файлов и папок, а также наименования блоков в блок-схемах GNU Radio выделяются курсивным шрифтом, например: «…выберите в папке ch_05 файл с именем HumanEvents_s32k.wav»; «…добавьте блок умножения Multiply и блок добавления константы Add Const». Названия файлов авторы для сокращения записи часто приводят сразу с указанием относительного пути, по которому они расположены в архиве, например «ch_05/solutions/cmajor_lpf2.grc» означает файл cmajor_lpf2.grc, расположенный в подпапке solutions, которую можно найти в папке, относящейся к главе 5 (с именем ch_05). Символические имена переменных, названия, типы и значения параметров блоков по сути являются элементами текста программы, поэтому выделяются моноширинным шрифтом, например: «Установите для ID блока QT GUI Range значение gain_val и значение по умолчанию (Default Value) = 1». Моноширинным шрифтом также выделяются сообщения аппаратных модулей и команды Python в консоли интерфейса GNU Radio. Клавиатурные сокращения и наименования пунктов меню интерфейса GNU Radio выделены жирным шрифтом (после названий меню в скобках обычно добавляется перевод на русский), например: «Щелкните File > Save (Файл > Сохранить) или нажмите <Ctrl+S>». Введение https://liveinternet.club/ 21
URL-адреса приводятся в стандартном написании, принятом на веб-ресурсах (пример см. в первом абзаце следующего раздела). Онлайн-ресурсы Чтобы максимально упростить процесс изучения SDR, все необходимые файлы с проектом и входными данными можно загрузить с веб-страницы этой книги по адресу https://storage.yandexcloud.net/ dl.dmkpress.com/978-6-01140-651-2_files.zip. Извлеките содержимое загруженного архива в удобное для вас мес­то на жестком диске, поскольку вы будете часто пользоваться этими файлами. Содержимое архива разбито по главам, так что вы сможете легко найти нужные файлы по мере чтения книги. Вы получите максимальную отдачу от книги, если будете создавать каждый проект с нуля, как показано в тексте книги, но готовые файлы доступны в качестве справочного материала на случай, если у вас возникнут проблемы. Каждая глава, как правило, содержит один или несколько файлов входных данных в дополнение к завершенным проектам. Благодаря этим данным можно работать с большинством материалов этой книги, не прибегая к физическому оборудованию SDR. https://liveinternet.club/
ЧАСТЬ I СОЗДАНИЕ БАЗОВОГО ПРИЕМНИКА https://liveinternet.club/
1 ЧТО ТАКОЕ РАДИО В этой главе мы рассмотрим очень простую модель радиосистемы. Затем изучим эту модель подробнее, разобрав некоторые из ее базовых концепций. К концу главы у вас будет общее представление о том, что такое радиосигналы и как модуляция и демодуляция позволяют передавать информацию с их помощью. Простая модель радиоприемника В самом простом варианте радиосистема представляет собой пару волшебных коробочек, которые физически взаимодействуют по воздуху без проводов. Рассмотрим пример из реальной жизни. Вы, вероятно, когда-нибудь имели дело с автомобильным радиоприемником. Он улавливает передачи, посылаемые в эфир большой радиовышкой где-то поблизости, и превращает эти передачи в звук. Другими словами, эта радио­ система включает в себя передатчик (большую вышку), приемник (автомобильный радиоприемник) и среду передачи (эфир), как показано на рис. 1.1. Радиопередатчик Радиоприемник Воздух Рис. 1.1. Простейшая модель работы радиоприемника 24 Глава 1 https://liveinternet.club/
Как вы можете видеть, передатчик производит что-то и передает это по воздуху в приемник. Но что это за «что-то» движется по воздуху? Это радиосигнал. Сигналы Сигнал — это то, что происходит, когда мы изменяем с течением времени какое-то физическое свойство для передачи информации. Давайте рассмотрим несколько примеров. Представьте на мгновение, что вы с другом работаете на противоположных концах большого ровного поля. Также представьте, что сейчас ночь и что вашему другу очень часто требуется ваша помощь. В этом довольно надуманном сценарии вашему другу нужен способ сообщить, что вы должны пересечь поле, чтобы помочь ему. Представьте, что для этого он включает яркий фонарик и направляет его на вас через поле. Когда вы видите свет во тьме, вы знаете, что пришло время прийти на помощь. Не спрашивайте, почему вы просто не пользуетесь мобильными телефонами. Такой вопрос испортит нам пример. В этом простом мысленном эксперименте фонарик вашего друга является передатчиком, а ваши глаза — приемником. Включение света приводит к изменению физического свойства (уровня освещенности), которое ваши глаза (приемник) могут интерпретировать как информацию («Подойди!»). Таким образом, когда ваш друг включает фонарик, он посылает вам сигнал. Другим примером сигнала является сообщение в традиционной телеграфной системе. Передатчик и приемник соединены проводом. На одном конце провода передатчик поочередно подает электрическое напряжение на провод, а затем снимает его. На другом конце провода приемник подает звуковой сигнал, когда в проводе течет электрический ток, и замолкает, когда ток пропадает. Используя азбуку Морзе, систему, в которой буквы и цифры представлены различными звуковыми сигналами и паузами, телеграфисты могут отправлять друг другу текстовые сообщения. В этом случае сигналы основаны на изменении физических свойств электрического тока, протекающего по проводу. Поскольку это книга о программном радио, нас больше всего заинтересуют радиосигналы. Возможно, вы помните из уроков физики, что радиосигналы имеют электромагнитную природу. Это означает, что радиопередатчики передают информацию, изменяя свойства электромагнитных волн. Однако не волнуйтесь: вам не нужно сильно разбираться в математике или физике, чтобы начать работать с SDR. Какую информацию вы можете передать с помощью радиосигналов? Они могут быть нескольких разновидностей: zz звук, например музыка или речь в радиопередачах AM- или FMдиапазона; Что такое радио https://liveinternet.club/ 25
zz zz zz zz видео, например в эфирных телевизионных передачах; управляющая информация, например команда разблокировки, отправляемая с беспроводного брелока на ваш автомобиль; цифровые данные, например веб-трафик, проходящий между Wi-Fi-маршрутизатором и ноутбуком; и многое другое! Поскольку эти типы информации являются величинами, изменяющимися с течением времени, каждый из них сам по себе является сигналом. В этом случае радиосигналы должны иметь четкую связь с информацией, содержащейся в них. Чтобы понять, как радиосигналы могут передавать все эти различные типы информации, придется немного разобраться в модуляции. Модуляция Модуляция — это то, что позволяет передавать значимую информацию с помощью радиосигналов. По сути, модуляция — это способ объединения двух сигналов путем использования некоторого свойства одного сигнала для изменения некоторого свойства другого. Первый из этих двух сигналов — это просто информация, которую мы пытаемся передать. Он модулирует или изменяет второй сигнал, называемый «несущей». Результатом этого процесса модуляции является сигнал, который обладает характеристиками обоих входных сигналов и готов к передаче через радиосистему1. Более детализированная модель радиоприемника Теперь у нас достаточно информации, чтобы вернуться к базовой модели радиосистемы и уточнить некоторые детали. На этот раз мы более подробно рассмотрим автомобильный AM-радиоприемник. 1 26 Глава 1 https://liveinternet.club/ И не только радиосистему: любой электрический сигнал, передающийся на расстояние (например, по телефонной паре в старомодных телефонных модемах или по витой паре в сети Ethernet) может подвергаться модуляции с целью передачи информации. Тут следует подчеркнуть, что в традиционной аналоговой телефонии (передаче голоса по проводам) модуляция не применяется: там звук (колебания воздуха) напрямую преобразуется в электрические колебания с помощью микрофона, а затем (на приемном конце) обратно в звуковые с помощью динамика. Аналогичный прием использовался в аналоговых магнитофонах и «виниловых» проигрывателях, с промежуточной записью электрических колебаний на носители, основанные на различных физических принципах. Модуляция применяется там, где присутствует «несущая»: колебания высокой час­то­ты, выступающие в роли переносчика информации; поэтому она с самого начала использовалась в области радио, для передачи «по воздуху» с помощью электромагнитных волн: низкочастотные электромагнитные колебания звукового диапазона передать на расстояние значительно сложнее, чем высокочастотные.
На самом деле AM-радио — это самая простая разновидность радио, и к этой теме мы будем возвращаться на протяжении всей книги. Помните, что наша базовая модель радиостанции начиналась с большой передающей вышки. Представьте, что рядом с передатчиком находится какой-то источник звука, который радист хочет передать в эфир. Это может быть музыка или чей-то голос. Оператор использует этот аудиосигнал для модуляции несущей, назначенной радиостанции, а затем отправляет полученный модулированный сигнал в эфир (в этом пояснении есть несколько существенных упрощений). На приемном конце пользователь поворачивает регулятор на своем автомобильном радиоприемнике, чтобы настроиться на нужную станцию (подсказка: процесс настройки будет как-то связан с сигналом несущей), и приемник демодулирует его, чтобы восстановить исходный звук. Этот процесс показан на рис. 1.2. Передатчик Источник аудио Модулятор Приемник Воздух Демодуляция и регулирование Динамик 1520 кГц несущая Регулятор Рис. 1.2. Более детализированная модель работы радиоприемника Обратите внимание, что несущий сигнал на схеме обозначен как 1520 кГц. Килогерц (тысяча герц, сокращенно кГц) — это единица измерения час­то­ты, указанное значение соответствует числу 1520 на шкале вашего AM-радиоприемника. Позже мы более подробно обсудим час­то­ту как одно из фундаментальных понятий теории сигналов. А пока просто подумайте о том, что музыка, звучащая из вашего автомобильного радиоприемника, намекает на важный принцип: радио­ инженеры нашли способ передавать звук по всему миру на разных радиочас­то­тах. Если говорить более конкретно, на различных AM-каналах шкалы приемника каким-то образом передается звук, причем разные передачи звучат одновременно на разных час­то­тах. В Сиэтле, например, звук разносится на час­то­тах 570 кГц, 1150 кГц, 1300 кГц и многих других час­то­тах того же диапазона. Все радиовышки в округе постоянно передают свои сигналы, но каким-то образом вы можете прослушать только одну из них, повернув ручку. Как это так получается? Отчасти ответ заключается в том, что радиоприемники способны каждый раз настраиваться (фокусироваться) только на одном сигнале несущей. Настройка — один из самых важных навыков, которым вы Что такое радио https://liveinternet.club/ 27
научитесь в этой книге, поэтому будьте уверены, что мы подробно рассмотрим, как это работает, прежде чем закончим. А пока давайте подробнее разберем реальные сигналы, используемые в радиопередачах AM-радио. Это приблизит нас к пониманию того, как радиостанция может передавать звуки на большие расстояния. AM-радиосигналы Как упоминалось ранее, сигнал можно рассматривать как изменение во времени некоторых физических свойств, отражающих информацию. Например, звуки, достигающие ваших ушей, обусловлены изменением давления воздуха. Другой пример — напряжение на проводе, который идет к динамику радиоприемника. То же самое относится к интенсивности электромагнитного излучения, принимаемого радиоантенной. Несмотря на то что физика, лежащая в основе этих примеров, сильно отличается, на бумаге их все можно представить одинаково: отложить значения (амплитуду) сигнала по вертикальной оси (оси y) и время — по горизонтальной (оси x). На рис. 1.3 показано, как выглядит простой звуковой (аудио) сигнал, нанесенный на график по осям x и y. Рис. 1.3. Простой аудиосигнал С течением времени сигнал на рис. 1.3 продолжает колебаться вверх-вниз до тех пор, пока сохраняется звуковой сигнал. Возможно, вы определите его форму по учебнику тригонометрии как синусоиду. Давайте предположим, что оператор AM-радиостанции хочет передать этот очень простой звук. Теперь посмотрим на несущий сигнал AM-радиостанции, показанный на рис. 1.4. На самом деле он похож на простой звуковой сигнал, просто перемещается вверх и вниз намного быстрее. 28 Глава 1 https://liveinternet.club/
Рис. 1.4. Сигнал несущей Теперь у нас есть аудиосигнал, который мы хотим отправить, и несущая час­то­та, на которой работает радиостанция. Как нам отправить аудиосигнал, используя несущий сигнал? Амплитудная модуляция Вероятно, сейчас самый подходящий момент упомянуть, что AM расшифровывается как «амплитудная модуляция». Амплитуда относится к силе (величине) сигнала (свойство, отложенное по оси y на графиках сигналов, показанных выше), поэтому амплитудная модуляция означает, что мы изменяем (модулируем) величину несущей в зависимости от величины аудиосигнала. Мы пропорционально уменьшаем амплитуду несущей при низком уровне аудиосигнала и увеличиваем амплитуду несущей при высоком уровне аудиосигнала. На рис. 1.5 показан модулированный сигнал, основанный на звуковом тоне и несущей, приведенных на двух предыдущих рисунках. Сначала обратите внимание, что пики и спады модулированного сигнала находятся на том же расстоянии друг от друга, что и пики и спады сигнала несущей, показанные на рис. 1.4. В этом смысле модулированный сигнал по-прежнему тесно связан с несущей. Но обратите внимание также на то, как изменились высоты пиков сигнала в соответствии с формой звукового сигнала, показанной на рис. 1.3. Вы можете наглядно видеть, как исходный звуковой сигнал отражается на форме несущей. Это и есть амплитудная модуляция. Возможно, вам интересно, как выглядит этот процесс модуляции для реального аудиосигнала, например когда человек разговаривает или группа играет музыку. В конце концов, радиостанции редко передают чистый звуковой тон. Такие более интересные виды аудиосигналов выглядят гораздо сложнее, как показано на рис. 1.6. Что такое радио https://liveinternet.club/ 29
Рис. 1.5. Несущая, модулированная звуковым тоном Рис. 1.6. Реальный аудиосигнал Несмотря на то что этот аудиосигнал сложнее простого музыкального тона, его модуляция на несущей приводит к тому же результату: вы по-прежнему можете видеть контуры исходного аудиосигнала на модулированной несущей, как показано на рис. 1.7. Демодуляция просто обращает этот процесс вспять, позволяя взять модулированный сигнал и извлечь из него сигнал, использовавшийся для модуляции несущей. 30 Глава 1 https://liveinternet.club/
Рис. 1.7. Амплитудная модуляция с реальным аудиосигналом Итоги Теперь у нас есть общее представление о том, что такое сигналы, и мы увидели, как модуляция может использовать аудиосигнал для изменения формы несущего сигнала. Мы также узнали, что демодуляция может «отменить» это действие. Позже мы займемся созданием модуляторов и демодуляторов с использованием GNU Radio, чтобы понять, как модуляция и демодуляция вписываются в структуру SDR-пе­ ре­датчиков и приемников. Остается еще много вопросов без ответа, например: зачем вообще нужна несущая? Как выбирать час­то­ту несущей? Какие еще сущест­ вуют виды модуляции? Мы ответим на все эти и другие вопросы, но сначала нужно разобраться, как работать с сигналами с помощью компьютера. https://liveinternet.club/
2 КОМПЬЮТЕРЫ И СИГНАЛЫ Все сигналы, которые мы рассматривали в предыдущей главе, выглядели как волнистые линии, меняющиеся с течением времени. В этой главе мы ответим на вопрос: «Как ввести эти волнистые линии в компьютер, чтобы программное обеспечение могло с ними работать?» Мы совершим небольшой экскурс в область цифровой обработки сигналов — целую отрасль электроники, посвященную использованию компьютеров для сбора, обработки и воспроизведения сигналов реального мира. В частности, мы рассмотрим оцифровку сигнала — процесс многократных измерений величины сигнала во времени. В этой главе мы коснемся цифровой обработки сигналов лишь поверхностно, но это нормально: вы можете начать изучать на практике SDR, имея за плечами всего несколько понятий из этой области. Оцифровка На самом деле оцифровка — это просто серия измерений. Компьютерам нужны числа для работы, и процесс оцифровки состоит из последовательности измерений с течением времени, чтобы преобразовать волнистые сигналы реального мира в числа. Если вы выполните эти измерения довольно быстро и с достаточной точностью, то получите серию чисел, которые в достаточной степени отражают исходный сигнал. Мы называем процесс таких измерений дискретизацией (samp­ 32 Глава 2 https://liveinternet.club/
ling), массив полученных результатов — выборкой (samples), а каждое из этих измерений — отсчетом (sample). Рассмотрим сигнал в виде напряжения на проводнике. Нам нужно преобразовать это напряжение в цифровое значение, понятное компьютеру, — другими словами, измерить его! Однако напряжение может меняться со временем: в один момент оно может составлять 1,3 вольта (В), в другой — 0,042 В, а в следующий — 110 В. Чтобы точно представить этот изменяющийся сигнал, нам нужно продолжать его измерять (то есть продолжать процесс оцифровки), генерируя новые цифровые значения на основе этих измерений все время, пока мы хотим наблюдать за сигналом. Аналого-цифровое преобразование Аппаратная схема, которая производит отсчеты и преобразует полученное значение в число, понятное компьютеру, называется аналого-цифровым преобразователем, или сокращенно АЦП, поскольку реальные, непрерывные сигналы считаются аналоговыми, а результат оцифровки в виде последовательности отсчетов — цифровым представлением этих сигналов. Давайте рассмотрим пример, чтобы понять, как это работает. Возможно, самый простой сигнал, с которым вы когда-либо сталкивались, — это прямоугольная волна. Такой сигнал периодически переключается между двумя разными значениями. В случае прямоуголь­ной волны, показанной на рис. 2.1, сигнал каждую секунду переключается с 0 В на 3 В и обратно на 0 В. Рис. 2.1. Прямоугольная волна Подав этот сигнал на АЦП, мы выполняем серию измерений, генерируя непрерывный поток отсчетов. Значение каждого из этих отсчеКомпьютеры и сигналы https://liveinternet.club/ 33
тов будет равно 0 или 3, что соответствует уровню напряжения сигнала в вольтах в момент взятия каждого отсчета. На рис. 2.2 показан график полученных выборок, причем каждый отсчет отображается в виде отдельной точки. Рис. 2.2. Результат оцифровки прямоугольной волны Как вы можете видеть, у нас есть ряд отсчетов (выборка сигнала), расположенных горизонтально по всему графику. Некоторые из точек имеют значение 3, а некоторые 0. Соедините эти точки между собой, и вы получите довольно хорошее представление об исходном сигнале. Тем временем компьютер получал бы эти отсчеты в виде потока данных или массива (выборки) со следующим содержимым: [0, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, ...] Теперь взгляните на синусоиду и ее оцифрованную версию на рис. 2.3. Возможно, вы помните обсуждение синусоид в главе 1. Это важный тип сигналов с уникальными свойствами, которые полезны для работы с SDR. Привыкайте к их виду. 34 Глава 2 https://liveinternet.club/
Рис. 2.3. Синусоида в исходном (аналоговом) и оцифрованном виде Плавные колебания синусоиды являются хорошей иллюстрацией непрерывности аналоговых сигналов, которые АЦП разбивает на набор дискретных отсчетов. Несмотря на это, посмотрите на точки на нижнем рисунке, и вы все равно сможете различить форму исходной синусоиды. Чтобы вы не думали, что АЦП работают только с искусственными сигналами, на рис. 2.4 показан результат оцифровки сигнала произвольной формы, аналогичного звуковому фрагменту, который вы видели на рис. 1.6. Компьютеры и сигналы https://liveinternet.club/ 35
Рис. 2.4. Аналоговый и оцифрованный вид колебания произвольной формы В этом случае поток чисел, получаемый компьютером, был бы примерно следующим: [+0.4, +0.2, +0.1, 0, -0.2, -0.5, -0.9, -1.2, -1.2, ...] Хотя в оцифрованной версии вы все еще можете увидеть исходную произвольную форму сигнала, некоторые нюансы были утрачены1. Чуть позже мы обсудим, почему так получается. 1 36 Глава 2 https://liveinternet.club/ Заметим, что на верхнем графике рис. 2.4 показан не исходный аналоговый сигнал (как, например, фрагмент графика рис. 1.6), а результат восстановления аналогового сигнала из цифровых данных, показанных на нижнем графике, поэтому нюансы все равно не могут быть видны. Это хорошо видно по тому, что график не представляет плавную гладкую кривую, а состоит из отдельных прямых отрезков, соединяющих между собой точки с нижнего графика (метод т. н. линейной интерполяции).
Цифроаналоговое преобразование Мы также можем обратить процесс работы АЦП и преобразовать цифровые (компьютерные) значения в аналоговые (реальные). Неудивительно, что устройство, которое делает это, называется цифроаналоговым преобразователем, или ЦАП. ЦАП — это то устройство, которое позволяет, например, подключить наушники и прослушать песню, сохраненную на жестком диске вашего компьютера. ЦАП извлекает цифровую информацию из аудиофайла и преобразует ее в реальный сигнал, который можно воспроизводить через наушники. Таким образом, АЦП измеряет сигналы в реальном мире и преобразует их в форму, понятную компьютеру. ЦАП работает наоборот, принимая значения, которые выдает компьютер, и отправляет вам в качестве реального сигнала. Как вы, вероятно, и ожидали, в этом простом описании отсутствует множество деталей. Мы не обсуждали точность, шум, фильтры сглаживания, двоичную память и т. д. Мы рассмотрим некоторые из этих понятий в следующих главах. Однако на данном этапе мы хотим подробнее остановиться на понятии час­ то­ты дискретизации. Частота дискретизации Частота дискретизации (иногда называемая частотой оцифровки) — это количество отсчетов в секунду, т. е. величина, показывающая, сколько раз в секунду вы производите измерения сигнала. Обратная величина, т. е. промежуток времени, который проходит между отдельными отсчетами, называется периодом дискретизации (или периодом оцифровки). Взгляните еще раз на графики оцифрованных сигналов, которые мы только что обсуждали. Расстояние по горизонтали между одной точкой (или отсчетом) и следующей представляет собой период дискретизации. Подсчитайте количество точек в секунду, и вы получите час­то­ту дискретизации. Думайте о час­то­те дискретизации как о скорости, с которой вы дае­те команду АЦП выполнять измерения сигнала. Чем выше час­то­та дискретизации (и, соответственно, короче период дискретизации), тем лучше будет компьютерное представление сигнала. С другой стороны, чем больше отсчетов вы делаете в секунду, тем больше данных вы получите в итоге, а это означает, что вам потребуется больше места для их хранения и вычислительной мощности для обработки. Кроме того, час­то­та отсчетов на конкретном оборудовании будет ограничена его возможностями. Таким образом, самый важный вопрос звучит так: «С какой частотой я должен производить дискретизацию своего сигнала?» Чтобы ответить на него, сначала взгляните на рис. 2.5, где синусоидальный сигнал был оцифрован с относительно высокой частотой дискретизации. Компьютеры и сигналы https://liveinternet.club/ 37
Рис. 2.5. Оцифрованная синусоида с высокой частотой дискретизации Здесь оригинальный непрерывный сигнал виден даже невооруженным глазом. Когда ваш компьютер получит этот поток данных, он будет точно воспроизводить исходный сигнал. На самом деле час­ то­та дискретизации на рис. 2.5 во много раз больше, чем необходимо для данного конкретного сигнала, мы просто увеличили ее для наглядности. С другой стороны, на рис. 2.6 показано, что происходит, когда час­ то­та дискретизации меньше необходимой. Сравните непрерывный сигнал (вверху) с оцифрованным (внизу). Рис. 2.6. Оцифрованная синусоида с пониженной частотой дискретизации 38 Глава 2 https://liveinternet.club/
Вы здесь не сможете узнать исходный сигнал, не так ли? Это изза того, что мы производим отсчеты так медленно, что что-то важное упускаем. Под «медленно» мы подразумеваем не то, что час­то­та дискретизации низкая в абсолютном смысле, а то, что она низкая по сравнению с сигналом, который мы пытаемся оцифровать. Период дискретизации настолько велик, что сигнал слишком быстро меняется между последовательными отсчетами. В промежутках между каж­ дой парой отсчетов мы, по сути, теряем представление о сигнале. Вот один из способов проиллюстрировать подобную ситуацию: представьте, что вы находитесь в комнате с неспокойной кошкой. Она любит ходить по большому кругу, но при этом может как бы случайно менять направление. Предположим, что кошка может пройти полный круг по комнате за 10 секунд с максимальной скоростью. Но в какой-то момент в течение этих 10 секунд кошка может замедлиться или развернуться и направиться в другую сторону; за эти 10 секунд она может несколько раз изменять скорость или направление. Теперь представьте, что кто-то может выключать свет в комнате. Пусть этот кто-то начинает равномерно двигать выключатель вверх и вниз. Каждую секунду свет включается на мгновение, а затем комната снова погружается в темноту. В результате вы каждую секунду можете мельком рассмотреть, где находится кошка (другими словами, у вас есть час­то­та дискретизации равна одному отсчету в секунду). Поскольку свет мигает довольно быстро по сравнению с кошкой, у вас есть довольно хорошее представление о ее движении. Даже когда кошка меняет направление или скорость, вы можете быть уверены, что знаете, где она находится или где она только что была. Она просто движется недостаточно быстро, чтобы не быть замеченной в мерцающем свете. Далее представьте, что время между включениями света значительно увеличивается. Теперь выключатель перемещается вверх только для того, чтобы вы могли видеть комнату каждые 60 секунд. Как вы думаете, в этих условиях вы могли бы представить, как двигается кошка? В промежутках между этими редкими вспышками света кошка может делать что угодно: менять направление, ускоряться, замедляться. Когда вы «оцифровываете» комнату слишком медленно по сравнению со скоростью кошки, вы практически не представляете, что она делает. Аналогичное явление происходит с нашей синусоидой при недостаточной час­то­те дискретизации, как показано на рис. 2.6. Мы производим дискретизацию слишком медленно по сравнению со скоростью изменений сигнала и в результате пропускаем эти изменения. Вот самый важный вывод из этого обсуждения: делайте выборку достаточно быстро, иначе вы получите неверные данные. Насколько быстро это «достаточно быстро»? Ответ: вам нужно производить выборку существенно быстрее, чем происходят изменения в сигнале, который вы пытаетесь измерить. Компьютеры и сигналы https://liveinternet.club/ 39
А если сигнал не является простой синусоидой, как мы узнаем, насколько быстро он меняется? Еще один интересный вопрос, который мы рассмотрим в следующих главах. SDR с расстояния 15 километров Теперь, когда вы обладаете базовыми знаниями об аналого-цифровом и цифроаналоговом преобразованиях, вы можете начать понимать, как работает SDR. На рис. 2.7 показана простая модель, ил­люстрирующая, как SDR и компьютер могут принимать радиосигналы. Аналогоцифровой преобразователь Компьютер Рис. 2.7. Простая модель SDR-приемника Приемная антенна улавливает несколько радиосигналов, АЦП преобразует их в поток чисел, понятный вашему компьютеру, а затем компьютер обрабатывает этот поток чисел, чтобы придать смысл сигналам. Что касается передачи, то ваш компьютер генерирует цифровую версию сигнала, ЦАП преобразует сигнал в аналоговый, а затем передающая часть SDR отправляет этот сигнал по всему миру через передающую антенну (см. рис. 2.8). Компьютер Цифроаналоговый преобразователь Рис. 2.8. Простая модель SDR-передатчика В этих моделях отсутствует множество деталей, но они являются хорошей отправной точкой. Суть в том, что в основе обеих блок-схем лежит компьютер, который мы можем перепрограммировать, чтобы он выполнял то, что нам нужно. Мы можем: zz zz 40 Глава 2 https://liveinternet.club/ извлекать аудио из радиосигналов и воспроизводить его через динамики; записывать необработанные радиоданные в файл, чтобы про­ анализировать их позже;
zz zz изменить программирование SDR, чтобы при необходимости передавать или принимать сигналы совершенно разных типов; находить загадочные сигналы и реконструировать их. Этот список дает лишь поверхностное представление о том, что может сделать компьютер в сочетании с SDR и цифровой дискретизацией. Итоги В данной главе мы узнали, как АЦП может принимать реальный сигнал и преобразовывать его в информацию, которую может использовать компьютер. Для этого он выполняет множество отдельных измерений (выборок, отсчетов) сигнала. Мы также узнали, что ЦАП выполняет аналогичный процесс в обратном порядке. Мы осознали важность час­то­ты дискретизации: при достаточно высокой скорости оцифровки мы гарантированно улавливаем наиболее быстро меняющиеся детали сигнала. Наконец, мы наглядно увидели, насколько АЦП и ЦАП необходимы в мире SDR: они позволяют компьютеру принимать и отправлять радиосигналы. Но пора начинать учиться на практике! В следующей главе мы познакомимся с GNU Radio, мощным программным обеспечением, которое мы будем использовать для сбора и обработки радиосигналов с помощью SDR-приемников. GNU Radio будет лежать в основе компьютерной структуры на протяжении всей книги. https://liveinternet.club/
3 НАЧИНАЕМ РАБОТ У С GNU RADIO Наконец-то пришло время начать знакомиться с GNU Radio, бесплатным инструментарием с открытым исходным кодом, который поддерживает графическое представление программ, а также традиционное текстовое кодирование в области радио. В этой главе вы установите GNU Radio и протестируете его, создав и запус­ тив несколько простых блок-схем. Это программы, созданные с использованием графического интерфейса пользователя GNU Radio Companion. Вы узнаете, как вводить данные в блок-схемы и извлекать их, а также как манипулировать этими данными, используя простой интерфейс, основанный на блоках. Вы увидите, как GNU Radio позволяет создавать новые радиостанции практически полностью с помощью только программного обес­ печения. Установка GNU Radio Когда-то давно (под этим мы подразумеваем далекие 2010-е годы) установка качественного программного обеспечения для SDR-стан­ ции требовала довольно много времени и усилий. К счастью, те времена остались позади, и благодаря неумолимому прогрессу программного обеспечения с открытым исходным кодом и невероятным усилиям его разработчиков вы сможете быстро приступить к работе с GNU Radio. 42 Глава 3 https://liveinternet.club/
Linux Конкретным дистрибутивом Linux, который мы рекомендуем для установки GNU Radio, является Ubuntu, и для целей этой книги мы будем использовать Ubuntu 24.04 LTS. GNU Radio также будет работать во многих других версиях и дистрибутивах Linux, но мы не будем описывать здесь все возможности. Вы можете найти справку по установке для других дистрибутивов на веб-сайте GNU Radio (https:// www.gnuradio.org). Чтобы установить GNU Radio в Ubuntu, просто откройте окно терминала и введите следующие команды: $ sudo apt update $ sudo apt -y upgrade $ sudo apt -y install gnuradio Вам нужно будет ввести свой пароль для первой из этих команд, если вы этого еще не делали. Вот и все! Теперь вы готовы начать использовать GNU Radio. Windows и macOS Лучший способ установить GNU Radio на Windows или macOS — это использовать менеджер пакетов radioconda. Вместо того чтобы устанавливать программное обеспечение изначально или непосредственно на ваш компьютер, radioconda создает виртуальную среду, содержащую все необходимое для запуска GNU Radio. Она является производной от Conda, более общей системы для управления виртуальными средами Python. Для начала загрузите последнюю версию программы установки radioconda со страницы проекта на GitHub (https://github.com/ryanvolz/ radioconda) и запустите ее на своем компьютере. После установки вам просто нужно переключиться с родной среды вашего компьютера на виртуальную среду, активировав radioconda. Затем вы можете запускать GNU Radio в этой новой среде и при необходимости отключать ее, когда закончите. Не волнуйтесь, если вы раньше не работали с виртуальными средами; активация и деактивация — это все, что вам нужно будет сделать. Конкретные инструкции по установке и использованию radioconda могут со временем меняться, поэтому ознакомьтесь с последними инструкциями на веб-сайте GNU Radio или посетите https://www.factorialabs.com/install. Виртуальная машина Другим вариантом запуска GNU Radio на компьютерах, отличных от Linux, является использование виртуальной машины (VM). С коммерНачинаем работу с GNU Radio https://liveinternet.club/ 43
ческим программным обеспечением от таких компаний, как VMware или Parallels, или с программным обеспечением с открытым исходным кодом, таким как VirtualBox, вы можете виртуально запустить экземпляр Ubuntu на своем компьютере с Windows или macOS. Для этого сначала необходимо создать виртуальную машину в соответствии с инструкциями выбранного программного обеспечения для виртуализации. Затем, после входа в виртуальную машину Ubuntu, следуйте инструкциям, приведенным в разделе «Linux» на предыдущей странице, чтобы установить GNU Radio. Такой подход может быть немного сложнее и негативно сказаться на производительности, по­ этому если у вас нет веских причин поступать иначе, мы рекомендуем начать с подхода radioconda. GNU Radio Companion Теперь давайте уделим немного времени изучению некоторых ключевых функций GNU Radio Companion — графического интерфейса пользователя (GUI) для GNU Radio. Вместо написания программ на таких языках, как C++ или Python, с использованием множества текстовых файлов, содержащих такие программные элементы, как операторы if и циклы while, GNU Radio Companion позволяет создавать программы графически, связывая различные блоки. Мы в этой книге называем полученный результат (именуемый по-английски flowgraph — потоковым графом) просто блок-схемой, а алгоритм, который она обозначает, — просто программой. Примечание Остальная часть этого руководства написана с точки зрения пользователя Linux. Вам нужно будет ввести соответствующую команду для Windows или macOS (как показано на веб-странице установки1), если вы используете любую из них. Кроме того, будут незначительные различия во внешнем виде пользовательского интерфейса в системах, отличных от Linux. Запустите GNU Radio Companion из окна терминала, введя команду gnuradio-companion. Через долю секунды вы увидите окно, похожее на рис. 3.1. Мы снабдили рисунок комментариями, чтобы выделить основные части интерфейса GNU Radio Companion. 1 44 Глава 3 https://liveinternet.club/ Для среды Conda см. страницу GNU Radio wiki по адресу https://wiki.gnuradio. org/index.php/CondaInstall. Начальные сведения об установке GNU Radio и работе в среде GNU Radio Companion на русском языке см. в 4-й части статьи «Software Defined Radio — как это работает?» по адресу https://habr.com/ru/ articles/453038.
Панель инструментов Блоки Рабочая область Консоль Рис. 3.1. Интерфейс GNU Radio Companion В правой части окна расположено меню, в котором перечислены все блоки, доступные для использования в программах. Чтобы создать блок-схему, перетащите блоки из списка в рабочую область, основную часть окна. Затем соедините блоки необходимым образом. В рабочей области следует настроить каждый из блоков в зависимости от его конкретного назначения в составе программы. Для управления блоками и программой следует использовать значки на панели инструментов в верхней части окна, позволяющие открывать, закрывать, сохранять и запускать программу. Консоль в нижней части окна отображает все сообщения, предупреждения или ошибки. На рис. 3.2 показан пример блок-схемы с несколькими соединенными блоками. На протяжении всей этой книги мы будем работать над созданием подобной программы. Из множества различных типов блоков, доступных в GNU Radio Companion, пожалуй, наиболее важными являются входные блоки-источники (sources) и блоки вывода (sinks). Это блоки, которые позволяют вводить и выводить данные в процессе выполнения программы. Начинаем работу с GNU Radio https://liveinternet.club/ 45
Рис. 3.2. Пример блок-схемы с блоками и соединениями между ними Источники Эти блоки вводят потоки данных в блок-схему. Помните примеры аналого-цифрового преобразования в предыдущей главе, где из аналого-цифрового преобразователя передавались длинные последовательности чисел? Точно так же можно вводить потоки радиоданных в блок-схему с SDR-оборудования, используя блок-источник SDRданных. Это, пожалуй, самый важный тип источников, но мы будем работать с ним только в конце нашей книги. На данный момент мы сосредоточимся на нескольких входных блоках, не требующих какого-либо аппаратного обеспечения. Например, блок файлового источника (File Source) получает данные из выбранного файла на компьютере. Для целей этой книги мы создали файл данных, который имитирует поведение реального оборудования SDR. В первой части нашей книги мы будем использовать файловые источники для передачи этих данных в программу для обработки. Таким образом, вы сможете гораздо легче освоить основы SDR, не беспокоясь о нюансах аппаратного обеспечения. Другой ключевой входной блок, который мы будем использовать, — источник сигналов Signal Source, генерирующий чистые синусоиды, а также другие синтетические сигналы и вводящий их в нашу программу. Еще проще источник постоянного сигнала (Constant Source), создающий поток чисел, каждое из которых идентично предыдущему. Вскоре мы поймем, в чем польза таких источников. 46 Глава 3 https://liveinternet.club/
Блоки вывода Аналогами блоков-источников являются блоки вывода, представляющие выходные данные программы. Данные поступают в нее через источники и выходят из нее через блоки вывода. Блоки вывода, отправляющие данные на SDR-аппаратуру для радиопередачи, являются важным типом, но, как и блоки-источники, не все выходные блоки требуют специального оборудования. Например, вы можете отправить данные на блок аудиовывода (Audio Sink), управляющий звуковой картой, чтобы услышать, как они звучат. Или можно захватить данные, которые выдает программа, и сохранить их для последующего использования с помощью блока файлового вывода (File Sink). Хотя у многих блоков вывода есть аналоги в виде блоков-источников, у одного специального типа блоков вывода их нет. Это инструментальные блоки (instrumentation blocks), которые позволяют визуализировать данные программы в режиме реального времени с использованием ряда различных методов. В следующем разделе мы создадим нашу первую блок-схему, и она будет включать один из таких инструментальных блоков в качестве выходного. Hello, SDR! В качестве введения в GNU Radio, напоминающего общеизвестное «Hello,world!» (Привет, мир!), наша первая программа будет генерировать и отображать постоянный сигнал. В процессе создания этого простого проекта мы познакомимся с тем, как создавать и запускать программы. В GNU Radio Companion у вас уже должна быть открыта пустая блок-схема, поскольку это поведение по умолчанию при первом запуске. Если ее нет, создайте новую, щелкнув File > New > QT GUI (Файл > Создать > QT GUI) или используя сочетание клавиш <Ctrl+N>. Теперь мы готовы приступить к созданию своего первого SDR-шедевра! Добавление блоков Можно просматривать полный список из более чем 100 блоков, пока не найдете нужный, но гораздо проще найти блоки с помощью функции поиска, по крайней мере если вы знаете часть названия блока, который ищете. Чтобы получить доступ к функции поиска, щелкните значок увеличительного стекла в правой части панели инструментов. Откроется окно поиска в верхней части списка блоков, как показано на рис. 3.3. Начинаем работу с GNU Radio https://liveinternet.club/ 47
Кнопка поиска Поле поиска Рис. 3.3. Кнопка поиска и поле поиска Наша цель при создании этой программы — создать поток констант и затем отобразить их в графическом виде. Блок Constant Source генерирует поток чисел с постоянным значением, поэтому вы начнете с добавления одного из них в свой проект. Нажмите кнопку поиска (или используйте сочетание клавиш <Ctrl+F>) и введите «constant» в поле поиска. С каждым введенным символом список блоков фильт­ руется соответствующим образом. После ввода нескольких символов в верхней части списка вы увидите нужный блок. Щелкните по названию блока и перетащите его в рабочую область, как показано на рис. 3.4. Хотя в этом нет необходимости, рекомендуется перетащить блок Constant Source в левую часть рабочей области. По общему правилу, блок-схемы в GNU Radio читаются слева направо, при этом блоки ввода отображаются в крайнем левом углу, а выходные — в крайнем правом. Затем добавьте блок регулирования Throttle справа от Constant Source. Сейчас мы не будем вдаваться в подробности того, что делает этот блок, но просто знайте, что он не позволяет компьютеру работать слишком быстро. Используйте свои недавно приобретенные навыки работы с кнопками поиска, чтобы заменить текст в поле поиска на «throttle», и дважды щелкните по найденному блоку, чтобы помес­ тить его в рабочую область. Последним блоком, который нужно добавить на данную блок-схему, является графический интерфейс QT GUI Time Sink. Это один из тех инструментальных блоков, которые позволяют визуализировать поток цифровых данных в блок-схеме. Измените текст в поле поиска 48 Глава 3 https://liveinternet.club/
на «qt gui time s» (заглавные буквы не имеют значения) и выберите нужный блок. Теперь рабочее пространство должно выглядеть так, как показано на рис. 3.5 (обратите внимание, что с этого момента мы обычно будем показывать на рисунках только часть рабочего пространства GNU Radio Companion, а не все окно интерфейса целиком). Рис. 3.4. Добавление первого блока в рабочую область Рис. 3.5. Блок-схема с тремя блоками Не беспокойтесь, если блоки будут расположены не совсем в том положении, как показано на рисунке. Расположение не повлияет на работу программы. Если вы захотите переместить блоки, это можно сделать простым перетаскиванием. Хотя это не повлияет на функцио­ нальность, хорошей привычкой является аккуратная организация Начинаем работу с GNU Radio https://liveinternet.club/ 49
блок-схемы, чтобы сделать происходящее как можно понятнее. Беспорядочно разбросанные по рабочему пространству блоки во многом напоминают написание исходного кода со случайными отступами в строках: это точно так же неприятно. Соединения блоков Следующим шагом является соединение блоков друг с другом, чтобы данные могли передаваться от входа к выходу. Сначала соедините блоки Constant Source и Throttle. Щелкните по порту на правой стороне блока Constant Source с надписью out, затем щелкните по порту на левой стороне блока Throttle с надписью in. Они соединятся между собой. Точно так же вы будете выполнять все соединения в блок-схеме: щелчком мыши на выходном порту одного блока и на входном порту другого. Обратите внимание, что соединение представлено не просто линией. Она снабжена стрелкой, указывающей направление потока данных. В этом случае данные передаются из блока-источника. Завершите создание блок-схемы, подключив выходной порт блока регулирования Throttle к единственному входу блока QT GUI Time Sink. Когда вы закончите, у вас должно получиться что-то вроде схемы, показанной на рис. 3.6. Рис. 3.6. Законченная блок-схема Мы выстроили блок-схему своей первой программы. Замечательно! Сохранение и запуск программы Как и в случае с любым другим документом, который вы редактируе­ те на компьютере, вам необходимо сохранить файл, содержащий блок-схему. Щелкните File > Save (Файл > Сохранить) или нажмите <Ctrl+S>, а затем сохраните файл как source_sink.grc, используя по­ явившееся диалоговое окно. 50 Глава 3 https://liveinternet.club/
Наконец, пришло время запустить готовую программу. Щелкните значок запуска Execute (Выполнить) на панели инструментов, как показано на рис. 3.7. Индикатор ошибки Кнопка запуска Консоль Рис. 3.7. Кнопка запуска и индикатор ошибки Если в блок-схеме есть ошибки, кнопка запуска Execute будет выделена серым цветом. Кроме того, некоторые части блок-схемы будут окрашены в красный цвет, что поможет определить, какой блок (или блоки) содержи(а)т ошибки и как это исправить. После недолгих вычислений GNU Radio Companion откроет окно отображения, показывающее постоянную форму сигнала со значением 0, как представлено на рис. 3.8. Уделите минутку, чтобы полюбоваться формой выходного сигнала. Если окно отображения результатов меньше, чем вам хотелось бы, не стесняйтесь щелкнуть мышью и ухватить его за угол, чтобы изменить размер. Закрыть окно с результатами можно, если нажать крестик в правом верхнем углу. Закрытие окна отображения результатов также завершает и выполнение программы. Изменение свойств блока Строка с нулевым значением не слишком увлекательна, не так ли? Чтобы сделать программу немного интереснее, можно настроить блок Constant Source. Для изменения поведения блока дважды щелк­ ните по нему и обновите его свойства, для чего измените значение свойства Constant на 3,14 (см. рис. 3.9). Затем нажмите OK. Начинаем работу с GNU Radio https://liveinternet.club/ 51
Рис. 3.8. Выходной сигнал вашей первой программы1 Рис. 3.9. Окно свойств блока Constant Source 1 52 Глава 3 https://liveinternet.club/ Из авторского изложения не ясно, откуда появилось название в заголовке окна («My first flowgraph»). Вообще-то, оно задается в блоке Options (левый блок вверху, см. о нем в следующей главе), однако в данном случае название там отсутствует. Возможно, такое название возникает в заголовке окна автоматически по умолчанию.
Блок-схема теперь будет выглядеть так же, как и раньше, но с одним изменением. Обратите внимание, что отображение блока Constant Source в рабочей области изменилось, чтобы отразить новое значение, как показано на рис. 3.10. Блоки GNU Radio Companion в рабочей области обычно отображают изменения настроек, чтобы показать, какие свойства в данный момент установлены для блока. Это значительно упрощает просмотр того, что делает программа, без необходимости щелкать по каждому блоку, чтобы проверить его свойства. Рис. 3.10. Модифицированная блок-схема с новым значением Constant Source Запустите блок-схему еще раз, и вы увидите окно, показанное на рис. 3.11. Рис. 3.11. Выход модифицированной программы Начинаем работу с GNU Radio https://liveinternet.club/ 53
Вы изменили блок Constant Source, но результат не изменился. Что случилось? Одна из проблем заключается в том, что здесь слишком сильно увеличен масштаб, чтобы увидеть строку со значением 3,14. Уменьшите масштаб, прокручивая колесико мыши вверх, пока не увидите вторую строку, как показано на рис. 3.12. Рис. 3.12. Модифицированный выход программы в уменьшенном масштабе Выходные данные изменились, как и ожидалось, с постоянной линией, проведенной на уровне 3,14. Линия, называемая «Signal 1», имеет смысл, но что это за другая линия, называемая «Signal 2», и почему она равна 0? Краткий ответ заключается в том, что вы только что впервые увидели комплексные числа в GNU Radio. В отличие от обычных чисел, с которыми мы сталкиваемся в повседневной жизни, комплексные числа состоят из двух частей, и здесь вы видите их обе. Вскоре мы снова столкнемся с комплексными числами, но пока нам не нужно углубляться в этот вопрос1. Между входом и выходом Мы видели, как вводить данные в потоковую диаграмму с помощью блоков ввода и как извлекать их с помощью блоков вывода. Что программа делает в промежутке? Короткий ответ: занимается математикой! Большинство блоков GNU Radio Companion посвящены выполнению математических операций для модуляции, демодуляции, 1 54 Глава 3 https://liveinternet.club/ О комплексном представлении радиосигналов см. сноску на стр. 238 в главе 11, раздел «IQ-дискретизация».
фильтрации или иного манипулирования сигналами по мере их перемещения от входных данных к выходным. Чтобы получить представление о том, как это работает, следует обновить программу таким образом, дабы постоянный сигнал изменялся с помощью математической функции. Нажмите File > Ореn (Файл > Открыть), чтобы открыть ранее сохраненный файл source_sink.grc (если он у вас не остался открытым). Затем нажмите File > Save as (Файл > Сохранить как) и повторно сохраните его под именем simple_multiply.grc. Далее введите «multiply» в окне поиска и дважды щелкните по блоку Multiply Const, чтобы добавить его в свою блок-схему. Этот блок обеспечивает одну из простейших математических функций, применимых к сигналу между входом и выходом: он умножает входящий сигнал на постоянное значение и выводит результат. Однако прежде чем вы сможете его использовать, вам необходимо устранить связь, которая уже существует между Throttle и QT GUI Time Sink. Щелкните правой кнопкой мыши на линии, соединяющей два блока, и выберите Delete (Удалить) в контекстном меню. Кроме того, вы также можете щелкнуть на линии левой кнопкой мыши, а затем нажать Delete. Удалив старое подключение, подключите выход блока Throttle к входу блока Multiply Const, а выход блока Multiply Const к входу блока интерфейса QT GUI Time Sink, как показано на рис. 3.13. Вы можете выполнять это действие в любом порядке: сначала установить выход Multiply Const, потом вход QT GUI Time Sink, или в обратной последовательности. Рис. 3.13. Блок-схема простой программы с умножением По умолчанию функция блока Multiply Const умножает входящие данные на постоянное значение, равное 1. Измените множитель на 2, дважды щелкнув по блоку и обновив свойство Constant. После этого окно должно выглядеть так, как показано на рис. 3.14. Начинаем работу с GNU Radio https://liveinternet.club/ 55
Рис. 3.14. Окно блока Multiply Const После нажатия кнопки ОК запустите программу еще раз. Вам нужно будет уменьшить масштаб еще больше (не забудьте прокрутить вверх), но когда вы это сделаете, то увидите, что новое значение «Signal 1» в два раза больше предыдущего, как показано на рис. 3.15. Рис. 3.15. Выход программы с умножающим блоком 56 Глава 3 https://liveinternet.club/
Умножение на два — это, конечно, не наука о том, как построить звездолет, но оно иллюстрирует важный момент: все, что на самом деле делается между входом и выходом, — просто математика. Вскоре между входными и выходными блоками мы будем размещать всевозможные интересные вещи. Итоги На данный момент у вас есть самое общее представление о том, как использовать GNU Radio Companion. Это включает в себя добавление блоков в программу в виде блок-схемы, а также их соединение и настройку. Вы можете гораздо глубже изучить возможности GNU Radio Companion, но уже сейчас вы знаете достаточно, чтобы создать свой первый радиоприемник. Давайте сделаем это! https://liveinternet.club/
4 СОЗДАНИЕ AM - ПРИЕМНИКА В этой главе мы подробно рассмотрим создание первого программного радиоустройства: приемника с амплитудной модуляцией (AM). Подобно автомобильному AM-приемнику, он сможет принимать AM-радиосигналы и преобразовывать их в аудио, которое можно слушать. Однако вместо того, чтобы работать с радиосигналами в реальном времени, мы протестируем радиостанцию с файлом, содержащим перехваченные и записанные радиоданные. Таким образом, пока нам не придется беспокоиться о каком-либо оборудовании. На этом раннем этапе пути к SDR необходимо изучить две основные вещи: как использовать GNU Radio Companion и теорию, лежащую в основе создания SDR. Эта глава будет посвящена первому вопросу. Поэтому в начале мы в основном остановимся на теории радиосвязи, лежащей в основе АМ-приемника. Без этой теории некоторые практические шаги, которые мы предпримем далее, могут показаться бессмысленными, и может даже показаться, что вас заставляют следовать заученному набору инструкций, как при сборке модели самолета. Однако будьте уверены: цель состоит не в том, чтобы дать вам набор простых инструкций из кулинарной книги и отправить в путь. В следующих нескольких главах мы продолжим возвращаться к этому проекту, дабы вникнуть в детали работы AM-приемника и радиоприемников в целом. Откроем GNU Radio Companion и приступим к работе! 58 Глава 4 https://liveinternet.club/
Настройка переменных и входов Создайте новый проект, щелкнув File > New > QT GUI (Файл > Создать > QT GUI) или нажав <Ctrl+N>. При этом откроется практически пустое начальное окно, в рабочей области которого уже имеются только два блока. Каждая новая блок-схема начинается с этих блоков. Первый — это блок настроек Options, который содержит некоторую базовую документацию и настройки блок-схемы. Другой — блок типа Variable, представляющий переменную с именем samp_rate. Мы будем использовать блоки Variable для хранения значений, используемых во всей программе, точно так же, как при определении глобальных переменных в текстовых языках программирования, таких как C или Python. Как вы могли бы догадаться по названию, эта конкретная переменная как-то связана с частотой дискретизации для всей программы. Хотя это и не является строго необходимым, рекомендуется добавить некоторую базовую информацию в блок Options. Дважды щелк­ ните по блоку и измените имя (идентификатор) на «AM Receiver», а описание — на «My first AM radio receiver»1. Затем добавьте в программу блок ввода QT GUI Entry, как показано на рис. 4.1. (Помните, что вы можете найти новые блоки, нажав <Ctrl+F> или открыв окно поиска.) Рис. 4.1. Добавляем блок QT GUI Entry Подобно блоку Variable, запись в блоке QT GUI Entry хранит значение, которое может использоваться во всей программе. Однако, в отличие от блока Variable, значение записей в блоке QT GUI Entry можно изменять в режиме реального времени во время работы программы. Обычно мы размещаем блоки Variable и QT GUI Entry в верхней части блок-схемы, но в этом нет необходимости. Блок-схема будет работать одинаково независимо от расположения блоков в рабочем пространстве. Дважды щелкните по новому блоку ввода QT GUI Entry, чтобы открыть окно его свойств. Измените идентификатор на freq, а значение по умолчанию на 880e3. Это показательная форма записи для числа 880 000 — распространенный в языках программирования способ отображения записи 880·103. Вы можете представить значение после буквы e как количество нулей, которые GNU Radio Companion добавит 1 На скриншотах далее название в блоке Options отсутствует. Создание AM-приемника https://liveinternet.club/ 59
в конец числа перед буквой1. Показательная запись особенно полезна для больших чисел, что значительно облегчает их чтение. Например, 600 000 000 на первый взгляд не так понятно, как 600e6. Запомните это представление, мы будем часто его использовать. Есть только одна проблема с тем, что вы ввели: если вы нажмете кнопку Apply (Применить), то увидите внизу сообщение об ошибке, сообщающее о том, что значение по умолчанию неверно (см. рис. 4.2). Рис. 4.2. Ошибка блока QT GUI Entry Проблема здесь связана с типами данных. Вы узнали, что программы в форме блок-схем можно рассматривать как поток чисел, поступающих из блоков ввода через блоки обработки в блоки вывода, но вы ничего не узнали о том, что это за числа. Подобно таким языкам программирования, как Python, Java или C++, в GNU Radio Companion существуют различные типы данных. Как можно видеть на экране (см. рис. 4.2), свойству Type блока ввода QT GUI Entry присвоено значение Integer, что означает, что оно может принимать положительные или отрицательные целые значения, например 17 или –1293. Однако показательная форма представления выдает значение с плавающей запятой, например 3,14159 или –8,9. Чтобы сделать тип записи в бло1 60 Глава 4 https://liveinternet.club/ Формат представления чисел в программировании с буквой e и показателем степени, подобный показанному, основывается на показательной функции с основанием 10. Часто его ошибочно называют «экспоненциальной формой записи» (очевидно, вводит в заблуждение использование буквы e): экспонента — лишь частный (хотя и практически важный) случай показательной функции, но в данном формате основание показательной функции не равно e.
ке QT GUI Entry совместимым со значением, которое мы ему задали, щелкните выпадающее меню в поле Type, содержащем Integer, и выберите Float. Затем нажмите Apply, и ошибка должна исчезнуть, как показано на рис. 4.3. Рис. 4.3. Корректировка блока QT GUI Entry Нажмите ОК и обратите внимание, что отображение блока в рабочей области изменилось в соответствии с введенным значением. Это полезно, потому что, несмотря на то что блок-схема радиосвязи становится все более сложной, можно с первого взгляда многое проконтролировать в ее работе. Затем следует добавить второй блок QT GUI Entry с другим идентификатором и значением по умолчанию. Однако вместо того, чтобы добавлять его из списка, как раньше, можно просто дублировать первый, скопировав нажатием <Ctrl+C> или выбрав в меню Edit > Copy (Редактировать > Копировать), а затем вставить дубль нажатием <Ctrl+V> или выбором Edit > Paste (Редактировать > Вставить). Обратите внимание, что новый блок отображается с идентификатором freq_0, как показано на рис. 4.41. 1 Обратите внимание на формат значений по умолчанию: в среде GNU Radio Companion числа, заданные в показательном формате, затем отображаются в упрощенной форме: так, 880e3 представлено как 880k, где k (от kilo) означает то же, что e3, т. е. умножение на 1000. Число 600e6 (из примера авторов ранее) в этом формате запишется как 600M (от Mega). Далее в интерфейсе GNU Radio также появятся обозначения типа 10m (от milli, т. е.10e–3 = 0,01) и тому подобные. См. по этому поводу также примечание на стр. 138. Создание AM-приемника https://liveinternet.club/ 61
Рис. 4.4. Копирование блока QT GUI Entry Дважды щелкните по новому блоку и задайте его идентификатору значение center_freq со значением по умолчанию 900e3. Поскольку вы скопировали блок, тип уже имеет значение Float. После внесения изменений рабочая область должна выглядеть, как показано на рис. 4.5. Рис. 4.5. Настроенные два блока QT GUI Entry Обратите внимание, что мы переместили новый экземпляр QT GUI Entry наверх, к другим блокам. Возможно, будет полезно размес­ тить все переменные и блоки QT GUI Entry вместе в верхней части блок-схемы. Добавление источника радиоданных Далее мы добавим блок ввода радиоданных в программу. Сначала возьмем файловый блок ввода File Source и добавим его в рабочую область. Это позволит использовать данные из файла в качестве входных радиоданных, поэтому не потребуется физического SDR-оборудования. Файл содержит реальные необработанные радиоданные, которые предприимчивый поклонник SDR захватил из эфира и сохранил для последующего использования. Если бы мы создавали полностью работоспособный радиоприемник, следовало бы использовать другой входной блок вместо файлового. Такой альтернативный источник данных сможет взаимодействовать с SDR-оборудованием и предоставлять данные радиосвязи из эфира в режиме реального времени. Как и прежде, дважды щелкните по вновь размещенному блоку, чтобы настроить его свойства. В поле выбора файла щелкните по трем точкам, затем перейдите к расположению файлов проекта, которые вы загрузили ранее с сайта по адресу https://nostarch.com/practical-sdr. 62 Глава 4 https://liveinternet.club/
Выберите файл с именем am_broadcast_02_c900k_s400k.iq из папки ch_04. В нижней части окна свойств вы увидите предупреждение о том, что порт не подключен, но мы скоро это исправим, так что не беспокойтесь. На этом этапе окно свойств должно выглядеть примерно так, как показано на рис. 4.6. Нажмите кнопку ОК, чтобы вернуться в рабочую область. Рис. 4.6. Свойства блока File Source Сейчас самое время сохранить проект, поэтому нажмите <Ctrl+S> или выберите File > Save (Файл > Сохранить). Мы можем присвоить файлу любое допустимое для Linux имя, но давайте используем first_ am_rx.grc (rx — сокращение от receiver). Работая над блок-схемами, не забывайте сохранять их как можно чаще. Примечание С этого момента мы будем предполагать, что вы знае­ те, как искать блоки и добавлять их в дизайн. Мы также будем предполагать, что вы знаете, как вывести список свойств для блока и изменить соответствующие значения. Поэтому далее мы не будем подробно описывать каждый шаг этих действий. Обработка сигналов Следующие несколько блоков, которые мы добавим, будут работать совместно для обработки радиосигнала, поступающего из файлового блока File Source. Опять же, в этой главе мы не будем подробно остаСоздание AM-приемника https://liveinternet.club/ 63
навливаться на том, что делают эти блоки или как именно они работают; мы рассмотрим эти вопросы позже. На данный момент наша задача — создать рабочую программу. Сначала разместите в рабочей области блок ввода сигнала Signal Source. Мы будем использовать его для генерации бесконечно повторяющейся последовательности значений, представляющих собой синусоиду. В свойствах блока необходимо сделать кое-что другое: для свойства Frequency (час­то­та) мы не будем вводить просто число. Вмес­ то этого введите center_freq - freq, как показано на рис. 4.7. Рис. 4.7. Свойства блока Signal Source Поняли, что мы только что сделали? Вместо того чтобы вводить фиксированное число для свойства, всегда можно ввести переменную. И не просто переменную, а математическое выражение, включающее несколько переменных. На самом деле, как мы увидим позже, можно ввести практически любое допустимое выражение языка Python в качестве свойства блока, и оно будет работать. Это окажется очень полезным. В данном случае мы устанавливаем час­то­ту источника сигнала, используя два ранее созданных блока QT GUI Entry, вычитая значение выхода блока с идентификатором freq из значения выхода блока с идентификатором center_freq. Обратите внимание, что когда вы нажимаете кнопку ОК и возвращаетесь в режим просмотра рабочей области, вы видите не математическое выражение, которое только что ввели, а просто число, полученное в результате расчета (см. рис. 4.8). 64 Глава 4 https://liveinternet.club/
Рис. 4.8. Добавление блока Signal Source В рабочей области час­то­та источника сигнала указана как 20k, или 20 000. Это равно значению center_freq по умолчанию, равному 900e3 (900 000), минус значение час­то­ты по умолчанию, равное 880e3 (880 000). Затем разместите в рабочей области блок умножения Multiply и подключите его входы к двум вашим источникам (убедитесь, что вы выбрали правильный блок, так как в списке много блоков со словом «Multiply»). Помните, как соединять блоки? Просто щелкните по выходному порту первого блока (в данном случае по одному из источников), а затем по входному порту второго (в данном случае по блоку умножения). Щелчок в обратном порядке также работает. Но какие порты являются входными для умножения? Если вы внимательно посмотрите на текст выносок (помеченных синим на рисунке), то увидите, что на двух из них написано in0 и in1. Это они! Как правило, входные данные будут располагаться слева, а выходные — справа, но иногда блоки будут поворачиваться, и это будет уже не так. Когда вы закончите, блок-схема должна выглядеть, как показано на рис. 4.9. Когда вы добавляете и соединяете новые блоки, полезно время от времени менять расположение, чтобы привести блок-схему в порядок. Просто щелкните и перетащите блоки туда, куда вы хотите их поместить. При этом обратите внимание, что сделанные соединения являются «липкими» и будут следовать за блоками, куда бы вы их ни перетаскивали. Этот процесс приведения в порядок для работоспособности программы не требуется, но он может значительно облегчить чтение блок-схемы. Создание AM-приемника https://liveinternet.club/ 65
Рис. 4.9. Добавление и подключение блока Multiply Затем добавьте блок фильтра низких час­тот Low Pass Filter, установив час­то­ту среза (Cutoff Freq) на 5e3 и ширину переходной области (Transition Width) на 1e3, как показано на рис. 4.10. Остальные свойства оставьте, как есть. Рис. 4.10. Свойства блока Low Pass Filter 66 Глава 4 https://liveinternet.club/
Фильтры, подобные этому блоку, удаляют определенные час­то­ты из сигнала. Это чрезвычайно важная разновидность компонентов, которую мы подробно рассмотрим в главе 5. Подключите вход блока Low Pass Filter к выходу умножителя Multiply. Рабочая область теперь должна выглядеть похоже на рис. 4.11. Пока вот что происходит в программе: блок File Source вводит данные, которые затем обрабатываются с использованием трех других блоков (Signal Source, Multiply и Low Pass Filter). Как мы покажем в главе 6, эти три блока составляют тюнер AM-радиостанции. Именно они позволяют выделить отдельные радиоканалы во входных данных. Рис. 4.11. Добавление блока Low Pass Filter На этом этапе заголовок блока Low Pass Filter должен быть красным, в то время как заголовки других блоков — черными. Это происходит потому, что GNU Radio Companion активно проверяет блок-схему на наличие ошибок при ее построении, и заголовки всех блоков с недопустимыми условиями отображаются красным текстом. Недопустимым условием в данном случае является то, что выходной сигнал блока Low Pass Filter ни к чему не подключен. Другие часто встречающиеся недопустимые условия — отсутствие или недопустимые значения свойств либо несколько выходов, подключенных к одному и тому же входу. Теперь установите блок демодуляции AM Demod и поставьте для него значение час­то­ты канала Channel Rate в samp_rate, а уменьшение громкости звука Audio Decimation в 1, как показано на рис. 4.12. Создание AM-приемника https://liveinternet.club/ 67
Рис. 4.12. Свойства блока AM Demod Блок AM Demod демодулирует входящий радиосигнал, извлекая из него аудиосигнал, понятный человеку. Мы подробно рассмотрим его работу в главе 6. Подключите его вход к выходу Low Pass Filter, как показано на рис. 4.13. Рис. 4.13. Добавление блока AM Demod 68 Глава 4 https://liveinternet.club/
Если вы работаете на своем компьютере, обратите внимание, что входной порт блока AM Demod окрашен в синий цвет, а выходной — в оранжевый. Это важно: цвета обозначают тип данных, которые поступают в блок или выводятся из него. Оранжевые порты означают, что используются числа с плавающей запятой, в то время как синие порты означают комплексные числа. Сейчас определенно неподходящее время для изучения комплексных чисел, поэтому на данный момент просто имейте в виду, что соединения могут быть установлены только между портами одного цвета. Добавьте в рабочую область блок Rational Resampler и установите его свойство Interpolation на 32, а Decimation на 400, как показано на рис. 4.14. Рис. 4.14. Свойства блока Rational Resampler Блок Rational Resampler настроит час­то­ту повторной дискретизации аудиосигнала таким образом, чтобы звуковая карта могла воспроизводить его. Подключите его вход к выходу AM-демодуляции, как показано на рис. 4.15. Но не торопитесь! Соединение появится на экране в виде красной стрелки. Что-то не так, и пару абзацев назад была подсказка, что именно. Вы не можете подключать порты разных цветов. Если подумать еще раз с точки зрения языков программирования, это было бы похоже Создание AM-приемника https://liveinternet.club/ 69
на передачу строкового параметра функции, которая ожидает целое число. Чтобы устранить проблему, снова откройте свойства Rational Resampler и обратите внимание, что в настоящее время свойство Type имеет значение Complex->Complex (Complex Taps). Вместо этого выберите Float->Float (Real Taps), затем нажмите OK. Теперь вы должны увидеть, что порты блока Rational Resampler окрашены в оранжевый цвет, а соединение от AM Demod к Rational Resampler должно было измениться с красного на черный. Рис. 4.15. Добавление блока Rational Resampler Мы почти закончили с блок-схемой. Подумайте, чего может не хватать. У вас есть источник (даже два) и несколько блоков, которые обрабатывают данные, поступающие из этого источника. Но что вы собираетесь делать с обработанным потоком данных? Вам нужно направить его в блок вывода! Выход Чтобы вывести данные из программы, выберите блок аудиовывода (Audio Sink) и добавьте его в рабочую область. Этот блок будет воспроизводить данные через звуковую карту компьютера, чтобы можно бы­ло слышать транслируемые звуки. Дважды щелкните по блоку и выбери70 Глава 4 https://liveinternet.club/
те значение 32 ksps1 в выпадающем меню для час­то­ты дискретизации (Sample Rate). Затем подключите выход блока Rational Resampler к входу Audio Sink. Немного подкорректировав блок-схему, вы могли бы выбрать другую час­то­ту дискретизации на выходе, но большая часть компьютерного аудиооборудования поддерживает час­то­ту 32 ksps. Осталось сделать последнее: изменить час­то­ту дискретизации для программы. Вы заметили, что в большинстве блоков отображается час­то­та дискретизации 32k? Это связано с тем, что во всех блоках значение час­то­ты дискретизации по умолчанию равно значению samp_ rate. Если вы помните, в начале проекта присутствовал блок Variable. У него был параметр samp_rate со значением 32 000. Дважды щелкните по этому блоку и измените значение samp_rate на 400e3, затем посмот­ рите, что произойдет. Вы также можете увидеть результат на рис. 4.16. Изменение одного параметра в блоке Variable изменило его во всем проекте, так что теперь час­то­та дискретизации всех блоков составляет 400 000. Во всяком случае, всех, кроме выходного, где он задается отдельно. Запустите блок-схему, чтобы проверить, работает ли она. Как и в предыдущей главе, просто щелкните значок запуска на панели инструментов, который выглядит как кнопка воспроизведения. Если навести курсор на кнопку, появится надпись «Execute the flowgraph» (Выполнить программу). После запуска программы в окне консоли начнет прокручиваться текст. Затем, через несколько секунд, вы должны услышать музыку. Присутствуют небольшие помехи, которые вы, возможно, слышали на других AM-радиоприемниках, но есть четко различимые голоса. Музыка заиграет через несколько секунд, поскольку в исходном файле не так много данных и среда настроена на повторение. Если вы не слышите звука, попробуйте подстроить звуковоспроизведение на компьютере. Если у вас прерывистый звук и вы используете GNU Radio Compa­ nion на виртуальной машине, откройте окно свойств Audio Sink и измените имя устройства (Device Name) на sysdefault, как показано на рис. 4.17. Если вы не работаете на виртуальной машине, этого делать не рекомендуется. 1 Сокращение sps означает «отсчетов в секунду» (samples per second), соответственно, ksps означает «тысяч отсчетов в секунду» (Msps — «миллион отсчетов в секунду» и т. д.). Русскоязычного аналога для этого сокращения не имеется, потому здесь сохраняется англоязычное написание. Следует отметить, что «отсчеты» есть безразмерная величина (количество), поэтому вполне допустимо употреблять вместо «отсчетов в секунду» привычный герц. Авторы книги и создатели GNU Radio нередко прибегают к этому приему, но при этом физический смысл размывается, так что в дальнейшем для час­то­ты дискретизации мы будем стараться употреблять sps, сохранив герцы («колебания в секунду») для обычного аналогового колебания. Но следует помнить, что вполне правомерно непосредственно сравнивать герцы и sps (как это делается, например, при переходе от аналоговых величин к цифровым в контексте теоремы Котельникова, см. главу 11). Как вы заметите далее, в блок-схемах эти единицы употребляются вперемежку. Создание AM-приемника https://liveinternet.club/ 71
Рис. 4.16. Законченная блок-схема Во время работы программы появится всплывающее окно выполнения с двумя блоками QT GUI Entry, как показано на рис. 4.18. Как упоминалось ранее, мы можем изменять эти значения блока QT GUI Entry во время работы радиостанции, в то время как для изменения параметра обычного блока Variable придется остановить программу, изменить значение и запустить ее снова. В окне выполнения измените значение час­то­ты freq на 750 кГц (750 000), затем нажмите <Enter>. Через некоторое время мы услышим другой повторяющийся фрагмент звука. Это потому, что произошла настройка на другую радиостанцию! Можно также найти станции на час­то­тах 710 кГц, 750 кГц и 1000 кГц и несколько более слабых станций 950 кГц и 1090 кГц. Подумайте о том, с чем мы только что экспериментировали. Человек, создавший использованный здесь файл с исходными данными, не просто записал звук с AM-радиостанции — это довольно просто сделать. Он записал исходный радиосигнал с этой станции, из которого наша блок-схема извлекла слышимый звук. Более того, автор файла не просто записал радиосигнал, транслируемый по одному AM-каналу. Им записан сигнал по всему диапазону, так что вы можете настроиться на любой из каналов, когда захотите. Этот файл с данными в совокупности с блок-схемой дает нам первое представление об экстраординарных возможностях SDR: воз72 Глава 4 https://liveinternet.club/
можности собирать необработанные радиоданные и обрабатывать их в любое время по своему усмотрению. Рис. 4.17. Установки Audio Sink на виртуальной машине Рис. 4.18. Окно выполнения программы Итоги В этой главе мы создали простой AM-радиоприемник в среде GNU Radio Companion. Не вдаваясь пока в подробности, давайте рассмотрим конструкцию радиоприемника на общем уровне. Вот что делает созданная нами блок-схема AM-радиоприемника: 1) ввод предварительно записанных радиоданных в блок-схему; 2) настройка на определенный AM-радиоканал с одновременной фильтрацией других AM-радиоканалов; 3) демодуляция сигнала нужного канала; 4) выполнение волшебной операции, называемой повторной дискретизацией; Создание AM-приемника https://liveinternet.club/ 73
5) воспроизведение полученного звука с помощью звуковой карты вашего компьютера. Блоки, ответственные за выполнение каждой из этих пяти задач, выделены на рис. 4.19. 1. Блок File Source доставляет данные в блок-схему. 2. Блоки Signal Source, Multiply и Low Pass Filter работают совместно для настройки на сигнал определенной станции. 3. Сигнал демодулируется при прохождении блока AM Demod. 4. Сигнал подвергается повторной дискретизации в блоке Rational Resampler… 5. …и затем направляется на выход через блок Audio Sink. Рис. 4.19. Разбиение блок-схемы по задачам У вас, вероятно, есть несколько вопросов. Как работает фильтр? Что вообще означает повторная дискретизация? Как, скажите на милость, умножение радиосигнала на синусоиду может что-то изменить? Ответы на эти вопросы вы получите в следующих нескольких главах, отчасти для того, чтобы понять, как работает блок-схема AMра­диостанции, но еще больше для того, чтобы прояснить некоторые важные принципы радиосвязи. https://liveinternet.club/
ЧАСТЬ II ВНУТРИ ПРИЕМНИКА https://liveinternet.club/
5 ОСНОВЫ ОБРАБОТКИ СИГНАЛОВ Теперь, когда мы освоились с GNU Radio, стоит рассмотреть некоторые основы радио и теории сигналов, лежащие в основе AM-приемника, построенного в главе 4. Мы обсудим понятия час­то­ты и усиления, а затем посмотрим, как эти два понятия сочетаются в фильт­ рах: одном из наиболее часто используемых инструментов обработки сигналов. Как вы могли заметить, AM-приемник из предыдущей главы также содержал блок фильтров. По мере создания различных типов радиостанций с помощью GNU Radio вы обнаружите, что почти все они содержат по крайней мере один фильтр, поэтому важно понимать, как работает этот компонент. Частота Физики определяют час­то­ту периодического процесса как количество колебаний в единицу времени. Периодическим можно считать любой процесс, который повторяется снова и снова через некоторые (одинаковые) промежутки времени. Частота обычно измеряется в герцах (Гц), где 1 Гц равен одному колебанию в секунду. Примечательно, что в этом определении час­то­ты не указано, что именно колеблется: час­ то­та является свойством всех разновидностей физических явлений. В электронике, например, можно сопоставить час­то­ту со станциями на радиоприемнике, с техническими характеристиками беспровод­ 76 Глава 5 https://liveinternet.club/
ного маршрутизатора или мобильного телефона или, возможно, со скоростью работы процессора вашего компьютера, которая, вероятно, выражается в некотором количестве гигагерц (ГГц) или мегагерц (МГц). С точки зрения теории радио, нас больше всего интересуют час­то­ты радиоволн, но есть еще одно физическое явление, где час­то­та играет ключевую роль и с которым вы хорошо знакомы на интуитивном уровне: это звук. В этом разделе мы рассмотрим концепцию час­то­ты через призму интуитивно понятного восприятия звуковых колебаний. Имейте в виду, что многое из того, что здесь излагается, относится и к радиоволнам. Изучение звукового спектра Обычное человеческое ухо может воспринимать звуки примерно в диапазоне от 20 Гц до 20 кГц (в зависимости от возраста и количества посещенных концертов хард-рока). Мы называем этот диапазон час­ тот звуковым спектром. Частота звука показывает, сколько раз в секунду воздух вибрирует при появлении звука определенной высоты. Существуют колебания воздуха более высокой час­то­ты, чем 20 кГц, их называют ультразвуковыми. Ваша собака может слышать некоторые из этих час­тот, но вы — нет. Также существуют колебания воздуха более низкой час­то­ты, чем 20 Гц, их называют инфразвуковыми, и наше ухо точно так же их не воспринимает1. На рис. 5.1 представлен весь диапазон час­тот звукового спектра. Рис. 5.1. Частоты звукового спектра, включая слышимый диапазон Диапазон слышимых час­тот, лежащий между инфразвуком и ульт­ развуком, включает в себя широкий диапазон звуков. В диапазоне низких час­тот (басов) присутствуют низкочастотные звуки, похожие на низкий гул или жужжание. В диапазоне высоких час­тот присутствуют высокочастотные звуки, напоминающие писк или пронзительные крики. А между ними есть что-то среднее2. 1 2 Инфразвуковые колебания, сопутствующие природным явлениям, могут восприниматься организмами человека и животных; например, считается, что таким образом животные чувствуют приближение землетрясений, оползней или ураганов. Этот диапазон, неопределенно названный авторами «что-то среднее», включает в себя бóльшую часть звукового диапазона, используемого музыкальными инструментами. Обычно его считают по диапазону 88-клаОсновы обработки сигналов https://liveinternet.club/ 77
Генерирование звукового сигнала Мы начнем практическое изучение час­тот и звукового спектра с создания простого звукового сигнала. Для удобства мы можем использовать GNU Radio для работы со звуковыми час­то­та­ми точно так же, как с радиочас­то­та­ми. Программное обеспечение воспринимает аудиоданные просто как набор цифр и не имеет возможности узнать, что эти цифры получены не из радиоприемника. Поэтому давайте вернемся к GNU Radio Companion и представим на мгновение, что это на самом деле GNU Audio Companion. Начните новую блок-схему и поместите на нее блок источника сигнала Signal Source. Установите для нее тип выходного сигнала (Output Type) Float, час­то­ту (Frequency) на значение 500 и амплитуду (Amplitude) на 0,1. Этот блок будет генерировать поток чисел с плавающей запятой, который можно интерпретировать как простой аудиосигнал частотой 500 Гц. Любой аудиосигнал, будь то реальный сигнал, генерируемый выходным напряжением микрофона, или искусственный, подобный тому, который мы используем здесь, может быть представлен потоком чисел с плавающей запятой. Вот почему в этой главе мы будем использовать тип Float для звуковых сигналов, в отличие от комплексных чисел (тип Complex), который мы будем использовать в других разделах для радиосигналов. Добавьте блок аудиовывода Audio Sink и подключите его к источнику сигнала, чтобы вы могли слышать сигнал. Затем сохраните эту блок-схему как single_tone.grc. Когда вы закончите, у вас должно получиться что-то вроде схемы, показанной на рис. 5.2. При выполнении этой программы вы должны услышать одну продолжительную ноту. Это звук с частотой 500 Гц. Если посмотреть на шкалу частотного диапазона на рис. 5.1, то 500 Гц относится к средним час­то­там. Если прислушаться к звучанию звукового сигнала, то это не должно вызывать удивления: он не особенно низкий и не особенно высокий1. 1 78 Глава 5 https://liveinternet.club/ вишного фортепиано, нижняя часть которого относится к басам — от ноты «ля» субконтроктавы (27,5 Гц) до «си» малой октавы (246,94 Гц); остальное — к этому «среднему», вплоть до ноты «до» пятой октавы (4186 Гц). Человеческий голос может использовать лишь небольшую часть этой области: примерно от 80 Гц (мужской бас) до 1300 Гц (колоратурное сопрано). Однако звучание речи в определяющей степени обусловливается высшими гармониками (обертонами), поэтому для передачи голоса с надлежащим качеством (телефонный разговор) принят диапазон 300–3000 Гц. Еще большее значение обертоны имеют в музыке: чтобы уверенно отличать скрипку от флейты, необходима передача практически полного звукового диапазона; поэтому звуковые тракты обычно рассчитываются на всю область от 20 Гц до 16–20 кГц. 500 Гц близко к звучанию ноты «си» первой октавы.
Рис. 5.2. Блок-схема однотонного аудиосигнала Примечание Если вы ничего не слышите после запуска программы, попробуйте использовать наушники. Кроме того, если вы работаете на виртуальной машине, попробуйте установить для свойства Device Name блока аудиовывода значение sysdefault. Визуализация звукового сигнала Мы услышали, как звучит сигнал частотой 500 Гц, но как выглядит его форма? Чтобы выяснить это, добавьте блок QT GUI Time Sink в блок-схему, установите для него значение Float и подключите его к выходу блока источника сигнала Signal Source, как показано на рис. 5.3. Рис. 5.3. Блок-схема однотонного сигнала с блоком визуализации QT GUI Time Sink Обратите внимание, что GNU Radio Companion позволяет подключать один и тот же выходной сигнал к нескольким входам разных блоков. В этом случае выходной сигнал источника Signal Source поступает как в блок визуализации QT GUI Time Sink, так и в блок аудиовывода Audio Sink, чтобы обеспечить как звуковое, так и визуальное представОсновы обработки сигналов https://liveinternet.club/ 79
ление сигнала. Хорошей практикой является добавление к блок-схеме различных типов графиков (таких как блок QT GUI Time Sink), чтобы вы могли быть уверены, что получаете в каждой точке именно те сигналы, которые ожидаете. Когда мы снова запустим программу и услышим звуковой сигнал, появится окно с повторяющейся изогнутой формой, как показано на рис. 5.4. Так выглядит выходной сигнал нашего источника, развернутый во времени. Перед вами синусоида, постепенно изменяющаяся от –0,1 до +0,1, очень похожая на те, что мы обсуждали в главе 1. Любой чистый одночастотный сигнал имеет синусоидальную природу. Объяснение этому длинное и математическое. На данный момент нам придется принять на веру, что синусоидальные сигналы создают чистые тона. Рис. 5.4. Чистый тон на дисплее блока QT GUI Time Sink На графике можно видеть только около 0,03 секунды (30 миллисекунд) продолжительности сигнала, но, судя по тому, как он повторяется, нет оснований ожидать, что при отображении большего периода времени будет что-то другое. Чтобы рассмотреть сигнал поближе, можете увеличить его двумя способами. Вращая колесико прокрутки мыши вверх и вниз, вы будете увеличивать и уменьшать масштаб изображения по вертикали (возможно, вы помните, как делали это 80 Глава 5 https://liveinternet.club/
в первом проекте в главе 3). Также можно увеличить масштаб, щелк­ нув левой кнопкой мыши в любом месте экрана, и нарисовать прямоугольник, удерживая кнопку. После отпускания кнопки в окне отобра­зится содержимое нарисованного прямоугольника. Попробуйте прямо сейчас: увеличьте масштаб рисованием прямоугольника или вращением колесика, чтобы получить изображение, показанное на рис. 5.5. Рис. 5.5. Увеличение масштаба однотонного сигнала Чтобы снова уменьшить масштаб, просто нажмите правую кнопку мыши. На самом деле вы можете увеличивать изображение несколько раз, нарисовав рамку масштабирования, а затем нарисовав другую рамку масштабирования внутри первой. Нажатие правой кнопки мыши отменяет последнюю операцию масштабирования. Это вложенное масштабирование может быть полезно для сложных сигналов. Изменение частоты звукового сигнала Теперь мы попробуем изменить час­то­ту генерируемого сигнала, чтобы получить представление о том, как звучат различные области слышимого диапазона. Было бы удобно, если можно было бы настраивать час­то­ту звукового сигнала во время работы программы, чтобы ее не приходилось останавливать, редактировать блок-схему и перезапус­ Основы обработки сигналов https://liveinternet.club/ 81
кать при каждом изменении. В главе 4 мы использовали блок QT GUI Entry для обеспечения подобной функциональности, но на этот раз мы попробуем другой блок с более удобным пользовательским интерфейсом. Добавьте в блок-схему блок QT GUI Range, изменив идентификатор (ID) на freq, значение по умолчанию (Default Value) на 500, начальное значение (Start) на 100, конечное (Stop) на 32 000 и шаг изменения (Step) на 100. Этот блок позволит управлять значением freq графически с помощью ползунка. Дополнительные свойства (Start, Stop, Step) определяют диапазон и степень детализации ползунка. Затем в блоке Signal Source измените обозначение час­то­ты Frequency на freq. После внесения этих изменений наше рабочее пространство должно выглядеть так, как показано на рис. 5.6. Рис. 5.6. Установка частоты однотонного сигнала с помощью блока QT GUI Range Здесь блок Signal Source будет получать значение час­то­ты freq из блока QT GUI Range; его теперь можно изменять в режиме реального времени. Снова запустите блок-схему, и у вас появится единое окно, содержащее отображение сигнала во времени и ползунок для регулировки час­то­ты, как показано на рис. 5.7. Попробуйте изменять значение час­то­ты, перетаскивая ползунок влево и вправо. Звучание генерируемого сигнала должно изменяться соответствующим образом. При изменении значения час­то­ты может потребоваться увеличить или уменьшить масштаб изображения, чтобы лучше рассмотреть форму сигнала. Кроме того, имейте в виду, что и звуковая карта в компьютере, и ваши уши несовершенны, поэтому можно не услышать звуковой сигнал при очень низкой час­то­те или выше 10 000 Гц. 82 Глава 5 https://liveinternet.club/
Рис. 5.7. Окно выполнения с регулировкой частоты Имеет ли смысл поведение нашей программы? В зависимости от того, насколько тщательно следует подбирать час­то­ту, ответом может быть «приблизительно имеет». Если у вас очень дорогая звуковая карта и исключительно хороший слух, то поведение должно быть понятным до 16 000 Гц: с увеличением час­то­ты тон становится выше, а синусоида колеблется быстрее, имея больше взлетов и падений за один и тот же промежуток времени. Однако если вы продолжите повышать час­то­ту, произойдет нечто странное: синусоида начнет искажаться, а тон будет постепенно понижаться, по мере того как установленная час­то­та будет расти. Что здесь происходит? Одна из подсказок — посмотреть на час­то­ту дискретизации в блоках. Если помните, в главе 2 мы говорили, что час­то­та дискретизации должна быть достаточно высокой по сравнению с дискретизируемым сигналом. В данном случае все блоки блок-схемы дискретизируются с частотой 32 ksps, и самое интересное начинается, когда синусоида становится примерно вдвое меньше этого значения. Мы пока не будем проводить математические расчеты, но теперь у нас Основы обработки сигналов https://liveinternet.club/ 83
есть некоторые доказательства того, что час­то­та выборок по крайней мере в два раза бóльшая, чем час­то­та сигнала в блоках — это хорошая идея. В этот момент вы, возможно, думаете: «Ну и зачем все это?» Мы издали несколько раздражающих писков и жужжаний и рассмотрели несколько волнистых линий. Какое отношение это имеет к радиоприемникам? Как вы скоро увидите, довольно большое. Частота сигнала — важнейшее свойство, которое мы можем использовать для идентификации, характеристики, выделения и обработки некоего сигнала. Не имеет значения, работаете ли вы со звуковыми сигналами, радиосигналами или с любым другим видом сигналов; у всех них есть час­то­ты, и все они могут обрабатываться в принципе одинаково. Чтобы лучше понять, как использовать час­то­ту сигнала для взаимодействия с ним, нам нужно поговорить об очень важном понятии из теории сигналов: добро пожаловать в частотную область. Визуализация сигналов в частотной области До сих пор мы строили графики аудиосигналов во временнóй области, наблюдая за тем, как изменяется их значение с течением времени. Точно так же можно построить графики аудиосигнала в частотной области. В этом новом, отличающемся от других типов визуализации по оси x откладывается час­то­та, а не время, и график показывает, какие час­то­ты присутствуют в данном сигнале и с какой интенсивностью. Изучение частотной области показывает, что большинство звуков, за исключением чистых тонов, состоят из целого ряда различных час­тот, которые воспроизводятся одновременно. То же самое верно и для радиосигналов. Если вдуматься, то большинство звуков, с которыми мы сталкиваемся в обычной жизни, совсем не похожи на созданные нами чистые тона. Обычные звуки слышатся принципиально по-разному — отсюда идея о низких звуках, таких как «бум-бум» сабвуфера, и высоких звуках, вплоть до таких, что вы их даже не слышите (вспомните собачий свисток). Кроме того, следует учесть, что некоторые естественные звуки одновременно и низкие, и высокие. Например, когда вы слушаете музыку, вы часто можете слышать низкочастотные партии басов одновременно со среднечастотным пением и более высокими звуками инструментов. Если этот грохочущий басовый звук, исходящий из сабвуфера, не является чистым тоном, как у нас в программе, то должно быть что-то другое, кроме определенной час­то­ты, что позволяет воспринимать его звучание низким. Как говорят, он должен обладать определенными частотными характеристиками, чтобы звучать низко. Если бы изучать звучание басов во временной области, то легко обнаруживается, что этот звук имеет более сложную форму волны, чем простая синусоида чистого тона. Анализ в частотной области по84 Глава 5 https://liveinternet.club/
кажет, что этот звук вместо одной час­то­ты содержит множество преимущественно низких час­тот. Именно эти многочисленные час­то­ты отличают грохочущий звук от чистого тона, а тот факт, что час­то­ты преимущественно низкие, и заставляет нас воспринимать грохот как низкочастотный звук. Для демонстрации звука в частотной области требуется математический инструмент, который может разделить звук на составляющие его час­то­ты. Этот математический инструмент называется преобразованием Фурье, и, что особенно важно, его можно применять не только к звукам, но и к любой разновидности сигналов, включая радиосигналы. Мы не настолько глубоко погрузились в суть дела, чтобы говорить о математике, лежащей в основе детища Жозефа Фурье, но вот общее объяснение: мы берем численное представление сигнала, которое, как вы помните, представляет собой просто некоторую величину, изменяющуюся со временем, и применяем к сигналу некую математическую операцию для разложения по всем час­то­там, которые в нем содержатся. Понимание того, как это работает, имеет решающее значение для понимания того, как SDR может улавливать весь объем радиоинформации, циркулирующей в эфире, и извлекать из него нужный сигнал. Строго говоря, преобразования Фурье предназначены для непрерывных, аналоговых сигналов; помните сигналы с плавными кривыми? Существует цифровой аналог, называемый дискретным преобразованием Фурье (ДПФ, DFT), который может выполнять те же действия для дискретизированных цифровых данных, используемых в мире SDR. Поскольку существует несколько способов вычисления с помощью ДПФ, мы далее укажем наиболее распространенный алгоритм, называемый быстрым преобразованием Фурье (БПФ, FFT). Просмотр данных радиосвязи реального мира с помощью БПФ — это обычное использование SDR-устройств. Системы SDR достигают этого, принимая непрерывный радиосигнал, накапливая его выборки, пропуская их через БПФ и определяя, какие час­то­ты присутствуют в этом сигнале и насколько интенсивна каждая час­то­та. Просмотр простых звуковых сигналов Давайте построим блок-схему для изучения частотной области. Начнем с нашего последнего проекта (single_tone.grc) и сохраним его как single_tone_fft.grc (нажмите Save as и укажите новое имя файла). Затем добавим выходной блок QT GUI Frequency Sink, подключив его к блоку источника сигнала Signal Source. Этот блок построит график выходного сигнала в частотной области, используя БПФ, чтобы показать, какие час­то­ты присутствуют в сигнале. Красный цвет линий подключения предупреждает о том, что типы данных выхода и входов не совпадают. После изменения параметров type в блоке QT GUI Frequency Sink на float и Spectrum Width (ширина спектра) на Half (половина) блок-схема должна выглядеть так, как показано на рис. 5.8. Основы обработки сигналов https://liveinternet.club/ 85
Рис. 5.8. Блок-схема однотонного сигнала с визуализацией частот Запустите программу, и вы увидите график частотной области в дополнение к графику времени и ползунку регулировки час­то­ты. Теперь мы просматриваем сигнал как во временной, так и в частотной области. Сначала на частотном графике вы увидите одиночный всплеск довольно близко к левой части, как показано на рис. 5.9. Если щелкнуть около скачка частоты на графике и растянуть рамку, чтобы увеличить масштаб, можно увидеть, что вершина скачка находится на частоте 0,5 кГц. Это показано на рис. 5.10. Частота 0,5 кГц равна частоте 500 Гц, установленной по умолчанию для источника сигнала, поэтому вполне логично, что мы наблюдаем всплеск именно вокруг этого значения. Это экспериментальное подтверждение того факта, что синусоиды создают чистые тона с одной частотой. На графике не видно никаких сигналов на частоте 1000 Гц или 100 Гц, как и при любых других значениях, кроме 500 Гц. Одна из сложностей заключается в том, что пик на графике частоты имеет конечную ширину. Можно сказать, что сигнал поступает не только на частоте 500 Гц ровно, но и вблизи нее в диапазоне от 400 до 600 Гц. Несмотря на то что график достигает максимума на частоте 500 Гц, сигнал не исчезает до тех пор, пока мы не выйдем за пределы этого диапазона. Но это происходит не потому, что в звуковом сигнале присутствует несколько частот. На самом деле это связано с несовершенством алгоритма БПФ, генерирующего частотный график. Это несложно доказать. 86 Глава 5 https://liveinternet.club/
Рис. 5.9. Простой звуковой сигнал с графиками времени и частоты Щелкните средней кнопкой мыши (колесиком прокрутки) в любом месте графика частотной области. Появится контекстное меню. Выберите Control Panel (Панель управления), чтобы открыть некоторые дополнительные параметры управления этим графиком. Нажмите на раскрывающееся меню в разделе FFT, и вы увидите цифры в диа­ пазоне от 32 до 32 768. Выберите 4096. Масштаб графика может автоматически уменьшиться, поэтому увеличьте масштаб еще раз, как показано на рис. 5.11. Основы обработки сигналов https://liveinternet.club/ 87
Рис. 5.10. Визуализация однотонного сигнала с увеличенным масштабом графика частотной области Увеличение параметра БПФ привело к уменьшению частотного диапазона; теперь он составляет примерно от 470 до 530 Гц. Таким образом, график час­то­ты стал более точным, но за счет этого вашему процессору требуется выполнять больше вычислений. Не стесняйтесь экспериментировать с различными величинами БПФ, чтобы посмот­ реть, что получится. 88 Глава 5 https://liveinternet.club/
Рис. 5.11. График частотной области с величиной дискретизации БПФ = 4096 Построение более сложных звуков Теперь давайте рассмотрим более сложный звук: аккорд, содержащий три разных тона. Мы увидим, чем этот звук отличается от одного чис­ того тона как во временной, так и в частотной области. Сохраните существующую блок-схему как cmajor.grc. Затем измените блок-схему, чтобы использовать три блока источников Signal Source вместо одного, каждый с разной частотой. Самый простой способ сделать это — разорвать все исходящие соединения от имеющегося блока источника сигнала. Затем его необходимо скопировать и вставить дважды. Установим час­то­ту Frequency в первом блоке Signal Source на 523,25, во втором — на 1318,5, в третьем — на 15681. Затем удалим блок ввода QT GUI Entry, поскольку он нам больше не нужен. У вас должно получиться что-то вроде рис. 5.12. 1 Соответственно, «до» 2-й октавы; «ми» 3-й октавы; «соль» 3-й октавы: трезвучие «до мажор» со сдвигом основного тона на октаву вниз (см. далее). Основы обработки сигналов https://liveinternet.club/ 89
Рис. 5.12. Блок-схема с тремя источниками сигнала Чтобы объединить эти три тона в один сигнал, нам нужно сложить их вместе. Найдите блок Add и добавьте его в блок-схему (будьте осторожны, чтобы не использовать блок Add Const по ошибке). По умолчанию он имеет только два входа. Чтобы добавить третий, измените свойство Num Inputs блока на 3. При этом измените тип ввода-вывода (IO Type) на float, как показано на рис. 5.13. Обратите внимание, что в таких блоках, как Add, которые для параметра Type имеют как значение float, так и значение complex, по умолчанию используется именно complex. Это указывает на то, что большую часть времени мы будем работать с комплексными числами. Быстрая нарезка лука тонкими ломтиками, с переходом к теории комплексных чисел, на данном этапе вызовет только слезы, поэтому мы будем продолжать постепенно очищать его от кожуры. Но имейте в виду, что комплексные числа широко распространены в GNU Radio и что мы их в конце концов разберем. Нажмите ОК, чтобы вернуться к просмотру рабочей области, и вы увидите, что у блока появился еще один вход. Теперь подключите каждый из выходов источников сигналов к одному из входов блока Add. Затем подключите выход Add ко всем трем выходным блокам: аудиовыходу Audio Sink, блокам визуализации QT GUI Time Sink и QT GUI Frequency Sink. Теперь все должно выглядеть так, как показано на рис. 5.14. 90 Глава 5 https://liveinternet.club/
Рис.5.13. Свойства блока Add Рис. 5.14. Блок-схема аккорда до мажор Запустите программу, и вы услышите более насыщенный звук, чем в случае одиночного тона. К вашему сведению, вы слышите аккорд Основы обработки сигналов https://liveinternet.club/ 91
до мажор. Мы просто сдвинули некоторые ноты на разные октавы, чтобы их было легче различать. На рис. 5.15 показано, как выглядит аккорд во временной и частотной областях. Рис. 5.15. Окно выполнения программы аккорда до мажор Обратите внимание, что на графике во временнóй области форма сигнала более сложная, чем простая синусоида, характерная для одиночного тона. Это подтверждает факт, что звуки, содержащие несколько час­тот, имеют более сложную форму сигнала. Обратите внимание, что на графике частотной области имеется три пика, а не один. Если вы увеличите изображение этих трех пиков, то увидите, что они происходят на трех ожидаемых значениях час­тот, установленных в блоках источников сигнала: 523,25 Гц, 1318,5 Гц и 1568 Гц. Вы также можете увидеть это на рис. 5.16. Если вы хотите проверить час­то­ту каждого из этих пиков, наведите курсор мыши на любую часть графика частотной области, при этом значения x и y появятся рядом с курсором. В случае с графиком час­тотной области значение горизонтальной оси x — это час­то­та, что даст вам хорошее приближение к точной час­то­те каждого пика. Зна92 Глава 5 https://liveinternet.club/
чение y, отображаемое над курсором, равно единице измерения дБ (сокращение от децибел). Мы обсудим, что означают децибелы, далее в этой главе. Рис. 5.16. Увеличенная визуализация до-мажорного аккорда в частотной области Увидеть три пика на графике час­тот может показаться несложным, поскольку три тона в аккорде до мажор изначально исходили из отдельных блоков Signal Source, но важно понимать, что здесь произошло. Когда три тональных сигнала поступили в блок суммирования Add, они объединились в единый сигнал (о чем свидетельствует результирующая сложная форма сигнала на графике во временнóй области). В процессе этого слияния отдельные час­то­ты трех тональных сигналов фактически стали неразличимы без помощи математики. В частности, чтобы создать график частотной области этого объединенного сигнала, блок QT GUI Frequency Sink должен выполнить БПФ, позволяющее идентифицировать отдельные час­то­ты, содержащиеся в сигнале. Воспроизведение звуков реального мира Звуки реального мира, такие как разговоры людей, лай собак, рев автомобильных двигателей или даже игра на музыкальных инструментах, состоят не только из трех час­тот нашего синтезированного аккорда до мажор. Чтобы доказать это, проанализируем запись человеческого голоса. Сохраните текущую блок-схему как voice_fft.grc. Позже в этой главе мы вернемся к проекту с аккордами до мажор, поэтому не забудьте, куда вы поместили файл cmajor.grc. Затем щелкните левой кнопкой мыши, обведите все блоки Signal Source вместе с блоком Add, чтобы их выделить, и нажмите Delete (Удалить). На их место добавьте блок источника из Wav-файла Wav File Source и подключите его к каждому из трех выходных блоков. Этот блок извлекает в программу аудио из существующего WAV-файла. Откройте свойства блока и перейдите к расположению файлов проекта, которые вы загрузили ранее с сайта https://nostarch.com/practical-sdr. Выберите в папке ch_05 файл с именем HumanEvents_s32k.wav. В результате блок-схема должна выглядеть так, как показано на рис. 5.17. Основы обработки сигналов https://liveinternet.club/ 93
Рис. 5.17. Блок-схема визуализации голосового сигнала После запуска этой новой программы мы услышим голос, повторяющийся снова и снова. Отображение временнóй и частотной областей окажется более загружено, чем для простого тона или аккорда до мажор. Графики различных областей будут сильно отличаться друг от друга; более-менее репрезентативное изображение этих графиков представлено на рис. 5.18. Рис. 5.18. Визуализация временнóй и частотной областей для человеческого голоса График во временнóй области показывает то, что во многом выглядит как случайные колебания, то есть что реальные звуки имеют гораздо более сложные формы колебаний, чем простые синусоиды. Но более важным здесь является график частотной области. Посмот­ 94 Глава 5 https://liveinternet.club/
рите, сколько пиков на этом графике, и обратите внимание, насколько сильно разбросаны час­то­ты в простой записи человеческого голоса. Вы можете видеть, что большая часть сигнала состоит из низких и средних час­тот, но есть и некоторая часть более высоких1. График также довольно сильно меняется в целом, смещаясь при этом вверх и вниз. Примечание Попробуйте записать несколько своих собственных звуков в формате WAV и посмотрите, как они выглядят на графиках. Вам необходимо настроить программное обеспечение для записи звука на час­то­ту дискретизации 32 ksps, чтобы полученный WAV-файл работал с этой блок-схемой. Возможно, не совсем понятно, как именно БПФ выполняет свою работу, но, надеемся, становится немного понятнее, в чем заключается эта работа и насколько она важна. С этого момента, рассуждая о сигналах, мы часто будем иметь в виду час­то­ты, присутствующие в этих сигналах. Чем больше вы работаете с частотной областью, тем больше у вас будет интуиции, необходимой для разработки и отладки блоксхем и программ GNU Radio. В этом разделе мы создали несколько блок-схем, позволяющих визуально анализировать некоторые сигналы. Но в конечном итоге захочется сделать больше, чем просто просматривать сигналы, не так ли? Хорошо иметь возможность с помощью SDR также их изменять. Существует множество способов обработки сигналов, но мы начнем с рассмотрения двух наиболее фундаментальных методов: усиления и фильтрации. Коэффициент усиления Применение усиления к сигналу означает просто увеличение его величины без изменения формы. Например, если у вас есть сигнал с максимальным уровнем 3 (каких-то единиц), мы бы сказали, что его амплитуда равна 3 (это работает с любым типом сигналов). Если теперь увеличить амплитуду сигнала в каждый момент времени так, что он теперь имеет амплитуду 6, то коэффициент усиления будет равен 2. Если амплитуда сигнала увеличилась бы с 3 до 9, коэффициент усиления составил бы 3. Математически это можно выразить следующим образом: Коэффициент усиления = 1 величина сигнала на выходе . величина сигнала на входе См. сноску 2 на стр. 77. Основы обработки сигналов https://liveinternet.club/ 95
Не беспокойтесь слишком сильно о том, как вычислить конкретную величину входного сигнала; это может быть несколько затруднительно для сложных сигналов, а нам действительно не нужны такие детали для создания радиосистем SDR. Просто учтите, что применение коэффициента усиления к сигналу будет увеличивать этот сигнал в каждый момент времени на один и тот же множитель. Когда речь заходит об аудиосигналах, применение усиления соответствует тому, чтобы сделать звук громче или тише. В случае радиосигналов применение усиления часто приводит к аналогичному эффекту, но вместо того, чтобы результат был ощутим вашими ушами, усиление сделает сигнал более заметным для радиоприемника. Применение коэффициента усиления к сигналу Чтобы воочию увидеть, как работает коэффициент усиления, мы воспользуемся GNU Radio Companion. Откройте новый проект и сохраните его как gain.grc. Затем добавьте источник сигнала, установив для него тип выходного сигнала float, а амплитуду равной 0,01. После этого добавьте блок Multiply Const, установив для типа (Type) входа-выхода float, а для свойства Constant значение gain_val. Затем добавьте блок Audio Sink. Наконец, вставьте две копии блока временнóй развертки QT GUI Time Sink и для обеих задайте их свойствам Type значение float, минимальным значениям Y Min = –0,1 и максимальным значениям Y Max = 0,1. После установки и конфигурации всех блоков следует их подключить. Начните с того, что выходной сигнал источника Signal Source соединяется со входом блока Multiply Const, а выходной сигнал Multiply Const подается на вход аудиовыхода Audio Sink. Затем подключите один из блоков QT GUI Time Sink к выходу источника сигнала, а другой — к выходу блока Multiply Const. Когда вы закончите, проект должен выглядеть так, как показано на рис. 5.19. Рис. 5.19. Частично готовая блок-схема демонстрации простого усиления 96 Глава 5 https://liveinternet.club/
Что здесь происходит? Блок Signal Source генерирует небольшую синусоиду частотой 1000 Гц. Она переходит в блок Multiply Const, где каждая точка сигнала будет умножена на произвольное значение параметра gain_val. Здесь мы применяем коэффициент усиления к сигналу и благодаря паре интерфейсов QT GUI Time Sink сможем просматривать сигнал как до, так и после процесса умножения (а также прослушивать усиленный вариант через динамики компьютера или наушники благодаря аудиовыходу Audio Sink). Аппаратные или программные средства, целью которых является обеспечение усиления сигнала, обычно называются усилителями. Однако имейте в виду, что многие другие неусилительные типы блоков могут иметь некоторый коэффициент усиления, связанный с другими формами обработки сигналов. Чтобы программа заработала, нужно указать значение коэффициента усиления gain_val, предпочтительно так, чтобы его можно было изменять во время выполнения. Мы снова будем использовать блок QT GUI Range для управления коэффициентом усиления с помощью ползунка. Установите для его ID значение gain_val, значение по умолчанию (Default Value) = 1, начальное значение (Start value) = 0,1, конечное значение (Stop value) = 10 и значение шага (Step) = 0,1. Остальные свойства можно оставить без изменений. Перед запуском измените имя Name первого блока QT GUI Time Sink (того, который подключен к блоку Signal Source) на Input, а имя второго на Output. В результате в верхней части каждого графика формы сигнала в окне выполнения будет напечатан информативный заголовок. Как правило, рекомендуется маркировать таким образом измерительные блоки, если вы собираетесь использовать более одного из них. Если бы все блоки QT GUI были безымянными, было бы трудно определить, какой сигнал отображается в данном окне. Когда вы закончите, у вас должно получиться что-то вроде показанного на рис. 5.20. Рис. 5.20. Законченная блок-схема демонстрации простого усиления Основы обработки сигналов https://liveinternet.club/ 97
После запуска программы вы должны услышать звуковой сигнал, а также увидеть две крошечные, но идентичные синусоиды, как показано на рис. 5.21. Рис. 5.21. Коэффициент усиления равен 1 Входной и выходной сигналы идентичны, поскольку значение gain_val по умолчанию равно 1, и применение коэффициента усиле- ния, равного 1, к сигналу не изменяет его. В конце концов, сигнал — это просто последовательность чисел, и умножение числа на 1 не изменяет это число. Теперь попробуйте изменить коэффициент усиления. Вы можете сделать это четырьмя способами: zz щелкните ползунок и перетащите его влево или вправо; zz введите новое число в текстовое поле справа от ползунка; zz zz нажмите на стрелки вверх или вниз рядом с этим текстовым полем; щелкните текстовое поле или ползунок, а затем нажимайте клавиши со стрелками вверх или вниз. Используйте один из этих способов, чтобы увеличить значение коэффициента усиления до 5. В результате вы должны увидеть, что синусоида на выходе увеличилась в 5 раз, как показано на рис. 5.22. Звуковой сигнал также должен стать громче. 98 Глава 5 https://liveinternet.club/
Рис. 5.22. Коэффициент усиления равен 5 Можете ли вы также увидеть, как уменьшается амплитуда выходного сигнала при перемещении ползунка влево? На самом деле можно даже уменьшить выходной сигнал по сравнению с входным, установив значение gain_val меньше 1. Например, попробуйте переместить ползунок влево до значения 0,3, чтобы увидеть уменьшение сигнала до 30 % от его первоначальной интенсивности, как показано на рис. 5.23. Применение коэффициента усиления, который уменьшает сигнал, называют ослаблением1. Если захотите приключений, замените источник сигнала на блок Wav File Source с файлом HumanEvents_s32k.wav из предыдущего раздела (или с тем, который вы записали самостоятельно) и поиграйте с настройками усиления. Несмотря на то что в звуках из файла нет постоянно повторяющейся формы сигнала, подобной простой синусоиде, пики сигнала на выходе все равно становятся выше или ниже при увеличении или уменьшении коэффициента усиления. Вы также услышите, что звук становится громче или тише при изменении коэффициента усиления. Однако следует сделать одно предупреждение: если вы установите слишком большое значение усиления, звук может стать прерывистым и искаженным, поскольку существуют ограничения на то, сигнал какой амплитуды может быть передан на звуковую карту без проблем. 1 Соответствующий англоязычный термин — attenuation; поэтому устройство или узел для контролируемого ослабления сигнала часто называют аттенюатором. Основы обработки сигналов https://liveinternet.club/ 99
Рис. 5.23. Ослабление сигнала с коэффициентом усиления 0,3 Прежде чем мы продолжим, учтите, что в последних примерах вы видели несколько различных математических блоков, обрабатывающих сигнал, и каждый из них работал немного по-разному. Когда мы создавали аккорд до мажор, мы использовали блок сложения Add, который может иметь переменное количество входов (в данном случае нам понадобилось три). Для усиления мы использовали блок умножения на константу Multiply Const, который может иметь только один вход. Можете ли вы понять, почему один блок допускает несколько входов, а другой — нет? В первом случае мы объединяли 3 разных сигнала (потока чисел) путем их сложения в каждый момент времени; мы могли бы с такой же легкостью сделать то же самое для 2 сигналов, или 5, или 20. Во втором случае мы были заинтересованы только в умножении одного сигнала (потока данных) на одно постоянное число, определенное как свойство блока. В этом процессе нет места для дополнительных входных данных; изменяется только один сигнал. Однако если вы посмотрите на доступную библиотеку блоков, то увидите, что в ней также есть блок умножения Multiply и блок добавления константы Add Const, по сути аналоги двух блоков, которые мы использовали. Блок умножения Multiply может иметь несколько входов, позволяет комбинировать различные сигналы путем перемножения потоков чисел в каждый момент времени. Между тем блок Add Const может иметь только один вход и используется для добавления одного постоянного числа к одному сигналу. 100 Глава 5 https://liveinternet.club/
Мыслим децибелами Коэффициент усиления чаще всего измеряется в децибелах, или сокращенно дБ. Децибелы — это логарифмическая величина, аналогично, например, шкале Рихтера, используемой для характеристики землетрясений. По шкале Рихтера любое увеличение на 1 балл по шкале означает увеличение магнитуды землетрясения в 10 раз: землетрясение магнитудой 8,0 в 10 раз сильнее, чем землетрясение магнитудой 7,0, землетрясение магнитудой 4,0 в 10 раз сильнее, чем землетрясение магнитудой 3,0, землетрясение магнитудой 6,7 в 10 раз сильнее, чем землетрясение магнитудой 5,7, и так далее. Аналогично, поскольку децибелы являются логарифмическими величинами, небольшое увеличение, выраженное в децибелах, может привести к очень значительному увеличению коэффициента усиления. Чтобы изучить, как работают децибелы, мы добавим в предыдущий проект несколько измерительных блоков, которые измеряют в единицах дБ, и посмотрим, как эти блоки реагируют на изменения усиления. В частности, мы добавим несколько частотных выходных блоков QT GUI Frequency Sink, поскольку в них оси y размечены в дБ. Но сначала сохраните проект как gain_db.grc, затем щелкните правой кнопкой мыши каждый из блоков QT GUI Time Sink и выберите Disable (Отключить). Обратите внимание, что при этом блоки и их соединения становятся серыми, как показано на рис. 5.24. Эта функциональность позволяет быстро вносить изменения в блок-схему, которые можно легко отменить, повторно включив блоки. Рис. 5.24. Отключение блоков QT GUI Time Sink Теперь добавьте блок QT GUI Frequency Sink, изменив его свойство Type на float, ширину спектра (Spectrum Width) на половину (Half) и количество входов (Inputs) на 2. После изменения количества вхо- дов в блоке добавится второй входной порт. Подключите два входных порта блока QT GUI Frequency Sink вместо отключенных QT GUI Time Основы обработки сигналов https://liveinternet.club/ 101
Sink, при этом in0 подключите к выходу Signal Source, а in1 — к выходу Multiply Const. При этом измените значение Stop в блоке GUI Range на 100. Когда вы закончите, должно получиться что-то вроде показанного на рис. 5.25. Рис. 5.25. Блок-схема усиления, модифицированная для измерения в децибелах Теперь вы сможете наблюдать эффект изменения коэффициента усиления, измеренный в децибелах. Если запустить программу, сначала будет виден только один всплеск по час­то­те, потому что входные и выходные сигналы будут накладываться друг на друга. Оба сигнала будут иметь пиковое значение около –55 дБ, как показано на рис. 5.26. (Помните, что вы можете навести курсор мыши на пиковое значение, чтобы увидеть результат измерения.) Мы ожидаем, что на данном этапе входные и выходные сигналы будут одинаковыми; опять же, умножение любых данных на 1 не должно их изменить. Теперь установите с помощью ползунка значение коэффициента усиления, равное 10, и посмотрите, что произойдет. Пиковое значение, обозначенное как «Data 1», которое соответствует выходному сигналу, должно увеличиться с –55 дБ примерно до –35 дБ. То есть увеличение коэффициента усиления до значения 10 приводит к увеличению выходного сигнала на 20 дБ, как показано на рис. 5.27. 102 Глава 5 https://liveinternet.club/
Рис. 5.26. Выход в децибелах при коэффициенте усиления 1 Рис. 5.27. Выход в децибелах при коэффициенте усиления 10 Основы обработки сигналов https://liveinternet.club/ 103
Как вы думаете, что произойдет, если вы измените коэффициент усиления на значение 100 или 0,1? Попробуйте! Вывод здесь заключается в том, что увеличение амплитуды сигнала в 10 раз приводит к изменению на 20 дБ по оси y частотного графика. Иными словами, увеличение выхода на 20 дБ означает, что вы увеличили коэффициент усиления исходного сигнала в 10 раз. Аналогично вычитание 20 дБ означает ослабление сигнала в 10 раз от его входного значения, как можно видеть, если изменить значение усиления до 0,1 (см. рис. 5.28). В этом случае уровень в децибелах снизится с –55 на входе до –75 на выходе1. Рис. 5.28. Выход в децибелах при коэффициенте усиления 0,1 Децибелы — удобный способ отслеживания усиления в системе, особенно когда к сигналу применяется несколько различных операций усиления. Рассмотрите цепочку на рис. 5.29. 1 Авторы избегают математики, однако эти соотношения проще понять, исходя из формулы, связывающей отношение амплитуд выхода и входа Yвых /Yвх (равное коэффициенту усиления Kус) со значением, выраженным в децибелах: K(дБ) = 20 · lg(Yвых /Yвх) = 20 · lg(Kус). При вычислениях результат логарифмирования обычно округляют до целого числа. Отсюда часто употребляемые соответствия между усилением в абсолютных значениях и в децибелах (которые полезно запомнить): усиление в 2 ≈ 1,4 раза соответствует 3 дБ, в 2 раза — 6 дБ, в 10 раз — 20 дБ, в 100 раз — 40 дБ; величина –3 дБ означает уменьшение уровня до 0,7 от исходного, –6 дБ — ослабление наполовину, –20 дБ — ослабление в 10 раз. Другие соотношения легко вывести из приведенных: например, усиление 63 дБ равно 40 дБ + 20 дБ + 3 дБ = 100 · 10 · 1,4 = 1400. Подробности см. в статье Википедии «Децибел» (https:// ru.wikipedia.org/wiki/Децибел). 104 Глава 5 https://liveinternet.club/
Вход К. ус. = 4 К. ус. = 500 К. ус. = 0.025 К. ус. = 0.16 Выход Рис. 5.29. Цепочка линейных усилителей Здесь сигнал между входом и выходом проходит через четыре различных линейных усилителя: у первого усиление равно 4, затем усиление, равное 500, потом затухание, равное 0,025, и, наконец, затухание, равное 0,16. Чтобы определить итоговый результат, мы должны перемножить эти значения. С помощью калькулятора можно убедиться, что эта путаница сводится к простому коэффициенту усиления, равному 8 (4 × 500 × 0,025 × 0,16 = 8). Теперь рассмотрим рис. 5.30, где та же последовательность операций усиления представлена в децибелах. Вход К. ус. = 12 дБ К. ус. = 54 дБ К. ус. = –32 дБ К. ус. = –16 дБ Выход Рис. 5.30. Цепочка усилителей в децибелах Когда коэффициенты усиления выражаются в децибелах, все, что нужно сделать, — это сложить их, чтобы определить суммарный эффект. Сложение намного проще, чем умножение. В данном случае суммирование коэффициента усиления по всей цепочке дает общее усиление в 18 дБ (12 + 54 – 32 – 16 = 18), что соответствует усилению в 8 раз, полученному ранее. Поскольку в мире радиосвязи большую часть времени коэффициент усиления будет измеряться в децибелах, полезно начать мыслить в этих терминах. В дальнейшем это будет важно при настройке аппаратного усиления программного радиоприемника, а также при желании добавить к SDR-системам аппаратные усилители. Усиление и децибелы также играют центральную роль в фильтрации сигналов, которое мы рассмотрим далее. Децибелы в реальных системах радиосвязи Мы установили, что увеличение коэффициента усиления в 10 раз соответствует увеличению на 20 дБ. Однако при работе с реальными системами радиосвязи, как программируемыми, так и обычными, усиление в 10 раз эквивалентно 10 дБ, а не 20 дБ. Ключом к этому несоответствию является различие между амп­ литудой и мощностью сигнала. Основы обработки сигналов https://liveinternet.club/ 105
Радиоинженеры обычно работают с мощностью и соответственно определяют децибелы: увеличение мощности в 10 раз соответствует усилению на +10 дБ. Однако амплитуда сигнала не то же самое, что мощность сигнала, и 10-кратное изменение амплитуды не соответствует 10-кратному изменению мощности. Не вдаваясь в физику, просто имейте в виду, что 10-кратное изменение амплитуды сигнала приводит к изменению мощности на 20 дБ. Если вы хотите разобраться в математике и физике явления, то стоит начать с факта, что мощность (энергия) пропорциональна напряжению в квадрате, но обсуждение этих вопросов выходит за рамки данной книги. Ключевой вывод заключается в следующем: при работе в GNU Radio вы чаще всего будете видеть показатель усиления в 20 дБ, связанный с 10-кратным усилением, но позже, когда вы будете работать с радиоаппаратурой, ожидайте увидеть показатель усиления 10 дБ, означающий увеличение мощности в 10 раз1. Фильтры Фильтр — это технология обработки сигнала, которая избирательно удаляет некоторые его части, оставляя другие в неприкосновенности. Представьте себе фильтр для воды. Вы пропускаете через него загрязненную воду, и фильтр задерживает (по крайней мере должен задерживать) большинство примесей, позволяя проходить чистой воде. На выходе фильтра находится желаемый объект: чистая вода. Радиосигналы в реальном мире во многом похожи на эту грязную воду. В идеале вы хотели бы поднять антенну в воздух, чтобы она принимала только тот сигнал, который вам нужен, но, к сожалению, дело обстоит почти ровно наоборот. Вы получите не только нужный сигнал, но и огромное количество других сигналов, а также шумы и помехи (которые мы отдельно рассмотрим в главе 8). Все это поступает в приемник одновременно. Фильтры помогают выделить только тот 1 В дальнейшем в этой книге «мощностные» децибелы будут играть роль даже большую, чем отношения уровней. Поэтому кратко поясним, что для величин, измеряемых в единицах, связанных с энергией сигналов (например, для мощностей; см., например, в гл. 8 о показателе сигнал/шум SNR, или в гл. 12 о характеристиках антенн), соответствующая формула выглядит как K(дБ) = 10 · lg(Eвых /Eвх) = 10 · lg(Kус). Подробности см. в приведенной в предыдущей сноске статье Википедии. Здесь укажем только, что в радиотехнике часто применяют измерение в энергетических децибелах относительно мощности 1 милливатт, что имеет специальное обозначение дБм (dBm). Например, в настройках беспроводного роутера можно встретить уровень принимаемого сигнала, равный –90 дБм, что означает 10–9 мВт (довольно высокий уровень, соответствующий хорошему качест­ ву сигнала). 106 Глава 5 https://liveinternet.club/
сигнал, который вам нужен, и при этом избавиться практически от всего остального. Вы подаете радиосигнал на фильтр, спроектированный таким образом, чтобы он отделял нужный сигнал от того, что его замусоривает (другие сигналы, шум, помехи и т. д.). Большинство используемых нами фильтров основаны на разделении час­тот. Ранее мы говорили о том, как сигналы могут быть разделены на составляющие их час­то­ты с помощью преобразования Фурье. С этой точки зрения любой полезный сигнал будет состоять из нескольких час­тот, некоторые из которых могут нам понадобиться, а другие окажутся лишними. Можно создать фильтр, гасящий нежелательные час­то­ты, сохраняя при этом нужные. Другой способ осмыслить это заключается в следующем: фильтр применяет к сигналу коэффициент усиления, который варьируется в зависимости от час­ то­ты. Для час­тот, которые вы хотите пропустить без изменений (как говорят, находящихся в полосе пропускания фильтра), коэффициент усиления равен 1. Для час­тот, от которых вы хотите избавиться (называемых полосой затухания, или полосой подавления), коэффициент усиления равен 0 — во всяком случае, в идеальном теоретическом случае. На практике фильтры не настолько совершенны, о чем мы поговорим далее в этой главе. Существует четыре основных типа частотных фильтров: фильтры низких час­тот, фильтры высоких час­тот, полосовые фильтры и фильт­ ры с подавлением час­тот. Они различаются в зависимости от того, какие час­то­ты они устраняют, а какие сохраняют. Мы рассмотрим каждый тип по очереди. Фильтры низких частот Фильтр низких час­тот пропускает низкочастотные составляющие входного сигнала в основном без изменений, но не пропускает большую часть высокочастотных составляющих. Рассмотрим график БПФ на рис. 5.31, где составляющие сигнала содержат как низкие, так и высокие час­то­ты. Рис. 5.31. БПФ сигнала, разделенного на низкие и высокие частоты Основы обработки сигналов https://liveinternet.club/ 107
Предположим, что в данном сигнале любые час­то­ты выше 2 кГц считаются высокими, а любые час­то­ты ниже 2 кГц — низкими, как показано на рис. 5.31. Обратите внимание, что в физике или математике нет ничего, что указывало бы, где именно проводить границу между низким и высоким значениями час­то­ты; это произвольное решение, полностью основанное на том, что мы, разработчики фильтров, намерены делать. В одном случае 2,5 кГц может быть слишком высокой частотой, но в другом это может быть именно та час­то­та, которая нам нужна. Разделительная линия между низкими час­то­та­ми, которые нам нужны, и высокими, которые нам не нужны, называется частотой среза. Цель фильтра низких час­тот состоит в том, чтобы максимально уменьшить составляющие сигнала выше час­то­ты среза (2 кГц), при этом как можно меньше воздействуя на составляющие ниже час­то­ты среза. В идеальном случае фильтр выдавал бы картинку, показанную на рис. 5.32. Рис. 5.32. БПФ сигнала после идеальной фильтрации низких частот В этом идеальном фильтре низких час­тот все час­то­ты ниже час­то­ ты среза совершенно не изменяются; они остаются такими же, как и раньше. В то же время все час­то­ты выше час­то­ты среза полностью удалены. Подумайте об этом с точки зрения звука. Вы слушаете музыку, но вас раздражает высокочастотный гул. Если вы преобразуете музыкальный сигнал с помощью БПФ, как это обычно делают при устранении проблем с качеством звука, можете увидеть что-то вроде графика, показанного на рис. 5.33. Обратите внимание на большой пик на графике час­тот около 14 кГц. Это раздражающее гудение, в то время как музыка в основном звучит в диапазоне от 150 Гц до 12 кГц. Пропускание сигнала через правильно сконструированный фильтр низких час­тот должно позволять устранить более высокие час­то­ты вместе с гулом, оставляя при этом низкие час­то­ты, относящиеся к музыке, практически незатронутыми. 108 Глава 5 https://liveinternet.club/
Полезный сигнал Нежелательное гудение Рис. 5.33. График БПФ звука с проблемой гудения Чтобы увидеть, как работает фильтр низких час­тот на практике, вернемся к графику аккорда до мажор, рассмотренному несколькими разделами ранее (cmajor.grc), и попробуем отфильтровать все ноты, кроме самой низкой. Откройте файл и сохраните его как cmajor_lpf.grc. Напомним, что три тона в аккорде до мажор имеют час­то­ты 523,25 Гц, 1318,5 Гц и 1568 Гц. Наша цель — добавить фильтр, который оставляет только тональный сигнал частотой 523,25 Гц, исключая при этом два верхних тона1. Начнем с разрыва соединений между выходом блока сложения Add и входами трех выходных блоков. Затем добавим блок фильтра низких час­тот Low Pass Filter и установим для него тип переменной FIR Type на Float -> Float (Decimating), час­то­ту среза Cutoff Freq — на cutoff, а ширину полосы перехода Transition Width — на transition_width (вскоре мы подробно рассмотрим эти два последних свойства). Затем подключите блок фильтра Low Pass Filter между блоком Add и каждым из трех выходных блоков. Теперь блок-схема состоит из источника входного сигнала, фильтра и блоков для прослушивания и просмотра выходного сигнала. Она должна выглядеть примерно так, как показано на рис. 5.34. 1 Из этой формулировки задачи понятно, зачем авторы разнесли ноты трезвучия по разным октавам (см. сноску на стр. 89): при такой разнице конструирование ФНЧ существенно облегчается. «Нормальное» трезвучие до мажор, относящееся к одной октаве, например к 3-й, содержало бы ноту «до» частотой 1046,5 Гц, что для построения реально эффективного ФНЧ чересчур близко к остальным нотам с час­то­та­ми 1318,5 Гц и 1568 Гц. См. для иллюстрации проблемы с фильтрацией самой высокой ноты аккорда далее (стр. 114–117). Основы обработки сигналов https://liveinternet.club/ 109
Рис. 5.34. Незаконченная блок-схема фильтра низких частот На этом этапе в блоке Low Pass Filter должен появиться красный текст, указывающий на то, что блок-схема еще не закончена. Необходимо присвоить значения переменным, используемым в блоке фильт­ ра. Для этого добавим блок QT GUI Entry с идентификатором cutoff, типом Float и значением по умолчанию 10e3. Затем добавим второй блок QT GUI Entry с идентификатором transition_width, типом Float и значением по умолчанию 1000. После этого красный текст исчезнет, и блок-схема примет вид, показанный на рис. 5.35. Запустив программу, вы обнаружите, что ничего не изменилось. Частотный график также должен показать, что все три тона по-прежнему присутствуют (см. рис. 5.36). Сигнал остается неизменным, поскольку мы установили начальное значение час­то­ты среза фильтра (переменная cutoff) равным 10 000 Гц. Напомним, что час­то­та среза — это час­то­та, на которой фильтрация вступает в силу. В данном случае час­то­та среза выше, чем все три час­то­ты, присутствующие в сигнале, поэтому все три тона были пропущены через фильтр. Чтобы выделить тон с самой низкой частотой, равной 523,25 Гц, нам нужно установить час­то­ту среза выше этого значения, но ниже, чем следующая более высокая час­то­та, равная 1318,5 Гц. Измените cutoff в окне выполнения программы на значение 600 и нажмите <Enter>. Когда вы это сделаете, звук и два крайних пика на графике выходного сигнала должны измениться, как показано на рис. 5.37. 110 Глава 5 https://liveinternet.club/
Рис. 5.35. Законченная блок-схема фильтра низких частот Рис. 5.36. Начальное состояние выхода сигнала фильтра низких частот Основы обработки сигналов https://liveinternet.club/ 111
Рис. 5.37. Выход фильтра низких частот при частоте среза 600 Гц Теперь вы должны слышать низкий звуковой сигнал практически в чистом виде. Если посмотреть на график выхода, то выход БПФ покажет, что пик низких час­тот остается неизменным, в то время как два других существенно снижены. По графику видно, что высокие час­то­ты не были устранены полностью. Однако позвольте напомнить, что ось y размечена в децибелах. Два высокочастотных пика примерно на 40 дБ ниже низкочастотного. Возвращаясь к обсуждению децибел, вспомним, что каждые 20 дБ представляют собой коэффициент усиления, равный 10, поэтому фильтр уменьшил нежелательные час­то­ты примерно на 10×10, или в 100 раз. Другими словами, мы уменьшили громкость двух верхних нот до менее чем 1 % от их первоначального значения. Остаточные следы этих более высоких час­тот уже не будут проблемой. Еще одним полезным показателем успешной работы фильтра является форма сигнала во временнóй области. Как вы можете видеть на рис. 5.37, это выглядит как практически чистая синусоида, а не как более сложная форма полного аккорда. Простая синусоидальная форма — именно то, чего можно было бы ожидать, если бы мы действительно отфильтровали все, кроме одного тона. Прежде чем продолжить, попробуйте изменить настройки фильт­ ра, чтобы он пропускал два низких тона и исключал самый высокий. Если у вас возникнут проблемы с настройкой, обратитесь за ответом к файлу по адресу ch_05/solutions/cmajor_lpf2.grc в файловом архиве книги. 112 Глава 5 https://liveinternet.club/
Фильтры высоких частот Фильтр высоких час­тот уменьшает час­то­ты ниже определенной границы пропускания (час­то­ты среза), в то время как час­то­ты выше этой границы остаются неизменными, что делает его противоположным фильтру низких час­тот. Чтобы понять, как это работает, мы попробуем отфильтровать все ноты в аккорде до мажор, кроме самой высокой. Заново сохраним блок-схему фильтра низких час­тот как cmajor_hpf. grc. Затем следует удалить блок Low Pass Filter и добавить на его место блок фильтра высоких час­тот High Pass Filter. Установим для фильтра тип переменной FIR Type на Float -> Float (Decimating), час­то­ту среза Cutoff Freq — на cutoff, а ширину полосы перехода Transition Width — на transition_width. Убедимся, что восстановлены соединения, которые были удалены вместе со старым блоком фильтра, в результате чего получится блок-схема, показанная на рис. 5.38. Рис. 5.38. Блок-схема фильтра высоких частот При первом запуске программы вы не сможете услышать ничего и увидите, что все три пика на частотном графике сильно уменьшились в размере, как показано на рис. 5.39. Все три тона были отфильтрованы, поскольку час­то­та среза фильт­ ра была возвращена к значению по умолчанию 10 000 Гц. Все, что находится выше этой час­то­ты, фильтр рассматривает как высокую час­ то­ту и пропускает ее. И наоборот, все, что ниже 10 000 Гц (включая все три тона в аккорде), считается низкой частотой, которую следует отфильтровать. Основы обработки сигналов https://liveinternet.club/ 113
Рис. 5.39. Фильтр высоких частот без настройки Тон, который мы хотим сохранить, имеет час­то­ту 1568 Гц, в то время как следующий по высоте тон имеет час­то­ту 1318,5 Гц. Попробуйте изменить час­то­ту среза на 1500, чуть ниже самой высокой ноты, и посмотрите, что получится. Теоретически это должно передавать самую высокую ноту, и только ее. Однако вы получите неоптимальный результат, показанный на рис. 5.40. Рис. 5.40. Фильтр верхних частот заработал лучше, но недостаточно 114 Глава 5 https://liveinternet.club/
Судя по частотному графику, низкие ноты были немного уменьшены, но средние по-прежнему довольно велики. Если вы увеличите масштаб, как на рис. 5.41, и наведете курсор мыши на средний пик, то увидите, что его высота составляет около –44 дБ, что всего на 7 дБ ниже, чем на входе1. Рис. 5.41. Неудовлетворительно настроенный фильтр ВЧ в увеличенном масштабе Вы можете увидеть дополнительные доказательства неоптимальной фильтрации, посмотрев на форму сигнала во временнóй области и заметив, что синусоида пульсирует. Она не идеально правильная, как можно было бы ожидать от чистого звукового сигнала. В зависимости от вашего уровня музыкальных способностей вы также можете определить на слух, что звучат несколько нот. Вы можете поиграться со значением среза фильтра и немного улучшить фильтрацию, но чтобы действительно устранить средний тон, придется учесть другое свойство фильтра: ширину полосы перехода transition_width. Ранее мы говорили, что час­то­ты, которые мы хотим сохранить, называются полосой пропускания, в то время как час­то­ты, которые мы хотим исключить, называются полосой подавления. Мы также упоминали, что на практике фильтры далеки от теоретического идеала. На самом деле между полосой пропускания и полосой подавления существует третья область, называемая переходной (transition) по1 Из приведенной ранее формулы (см. сноску на стр. 104) следует, что при ослаблении в –7 дБ выходная величина составляет ≈0,45 от входной. Основы обработки сигналов https://liveinternet.club/ 115
лосой, где фильтр подавляет нежелательные час­то­ты лишь частично. Параметр transition_width в блоках фильтров GNU Radio Companion определяет ширину переходной полосы. Чем больше эта ширина, тем менее эффективным будет фильтр при снижении час­тот вблизи час­ то­ты среза. Для иллюстрации на рис. 5.42 схематично показан график усиления фильтра высокой час­то­ты. Усиление Полоса перехода Полоса пропускания Полоса подавления Частота среза Частота Рис. 5.42. Усиление фильтра ВЧ по частоте В полосе пропускания фильтра, показанного на рис. 5.42, коэффициент усиления равен 1, в то время как в полосе подавления коэффициент усиления близок к 0. В промежутке между ними, в полосе перехода, коэффициент усиления постепенно изменяется от 1 до 0. В этой переходной области происходит некоторая фильтрация, но она не является оптимальной и ухудшается по мере приближения к час­ то­те среза. Чем дальше от час­то­ты среза, тем лучше фильтрация. Возвращаясь к блок-схеме, отметим, что ширина полосы перехода transition_width по умолчанию, установленная одним из блоков QT GUI Entry, составляет 1000 Гц. Это означает, что когда мы устанавливаем час­то­ту среза на 1500 Гц, полоса перехода простирается от 1500 Гц до 500 Гц. Самая низкая нота аккорда (523,25 Гц) едва попадает в переходную полосу и фильтруется очень эффективно. Однако средняя нота (1318,5 Гц) находится вблизи верхней границы переходной полосы, как показано на рис. 5.43. Поскольку час­то­та средней ноты аккорда приходится на переходную полосу, причем находится гораздо ближе к полосе пропускания, чем к полосе подавления, ее фильтрация особенно плоха. Лучший способ исправить это — оставить час­то­ту среза на уровне 1500 Гц и уменьшить размер полосы перехода, уменьшив значение переменной transition_width. Подойдет любое число, которое создает полосу перехода, исключающую 1318,5 Гц. Например, при ширине полосы перехода 100 Гц получается выходной сигнал, показанный на рис. 5.44. 116 Глава 5 https://liveinternet.club/
Усиление Полоса перехода Частичная фильтрация Частота Частота среза Рис. 5.43. Переходная полоса фильтра ВЧ Рис. 5.44. Правильно настроенный фильтр высокой частоты Теперь средний пик на частотном графике снижен примерно на 60 дБ, или в 1000 раз. Намного лучше! Вы должны услышать более четкий и простой звуковой сигнал и увидеть четкую синусоиду на графике временнóй области. У вас может возникнуть соблазн выбрать чрезвычайно малое значение ширины полосы перехода (скажем, 0,000001 Гц), чтобы создать почти идеальный фильтр. Однако в силу особенностей алгоритмов цифровой обработки сигналов чем уже ширина перехода, тем больше работы требуется компьютеру для реализации фильтра. Ширина перехода, равная, по сути, 0, потребовала бы слишком больших вы- Основы обработки сигналов https://liveinternet.club/ 117
числительных мощностей для реализации1. В общем, делать ширину полосы перехода намного меньше необходимого — не очень хорошая идея. Полосовые фильтры Полосовой фильтр (band-pass filter) имеет две час­то­ты среза, между которыми находится полоса пропускания. Частоты, меньшие нижней час­то­ты среза и превышающие верхнюю час­то­ту среза, исключаются (с учетом переходных полос, как в любом таком случае). Давайте попробуем использовать один из таких фильтров для фильт­рации верхних и нижних нот аккорда до мажор, оставив среднюю ноту на месте. Сохраните текущую блок-схему как cmajor_bpf.grc, затем замените блок фильтра верхних час­тот High Pass Filter на полосовой фильтр Band Pass Filter. Когда вы попытаетесь настроить его свойства, вы заметите, что есть две час­то­ты среза Cutoff Freq. Установите для них значения low_cutoff и high_cutoff. Как и ранее, также измените FIR Type на Float -> Float (Decimating) и используйте параметр transition_width для свойства Transition Width. Вам еще нужно будет изменить свойство ID (идентификатор) первого блока QT GUI Entry с cutoff на low_cutoff, а его значение по умолчанию — на 200 (в Гц). Затем скопируйте этот блок QT GUI Entry и измените идентификатор нового блока на high_cutoff, а его значение по умолчанию на 2000. Наконец, измените значение по умолчанию на 100 для блока QT GUI Entry, связанного с параметром ширины полосы перехода transition_width. Если вы не уменьшите ширину полосы перехода сразу, то получите недопустимые начальные значения для блока полосового фильтра Band Pass Filter, и он не будет работать корректно даже после изменения значений в окне выполнения. Когда вы закончите, блок-схема должна выглядеть так, как показано на рис. 5.45. После запуска программы вы услышите все три звуковых тона и увидите все три сигнала на частотном графике БПФ. Если вспомнить об установленных значениях ограничений, это не должно удивлять. Полоса пропускания установлена в диапазоне от 200 до 2000 Гц, и все три тона находятся в пределах этого диапазона. Подумайте, как заставить блок-схему работать, отфильтровывая низкие и высокие тона, оставляя при этом средний тон неизменным. 1 Отметим, что в аппаратном аналоговом виде реализация фильтра со столь узкой переходной полосой (практически идеального фильтра с прямо­ угольной характеристикой) невозможна в принципе; и даже построение фильтра по предыдущему варианту с шириной перехода 100 Гц вызовет значительные трудности с многочисленными отклонениями от идеала во всем диапазоне час­тот. 118 Глава 5 https://liveinternet.club/
Рис. 5.45. Блок-схема полосового фильтра Существует много способов решить эту проблему; наше решение состоит в установке нижнего предела low_cutoff, равного 1000 Гц, верхнего предела high_cutoff, равного 1350 Гц, и ширины полосы перехода transition_width, равной 100 Гц. Эти цифры дают результат, показанный на рис. 5.46. Рис. 5.46. Правильно настроенный полосовой фильтр Основы обработки сигналов https://liveinternet.club/ 119
Обратите внимание, что средний пик на графике час­тот остался высоким, в то время как два других существенно уменьшились. На графике временной области мы снова видим простую синусоидальную форму сигнала чистого тона. Режекторные фильтры Режекторный фильтр (band-reject filter) также имеет две час­то­ты среза. Он обладает действием, обратным полосовому фильтру: подав­ ляет или ослабляет все час­то­ты между низкой и высокой час­то­та­ми среза, сохраняя при этом те час­то­ты, которые находятся ниже низкой и выше высокой час­тот срезов. В мире, не относящемся к GNU Radio, режекторный фильтр могут называть «фильтр-пробка» (notch filter). В качестве упражнения попробуйте использовать блок режекторного фильтра Band Reject Filter, чтобы исключить среднюю ноту аккорда до мажор, оставив верхнюю и нижнюю ноты нетронутыми. Блок режекторного фильтра обладает всеми теми же свойствами, что и обычный (пропускающий) полосовой фильтр. Если вы установите значение low_cutoff на 600 Гц, значение high_cutoff на 1500 Гц и оставите значение transition_width равным 100 Гц, вы должны добиться успеха. Вы также можете посмотреть готовое решение в файле ch_05/solutions/cmajor_brf.grc. Хотя в этой главе мы работали только со звуковыми сигналами, далее вы сможете увидеть, насколько полезными будут рассмотренные фильтры для пропускания нужных радиосигналов и отсеивания ненужных. Одной из самых важных частей радиоприемника является его тюнер, и фильтры выступают неотъемлемой частью узла настройки, как мы увидим в следующей главе. Создание эквалайзера Эквалайзер — система, которая регулирует усиление сигнала независимо в разных частотных диапазонах. Если вы когда-нибудь слышали разговор об «усилении низких» или «высоких час­тот» в какой-либо аудиосистеме, это значит, что речь шла об использовании эквалайзера. Эквалайзер обычной домашней аудиосистемы будет иметь несколько ползунков, которые регулируют громкость звука, причем каждый ползунок работает только в определенном диапазоне час­тот. Например, если установить крайний левый ползунок на максимум, а все остальные — на минимум, в музыке будут слышны только самые низкие (басовые) час­то­ты. Эквалайзер будет применять максимальное усиление к низким час­то­там и ослаблять до нуля любые час­то­ты выше установленного порогового значения. Как бы вы построили эквалайзер в GNU Radio Companion? Предположим, что у него должно быть три ползунка, управляющих низким, средним и высоким диапазонами некоторых звуковых сигналов. Да120 Глава 5 https://liveinternet.club/
лее предположим, что диапазон низких час­тот охватывает диапазон от 20 до 400 Гц, диапазон средних час­тот — от 400 до 2600 Гц, а диапазон высоких час­тот — от 2600 до 10 кГц. В качестве входного звука для эквалайзера можно либо использовать файл ch_05/HumanEvents_s32k. wav, описанный ранее в этой главе, либо записать свой собственный звук. Обратите внимание, что все блоки фильтров, которые мы использовали в этой главе ранее, имеют настройку коэффициента усиления. Эта настройка применяет усиление к выходному сигналу блоков фильтров. В других разделах данной главы мы оставили значение усиления равным 1, что означает неизмененный сигнал в полосе пропускания. Но если установить значение коэффициента усиления больше 1, сигнал в полосе пропускания будет увеличен, даже если сигнал в полосе подавления будет отфильтрован полностью. Имея это в виду, попробуйте использовать блоки фильтров для создания эквалайзера в GNU Radio Companion. Если у вас что-то не получается, взгляните на рис. 5.47 или на блок-схему из файла ch_05/ solutions/equalizer.grc в папке с примерами. Рис. 5.47. Блок-схема эквалайзера Ключом к созданию эквалайзера является применение того, что мы узнали о фильтрации и усилении, к способу объединения сигналов с помощью блока Add. Три фильтра разделяют входной сигнал на низкий, средний и высокий диапазоны. К каждому из этих диапазонов применяется свое усиление, позволяющее сделать его более или Основы обработки сигналов https://liveinternet.club/ 121
менее заметным. Наконец, три диапазона объединяются путем сложения в блоке Add и передаются в блок аудиовыхода Audio Sink для прослушивания, а также в блок QT GUI Frequency Sink для просмотра. Итоги В этой главе мы узнали больше о том, что такое час­то­та, и о том, как использовать БПФ для просмотра сигналов в частотной области. Мы научились применять коэффициент усиления к сигналу и способу его измерения в децибелах. Наконец, мы познакомились с той ролью, которую играют час­то­та и коэффициент усиления в фильтрах — технологиях обработки сигналов, удаляющих из сигнала некоторые час­то­ ты, сохраняя другие. Теперь, когда мы овладели этими приемами, у нас появились инструменты для того, чтобы начать, наконец, разбирать по частям AMприемник, созданный в главе 4, и это именно то, чем мы займемся дальше. Хотя AM-приемник сам по себе, возможно, и не покажется таким уж важным, вы найдете большинство его компонентов в любом другом радиоприемнике, который в конечном итоге можно воспроизвести в GNU Radio Companion. https://liveinternet.club/
6 ПРИНЦИП РАБОТЫ AM - ПРИЕМНИКА В этой главе мы более подробно рассмотрим AM-ра­ дио­приемник, созданный в главе 4. Благодаря сведениям об обработке сигналов из предыдущей главы мы теперь можем лучше понять, как он работает. Мы узнаем, как приемник может выделять определенный радиосигнал из входных данных, как этот сигнал демодулируется для извлечения аудиосигнала и как полученный аудиосигнал повторно оцифровывается, чтобы его можно было передать на звуковую карту для воспроизведения. Большая часть того, что мы будем делать в этой главе, будет состоять из добавления выходных блоков QT GUI sinks в различные точки блок-схемы, дабы получить представление о том, что происходит с радиоданными в данной точке. Чтобы начать, найдите файл проекта AM radio am_rx.grc, который мы создали в главе 4, и создайте копию с именем second_am_rx.grc. Это можно сделать, если открыть файл в GNU Radio Companion и сохранить его с новым именем, или создать копию файла в файловой системе Linux. На рис. 6.1 показано, как выглядела блок-схема в конце главы 4. В ходе этой главы мы начнем с начала, то есть с левой части блок-схемы, и проследим за сигналами, поступающими в блок аудио­ выхода Audio Sink справа. Начнем с рассмотрения входных данных. Принцип работы AM-приемника https://liveinternet.club/ 123
Рис. 6.1. Блок-схема AM-приемника из главы 4 Изучаем входные радиочастотные данные Входные радиочастотные данные могут многое рассказать о радиосигналах, если изучать их с помощью подходящих инструментов. Добавьте в блок-схему блок QT GUI Frequency Sink и подключите его к выходу блока источника File Source. Радиоданные поступают в блок-схему с помощью этого блока источника из файла, содержащего записанные радиочастотные данные. Блок QT GUI Frequency Sink позволяет просматривать час­то­ты, содержащиеся в этих радиоданных. Присвойте новому блоку имя RF Input. После этих действий блок-схема должна выглядеть так, как показано на рис. 6.2. Обратите внимание, что выходной порт (out) в блоке File Source выделен синим цветом, что указывает на комплексный тип данных, поступающих из исходного файла. Таким образом, в отличие от многих предыдущих упражнений, вам не нужно менять тип QT GUI Frequency Sink на Float. Это не просто частный случай; вообще, все радиоданные имеют сложную структуру. Почему так происходит и что это значит, мы узнаем в главе 11, а пока учтем, что в начале радиоданные будут иметь комплексный тип и, как правило, по мере приближения к выходу будут переходить в формат с плавающей запятой. 124 Глава 6 https://liveinternet.club/
Рис. 6.2. Блок-схема АМ-приемника с добавлением блока QT GUI Frequency Sink Запустите программу, чтобы применить к радиоданным быстрое преобразование Фурье. Вы увидите что-то вроде показанного на рис. 6.3. Рис. 6.3. БПФ входных радиоданных Принцип работы AM-приемника https://liveinternet.club/ 125
БПФ показывает, что в радиочастотных данных содержится множество час­тот, но если вы присмотритесь повнимательнее, то заметите, что несколько пиков выделяются на фоне остальных, размещаясь через подозрительно близкие частотные интервалы. Именно такую картинку мы и ожидали бы увидеть в необработанных AM-радио­дан­ ных: несколько станций передают одновременно на разных час­то­тах и создают резкие пики. Ожидается, что эти пики будут иметь час­то­ ту, кратную 10 кГц, что соответствует AM-радиостанциям, вещающим в вашей местности1. Номер каждой AM-станции, например 880 или 750, соответствует час­то­те вещания этой станции в килогерцах (880 кГц или 750 кГц). Равномерно расположенные пики имеют смысл, но горизонтальная ось графика размечена как-то странно: она показывает, что данные содержат час­то­ты в диапазоне от –200 кГц до 200 кГц. Даже если мы оставим в стороне вопрос о том, что же такое отрицательная час­то­ та, такой диапазон не имеет особого смысла. Возможно, вы помните, что значение час­то­ты freq по умолчанию в блок-схеме равно 880e3, что означает, что при выполнении программы вы настраиваетесь на час­то­ту 880 кГц. Почему мы не видим на графике подобные значения, например те же 880 кГц? Чтобы понять происходящее, мы должны сначала объяснить кое-­ что о радиоданных, получаемых из блока File Source. Их частотный диапазон не простирается от 0 Гц, как можно было бы ожидать. Диапазон гораздо более ограничен: файл содержит данные только для диапазона от 700 кГц до 1100 кГц. Разметка горизонтальной оси может стать более понятной, если указать, что такой диапазон составляет 900 кГц ± 200 кГц, и если напомнить, что в нашей блок-схеме есть переменная center_freq, для которой было установлено значение 900e3. Исходное оборудование, с помощью которого были получены данные, может принимать их только в ограниченном диапазоне час­тот, а не на всех час­то­тах, начиная с 0 Гц. Диапазон час­тот, в котором радиоприемник может получать данные, называется его входной полосой пропускания. В данном случае приемник имел входную полосу пропускания 400 кГц. При первоначальном захвате этих радиочастотных данных входная полоса пропускания была сосредоточена вокруг центральной час­то­ты 900 кГц, что привело к захвату данных в диапазоне от 700 кГц до 1100 кГц. Мы установили для параметра center_freq значение 900e3, чтобы привести блок-схему в соответствие с условиями, существовавшими при получении данных. 1 Следует заметить, что в настоящее время большинство бывших АМ-вещателей в диапазоне средних волн (300 кГц – 3 МГц) прекратили его или полностью ушли с AM-диапазонов. Может так случиться, что в вашей местности вы не поймаете ни одной АМ-станции (кроме, возможно, малоинтересных служебных переговоров каких-то служб). Поэтому для модельных экспериментов, подобных описываемому, предпочтительно использовать предлагаемые авторами примеры записи эфира, не теряя времени на поиск реально работающих станций. 126 Глава 6 https://liveinternet.club/
Возвращаясь к нашему графику БПФ, обратим внимание, что показанный на нем диапазон час­тот от –200 кГц до 200 кГц соответствует указанной входной полосе час­тот шириной 400 кГц. Однако центральная час­то­та здесь указана как 0 Гц, а не 900 кГц. Это несоответствие связано с форматом оцифрованных радиоданных. Хотя может показаться, что центральная час­то­та принимаемых радиосигналов должна каким-то образом включаться в исходные данные, на самом деле в файле эти сведения отсутствуют. Для правильного отображения частотного графика нужно указать привязку для блока QT GUI Frequency Sink, чтобы он знал величину цент­ральной час­то­ты диапазона. Это можно сделать, изменив свойство Center Frequency (Hz) на 900e3 (900 кГц). Еще лучше установить это свойство на center_freq, чтобы блок автоматически подстраивался под изменения, которые могут быть внесены в это значение. В любом из этих случаев изменение приведет к перерисовке горизонтальной оси без какого-либо изменения вида самого графика. Внесите изменения и запустите программу повторно: вы увидите что-то вроде рис. 6.4. Рис. 6.4. График БПФ входных радиочастотных данных с откорректированной центральной частотой Теперь у нас есть точное представление исходных радиоданных относительно горизонтальной оси. Мы можем видеть час­то­ты в диапазоне от 700 кГц до 1100 кГц. Обратите внимание, что один из пиков приходится на час­то­ту 880 кГц. Это соответствует час­то­те радиостанции, которую вы в данный момент хотите прослушать, указанной значением freq. Кроме того, каждый из пиков на графике соответствует другой передаче, на которую можно настроиться. Принцип работы AM-приемника https://liveinternet.club/ 127
Внимательно ознакомьтесь с этим графиком, поскольку он чрезвычайно информативен и будет использоваться практически в каждом радиоприемнике, который вы когда-либо захотите спроектировать. На графике показано, сколько сигналов присутствует в диапазоне входной полосы и какие час­то­ты они занимают. Значение этого графика в любой заданной точке по горизонтальной оси x показывает, сколько радиочастотной энергии присутствует на этой час­то­те: более крупные всплески соответствуют более мощным сигналам. На графике также представлена полезная информация об уровнях шума и ширине полосы пропускания сигнала, но мы не будем это обсуждать до главы 8. Прежде всего благодаря графику БПФ мы не ограничены случайным вращением ручки настройки назад и вперед, чтобы найти нужную станцию. Вместо этого мы можем настроиться непосредственно на любой из видимых пиков. Настройтесь на какие-то другие максимумы прямо сейчас, изменяя значение час­то­ты freq. Далее мы рассмотрим, как работает подобный процесс настройки. Настройка Вы можете рассматривать настройку как фокусировку на одном конкретном сигнале, исключая при этом любые другие. Именно это происходит, когда вы используете AM-приемник. Вы вращаете ручку (или нажимаете цифровые кнопки), пока не попадете на канал определенной радиостанции. Затем радио воспроизводит звук этой станции, игнорируя при этом все другие каналы, которые могут быть доступны. Блок-схема AM-приемника реализует настройку в виде двухэтапного процесса. Во-первых, она сдвигает входные радиосигналы таким образом, чтобы нужный вам радиосигнал был сосредоточен на час­то­те 0 Гц в частотной области. Это достигается путем умножения входных данных на синусоиду определенной час­то­ты. Затем он отфильтровывает все, что не соответствует требуемому сигналу с нулевой центральной частотой. Для иллюстрации представьте данные, которые SDR-приемник получает в любой момент времени. График БПФ может выглядеть примерно так, как показано на рис. 6.5. Входные данные содержат три разных канала, каждый из которых представлен всплеском на графике. Допустим, мы хотим настроиться на средний всплеск, который мы будем называть целевым каналом. Сначала следует изменить час­то­ту входных радиоданных таким образом, чтобы целевой сигнал был сосредоточен в районе 0 Гц, как показано на рис. 6.6. Обратите внимание, что форма графика не изменилась. Это просто смещение по оси x, так чтобы пик целевого сигнала находился точно на час­то­те 0 Гц. После этого изменения отфильтруйте все, кроме целевого сигнала с нулевой частотой в центре, как показано на рис. 6.7. Это и есть наш настроенный сигнал! Все остальное удалено. 128 Глава 6 https://liveinternet.club/
Рис. 6.5. Схематичное представление входных радиоданных Рис. 6.6. Смещение радиоданных Рис. 6.7. Смещенные и отфильтрованные радиоданные Узел настройки является неотъемлемой частью практически любого радиоприемника, поэтому крайне важно, чтобы у вас было четкое представление о том, как он работает. В оставшейся части этого раздела мы проведем несколько экспериментов в GNU Radio Companion, чтобы вы могли на практике ознакомиться с процессом настройки. Мы по очереди рассмотрим каждый из двух этапов, сдвиг час­то­ты и фильтрацию, а затем соединим их вместе, чтобы увидеть, как происходит настройка на блок-схеме AM-приемника. Принцип работы AM-приемника https://liveinternet.club/ 129
Сдвиг частоты Начнем с первого шага в процессе настройки: сдвига час­то­ты. Как вы увидите в этом разделе, для изменения час­то­ты радиосигналов необходимо умножить их на синусоиду комплексного типа. Мы продемонстрируем, как это работает, с помощью простого эксперимента в GNU Radio Companion. Отложите пока свое AM-радио и создайте новый проект под названием freq_shift.grc. Примечание В GNU Radio Companion можно одновременно открывать несколько проектов на разных вкладках, поэтому нет необходимости закрывать AM-приемник перед созданием этого пробного проекта. В этом новом проекте добавьте файловый источник File Source и установите для его свойства File значение ch_06/rf_input_c0_s32k.iq. Этот файл, который можно разыскать среди папок, прилагаемых к нашей книге, содержит синтетические радиоданные, которые мы будем изменять в частотной области с помощью методов настройки. Затем добавьте блок Throttle и подключите его вход к выходу блока File Source. Чуть позже мы подробнее расскажем о блоке Throttle (вкратце, он не позволит вашему компьютеру работать слишком интенсивно). Затем добавьте частотный блок QT GUI Frequency Sink и подключите его вход к выходу блока Throttle. Таким образом вы сможете просматривать данные, поступающие из входного файла, прежде чем они пройдут какую-либо обработку. Наконец, добавьте необходимые настройки в блок Options, после чего блок-схема будет выглядеть примерно так, как показано на рис. 6.8. Рис. 6.8. Частичная блок-схема для сдвига частоты Запустив программу, вы увидите одиночный пик в частотной области, как показано на рис. 6.9. 130 Глава 6 https://liveinternet.club/
Рис. 6.9. Необработанные входные данные для преобразователя частоты Затем мы захотим умножить данные файла на синусоиду с переменной частотой. Вспомните, что мы уже создавали синусоиду с переменной частотой в блок-схеме AM-приемника, используя блоки Signal Source и QT GUI Entry для управления свойством час­то­ты сигнала freq. Мы сделаем то же самое и здесь. Установите источник сигнала Signal Source с частотой (Frequency), равной freq. Оставьте все остальные свойства в их значениях по умолчанию. Обратите внимание, что синусоида будет комплексного типа, а не типа с плавающей запятой, которые мы применяли ранее. Вам нужно будет определить значение freq, поэтому сделайте это с помощью записи в QT GUI Entry, установив для идентификатора ID значение freq и оставив значение по умолчанию (свойство Default Value) равным 0. Теперь, когда у нас есть синусоида переменной час­то­ты, нам нужно умножить ее на входные данные. Добавьте блок умножения Multiply, подключив один из входов к выходу блока Throttle, а другой к выходу Signal Source. Затем добавьте второй выходной блок QT GUI Frequency Sink, подключите его к выходу Multiply и присвойте ему имя Shifted. Это позволит увидеть результаты умножения. Наконец, измените свойство Name первого QT GUI Frequency Sink на Input. Законченная блок-схема должна выглядеть так, как показано на рис. 6.10. Давайте сделаем шаг назад и подумаем о том, что происходит в этой блок-схеме. У нас имеются некоторые радиочастотные данные, поступающие из файла, каждый отсчет которых умножается на отсчет синусоиды. Частота синусоиды по умолчанию равна 0 Гц (ее мы будем менять при выполнении). Чтобы просмотреть результаты этого действия, имеется пара блоков вывода частотных графиков, которые показывают радиочастотные данные до и после сдвига. Просмотрите результаты выполнения программы: должен получиться график, подобный рис. 6.11. Принцип работы AM-приемника https://liveinternet.club/ 131
Рис. 6.10. Законченная блок-схема для сдвига частоты Рис. 6.11. Начальный сдвиг 0 Гц Не слишком много изменений, правда? При умножении на 0 Гц радиочастотные данные остаются без изменений. Теперь попробуйте изменить значение час­то­ты на 1000 (1 кГц). Результат показан на рис. 6.12. Видите, что получилось? Если навести курсор мыши на пики на обоих графиках, вы увидите, что пик входного сигнала сосредоточен в районе 3,5 кГц, в то время как смещенный пик находится в районе 4,5 кГц. Не стесняйтесь попробовать подключить другие значения час­то­ты для синусоиды (они должны быть целыми числами в герцах, так как мы установили свойство Type блока QT GUI Entry как Integer). При этом график час­то­ты выходного сигнала будет смещаться на величину, равную час­то­те синусоиды. 132 Глава 6 https://liveinternet.club/
Рис. 6.12. Сдвиг на 1 кГц Это явление не является специфичным для конкретного сигнала, который мы имеем в данном случае; на самом деле это общий принцип. Можно взять любые комплексные радиочастотные данные, умно­жить их на комплексную синусоиду с частотой f и получить те же данные, сдвинутые по час­то­те на величину f. Мы не будем вдаваться в математические объяснения того, как это работает, но принцип остается верным независимо от используемых час­тот. Умножьте на комплексную синусоиду частотой 4 кГц, и час­то­та сдвинется на 4 кГц вправо. Умножьте на сигнал частотой 9341 Гц, и он сдвинется вправо на 9341 Гц. Умножьте на сигнал частотой –1 кГц, и он сдвинется влево на 1 кГц. Подождите, мы сказали –1 кГц? Именно так! Мы знаем, что идею отрицательных час­тот может быть трудно представить наглядно, но просим вас принять их существование на веру как математически обоснованную реальность и запомнить, что умножение радиочастотных данных на синусоиду с отрицательной частотой приводит к сдвигу влево всех имеющихся исходных час­тот. Именно так мы снизим час­то­ту максимума с 3500 Гц до 0 Гц: умножим на отрицательную час­то­ту –3,5 кГц. Установив значение –3500 (3,5 кГц) в поле freq, мы получим результат, показанный на рис. 6.13. Обратите внимание, что смещенный пик теперь сосредоточен в районе 0 Гц. Обобщая то, что мы только что проделали, можно сказать, что первым шагом настройки на нужную час­то­ту является умножение входных радиочастотных данных на чистую синусоиду, час­то­та которой равна час­то­те, на которую вы хотите настроиться, но имеет отрицательный знак. Хотите настроиться на сигнал частотой 5400 Гц? Используйте синусоиду с частотой –5400 Гц. Хотите настроить сигнал на час­то­ту –4 МГц? Используйте синусоиду с частотой +4 МГц. Повторим, что сейчас не следует слишком задумываться о том, что на самом деле Принцип работы AM-приемника https://liveinternet.club/ 133
представляют собой отрицательные час­то­ты, просто представьте это как чисто математическое действие. Рис. 6.13. Центрированный частотный график Фильтрация Вторым шагом в процессе настройки будет из полученных радиочас­ тотных данных со сдвигом по час­то­те отфильтровывание всего, кроме целевого сигнала. Это подводит нас к старому знакомому фильтру. Как мы обсуждали в главе 5, фильтры устраняют нежелательные час­ то­ты, пропуская те, которые вам нужны. Благодаря операции сдвига час­то­ты, которую мы только что обсуждали, теперь у нас есть нужные час­то­ты с центром в значении 0 Гц. Это должно быть удобно, правда? Теперь просто нужно выбрать фильтр, пропускающий час­то­ты, близкие к нулю, и устраняющий все остальные. Но здесь не совсем та же самая операция, что в наших предыдущих упражнениях с фильтрами. Теперь имеются отрицательные час­то­ты, некоторые из которых хотелось бы сохранить. Что с ними будет делать фильтр? Оказывается, фильтры, работающие с комплексными данными, подобными приведенным здесь, будут воздействовать на отрицательные час­то­ты так же, как и на положительные. Например, фильтр нижних час­тот будет симметрично пропускать час­то­ты в диапазоне от 0 Гц до час­то­ты среза, а также час­то­ты в диапазоне от 0 Гц до той же час­то­ты среза с отрицательным знаком. При этом он будет удалять час­то­ты, превышающие час­то­ту среза, и час­то­ты ниже отрицательной час­то­ты среза. Это именно то, что нам здесь нужно. После сдвига час­то­ты вы получаете пик с центром в 0 Гц, при этом небольшая часть полезного сигнала находится слева от нуля, а небольшая часть — спра134 Глава 6 https://liveinternet.club/
ва. Все, что нужно сделать, — это пропустить данные через фильтр нижних час­тот, выбрав правильную час­то­ту среза. Начните с блок-схемы, сдвигающей час­то­ту, и переименуйте ее в tuner.grc. Эта блок-схема должна будет содержать оба компонента тюнера — сдвиг час­то­ты и фильтрацию. Измените свойство File в блоке File Source на ch_06/tuner_test_c0_s1M.iq. Этот файл будет немного отличаться от предыдущего, он был записан с другой частотой дискретизации: 106 отсчетов в секунду (можете увидеть, что этот факт отмечен в самом имени файла как «s1M»). Чтобы учесть эту новую час­то­ту дискретизации, измените переменную с идентификатором samp_rate на значение 1e6. Затем добавьте блок фильтра Low Pass Filter, вход которого подключен к выходу блока умножения Multiply, и выходной блок QT GUI Time Sink, подключенный к выходу фильтра Low Pass Filter. Мы внедрили несколько тестовых шаблонов в данные входного файла, которые будут отображаться во временнóй области, так что этот новый выходной блок позволит проверить, правильно ли работает наш тюнер. Однако тестовые шаблоны будут относительно небольшими по амплитуде, поэтому, чтобы лучше их рассмотреть, мы настроим блок QT GUI Time Sink на автоматическую настройку оси y графика, изменив свойство Autoscale на Yes. Далее нам нужно задать свойства фильтра нижних час­тот Low Pass Filter. Поскольку еще неизвестно, какое значение использовать для час­то­ты среза, рекомендуется использовать запись в QT GUI Entry, чтобы можно было корректировать значение по ходу выполнения моделирования. Создайте запись в QT GUI Entry с идентификатором cutoff, типом Float и значением по умолчанию 100e3. Затем дважды щелкните фильтр нижних час­тот и установите для параметра Cutoff Freq значение cutoff. Также необходимо задать ширину переходной области фильтра (Transition width). Мы могли бы создать для этого отдельную запись в QT GUI Entry, но откроем маленький секрет: когда проводится лабораторная работа по SDR, где искусственные сигналы довольно четкие, не нужно быть таким уж осторожным с шириной полосы перехода. Как правило, можно начать с настройки на одну десятую от час­то­ты среза и менять этот параметр только в случае возникновения проб­ лем. Как правило, одна десятая часть час­то­ты среза обеспечивает хорошую фильтрацию без перегрузки процессора. Таким образом, установите для свойства Transition Width значение cutoff/10, как показано на рис. 6.14. Ввод этого простого выражения может показаться мелочью, но такой прием означает, что вы можете изменить поведение фильтра с помощью одной операции (обновив значение одного параметра cutoff), вместо того чтобы корректировать как значение параметра cutoff, так и ширину полосы перехода Transition width каждый раз, Принцип работы AM-приемника https://liveinternet.club/ 135
когда захотите попробовать что-то новое. Как мы подробнее обсудим в главе 7, разработка блок-схем с использованием выражений такого типа значительно упрощает их использование. Рис. 6.14. Свойства блока фильтра Low Pass Filter Наконец, давайте на минутку вернемся к части блок-схемы, связанной со сдвигом час­то­ты. Сейчас час­то­та синусоиды задается непосредственно значением freq, которое сдвигает радиочастотные данные влево (при отрицательных значениях freq) или вправо (при положительных значениях freq). Однако вместо того, чтобы указывать величину, на которую мы хотим сместить радиочастотные данные, было бы более интуитивно понятно, если бы мы могли просто указать час­то­ту, на которую хотим настроиться, а затем сместить центр на эту час­то­ту. По сути, это противоположно тому, что мы делаем сейчас. Чтобы сделать таким образом, сначала ID блока QT GUI Entry измените с freq на tune_freq, а затем установите его тип как Float. (Сейчас вы будете использовать большие числа для настройки и увидите, что сокращенные обозначения для таких чисел с плавающей запятой значительно упрощают ввод.) Затем измените свойство Frequency блока Signal Source на ‑1*tune_freq. Таким образом, ввод значения для tune_freq приведет к центрированию данных на этой час­то­те. Когда вы закончите, блок-схема будет выглядеть так, как показано на рис. 6.15. 136 Глава 6 https://liveinternet.club/
Рис. 6.15. Блок-схема тюнера После запуска вы увидите, что новый входной файл содержит три пика, каждый из которых имеет разную ширину (рис. 6.16). Также можно видеть, что график во временнóй области показывает, что формы сигналов образуются просто случайным образом, без той постоянной формы, которую мы могли бы ожидать в тестовом шаблоне. Это имеет смысл, поскольку мы еще ни на что не настраивались. Рис. 6.16. Начальный график выходного сигнала тюнера Принцип работы AM-приемника https://liveinternet.club/ 137
Давайте попробуем настроить значения tune_freq и cutoff для настройки на каждый из трех разных сигналов. Первое, что нужно сделать, — получить некоторую информацию о входных радиочастотных данных. Наведя указатель мыши на каждый пик сигнала, можно увидеть, что три пика на частотном графике имеют час­то­ты 230 кГц, 350 кГц и 435 кГц. Вы также можете использовать мышь, чтобы получить довольно точную оценку ширины каждого пика. Первый пик, по-видимому, имеет ширину около 20 кГц, в то время как два других — около 60 кГц. Сначала настроимся на самую низкую час­то­ту. В окне выполнения в поле tune_freq введите 230k. После нажатия клавиши <Enter> обратите внимание, что первый пик выходного сигнала теперь сосредоточен вокруг нуля, как показано на рис. 6.17. Если в области консоли GNU Radio Companion при нажатии клавиши <Enter> возникает сообщение об ошибке, убедитесь, что тип записи в блоке QT GUI Entry для переменной tune_freq установлен как Float. Примечание Это такая причуда интерфейса GNU Radio Companion, что свойства блоков используют показательную форму записи (230e3), в то время как значения, выводимые в графическом представлении блоков QT GUI и в их элементах управления во время выполнения, используют метрические приставки, такие как k, M, G и т. п. Вот почему мы предлагаем ввести в поле tune_freq значение 230k, а не 230e3. Рис. 6.17. Центровка первого пика 138 Глава 6 https://liveinternet.club/
На графике временнóй области вы должны увидеть сигнал тре­ угольной формы, но он выглядит не очень четким, поэтому вам также потребуется настроить час­то­ту среза. Как уже отмечалось, ширина первого пика, по-видимому, составляет 20 кГц, поэтому вы можете подумать, что 20 кГц — это приличное значение среза. Однако вспомните две вещи: пик сигнала сосредоточен на нуле, а комплексный фильтр нижних час­тот пропускает час­то­ты от ‑cutoff до +cutoff. Следовательно, в качестве час­то­ты среза лучше использовать 10 кГц. В этом случае фильтр будет пропускать все час­то­ты от –10 кГц до +10 кГц, в общей сложности 20 кГц. При очень четких сигналах не всегда катастрофично использовать фильтр шире, чем необходимо, поскольку в конечном итоге вы получили бы тот же результат, если бы использовали 20 кГц для час­то­ты среза, но важно понимать, откуда берутся эти цифры. Как только вы установите час­то­ту среза на 10k, треугольная форма волны должна значительно выровняться, как показано на рис. 6.18. Рис. 6.18. Настройка на первый пик Сигнал во временнóй области (см. верхний график) представляет собой комплексную треугольную волну, используемую в качестве простого тестового сигнала, чтобы показать, что тюнер работает правильно. Однако так мы видим только один период этой волны сигнала, и было бы лучше уменьшить масштаб по горизонтальной оси, чтобы увидеть больше. Для этого щелкните средней кнопкой мыши в любом месте графика временнóй области, вызвав контекстное меню с многочисленными опциями. Нажмите Number of Points (Количество тоПринцип работы AM-приемника https://liveinternet.club/ 139
чек): откроется диалоговое окно, в котором будет указано 1024 точки. Если изменить это значение на большее, на графике отобразится больше отсчетов, что приведет к существенному уменьшению масштаба по горизонтальной оси. Например, попробуйте удвоить число, введя 2048, и вы получите более широкое представление о сигнале во времени, как показано на рис. 6.19. Рис. 6.19. Растяжка по времени для первого тестового сигнала Теперь настройтесь на второй тестовый сигнал, изменив значение tune_freq на значение 350k. Форма сигнала во временнóй области из- менится на более крутую на подъеме и более медленную на спаде, чем у треугольной волны (рис. 6.20). Однако, как вы, вероятно, помните, второй и третий пики шире, чем первый, поэтому нужно будет обновить значение час­то­ты среза. Если изменить его на значение 30k (половина ширины пиков в 60k) и нажать <Enter>, форма сигнала станет более четкой, как показано на рис. 6.21. Эта форма сигнала с резким нарастанием и медленным спадом известна в электронике как пилообразная волна. Наконец, измените значение tune_freq на 435k, чтобы увидеть последний тестовый сигнал (рис. 6.22). 140 Глава 6 https://liveinternet.club/
Рис. 6.20. Настройка на второй сигнал с плохой фильтрацией Рис. 6.21. Настройка на второй сигнал с улучшенной фильтрацией Принцип работы AM-приемника https://liveinternet.club/ 141
Рис. 6.22. Настройка на третий тестовый сигнал Этот последний сигнал представляет собой комплексную прямо­ угольную волну. Не стесняйтесь поэкспериментировать со значениями час­то­ты настройки и час­то­ты среза, чтобы получить представление о том, на что они влияют. Учет реальных частот Когда вы работаете с реальными радиоданными в программе SDR, как в случае AM-приемника, вы должны иметь в виду две разновидности час­тот: те, которые соответствуют реальной физике, и те, которые видит GNU Radio. Это усложняет процесс настройки для реальных данных, в отличие от лабораторных упражнений по настройке, которые мы только что выполнили. Взгляните еще раз на графики входных сигналов на рис. 6.9 и 6.16. В обоих этих упражнениях входные файлы содержали графики час­ тот в диапазоне от отрицательных час­тот до нуля и далее до положительных час­тот. Несмотря на наши заверения в математической обоснованности отрицательных час­тот, SDR на самом деле не улавливают радиочастотные данные на отрицательных час­то­тах. Реальные радио­сигналы, с которыми вы столкнетесь в реальном мире, будут иметь положительные час­то­ты, которые, как правило, немного больше нуля. Мы видели это на графике час­тот входных радиоданных для полноценного AM-приемника (рис. 6.4). Когда мы там скорректировали горизонтальную ось графика, он показал, что данные начинаются с час­то­ты 700 кГц и доходят до 1100 кГц. В отличие от графиков 142 Глава 6 https://liveinternet.club/
с нулевым центром, этот график отражает то, что происходит в физическом мире. Значения час­тот, показанные на рис. 6.4, соответствуют фактическим физическим параметрам, имевшим место в момент записи файла. Например, сигнал, на который вы настраиваетесь, вводя 880e3 (или «880000.0», как он отображается в окне выполнения), на самом деле присутствовал на час­то­те 880 кГц, когда мы получили его с помощью SDR и записали в файл. Однако как только эти радиосигналы улавливаются аппаратурой SDR, обрабатываются и передаются на компьютер, их частотные характеристики изменяются. Независимо от того, на какие час­то­ты вы изначально настроили SDR, компьютер всегда будет видеть данные с нулевым центром. Вот почему частотный блок QT GUI Frequency Sink, подключенный к входным данным, изначально показывал график час­то­ты с центром около 0 Гц, как показано на рис. 6.3. Если захотеть, можно просто согласиться с GNU Radio Companion и рассматривать все данные как центрованные к нулю по час­то­те. Однако полезно иметь возможность работать с сигналами так, как если бы они занимали час­то­ты, соответствующие их реальной физике. Работа с сигналами в частотной области становится более интуитивно понятной, когда на ваших графиках отображаются эти сигналы на их реальных час­то­тах. Без этого вам пришлось бы постоянно держать в голове два набора значений при изучении частотных графиков и вводе значений настройки. Вот почему в блок-схеме AM-приемника есть значение center_freq. Это позволяет использовать лучшее из обоих представлений: час­то­ ты реального мира, которые имеют физический смысл, и час­то­ты с нулевым центром, которые имеют смысл для программ GNU Radio. Все входные и выходные блоки (элементы QT GUI) используют реальные час­то­ты. Блоки, связанные с настройкой (в данном случае только Signal Source), используют значение center_freq для обеспечения смещения, преобразуя значения реальных час­тот в значения час­тот с нулевым центром. Например, мы именно это делаем, устанавливая час­то­ту источника сигнала Signal Source с помощью выражения center_freq – freq. Если вы хотите настроиться на час­то­ту 880 кГц, значение этого выражения будет равно 900e3 - 880e3 = 20e3. Это дает чистый результат для сдвига в радиоприемнике данных на 20 кГц вправо, что позволяет получить желаемый сигнал на час­то­те около 900 кГц в реальных условиях или около 0 Гц в терминах GNU Radio. Примечание Если вы хотите увидеть, что видит блок-схема АМ-­ при­емника без этой двойной бухгалтерии, измените значение center_freq по умолчанию на 0, а значение freq по умолчанию на 20e3. Все будет работать так же, как и раньше, но все пользовательские входы и отображения будут отображаться в том же мире с нулевым цент­ ром, который видит GNU Radio. Принцип работы AM-приемника https://liveinternet.club/ 143
К идее одновременного использования разных значений час­то­ты (реальной час­то­ты и час­то­ты GNU Radio) может быть трудно привык­ нуть. Однако чем больше вы работаете с блок-схемами GNU Radio, тем привычнее это становится. Настройка реального AM-приемника Теперь мы готовы вернуться к блок-схеме AM-приемника, чтобы опробовать процесс настройки в реальном контексте. Мы добавим к блок-схеме два блока БПФ, чтобы можно было видеть результаты каждого этапа настройки. Добавьте первый блок QT GUI Frequency Sink с именем Shifted к выходу блока умножения Multiply, а второй с именем Filter Out — к выходу Low Pass Filter. У вас должно получиться что-то вроде рис. 6.23. Рис. 6.23. АМ-приемник с дополнительными выходными блоками Выполнение программы покажет, как работает каждый этап настройки. На рис. 6.24 показано окно выполнения программы. На графике входного сигнала RF Input показаны записанные в файле-источнике SDR-данные, с реальной частотой около 900 кГц. Обратите внимание на пик на час­то­те 880 кГц (чуть левее центра графика), на который мы хотим настроиться. На графике со смещением (Shifted) 144 Глава 6 https://liveinternet.club/
этот пик смещен к центру оси час­тот. Горизонтальная ось этого второго графика расположена в районе 0 Гц, поскольку мы не меняли свойство Center Frequency (Hz) графика. Как только вы пройдете этап настройки со сдвигом час­то­ты, имеет смысл начать рассматривать данные как центрованные к нулю. Наконец-то мы на одной волне со своим программным обеспечением! Рис. 6.24. Графики частот AM-радиотюнера Итак, график выхода фильтра (Filter Out) показывает результаты фильтрации нижних час­тот для центрированных радиочастотных данных. Вы можете видеть пик и диапазон 5 кГц с обеих сторон (помните час­то­ту среза?), но все остальные радиочастотные данные отсутствуют, в том числе все остальные пики сигнала, а также час­то­ты между ними. Сохранить другие пики сигнала неотфильтрованными будет равносильно тому, как слушать разговор многих людей одновременно. Мы хотим, чтобы радиоприемник прослушивал только один голос. Принцип работы AM-приемника https://liveinternet.club/ 145
Как вы увидите в главе 8, радиочастотная энергия между этими пиками сигнала — просто шум. Его мы тоже не хотим принимать. Попробуйте настроиться на несколько других пиков сигналов, которые можно увидеть на входном графике RF Input, и посмотрите, как работает тюнер. Затем поздравьте себя с тем, что вы овладели искусством настройки, одним из самых важных понятий в области радиосвязи. Демодуляция После настройки AM-приемника на определенный сигнал следующим шагом будет демодуляция сигнала. Напомним, что мы обсуждали амплитудную модуляцию и демодуляцию в главе 1. В частности, мы рассмотрели простой пример, в котором более высокочастотная несущая волна модулировалась более низкочастотным синусоидальным сигналом. Это выглядело примерно так, как показано на рис. 6.25. Рис. 6.25. АМ-модуляция На этом графике временнóй области мы можем видеть, что форма сигнала колеблется вверх и вниз через равные промежутки времени в зависимости от час­то­ты несущей волны. Но вместо того чтобы каждый пик имел одинаковую высоту, высота меняется от пика к пику, повторяя форму низкочастотной синусоиды. Это результат амплитудной модуляции: амплитуда (высота) несущей волны изменяется в зависимости от текущего уровня сигнала, который мы хотим передать. Возвращаясь к блок-схеме, отметим, что как только данные будут получены с помощью фильтра нижних час­тот, вы получите один AMрадиосигнал. Все остальные сигналы и шумы будут отфильтрованы. Ваш AM-сигнал состоит из несущей определенной постоянной час­то­ ты, которая была промодулирована таким же образом, как в простом 146 Глава 6 https://liveinternet.club/
примере на рис. 6.25. Однако вместо того, чтобы изменять амплитуду несущей волны в соответствии с простой синусоидой, на несущую был наложен звуковой сигнал более сложной формы, генерируемый микрофоном, в который кто-то говорит. Для демодуляции этого сигнала аппаратным способом потребовалась бы довольно сложная конструкция из компонентов с пугающими названиями вроде «детектора огибающей» или «перемножающего демодулятора». К счастью, в GNU Radio есть простой блок AM Demod, который позаботится обо всем этом за вас. Этот блок принимает сигнал с АМ-модуляцией (который у вас есть) и выдает аудиосигнал, содержащийся во входном сигнале. AM Demod — это следующий блок в блок-схеме second_am_rx.grc, он расположен сразу после блока фильт­ра Low Pass Filter. Внимательно посмотрев на блок-схему, можно заметить, что в AMдемодулятор из фильтра нижних час­тот поступает сигнал комплексного типа, в то время как наружу выходит сигнал типа Float. Вы можете определить это по цвету портов входа/выхода на блок-схеме: в блоке AM Demod входной порт имеет синий цвет (тип Complex) и оранжевый выходной (тип Float). Фактически вы можете разделить всю блок-схему на две части относительно AM-демодулятора: комплексную часть на входной стороне и часть с плавающей точкой на выходной (см. рис. 6.26). Комплексная часть Часть с плавающей точкой Рис. 6.26. Разделение блок-схемы по типу сигналов Принцип работы AM-приемника https://liveinternet.club/ 147
Как упоминалось ранее, радиоданные, как правило, имеют комплексный тип. Мы также говорили, что аудиоданные состоят из действительных чисел (не являющихся комплексными), обычно представленных в компьютерах в форме с плавающей запятой. Часто демодуляторы служат разделительной линией между радиоданными и выходными данными для «остального мира», которым в данном случае является наш аудиовыход. Когда данные проходят через демодулятор, их тип преобразуется из комплексного в плавающий тип1. Просмотр модулированных и демодулированных сигналов Теперь, когда мы знаем, что делает блок AM Demod, давайте воспользуемся некоторыми инструментальными блоками для анализа данных, поступающих в демодулятор и выходящих из него. У нас уже есть блок QT GUI Frequency Sink, подключенный к выходу фильтра нижних час­тот. Добавьте еще один такой блок к блок-схеме, подключите его к выходу блока AM Demod, назовите его Demod Out и установите для его свойства Type значение Float. Перед запуском программы также можно отключить блоки RF Input и Shifted; они вам больше не понадобятся. В результате должно получится что-то вроде схемы, показанной на рис. 6.27. Поразмыслим над тем, что показывает новый частотный график после запуска программы. При первом взгляде на окно выполнения на рис. 6.28 можно подумать: «Ничего особенного!» Главное, на что здесь нужно обратить внимание, — периодические колебания сигнала на пике. Это связано с тем, что звук временами становится громче и тише, и эта интенсивность отражается как на модулированной, так и на демодулированной версиях сигнала. Это характеристика амплитудной модуляции: чем больше аудиосигнал, тем больше амплитуда несущей; чем меньше аудиосигнал, тем меньше амплитуда несущей. 1 Следует понимать, что комплексная форма представления частотных сигналов (см. статью Википедии по адресу https://ru.wikipedia.org/wiki/ Комплексная_амплитуда) есть математическая абстракция, не имеющая отношения к физическому содержанию явления. Любой периодический процесс (радиоволну, аудиосигнал, переменный ток в силовой электросети и т. п.) можно представить в комплексной форме, в форме набора действительных или (при соответствующем выборе единиц измерения) целых чисел с заданным периодом дискретизации, в тригонометрической аналоговой форме (как сумму синусоид) и т. д. Выбор той или иной формы представления делается исключительно из соображений удобства обработки и применимости соответствующих математических методов. 148 Глава 6 https://liveinternet.club/
Рис. 6.27. Блок-схема для демонстрации выхода демодулятора Рис. 6.28. Выходной сигнал AM-демодулятора Принцип работы AM-приемника https://liveinternet.club/ 149
Настройка свойств блока AM Demod Блок AM Demod обладает несколькими специальными свойствами, которые мы задавали при построении блок-схемы AM-приемника в главе 4. Кратко рассмотрим значение этих свойств. Channel rate (час­то­та в канале) — это просто другое название обычной час­то­ты дискретизации (sample rate). Мы установили ее равной 400k, используя переменную samp_rate. Audio decimation (прореживание звука). Мы рассмотрим этот параметр в следующем разделе. На данный момент скажем только, что установка для этого свойства значения «1» означает, что оно не будет иметь никакого эффекта. Audio pass (полоса аудиосигнала) — то же самое, что час­то­та среза. Блок AM Demod содержит собственный фильтр нижних час­тот для устранения шумов, которые могут быть частью входного сигнала или которые могут быть сгенерированы в процессе демодуляции. Это свойство задает час­то­ту среза для внутреннего фильтра нижних час­ тот. Значение по умолчанию для этого свойства равно 5e3 (5 кГц). Это настройка для работы со стандартными широковещательными AMсигналами, которые, согласно требованиям государственных регулирующих органов, должны вести себя определенным образом. Если только вы не создаете собственные AM-передатчик и приемник, которые работают иначе, чем стандартная AM-трансляция, вам никогда не понадобится изменять этот параметр. Audio stop (аудиостоп) — способ описания ширины полосы перехода фильтра нижних час­тот в блоке AM-демодуляции. Вместо того чтобы определять ширину переходной зоны (transition_width в предыдущих случаях), параметр просто определяет, где эта зона заканчивается (в данном случае на час­то­те 5500 Гц). Арифметически ширина перехода равна параметру Audio stop за вычетом Audio pass (см. рис. 6.29). Усиление Ширина перехода Audio pass Рис. 6.29. Параметры Audio stop и Audio pass в блоке AM Demod 150 Глава 6 https://liveinternet.club/ Частота Audio stop
В следующей главе мы рассмотрим другие типы модуляции и демодуляции, помимо AM. А пока давайте порадуемся тому, насколько функциональными являются эти блоки GNU Radio, и перейдем к последнему этапу работы AM-приемника. Передискретизация Теперь, когда мы настроились на AM-радиосигнал и демодулировали его для получения аудиосигнала, последний шаг в построении приемника — передискретизация звука, чтобы звуковая карта вашего компьютера могла его воспроизводить. Передискретизация означает изменение час­то­ты дискретизации сигнала. Этот шаг необходим, поскольку час­то­та дискретизации аудиосигнала, поступающего из блока AM Demod, составляет 400 ksps (это задано в свойстве Channel Rate блока), но 400 ksps — слишком высокая час­то­та для аудиосистем в большинстве компьютеров. Фактически час­то­та дискретизации блока аудиовыхода Audio Sink на выходе блок-схемы по умолчанию составляет 32 ksps. Главное правило, касающееся час­тот дискретизации в устройствах GNU Radio: эти час­то­ты должны совпадать при переходе от одного блока к другому. Иными словами, час­то­та дискретизации на входе любого блока должна совпадать с частотой дискретизации на выходе блока, к которому он подключен. Из-за этого правила мы не можем просто подключить блок AM Demod к блоку Audio Sink. Частота дискретизации у них не совпадает. Нам нужно сформировать выборку данных заново, то есть изменить час­то­ту дискретизации, добавив передискретизатор (resampler) между двумя этими блоками. Этот блок не изменит базовый характер данных, но преобразует час­то­ту дискретизации с 400 ksps до 32 ksps. Существует два основных способа передискретизации: прореживание (decimation) и интерполяция (interpolation). Прореживание уменьшает час­то­ту дискретизации, в то время как интерполяция увеличивает ее. В данном случае нам понадобится комбинация обоих методов. Прореживание При прореживании просто удаляется часть отсчетов, из-за чего происходит изменение час­то­ты дискретизации с более высокой на более низкую. Чтобы понять, как это работает, оцените количество отсчетов, которые берутся за определенный период времени. Например, если бы час­то­та дискретизации составляла 1 ksps (1000 отсчетов в секунду), у вас было бы 1000 отсчетов с интервалом в 1 секунду. Чтобы сократить час­то­ту дискретизации вдвое, вы могли бы просто выбросить отсчеты через один, оставив 500 отсчетов за тот же 1-секундный интервал времени. Можно видеть, как час­то­та отсчетов сократилась Принцип работы AM-приемника https://liveinternet.club/ 151
вдвое. Теперь, вместо того чтобы делать это в течение только одной секунды, представьте, что вы все время выбрасываете каждый второй отсчет. Частота дискретизации уменьшится вдвое, как показано на рис. 6.30. 000000000000000000000 Прореживание вдвое 0 0 0 0 0 0 0 0 0 0 0 Рис. 6.30. Прореживание (decimation) Уменьшение час­то­ты дискретизации вдвое — то же самое, что прореживание дискретного сигнала вдвое. Как показано на рисунке, данные поступают в ресемплер в виде потока равномерно распределенных отсчетов, а покидают его в виде потока отсчетов с более широким интервалом. Давайте создадим простой проект, чтобы увидеть, как это выглядит на практике. Назовем этот новый проект decimation.grc. Прежде чем начать, обратите внимание: тип всех блоков, используемых в этой блок-схеме, будет Float, поэтому, пожалуйста, настройте каждый блок соответствующим образом. Чтобы сэкономить немного времени, вы можете выбрать блок и нажимать клавиши со стрелками вверх или вниз для переключения между типами данных блока. Чтобы перейти от комплексного типа к типу с плавающей запятой, просто нажмите стрелку вниз один раз. Сначала добавьте блок источника сигнала Signal Source и подключите его выход к блоку Throttle. Кроме изменения типа, для обоих этих блоков оставьте все остальные настройки по умолчанию. Затем переведите выходной сигнал Throttle в блок Keep 1 in N, изменив его тип на Float, а свойство N на значение 4. Этот блок уменьшит количество отсчетов у входящего сигнала в 4 раза. Наконец, добавьте два блока QT GUI Time Sink для просмотра тестового сигнала до и после уменьшения количества отсчетов. Подключите первый из них к выходу блока Throttle, установив для него имя Name как 32 ksps Input и количество точек Number of Points равным 128. Затем перейдите на вкладку Config (Конфигурация) и установите свойство Line 1 Marker в значение Circle. Подключите второй блок QT GUI Time Sink к выходу блока Keep 1 in N. Задайте для его имени Name значение Decimated Output, час­то­ту дискретизации 8000, а количество точек Number of Points равным 32. Как и в случае с первым выходным блоком, также установите для Line 1 Marker значение Circle. Когда вы закончите, блок-схема должна выглядеть так, как показано на рис. 6.31. (Манипулировать количеством точек и маркерами линий не необходимо с функциональной точки зрения; это делается исключительно для того, чтобы результаты данного учебного упражнения выглядели более наглядно.) 152 Глава 6 https://liveinternet.club/
Рис. 6.31. Блок-схема для иллюстрации прореживания После запуска программа выдаст результат, показанный на рис. 6.32. Рис. 6.32. Результат примера прореживания В этих временны́х графиках каждый отсчет сигнала представлен точкой, а GNU Radio услужливо рисует кривую, соединяющую эти точки, чтобы показать форму сигнала. Обратите внимание, что прореженный выходной сигнал имеет ту же общую форму, что и входной сигнал с частотой выборки 32 ksps, но за тот же период времени содержит в четыре раза меньше выборок, поскольку при прореживании час­то­та дискретизации снижается с 32 до 8 ksps (32 000 / 4 = 8000). Принцип работы AM-приемника https://liveinternet.club/ 153
Таким образом вы можете проредить любой сигнал, но будьте осторожны, чтобы не уменьшить количество отсчетов слишком сильно, иначе вы столкнетесь с проблемой, обсуждавшейся еще в главе 2 в связи с цифровой дискретизацией: искажения формы сигнала из-за недостаточной дискретизации. Мы вернемся к этому вопросу в главе 11. Пока что мы будем утверждать, что час­то­та дискретизации в нашем простом тестовом проекте, составляющая 8000 отсчетов в секунду, достаточна, поскольку она все равно значительно выше час­то­ты исходного сигнала, равной 1 ksps. Попробуйте несколько других значений коэффициента прореживания в блоке Keep 1 in N, чтобы убедиться, что он ведет себя так, как вы ожидаете. Однако обратите внимание, что прореживание можно производить только с помощью целого значения. Например, имеет смысл уменьшить количество отсчетов до 1 из 7, сохранив каждый седьмой отсчет и выбросив остальные, тем самым снизив эффективную час­то­ту дискретизации в 7 раз. Однако этот же метод нельзя использовать для уменьшения час­то­ты в 7,5 раза; вы не можете оставить 1 образец и выбросить следующие 6,51. Когда вы будете пробовать разные значения прореживания, помните, что нужно будет настроить параметры Sample Rate и количество точек Number of Points прореживаемого выходного сигнала так, чтобы получить столь же наглядную картинку, как в этом примере. Блок регулирования Throttle Мы уже использовали блок регулирования Throttle2 в нескольких блок-схемах, не объясняя, зачем он нужен. Давайте рассмотрим, что он делает. Говоря совсем коротко, он не позволяет вашему компьютеру работать с большей нагрузкой, чем это необходимо. Если бы вы попробовали построить некоторые из предыдущих блок-схем без использования регулятора Throttle, они, скорее всего, работали бы нормально. Возможно, вы почувствовали бы некоторую замедленность работы компьютера, но в остальном, вероятно, это не сильно отличалось бы. Однако если бы вы включили системный монитор, то увидели бы, что по крайней мере один из ваших процессоров работает на пределе возможностей. 1 2 В данном примере это вполне возможно, если модифицировать функцию прореживания так, чтобы через раз выбрасывалось 6 точек, а следующий раз 7 (в среднем и получится коэффициент 7,5). Однако такое, очевидно, возможно только для простейших дробных значений (половина, треть, четверть, десятая часть); для произвольного дробного значения алгоритм настолько усложняется, что проще оставить возможность работы только с целыми числами. Throttle в переводе — «дроссель», «дроссельная заслонка». 154 Глава 6 https://liveinternet.club/
Оказывается, час­то­та дискретизации, которую вы указываете в блок-схемах GNU Radio, не всегда такая, какой кажется. Компьютер на самом деле работает намного быстрее. Например, для час­ то­ты 32 ksps в блок-схеме decimation.grc мы ожидаем, что блоки будут выполнять математические вычисления каждые 31,25 мик­ росекунды (1, деленная на 32). Однако современные компьютеры способны выполнять миллиарды операций в секунду, поэтому они могут легко выполнить все вычисления в блок-схеме с гораздо большей скоростью, чем один раз в 31,25 микросекунды. Что делает компьютер, когда он завершает вычисления раньше срока? Когда мы запускаем программу, которая содержит интерфейс с физическим миром, такой как блок SDR-интерфейса или блок аудиовыхода, компьютер учитывает час­то­ту дискретизации и будет бездействовать до тех пор, пока не придет время обрабатывать следующий отсчет данных. Тогда все отсчеты в блок-схеме будут синтетическими, как при прореживании, и будет происходить что-то странное, поскольку нет аппаратного SDR или звуковой карты, которые ожидали бы данных в определенный момент времени. GNU Radio на самом деле не нужно ничего ждать, это, по сути, просто запуск эмуляции, так почему бы не запустить ее как можно быстрее, независимо от час­то­ты дискретизации? Это именно то, что делает ваш компьютер, жадно поглощая ресурсы, которые вы хотели бы использовать для других операций, таких как наведение курсора мыши и щелчки по элементам интерфейса. Решение состоит в том, чтобы просто добавить блок регулирования Throttle где-нибудь в блок-схеме. Это заставит данные замедляться до нужной скорости, указанной в блоке. Это нужно, чтобы обеспечить безопасность и работоспособность процессора в вашем ноутбуке. Мы считаем, что проще всего установить блок регулирования сразу после одного из блоков-источников сигнала, но теоретически он может быть установлен где угодно. Например, в decimation.grc регулятор может быть установлен после блока Keep 1 в N. Интерполяция Интерполяция увеличивает час­то­ту дискретизации за счет создания дополнительных отсчетов в сигнале между существующими. Каждый дополнительный отсчет добавляется путем оценки того, какое значение мог бы иметь исходный сигнал в данный момент времени. Например, если сигнал имел значение 3 через 1 мс и 7 через 2 мс, алгоритм интерполяции может оценить значение через 1,5 мс как равное 5 (рис. 6.33). Принцип работы AM-приемника https://liveinternet.club/ 155
Значение Оригинальное значение 7 5 3 Интерполированное значение Оригинальное значение 1 мс 1,5 мс 2 мс Рис. 6.33. Интерполяция (interpolation) Одно предупреждение об интерполяции: с помощью интерполяции вы не получаете никакой новой информации о дискретизированном сигнале. Вы не производили никаких дополнительных измерений, просто выполнили математический трюк, который поможет уравнять час­то­ту дискретизации между различными блоками блок-схемы. Передискретизация в AM-приемнике Давайте теперь вернемся к AM-приемнику и посмотрим, как мы можем выполнить передискретизацию демодулированного аудио­ сиг­нала, чтобы он был пригоден для вывода в звуковую систему компьютера. Аудиосигнал на выходе демодулятора имеет час­то­ту дискретизации 400 ksps и должен быть преобразован в типичную для звуковой карты час­то­ту дискретизации 32 ksps. На первый взгляд может показаться очевидным, что нам нужно просто уменьшить час­то­ ту дискретизации, проредив выборку. Но на сколько? Разделив 400 на 32, мы получим 12,5, что является проблемой. Несколько абзацев назад мы говорили, что не можем производить прореживание с помощью нецелых значений. Решение заключается в использовании блока Rational Resampler. Этот блок позволяет выполнять частичное прореживание или прореживание по нецелому значению. Блок выполняет это путем объединения прореживания и интерполяции для достижения нужного результата. Простой способ произвести математические расчеты — использовать старую час­то­ту дискретизации (выраженную в отсчетах в секунду, ksps) для значения прореживания и желаемую конечную час­то­ту дискретизации (также в ksps) для значения интерполяции. В нашем случае это 400 для прореживания и 32 для интерполяции. Это означает, что час­то­та входящего сигнала, дискретизированного на 156 Глава 6 https://liveinternet.club/
час­то­те 400 ksps, будет разделена на 400 и умножена на 32, в результате чего вы получите выходную час­то­ту 32 ksps, как нам и нужно1! Существуют и другие причины для изменения час­то­ты дискретизации в рамках проекта, помимо соответствия скорости на выходе возможностям звуковой карты. Распространенная причина заключается в снижении вычислительной нагрузки на блок-схему. Более низкая час­то­та дискретизации означает, что в этой части блок-схемы обрабатывается меньше чисел. Меньшее количество чисел означает, что требуется меньше вычислений в секунду, что снижает нагрузку на процессор компьютера. Рекомендуется сокращать количество вычислений, когда это возможно, для повышения эффективности вычислений. Итоги Остановимся на минутку, чтобы оценить, чего мы достигли на данный момент: zz zz zz zz установили в компьютере GNU Radio, что является отличным началом; ознакомились с основными понятиями из области радиосвязи, такими как усиление, час­то­та, фильтрация и модуляция, и увидели их в действии; создали и отладили простые блок-схемы; познакомились с основными компонентами SDR-приемника, создав AM-приемник и проанализировав его работу. Созданный нами AM-радиоприемник, возможно, и не является самой сложной системой радиосвязи, которую только можно вообразить, но на протяжении оставшейся части этой книги вы будете узнавать, как создавать все более совершенные аналоговые приемники, используя ту же базовую структуру. Некоторые элементы будут отличаться, но сходства будет больше, чем можно было бы ожидать. Даже когда мы переключимся с аналоговых приемников на цифровые, сходство не исчезнет: эти радиоприемники также содержат множест­ во одинаковых элементов. Поскольку понимание этих основ очень важно, в следующей главе мы продолжим знакомство с аналоговым радиоприемом на примере приемника другого типа. 1 https://liveinternet.club/ Нет никакого смысла портить аудиосигнал снижением час­то­ты дискретизации до 1 ksps за счет прореживания — согласно теореме Котельникова— Шеннона (см. главу 11), в нем окажутся отрезаны все час­то­ты выше 500 Гц. В данном случае имеется простое решение, позволяющее сохранить с избытком весь спектр аудиосигнала, доступный для передачи с помощью АМ-модуляции. В блоке Rational Resampler необходимо задать значение прореживания равным 25 (получив в результате 16 ksps), а затем с помощью интерполяции умножить на 2, получив искомые 32 ksps на выходе. В общем случае проблема нахождения оптимальных величин для прореживания/интерполяции сводится к тривиальной задаче по нахождению наибольшего общего делителя (НОД) для значений час­тот (в данном случае 16).
7 СОЗДАНИЕ FM - РАДИОПРИЕМНИКА В этой главе мы узнаем, как создать аналоговый приемник другого типа: приемник FM-вещания. Попутно попрактикуемся в работе с компонентами GNU Radio. Мы познакомимся с некоторыми новыми функциональными блоками и потренируемся в использовании переменных и выражений, чтобы сделать блок-схемы более гибкими. Мы будем разрабатывать FM-приемник в два этапа. Сначала внесем минимум изменений, необходимых для преобразования блок-схемы имеющегося AM-приемника из главы 4 в FM-приемник. На самом деле для преобразования потребуется совсем немного изменений, что иллюстрирует невероятную гибкость SDR-радио; различные приемники на базе SDR имеют много общего друг с другом. После того как базовая блок-схема FM-приемника заработает, мы внесем в нее ряд улучшений. В результате будет создана основа для универсальной платформы, которая может стать базой для множества конструкций аналоговых (и цифровых!) SDR-приемников. Мы сможем интегрировать аппаратное обеспечение в эту платформу для запуска приемника в прямом эфире, что будет рассмотрено в главе 9. Вероятно, это именно то, чего многие из вас так долго ждали! Аббревиатура FM в названии «FM-приемник», который мы будем создавать в этой главе, — это сокращение от «frequency modulation» (частотной модуляции). Как и амплитудная модуляция, это метод преобразования одного сигнала в другой. В главе 10 мы поговорим 158 Глава 7 https://liveinternet.club/
о теории, лежащей в основе работы FM-модуляции и демодуляции. А пока давайте погрузимся в создание проекта FM-радио. Преобразование приемника из AM в FM Построение FM-приемника необходимо начать с источника радиочастотных (RF) данных, которые будут переданы на этапы настройки и фильтрации для выделения нужного сигнала. Затем этот сигнал будет демодулирован для получения исходного аудиосигнала. После некоторой повторной настройки мы сможем воспроизвести звук. Это ровно те же шаги, которые мы уже выполняли ранее при создании AMприемника. Единственным принципиальным отличием FM-радио от AM-радио будет этап демодуляции. Однако на этом пути также будет внесена пара небольших изменений. Для начала откройте блок-схему AM-приемника (можно начать с файла am_rx.grc в папке ch_07, входящего в загруженный пакет project) и сохраните ее с каким-нибудь новым именем файла. Начальная блок-схема должна выглядеть так, как показано на рис. 7.1. Мы заменим только блок AM Demod, в то время как остальная часть блок-схемы потребует лишь изменения некоторых параметров. Рис. 7.1. Старая блок-схема АМ-приемника Изменения начнем вносить со стороны входа, начиная с источника File Source и двигаясь в сторону выхода. Откройте свойства блока File Создание FM-радиоприемника https://liveinternet.club/ 159
Source и установите свойство File в значение ch_07/fm_c96M_s8M.iq. Чтобы правильно обработать радиочастотные данные, поступающие из этого файла, нам необходимо знать центральную час­то­ту и час­ то­ту дискретизации, на которых работал SDR в момент записи этих данных. Название файла содержит две подсказки: «c96M» обозначает центральную час­то­ту 96 МГц, в то время как «s8M» сообщает нам, что час­то­та дискретизации SDR составляла 8М отсчетов/с (8 Мsps). Примечание Эти параметры не всегда будут встроены в имя файла, но нам нужно каким-то образом знать их величину. Наш совет: задавайте имя файла с подобным типом заголовка, если вы его создаете, или измените имя используемого файла, если в нем нет этой информации. Вы можете думать, что не потеряете наклеенный на монитор стикер с этими двумя параметрами, но не стоит рисковать. У блок-схемы AM-приемника были другие значения для этих параметров, поэтому давайте обновим их сейчас. Измените значение center_freq по умолчанию (Default Value) на 96e6, а значение samp_ rate — на 8e6. Кроме того, установите значение час­то­ты freq по умолчанию (Default Value) на 94.9e6. В этом файле есть несколько сигналов, и 94,9 МГц — один из них, поэтому это изменение дает вам преиму­ щест­во в процессе настройки. По окончании настроек блок-схема должна выглядеть так, как показано на рис. 7.2. Рис. 7.2. Блок-схема приемника с модифицированным блоком File Source и другими обновлениями 160 Глава 7 https://liveinternet.club/
Обратите внимание, что изображение блока источника сигнала Signal Source в рабочей области обновилось и теперь показывает час­то­ ту 1.1М на основе введенных вами значений freq и center_freq. Это происходит автоматически благодаря тому, что вы настраиваете блок Signal Source с переменной в качестве параметра час­то­ты; нет необходимости что-либо менять в источнике сигнала для поддержки новых значений freq и center_freq. Как мы обсуждали в главе 6, значение 1,1 MГц возникло от того, что файл изначально был записан с помощью SDR с центром на час­то­те 96 МГц, но после записи данные лишаются исходной информации о час­то­те и будут интерпретироваться GNU Radio так, как если бы они были записаны с центром на час­то­те 0 Гц. В этом представлении с нулевым центром сигнал вещания, первоначально передававшийся на час­то­те 94,9 МГц, теперь имеет час­ то­ту –1,1 МГц. Умножение радиочастотных данных на комплексную синусоиду с частотой 1,1 МГц приведет к смещению целевого сигнала на центральную час­то­ту 0 Гц. Сценарий настройки с этими значениями показан на рис. 7.3, где обозначены оба набора час­тот. Рис. 7.3. Сравнение аппаратных радиочастот и частот GNU Radio после настройки Следующий блок, на который стоит обратить внимание, — фильтр нижних час­тот Low Pass Filter. Напомним, что после центрирования целевого сигнала мы должны отфильтровать все час­то­ты, кроме ограниченного диапазона с центром около нуля. Мы устанавливаем час­ то­ту среза этого фильтра, основываясь на ширине час­тот, которые, как мы ожидаем, будет занимать целевой сигнал. Позже мы более точно определим эту величину и назовем ее полосой пропускания, но пока примите на веру, что по ориентировочным подсчетам ширина сигнала FM-вещания составляет 150 кГц. В свете этого факта может возникнуть соблазн установить час­то­ ту среза фильтра нижних час­тот на 150e3. Однако следует помнить, что этот комплексный фильтр нижних час­тот будет пропускать час­ Создание FM-радиоприемника https://liveinternet.club/ 161
то­ты между отрицательной и положительной час­то­та­ми среза. Если вы установите ограничение на 150e3, то будете пропускать час­то­ты от –150 кГц до +150 кГц, при общей полосе пропускания 300 кГц. Это слишком широкий интервал, такая величина приведет к пропусканию множества дополнительных шумов и, возможно, других сигналов, которые следует отфильтровать. Система может работать при такой настройке, особенно если исходный сигнал, на который мы настраиваемся, очень громкий и чистый, а поблизости нет других сигналов, близких по час­то­те. Тем не менее мы бы не рекомендовали без необходимости создавать в системе дополнительный шум. Вместо этого измените значение час­то­ты среза (Cutoff Freq) на 75e3, что приведет к пропусканию час­тот через фильтр в диапазоне 150 кГц. Также измените ширину полосы перехода (Transition Width) на 7.5e3 (наше эмпирическое правило: одну десятую от час­то­ты среза). Наконец, измените число прореживаний (Decimation) на 20. Это последнее изменение немного упростит остальную часть блок-схемы. Исходная блок-схема работала с частотой дискретизации 400 ksps вплоть до конца, когда она снизилась до 32 ksps, чтобы аудиовыход работал должным образом. Поскольку первые блоки вашей новой блок-схемы выполняются намного быстрее, чем раньше, в какой-то момент нам придется учесть эту разницу. Снижение час­ то­ты дискретизации данных, выходящих из фильтра нижних час­тот до 400 ksps, позволит последней части блок-схемы работать с той же частотой дискретизации, что и раньше, сводя к минимуму изменения, которые вам потребуется внести в последующие блоки. Почему значение равно 20? Потому что 8 Msps, или 8000 ksps (час­то­та дискретизации в файле .iq), разделенные на 20, составят 400 ksps. Когда вы завершите внесение изменений в свойства, блок-схема должна выглядеть так, как показано на рис. 7.4. Следующим этапом является демодуляция. Для этого этапа нам понадобится совершенно новый блок, поэтому удалите AM Demod и добавьте на его место блок WBFM Receive, подключив его входы и выходы таким же образом. Установите параметр Quadrature Rate на 400e3 (это просто другое название час­то­ты дискретизации), а прореживание звука (Audio Decimation) на 1 (мы не хотим больше изменять час­ то­ту дискретизации). После внесения изменений блок-схема должна выглядеть так, как показано на рис. 7.5. В начале работы блок-схема работает с частотой дискретизации 8 Мsps, но на блок передискретизации Rational Resampler по-прежнему подается демодулированный аудиосигнал, дискретизированный с частотой 400 ksps, как и раньше. Так же, как и раньше, вы отправляе­ те данные в приемник звука с дискретизацией 32 ksps. Это означает, что нам больше ничего не нужно менять. Ваша блок-схема должна работать без дополнительных изменений! 162 Глава 7 https://liveinternet.club/
Рис. 7.4. Приемная блок-схема с откорректированными параметрами блока Low Pass Filter Рис. 7.5. Добавление блока WBFM Receive Создание FM-радиоприемника https://liveinternet.club/ 163
Перед запуском программы проверьте установленный уровень звука на вашем компьютере и убедитесь, что он не превышает 50 %. Эта блок-схема обеспечивает на аудиовыходе гораздо более сильный сигнал, чем AM-приемник, поэтому нет смысла будить соседей. Кроме того, слишком сильный сигнал на аудиокарте может привести к неприятным искажениям. Отрегулировав звук, запустите программу. Вы почти сразу услышите голос. Звук будет воспроизводиться недолго, поскольку длительность записанного файла составляет всего несколько секунд. Как мы увидим позже, записанные радиочастотные файлы могут быть очень большими, поэтому мы сделали запись достаточно короткой, чтобы файл не был громоздким. Теперь у нас есть функциональный FM-приемник, поздравляем! Как вы могли убедиться, он не так уж сильно отличается от AM-при­ ем­ника. Главный вывод заключается в том, что приемники на базе SDR имеют много общего друг с другом. Если вы уже начали мечтать о цифровых радиоприемниках, то учтите, что многое из того, что мы будем делать в дальнейшем, основано на этой базовой структуре приемника. Улучшение работы FM-приемника Мы наладили работу FM-приемника, но это еще не все, что целесо­ образно сделать. Есть несколько способов улучшить блок-схему, и мы собираемся приступить к их выполнению. Окончательный вариант блок-схемы FM-приемника будет функционально эквивалентен тому, что у вас уже есть, но в нем будут следующие ключевые улучшения: zz новый блок для выполнения всех этапов настройки в одном месте; zz более понятный и функциональный набор параметров; zz графический ползунок для регулировки громкости. Мы также добавим блок измерительных приборов, чтобы можно было легко просматривать радиочастотные данные и настраиваться на разные час­то­ты. Более эффективная настройка Текущая реализация настройки вполне работает, но есть более аккуратный способ. В настоящее время для настройки на сигнал требуется три разных блока (источник сигнала Signal Source, умножитель Multiply и фильтр Low Pass Filter), но в GNU Radio есть блок, который объединяет все эти функциональные возможности. Он называется Frequency Xlating FIR Filter. Этот блок будет выполнять все те же задачи, что и существующий тюнер: сдвиг час­то­ты, фильтрацию и преобразование час­то­ты дискретизации. 164 Глава 7 https://liveinternet.club/
Начните с удаления существующего тюнера, для чего удалите блоки Signal Source, Multiply и Low Pass Filter. Затем добавьте блок Frequency Xlating FIR Filter, подключив его вход к блоку File Source, а выход — к WBFM Receive. Добавляя этот блок, будьте осторожны, чтобы по ошибке не добавить вместо него похожий по названию блок Frequency Xlating FFT Filter. Иногда может работать этот другой блок, но обычно он требует гораздо больших вычислительных затрат. Когда вы закончите, блок-схема должна выглядеть так, как показано на рис. 7.6. Рис. 7.6. Блок-схема FM-приемника с блоком Frequency Xlating FFT Filter Технология, которую мы использовали в своем оригинальном тюнере для изменения час­то­ты радиочастотных данных, имеет несколько различных названий. В аппаратном мире мы бы назвали это комплексным микшированием. Если мы просто посмотрим на математику блок-схемы, мы могли бы назвать это комплексным умножением синусоид. Другим названием является частотный перенос. Следовательно, первая часть названия нового блока говорит нам о том, что он переносит или сдвигает час­то­ту входных данных. Xlating — это всего лишь сокращение от translating (переносящий). Вторая половина названия относится к типу фильтра. Фильтр с конечной импульсной характеристикой (finite impulse response, FIR) — это особый способ реализации фильтра для данных в виде дискретной выборки. Теория, лежащая в основе FIR-фильтров, выходит за рамки данной книги; если вам интересно, вы можете найти множество отличных ресурсов в интернете. Для настройки мы создадим фильтр Создание FM-радиоприемника https://liveinternet.club/ 165
нижних час­тот, используя схему FIR, но вам не нужно знать, как работают фильтры FIR, чтобы это произошло, — GNU Radio сделает работу за вас. Нам нужно установить три свойства в блоке Frequency Xlating FFT Filter. Первое — центральная час­то­та Center Frequency, которая управляет изменением час­то­ты входных радиочастотных данных. Поначалу его название может немного сбить с толку, потому что в нашей блок-схеме уже есть функция, называемая center_freq. Естественно предположить, что это одно и то же, но это не так. Посмотрим, чем они отличаются. В GNU Radio предполагается, что входные данные центрируются на час­то­те около 0 Гц. Свойство Center Frequency позволяет блоку отцент­рировать радиочастотные данные на другой час­то­те. Давайте проиллюстрируем это, используя тот же пример, который был показан ранее на рис. 7.3. Если мы используем –1,1 МГц в качестве значения центральной час­то­ты, радиочастотные данные сдвинутся вправо, так что точка –1,1 МГц теперь будет находиться в центре. На рис. 7.7 показан этот пример как с радиочас­то­та­ми GNU, так и с аппаратными час­то­та­ми. Рис. 7.7. Настройка с помощью Frequency Xlating FIR Filter Это похоже на то, как мы делали сдвиг час­то­ты раньше, но величина сдвига теперь имеет противоположный знак. Используя старый трехблочный метод в этом примере, мы бы умножили радиочастотные данные на комплексную синусоиду с частотой +1,1 МГц, чтобы сосредоточить их на нужном сигнале, вместо того чтобы выбирать –1,1 МГц для свойства Center Frequency. При использовании старого метода мы указывали величину сдвига час­то­ты (+1,1 МГц). Новый метод требует, чтобы мы выбрали час­то­ту для центрирования (–1,1 МГц). Единственным отличием является знак этого значения, как показано на рис. 7.8. 166 Глава 7 https://liveinternet.club/
Рис. 7.8. Сравнение методов настройки Однако есть одна дополнительная сложность: хотя компьютер видит данные блок-схемы с центром на час­то­те 0 Гц, мы, люди, обычно предпочитаем думать о час­то­тах в реальном мире. Другими словами, мы должны представить реальные час­то­ты пользователю блок-схемы, одновременно выполняя арифметические действия, для которых программа должна получать значения с нулевым центром. Это означает, что нам нужно вычислить свойство Center Frequency для тюнера, используя значения аппаратных переменных freq и center_freq. Напомним, что значение center_freq обозначает час­то­ту, на которую SDR-оборудование было изначально настроено для сбора радиочас­ тотных данных, находящихся в файле. Переменная freq представляет фактическую аппаратную час­то­ту, на которую мы хотели бы настроиться. Имея это в виду, дважды щелкните на блоке Frequency Xlating FIR Filter и установите для центральной час­то­ты значение freq – center_freq. Затем нажмите OK. Обратите внимание, что это прямо противоположно тому, что мы делали при старом подходе, когда устанавливали час­то­ту блока Signal Source в значение center_freq – freq. Перестановка переменных в выражении дает нам значение с правильным знаком. Следующая функция тюнера, которую нам нужно настроить, — фильтр нижних час­тот. Прежде чем вводить что-либо, следует создать еще две переменные. Сначала скопируйте и вставьте блок Variable с переменной samp_rate и измените ID этой копии на chan_width, а значение — на 150e3. Эта переменная ширины канала (channel width) обозначает диапазон час­тот, которые мы хотим пропустить через фильтр. Это не совсем то же самое, что час­то­та среза в старом блоке фильтра нижних час­тот; фильтр пропускает час­то­ты между отрицательной и положительной полосами отсечки, в то время как ширина канала описывает весь диапазон час­тот, как положительных, так и отрицательных. Таким образом, ширина канала в два раза превышает Создание FM-радиоприемника https://liveinternet.club/ 167
час­то­ту среза, как показано на рис. 7.9. Мы используем это значение, а не час­то­ту среза, потому что интуитивно понятнее мыслить в терминах ширины, а не полуширины. Рис. 7.9. Частота среза и ширина канала Затем скопируйте и вставьте блок Variable с переменной chan_width, чтобы создать еще один дубликат. Измените ID дубликата на transition_width, а значение — на chan_width/20. Это просто применение того же эмпирического правила, согласно которому подходящая ширина перехода составляет одну десятую от час­то­ты среза. Поскольку ширина канала в два раза превышает час­то­ту среза, мы делим ее на 20 вместо 10. Теперь используем две новые переменные, которые мы создали. Не вдаваясь в теорию цифровых фильтров, просто скажем, что функция FIR-фильтра определяется набором неких математических сущностей, собранных под названием Taps1. Мы определенно не хотим выяснять, как вычислять эти сущности вручную, поэтому потерпите немного, и мы применим немного магии. Дважды щелкните по блоку Frequency Xlating FIR Filter и введите следующее в поле свойства Taps: firdes.low_pass(1, samp_rate, chan_width/2, transition_ width) Вы только что немного поработали над программированием на Python! Все, что здесь происходит, — это вызов функции GNU Radio, которая реализует функции фильтра нижних час­тот (на что указывает название low_pass). Вы передаете функции четыре аргумента в круг­ лых скобках. Первый — коэффициент усиления фильтра. Мы намерены только фильтровать, не применяя никакого усиления, поэтому мы установили значение 1. Второй аргумент — час­то­та дискретизации 1 Букв. «отсчеты». Параметр Taps хранит набор коэффициентов, реализующих ту или иную разновидность фильтра (подробнее см. по адресу https:// my-gnuradio.org/2015/01/05/parametr-taps-dlya-frequency-xlating-fir-filter-chto-eto). 168 Глава 7 https://liveinternet.club/
данных, поступающих в блок. Это переменная samp_rate, которая уже определена. Третий аргумент — час­то­та среза фильтра. Как мы видели на рис. 7.9, ширина канала в два раза превышает час­то­ту среза. И наоборот, час­то­та среза равна половине ширины канала, поэтому мы ввели здесь значение chan_width/2. Наконец, последним аргументом является ширина перехода. Ранее мы создали переменную transition_width именно для этой цели, которую мы и указываем здесь. После поля Taps последнее свойство, которое нужно установить, — коэффициент прореживания Decimation. Измените его значение на 20, чтобы оно соответствовало предыдущему случаю, когда мы уменьшили скорость дискретизации на входе блока в 8 Мsps до скорости на выходе в 400 ksps. Теперь, когда мы заменили тюнер и установили свойства блока Frequency Xlating FIR Filter, блок-схема должна выглядеть так, как показано на рис. 7.10. Рис. 7.10. FM-приемник с настроенным блоком Frequency Xlating FIR Filter Запустите программу, чтобы убедиться, что она работает по-прежнему. Несмотря на то что здесь гораздо более компактный тюнер, он должен функционировать аналогично более громоздкому методу, который мы использовали ранее. Автоматическое обновление переменных Далее мы расширим возможности использования переменных, чтобы сделать блок-схему более гибкой. В настоящее время все работаСоздание FM-радиоприемника https://liveinternet.club/ 169
ет, но что, если вы решите снизить час­то­ту дискретизации до уровня, отличного от 400 ksps? Чтобы реализовать это изменение, вам придется обновлять свойства трех разных блоков. Настройка поведения различных блоков будет обычным делом по мере отладки и оптимизации их производительности. Этот процесс можно выполнять гораздо эффективнее, если вносить изменения, обновляя значение одной переменной, а не корректируя все блоки. В этом случае удобно думать не о прореживании потока данных, а сразу о снижении час­то­ты дискретизации, которое мы на самом деле хотим получить на выходе Frequency Xlating FIR Filter. Мы создадим переменную специально для этой цели. Скопируйте и вставьте блок Variable с переменной transition_width, измените идентификатор нового блока на working_samp_rate и установите для него значение 400e3. Мы будем использовать эту новую величину для управления частотой дискретизации несколько раз на протяжении всей блок-схемы. Во-первых, измените свойство Decimation блока Frequency Xlating FIR Filter на int(samp_rate/working_samp_rate). Вместо того чтобы жестко задавать коэффициент прореживания, это выражение вычисляет его на основе начальной час­то­ты дискретизации блок-схемы (samp_rate) и желаемой час­то­ты дискретизации после настройки (working_samp_rate). Напомним, что прореживание можно производить только с помощью целых значений. Поскольку любая операция деления в Python приводит к получению значения с плавающей запятой, мы используем функцию int() для явного преобразования, заставляя Python рассматривать значение как целое число. Теперь свойства блока должны выглядеть так, как показано на рис. 7.11. Рис. 7.11. Свойства блока Frequency Xlating FIR Filter 170 Глава 7 https://liveinternet.club/
Блок Frequency Xlating FIR Filter теперь автоматически вычисляет свое значение прореживания, но блоки далее по-прежнему имеют жестко заданную час­то­ту дискретизации. Чтобы исправить это, измените параметр Quadrature Rate блока WBFM Receive на working_samp_ rate. Затем дважды щелкните блок Rational Resampler и измените параметр Decimation на int(working_samp_rate/1000). Это приведет к целочисленному коэффициенту прореживания, равному 400, который в сочетании с параметром Interpolation, равным 32, приведет к потоку выходных данных, оцифрованных с частотой 32 ksps. После нажатия кнопки ОК блок-схема ничем не будет отличаться от рис. 7.10, за исключением нового блока Variable. Разница в том, что изменение одной переменной в блок-схеме теперь приведет к автоматическому обновлению свойств трех разных блоков до необходимых значений. Запустите программу еще раз, чтобы убедиться, что ничего не нарушено. Затем измените значение working_samp_rate на 200e3 и обратите внимание, как вся блок-схема немедленно обновится с учетом этого нового значения. Как показано на рис. 7.12, в соответствии с изменениями были обновлены как свойства Decimation, так и параметр Quadrature Rate. Выполните блок-схему еще раз, чтобы убедиться, что все, что сделано, работает так, как мы планировали. Рис. 7.12. Изменение рабочей частоты дискретизации до 200 ksps Вы можете изменить значение working_samp_rate обратно на 400e3, прежде чем продолжать, если хотите, чтобы блок-схема в точности соответствовала скриншотам для остальной части этой главы. Если Создание FM-радиоприемника https://liveinternet.club/ 171
вы хотите оставить значение 200e3, это тоже нормально. Хорошо продуманные блок-схемы работают не только с одним волшебным набором значений. Они должны работать с любыми значениями, которые имеют смысл. Управление громкостью Последнее усовершенствование, которое мы внесем в блок-схему, — добавление функции регулировки громкости в режиме реального времени. До сих пор вы использовали блоки ввода QT GUI Entry для управления блок-схемами во время их работы, но GNU Radio Compa­ nion предоставляет несколько других графических компонентов для управления значениями переменных в режиме реального времени. Другим распространенным из них является блок QT GUI Range, использующий графический ползунок для управления значением переменной. Мы будем использовать такой компонент для регулировки громкости выхода. Добавьте блок QT GUI Range в блок-схему и задайте его свойства следующим образом: ID volume Type float zz Default Value 5 zz Start 0 zz Stop 11 zz Step 1 zz zz На рис. 7.13 показаны полные настройки свойств блока. Рис. 7.13. Свойства блока QT GUI Range 172 Глава 7 https://liveinternet.club/
Теперь у нас есть переменная volume, которую можно использовать в блок-схеме. При запуске программы эта переменная будет иметь значение по умолчанию, равное 5, но для нее будет предусмотрен ползунок, позволяющий выбирать любое значение между начальной (0) и конечной (11) точками. Поскольку размер шага Step равен 1, можно выбрать любое целое число между этими точками. (Если бы размер шага был равен 2, доступными значениями были бы 0, 2, 4, 6, 8 и 10.) Чтобы интегрировать регулятор громкости в блок-схему, отключите соединение между Rational Resampler и аудиовыходом Audio Sink. Затем добавьте блок умножения на константу Multiply Const, установив для типа ввода-вывода IO Type значение float, а для свойства Constant значение volume/10. Наконец, подключите вход этого блока к выходу Rational Resampler, а его выход к входу Audio Sink, как показано на рис. 7.14. Рис. 7.14. FM-приемник с регулированием громкости Запустите программу. Вы снова услышите голос, но на этот раз уровень звука будет ниже. Это связано с тем, что вы ослабляете аудиосигнал перед выходом на звуковую карту, применяя к нему коэффициент усиления менее 1. По умолчанию уровень затухания составляет 0,5, или половину от первоначальной громкости. Вы также должны увидеть графический ползунок регулятора громкости, как показано на рис. 7.15. Создание FM-радиоприемника https://liveinternet.club/ 173
Рис. 7.15. Ползунок QT GUI Range в работе Перемещая ползунок регулировки громкости вперед и назад, отмечайте изменение уровня звука. При перемещении его на значение 10 уровень звука должен быть таким же, как и до установки ползунка. При перемещении на 0 звук будет полностью отключен. Настройка на другие сигналы На данный момент мы настроились только на одну станцию в исходных радиочастотных данных, но их там гораздо больше. Давайте добавим инструментальный блок, который поможет найти другие пики сигналов в данных. Добавьте блок QT GUI Frequency Sink, измените его свойство Center Frequency (Гц) на center_freq и подключите к блоку источника File Source. Затем нажмите клавишу со стрелкой вправо, и блок повернется на 90 градусов по часовой стрелке. Повторное нажатие на клавишу со стрелкой вправо повернет его еще на 90 градусов, разместив входной порт на противоположной стороне. Это не меняет функции блока, но расположение входного порта блока справа, а не слева помогает созданию более наглядной блок-схемы, как показано на рис. 7.16. Запустите программу снова, и вы увидите график час­тот исходных радиоданных. Найдите на графике пики сигнала, отличные от настройки по умолчанию на 94,9 МГц. Как показано на рис. 7.17, пики сигнала можно найти на час­то­тах 92,5 МГц, 95,7 МГц, 98,1 МГц и т. д. Обратите внимание, что эти час­то­ты соответствуют станциям, на ко174 Глава 7 https://liveinternet.club/
торые мы обычно настраиваемся на FM-радио, на дисплее которого они могут обозначаться просто как 95,2, 95,7 или 98,1. Рис. 7.16. Законченный FM-приемник с блоком QT GUI Frequency Sink Рис. 7.17. Сигналы в FM-диапазоне Создание FM-радиоприемника https://liveinternet.club/ 175
Обратите внимание на час­то­ты, соответствующие пикам на графике. Затем попробуйте настроиться на какие-то из них, используя ползунок блока QT GUI Entry, управляющего переменной freq. На­ слаж­дайтесь работой FM-радио! Итоги С одной стороны, в этой главе мы не вносили существенных изменений в схему AM-приемника. Мы просто преобразовали имеющуюся блок-схему в FM-приемник, а затем оптимизировали его конструкцию. Однако если взглянуть на это с другой стороны, мы узнали несколько необычных вещей. Мы познакомились с использованием более сложных блоков GNU Radio, позволяющих сделать блок-схему более эффективной, и расширили использование переменных, чтобы сделать интерфейс управления более удобным. В процессе работы мы получили представление о невероятной гибкости SDR-радио — для перехода с AM на FM потребовалось всего несколько настроек. Ядро законченной блок-схемы приемника, состоящее из блоков Frequency Xlating FIR Filter и демодулятора, обеспечивает основу для множества вариантов аналоговых и цифровых приемников. Четкое и эффективное управление переменными в этой блок-схеме также значительно упростит модификацию и отладку проектов, сэкономив много времени при работе с SDR. Это поможет в следующих главах, когда мы перейдем от проектов, основанных только на программном обеспечении, к проектам, включающим SDR-аппаратуру. https://liveinternet.club/
ЧАСТЬ III РАБОТА С SDR-АППАРАТ УРОЙ https://liveinternet.club/
8 ФИЗИКА РАДИОСИГНАЛОВ В этой главе мы более подробно рассмотрим радио­ сигналы: что это такое, как они распространяются, сколько «места» занимают и какие помехи мешают им выполнять свою работу. В предыдущих главах эти идеи были изложены в упрощенном виде и касались необходимых элементов теории, для того чтобы быстро начать работу с реальными проектами GNU Radio, не теряя времени на изучение сотен страниц сухих математических и инженерных определений. Теперь мы готовы уточнить некоторые из этих элементов. Прежде чем продолжить, мы хотим еще раз обратиться к модели луковицы. Мы послойно будем углубляться в эти определения, и они редко будут представлены с той же математической строгостью, с которой вы можете столкнуться в учебниках по физике или инженерному делу. Цель разъяснения этих понятий в более общем виде состоит в том, чтобы вам было легче разбираться в материалах, связанных с радио, которые вы находите в интернете или в печатных изданиях, а также общаться с другими пользователями на эти темы. Помните, что слово fun (удовольствие) является частью слова fundamentals (основы) не просто так: как только вы поймете основы, получать удовольствие от SDR станет намного проще. К счастью, теперь вы немного разбираетесь в GNU Radio, так что можете напрямую использовать концепции, лежащие в основе этих теорий, а не просто пробегать наш пересказ. 178 Глава 8 https://liveinternet.club/
Электромагнитные волны Из главы 1 вы узнали, что сигнал представляет собой некое физическое свойство, изменяющееся таким образом, чтобы передать информацию. В случае радиосигналов такими физическими свойствами являются характеристики электромагнитных волн. Ученые и инженеры классифицируют электромагнитные волны в зависимости от их час­ то­ты, упорядочивая их по электромагнитному спектру. Мы уделяем особое внимание час­то­те как определяющему свойству, поскольку именно час­то­та определяет, как волна взаимодействует с окружающей средой, в том числе насколько хорошо она проникает в различные материалы, будут ли различные слои атмосферы поглощать ее, отражать или преломлять и даже будет ли она видна человеческому глазу. Категории электромагнитного спектра показаны на рис. 8.1 в порядке возрастания от самых низких час­тот слева до самых высоких справа. RF-диапазон длинные волны АМ FМ УКВ СВЧ, microwave инфракрасные волны видимый свет УФ рентген гамма-излучение Частота Рис. 8.1. Электромагнитный спектр, включая радиочастотный (RF) диапазон Некоторые из этих категорий связаны с радио, в то время как другие явно к радио не имеют отношения. Например, электромагнитные волны с час­то­та­ми примерно от 430 ТГц до 790 ТГц (терагерцы — это 1000 ГГц, или 1012 Герц) — это то, что вы знаете как видимый свет. Если вы не обладаете особыми способностями (как некоторые животные), все, что вы сейчас видите, передается вам электромагнитными волнами в этом диапазоне час­тот. Аналогичным образом волны с час­ то­та­ми от 3×1016 Гц до 3×1019 Гц считаются рентгеновскими лучами, которые используются в медицинских приборах и сканерах багажа в аэропортах. Поднимитесь по час­то­те еще выше, и вы обнаружите такие волны, которые могут подействовать на неосторожных физиков-экспериментаторов очень-очень нехорошим образом. В первую очередь нас интересует радиочасть электромагнитного спектра, которая обведена в левой части рис. 8.1. По данным Международного союза электросвязи (МСЭ, ITU), группы по стандартизации коммуникационных технологий, радиочастотный спектр занимает диапазон от очень низких час­тот до 3 ГГц. Общепринятое значение минимальной радиочас­то­ты — 3 кГц, хотя некоторые утверждают, что она должна составлять 3 Гц. Вопрос о том, насколько низкая эта «очень низкая» час­то­та, не имеет большого значения для большинства применений, поскольку использовать радиоволны на экстремально Физика радиосигналов https://liveinternet.club/ 179
низких час­то­тах очень трудно. Только специализированные системы связи, например на подводных лодках или в подземных шахтах, используют час­то­ты ниже 1 кГц1. Непосредственно выше 3 ГГц находятся области, называющиеся «микроволнами» (microwaves)2. Здесь возникает еще одна проблема с определениями, поскольку многие современные системы беспроводной связи, которые мы называем радиотехнологиями, включая Wi-Fi, используют микроволновые час­то­ты. Кроме того, спутниковые системы и системы сотовой связи 5G могут использовать час­то­ ты миллиметровых волн, намного превышающие 3 ГГц3. Однако для целей этой книги мы ограничимся только частью радиочастотного спектра: примерно от 1 МГц до 1 ГГц. GNU Radio не ограничивается этим диапазоном, но SDR-аппаратура, которую вы, возможно, захотите использовать, — отдельный вопрос. Мы рассмотрим частотные ограничения SDR-платформ в главе 11. Имейте в виду, что термины, определяющие различные части элект­ ромагнитного спектра, в значительной степени зависят от традиций. Радиоволны называются таким термином, потому что они, как правило, распространяются способами, полезными для беспроводной связи. Однако нет причин, по которым мы не могли бы создавать системы для передачи и приема сообщений на значительно более высоких час­то­тах, чем радиочастотный спектр. Именно это делают волоконно-оптические системы: они преобразуют данные в световую волну. Распространение радиоволн Когда говорят про распространение радиоволны, имеют в виду характер ее продвижения в различных средах. Когда эти волны сталкиваются с чем-либо, они изгибаются? Поглощаются ли они объектом? Отражаются ли? Ответы на эти вопросы играют большую роль в определении того, достигнет ли радиопередача своего адресата. Если бы радиопередачи осуществлялись только в вакууме, без каких-либо препятствий между передатчиком и приемником, то предсказать распространение волны было бы гораздо проще. Однако в реальном мире у нас есть здания, холмы, долины, изменения погоды, различные слои атмосферы, форма Земли, солнечные вспыш1 2 3 Радиоволны сверхнизких час­тот (сотни герц – единицы килогерц, что соответствует длинам волн тысячи-сотни километров) не экранируются морской водой и земной корой, в отличие от электромагнитных волн более высокой час­то­ты. Однако организация радиопередач в этих диапазонах очень сложна из-за необходимости иметь антенны огромных размеров. В отечественной практике радиодиапазон свыше 3 ГГц принято именовать «сверхвысокой частотой» (СВЧ); «microwaves» — устоявшееся название диа­ пазона в западной литературе. Миллиметровые волны — диапазон 30–300 ГГц. 180 Глава 8 https://liveinternet.club/
ки, метеоритные дожди и множество других осложняющих факторов. Радиоволны разных час­тот взаимодействуют с этими факторами совершенно по-разному. В результате разработчики радиовещательных устройств выбирают час­то­ту, наилучшим образом учитывающую факторы, которые, как ожидается, повлияют в конкретных случаях. Например, радиоволны на некоторых час­то­тах могут передаваться удаленным приемникам, отражаясь от верхних слоев атмосферы, и возвращаться обратно на Землю, минуя ограничение дальности действия, которое в противном случае было бы обусловлено кривизной планеты. Вот почему иногда вы можете услышать AM-радиостанции, вещающие из отдаленных городов, которые могут оказаться недоступными в других диапазонах. С другой стороны, радиоволны более высоких час­тот намного эффективнее при попытке установить связь в густонаселенных городских районах. Это одна из причин, по которой мобильный телефон работает на совсем других час­то­тах, чем радио в вашем автомобиле. Математическое моделирование распространения радиоволн в реальных условиях может оказаться чрезвычайно сложной задачей, но общие характеристики распространения в различных диапазонах час­тот хорошо известны. Диапазоны частот Радиоинженеры делят радиочастотный спектр на различные диапазоны час­тот, которые наилучшим образом подходят для конкретных применений. В табл. 8.1 приведен основной список радиочастотных диапазонов, включая принятые сокращенные названия и способы использования для каждого из них. Таблица 8.1. Частотные радиодиапазоны Частота 3–30 Гц 30–300 Гц 300 Гц – 3 кГц 3–30 кГц 30–300 kГц Название диапазона Международное Отечественное ELF Крайне низкие час­то­ты (КНЧ) SLF Сверхнизкие час­то­ты (СНЧ) ULF Инфранизкие час­то­ты (ИНЧ) VLF Очень низкие час­то­ты (ОНЧ) LF Длинные волны (ДВ) 300 кГц – 3 МГц 3–30 МГц MF Средние волны (СВ) HF Короткие волны (КВ) 30–300 МГц VHF Ультракороткие волны (УКВ), метровые волны (МВ) Применение Связь с подводными лодками, геофизические исследования Служба точного времени, мониторы сердечного ритма AM-радиовещание на длинных волнах, RFID-метки, любительское радио AM-радиовещание, любительское радио Вещание на коротких волнах, любительское радио, RFID, морские коммуникации FM-радиовещание, телевидение, любительское радио, пейджеры Физика радиосигналов https://liveinternet.club/ 181
Таблица 8.1 (окончание) Частота 300 МГц – 3 ГГц 3–30 ГГц 30–300 ГГц Название диапазона Международное Отечественное UHF Ультракороткие волны (УКВ), дециметровые волны (ДМВ) SHF Ультракороткие волны (УКВ), сантиметровые волны (СМВ) EHF Ультракороткие волны (УКВ), миллиметровые волны (ММВ) Применение Телевидение, мобильные телефоны, Wi-Fi, Bluetooth, GPS, любительское радио, пейджеры, домашняя автоматика Wi-Fi, любительское радио, спутниковая связь, мобильные телефоны В радиочастотном спектре многое происходит. Однако для целей этой книги мы не будем касаться чрезвычайно низких и чрезвычайно высоких час­тот в радиочастотном спектре. Это связано с тем, что для этих диапазонов обычно требуются антенны большой длины (в некоторых случаях — километрового размера) или очень специализированные (например, параболические). Кроме того, для передающего и принимающего оборудования здесь часто требуются довольно экзотические компоненты, которых нет в номенклатуре традиционной SDR-радиоаппаратуры. Многие из наиболее интересных нам приложений будут работать в диапазонах средних волн (MF, СВ), коротких волн (HF, КВ), метровых (VHF, УКВ-МВ) и дециметровых волн (UHF, УКВ-ДМВ). Обычно короткие волны (КВ) распространяются только в пределах прямой видимости (вообще говоря, радиус действия коротковолновых сигналов может быть значительно больше, но только при определенных условиях окружающей среды). Сверхвысокочастотные сигналы (в диапазонах МВ и ДМВ) также распространяются в зоне прямой видимости, но при использовании для передачи цифровых сигналов дециметровые волны (300 МГц – 3 ГГц) способны обеспечивать очень высокую скорость передачи данных. Повторим, что это грубые обобщения, но они должны помочь понять, что разные диапазоны лучше всего подходят для разных ситуаций. Частота и длина волны Помните, мы говорили вам, что диапазон час­тот видимого света составляет от 430 до 790 ТГц? Если вы посмотрите соответствующий раздел в учебнике физики, скорее всего, увидите, что диапазон, на который ссылаются там, использует другую характерис­ тику, называемую длиной волны, — это длина одного периода колебания электромагнитной волны. Видимый свет имеет диапазон длин волн от 380 нм (нанометров, или миллиардных долей метра) до 700 нм. В табл. 8.1 отечественные названия диапазонов (длинные, короткие, метровые волны и т. д.) также большей частью ссылаются на длину волны. 182 Глава 8 https://liveinternet.club/
Некоторые части радиочастотного спектра традиционно обозначаются по час­то­те, а другие — по длине волны, поэтому важно знать разницу между этими двумя свойствами. Для электромагнитной волны одной час­то­ты интенсивность как ее электрической, так и магнитной составляющих колеблется назад и вперед, как показано на этом рисунке: Колебательный характер электромагнитной волны Это наша любимая синусоидальная волна, часто повторяющаяся сущность в математике и физике. Длина волны — это просто расстояние, пройденное волной в каждом периоде, как показано на рисунке. Физика говорит нам, что пройденное расстояние (d) равно скорости (v), умноженной на время (t): d = v · t. Волна пройдет расстояние, равное одной длине волны (λ), за время однократного колебания (toscillation): λ = v · toscillation. Время, необходимое для однократного колебания, просто обратно пропорционально час­то­те f (представьте, что вы имеете переключения в секунду и получаете количество секунд на одно переключение): v λ= . f Таким образом, единицами измерения длины волны являются расстояние за период или, в данном случае, просто расстояние, поскольку электромагнитные волны распространяются в воздухе со скоростью света c (пожалуйста, физики-перфекционисты, не зацикливайтесь на крошечной разнице между скоростью света в вакууме и в воздухе). В результате мы получаем формальное уравнение для длины электромагнитной волны: Физика радиосигналов https://liveinternet.club/ 183
c λ= . f Здесь λ — длина волны, f — час­то­та, а c — скорость света, равная 3×108 метров в секунду. Иногда удобнее представить скорость света как 300 миллионов метров в секунду, или 300×106. Уравнение говорит нам, что длина волны любой электромагнитной волны равна скорости света (в метрах в секунду), деленной на количество колебаний, которые он совершает в секунду (в герцах, равных количеству периодов в секунду). Это дает количест­во мет­ров за одно колебание, что и является длиной волны, согласно определению. Вот пример расчета длины волны для FM-радио­ сигнала на час­то­те 100 МГц: λ= 300 × 106 м/с = 3 м. 100 × 106 колебаний/с Вы также можете преобразовать длину волны в час­то­ту, преобразовав уравнение следующим образом: v f= . λ Если нужно определить час­то­ту волны длиной 1 м, сделать это можно следующим образом: f= 300 × 106 м/с = 300 × 106 колебаний/с = 300 МГц. 1 м/колебание В большинстве случаев вам не нужно будет выполнять эти вычисления, но время от времени вы можете наткнуться на документ, в котором говорится о длине волны, а не о час­то­те (или наоборот), тогда вам придется преобразовать длину волны в час­ то­ту или совершить обратное преобразование. Ширина полосы частот Если радиочастотный спектр разделен на диапазоны, термин «ширина полосы час­тот» относится к диапазону час­тот. В частности, ширина полосы час­тот описывает, насколько большой диапазон час­тот занимает реальный радиосигнал. Иными словами, ширина полосы час­тот определяет, какую часть ограниченного пространства в радиочастотном спектре занимает ваш сигнал. На блок-схеме FM-приемника из главы 7 полоса пропускания определяется тюнером, реализуемым блоком Frequency Xlating FIR Filter, обведенным на рис. 8.2. 184 Глава 8 https://liveinternet.club/
Рис. 8.2. FM-приемник с выделенным тюнером Частота среза фильтра составляет 75 кГц, и поскольку этот фильтр работает с потоком комплексных чисел, он фактически фильтрует от –75 кГц до +75 кГц, как показано на рис. 8.3. Полоса пропускания фильтра, равная 150 кГц, выбирается в соответствии с ожидаемой шириной полосы час­тот FM-сигнала и регулируется значением chan_ width, подаваемым на блок Frequency Xlating FIR Filter. Усиление фильтра Полоса пропускания фильтра –75 кГц Частота +75 кГц Рис. 8.3. Полоса пропускания комплексного фильтра низких частот Принимаемый FM-сигнал должен «вписываться» в полосу пропускания фильтра, выбираемую исходя из ширины полосы час­тот Физика радиосигналов https://liveinternet.club/ 185
сигнала (в данном случае 150 кГц), как показано на рис. 8.4(а). Если сигнал неожиданно окажется шире полосы пропускания фильтра, как показано на рис. 8.4(б), фильтр исказит его, отсекая высокочастотные составляющие сигнала. Это может ухудшить качество приема или привести к полной неработоспособности приемника. Уровень сигнала / Усиление фильтра –75 кГц Сигнал Полоса пропускания фильтра +75 кГц Уровень сигнала / Усиление фильтра –75 кГц +75 кГц Уровень сигнала после фильтрации –75 кГц +75 кГц Частота Сигнал Полоса пропускания фильтра Частота Сигнал Частота Рис. 8.4. Ширина полосы частот сигнала при достаточной (a) и недостаточной полосе пропускания фильтра (б) С шириной полосы час­тот тесно связано понятие ширины канала — формальное определение того, какую часть радиочастотного спектра 186 Глава 8 https://liveinternet.club/
разрешено использовать тому или иному типу сигнала. Обратите внимание на интервал между диапазонами FM-радио. Все станции в Соединенных Штатах расположены на час­то­тах, нечетно кратных 200 кГц: 94,7 МГц, 94,9 МГц, 95,1 МГц и т. д.1 Каждой станции или каналу присваивается ширина 200 кГц, как показано на рис. 8.5. Ширина канала Ширина канала Ширина канала Ширина канала 95,7 МГц 95,5 МГц 95,3 МГц 95,1 МГц 94,9 МГц 94,7 МГц Частота Рис. 8.5. Карта FM-каналов Ширина полосы час­тот — это физическая проблема; это физическое свойство рассматриваемого сигнала. Ширина канала, с другой стороны, является человеческой (и часто юридически установленной) конструкцией, независимой от физики реальных радиосигналов. Тео­ ретически предполагается, что сигнал должен соответствовать отведенному для него каналу. То есть ширина полосы час­тот не должна превышать ширину канала, как показано на рис. 8.6(а). Но что, если, например, FM-передатчик плохо спроектирован или работает со сбоями, и его выходной сигнал в конечном итоге будет иметь более широкую полосу час­тот? Вы сможете наблюдать что-то похожее на сценарий, показанный на рис. 8.6(б), когда полоса час­тот превышает ширину канала. В этом случае сигнал может начать создавать помехи для соседних каналов. Этот второй сценарий невозможен? Нет, иногда такое случается на самом деле. Это незаконно? Американской Федеральной комиссии по связи (FCC) или аналогичному регулирующему органу вашей страны это определенно не понравится. Правильно спроектированные системы радиосвязи работают таким образом, чтобы ожидаемая ширина полосы час­тот передаваемого ими сигнала находилась в пределах диапазона час­тот отведенного канала. Что происходит, когда ширина канала меньше, чем сигнал, который необходимо передать? Это не теоретический вопрос, а скорее вопрос, который можно проиллюстрировать на примере AMрадиопередачи. Предположим, что полоса час­тот модулируемого сигнала равна ширине полосы час­тот сигнала, поступающего в моду1 С некоторыми оговорками в различных диапазонах такое же частотное расстояние между FM-станциями принято и в ряде других стран, в том числе и в России. Физика радиосигналов https://liveinternet.club/ 187
лятор на стороне передачи. Предположим также, что модулируемая полоса час­тот пропорциональна входному сигналу. (Об этой взаимо­ связи мы поговорим подробнее в главе 10, но пока ограничимся этим утверждением.) Затем напомним, что диапазон звуковых сигналов составляет от 20 Гц до 20 кГц, т. е. теоретически идеальная полоса пропускания аудиосигнала составит 19,98 кГц. Однако, как мы видели в проекте AM-приемника из главы 4, расстояние между каналами AM-станций составляет всего 10 кГц. (a) FM-сигнал Ширина канала Ширина канала Ширина канала 95,7 МГц 95,5 МГц 95,3 МГц 95,1 МГц 94,9 МГц 94,7 МГц (b) Частота FM-сигнал Ширина канала Ширина канала Ширина канала 95,7 МГц 95,5 МГц 95,3 МГц 95,1 МГц 94,9 МГц 94,7 МГц Частота Рис. 8.6. Сигнал, правильно расположенный в канале (a), по сравнению с сигналом, превышающим ширину канала (б) Как же компании AM-вещания распределяют сигнал шириной 19,98 кГц по каналам 10 кГц? Давайте выясним это, более подробно рассмотрев ширину полосы аудиосигнала. Создайте новую блок-схему и сохраните ее как bandwidth.grc. Добавьте блок источника Wav File Source и привяжите свойство File к файлу ch_05/HumanEvents_s32k. wav. Затем добавьте блок фильтра нижних час­тот Low Pass Filter, установив для него тип FIR на Float->Float (Decimating), час­то­ту среза Cutoff Freq на cutoff, а ширину полосы перехода Transition Width — на cutoff/10. 188 Глава 8 https://liveinternet.club/
Затем добавьте аудиовыход Audio Sink и блок QT GUI Frequency Sink, установив для последнего значение Float, а ширину спектра Spectrum Width — на половину (Half). Чтобы предоставить нам контроль над фильтром во время выполнения, добавьте QT GUI Range с идентификатором ID, равным cutoff, значением по умолчанию Default Value = 16e3, начальным значением Start value = 500, конечным значением Stop value = 16e3 и значением шага Step = 500. Наконец, подключите источник Wav File Source к входу фильтра Low Pass Filter, а его выход — к QT GUI Frequency Sink и к аудиовыходу Audio Sink. Когда вы закончите, блок-схема должна выглядеть так, как показано на рис. 8.7. Рис. 8.7. Блок-схема аудиофильтра По умолчанию эта блок-схема будет транслировать аудиоклип, отфильтровывать час­то­ты выше 16 кГц и отображать результат воспроизведения отфильтрованного звука на звуковой карте ПК. Во время работы программы мы также будем контролировать час­то­ту среза фильтра. Запустите программу, которая должна воспроизводить некоторые знакомые звуки, а также показывать частотный график (см. рис. 8.8). Начальная час­то­та среза 16 кГц близка к максимальной час­то­те слышимого звука 20 кГц, и, таким образом, фильтр по умолчанию пропускает почти весь звуковой спектр. (Как оказалось, этот файл содержит только частотные составляющие до 16 кГц, но подробности отложим до главы 11.) Поскольку фильтр ничего не удаляет из звука, качество звука должно быть достаточно нормальным. Теперь уменьшите значение час­то­ты среза cutoff фильтра, чтобы сделать фильтрацию нижних час­тот более узкой. Это имитирует эффект, когда радиостанция сужает полосу пропускания своего входного сигнала. Сначала попробуйте использовать час­то­ту 10 кГц, в результате чего получится частотный график, подобный показанному на рис. 8.9. Физика радиосигналов https://liveinternet.club/ 189
Рис. 8.8. Частотный график аудиосигнала с частотой среза фильтра низкой частоты 16 кГц Рис. 8.9. Демодулированный аудиосигнал после фильтрации с частотой среза 10 кГц 190 Глава 8 https://liveinternet.club/
При уменьшении час­то­ты среза вы должны увидеть изменение графика, но слышите ли вы разницу в звуке? Возможно, слышите, а может, и нет. На наш взгляд, эффект присутствует, но он очень слабый. Теперь попробуйте изменить час­то­ту среза на 5 кГц. Сейчас вы должны услышать явный эффект приглушения. Как насчет 3 кГц? Еще большее приглушение. Вы все еще можете разобрать некоторые слова, даже если у вас есть только полоса сигнала частотой 1 кГц или ниже, как видно на рис. 8.10, но чем ýже полоса пропускания аудиосигнала, тем хуже качество (или верность воспроизведения, если хотите точный термин). Рис. 8.10. Демодулированый аудиосигнал после фильтрации с частотой среза 1 кГц Исходя из нашего предыдущего предположения, чем меньше ширина полосы входного сигнала, тем меньше ширина полосы модулированного сигнала. AM-радиостанции используют это преимущество, фильтруя входной сигнал в достаточной степени, чтобы он соответствовал заданной ширине канала, но не настолько, чтобы результат казался ужасным. Ключевым моментом в этом процессе является фильтрация входного сигнала перед его модуляцией. В противном случае более высокие час­то­ты входного сигнала (те, которые, как вы решили, вам не нужны) все равно будут присутствовать на входе модулятора. Следовательно, они приведут к тому, что выходной сигнал модулятора будет занимать более широкую полосу. Мы более подробФизика радиосигналов https://liveinternet.club/ 191
но рассмотрим этот вопрос, когда будем строить блок-схему передатчика в главе 13. Шум Значительная часть времени при работе с SDR-оборудованием или любым другим видом радиосвязи будет посвящена борьбе с шумами, под которыми мы понимаем все воспринимаемое приемником, что не соответствует желаемой передаче. Шум в радиочастотном диапазоне очень похож на шум, который постоянно действует на нас в звуковом диапазоне. Закройте на мгновение глаза, где бы вы ни находились, и прислушайтесь. Независимо от того, насколько тихо в вашей комнате, на скамейке в парке или в вагоне метро, шум все равно будет слышен. Возможно, частью этого шума является гудение холодильника или вентиляторов вашего компьютера. Это также может быть лай собак или шум проезжающих мимо автомобилей. Это может быть даже биение крови в ваших собственных ушах. Идеальной тишины не существует ни с точки зрения звукового, ни с точки зрения радиочас­ тотного окружения. Когда вы пытаетесь прослушать передачу в радиоприемнике, другие звуки могут создавать помехи, например лай собаки или разговор другого человека. Но это также может быть электрическое оборудование, излучающее электромагнитные волны. На самом деле компрессор вашего холодильника одновременно создает как звуковой, так и электромагнитный шум, а переменный ток частотой 50 Гц, подаваемый в ваш дом или офис, создает радиочастотный шум, который не сильно отличается от звукового шума, издаваемого многими бытовыми приборами. Кроме того, существует шум, создаваемый несовершенными компонентами самого вашего радиоприемника, что не так уж сильно отличается от шума крови в ушах. Все это в совокупности создает радиочастотную какофонию, похожую на звуки оживленного города, которые сливаются воедино. Знаете ли вы, что происходит, когда вы устраняете все звуковые шумы вокруг себя, например когда вы входите в безэховую камеру, помещение, специально спроектированное для устранения всех внешних шумов? В этот момент вы начнете слышать звуки, исходящие от вашего собственного тела, такие как ваше дыхание и сердцебиение. Возможно, вы даже почувствуете тот самый шум в ушах, о котором не подозревали. Это похоже на эффект внутреннего шума в SDR-системе, создаваемого аппаратным обеспечением SDR и компьютером, к которому оно подключено. 192 Глава 8 https://liveinternet.club/
Визуализация радиочастотного шума Давайте рассмотрим реальный пример радиочастотного шума. Создайте новую блок-схему и сохраните ее как file_viewer.grc; мы будем использовать ее для просмотра радиочастотной активности в нашем входном FM-файле. Этот файл с реальными радиочастотными данными неизбежно содержит помехи. Подумайте сами, как бы вы построили эту блок-схему, и попробуйте, не читая дальше. Добавьте следующие три блока: источник File Source, регулятор Throttle и БПФ-интерфейс QT GUI Frequency Sink. Подключите их в указанном порядке, затем свяжите свойство File источника File Source с ch_07/fm_c96M_s8M.iq, а свойство Center Frequency (Hz) блока QT GUI Frequency Sink установите в 96e6. Наконец, добавьте блок Variable с переменной samp_rate, равной 8e6, чтобы она соответствовала час­то­те дискретизации файла. Когда вы закончите, блок-схема должна выглядеть так, как показано на рис. 8.11. Рис. 8.11. Блок-схема FM-приемника с БПФ-визуализатором сигнала источника Запуск программы выдаст что-то вроде частотного графика, показанного на рис. 8.12. Пики на графике час­тот отображают FM-станции, но что происходит в промежутках между ними? Конечно, шум! Вот так выглядит радиочастотная какофония, если смотреть в частотной области. По сути, это минимальный уровень радиочастотной энергии, который присутствует всегда, даже при отсутствии сигнала, созданного человеком. Однако этот уровень не является постоянным, а скорее скачет вверх и вниз случайным образом. Мы не просто так используем слово «случайный». Фактически в GNU Radio можно смоделировать эффекты шума, используя блок источника шума Noise Source. По сути, это генератор случайных чисел, который добавляет генерируемые им случайные значения к полезному сигналу, снижая его четкость. Физика радиосигналов https://liveinternet.club/ 193
Сигналы Шум Рис. 8.12. Частотный график входного радиосигнала Нахождение отношения сигнал/шум Хотя мы сделаем все возможное, чтобы свести к минимуму уровень шума в наших SDR-системах, абсолютное значение шума само по себе не является критичным. Больше всего нас волнует отношение сигнал/ шум (signal-to-noise ratio, SNR), или то, насколько легко мы можем различить целевой сигнал на фоне шума. Возвращаясь к нашей аналогии со звуком, нетрудно услышать, как кто-то говорит, находясь в шумном, переполненном людьми помещении, если говорящий использует мегафон. И наоборот, даже в очень тихом помещении может быть трудно расслышать собеседника, если он говорит достаточно тихим шепотом. Важна громкость голоса по отношению к уровню шума в комнате. Если посмотреть на частотный график входных данных FM-радио­ станции, то можно увидеть, что сигналы довольно четко различаются на фоне шума. На самом деле самые мощные станции передают сигналы, уровень шума которых более чем на 20 дБ превышает уровень шума, как показано на рис. 8.13. Хотя 20 дБ может показаться небольшой величиной, вспомните из главы 5, что децибелы — это логарифмическая величина. Таким образом, разница в 20 дБ означает, что мощность FM-сигнала в 100 раз превышает мощность шума1. 1 Отношение сигнал/шум (SNR) по определению есть отношение мощностей; для энергетических величин 20 децибел означают превышение в 100 раз (см. сноску на стр. 106). Между тем частотные графики блока QT GUI Frequency Sink показывают уровень (амплитуду), а не мощность сигнала (авторы сами об этом напоминают абзацем выше) и 20 дБ должно было бы означать превышение в 10 раз. Противоречие легко снимается, если вспомнить, что отношение мощностей пропорционально отношению квадратов уровней. 194 Глава 8 https://liveinternet.club/
Это значение в 20 дБ разницы является приблизительной оценкой отношения сигнал/шум для нашей системы. Может показаться странным называть результат операции вычитания отношением, но вычитание одного логарифмического значения из другого математически аналогично делению предлогарифмических значений. Таким образом, формально говоря, SNR равен мощности сигнала (в дБ) за вычетом мощности шума (в дБ). Сигнал ≈ –30 дБ Шум ≈ –50 дБ Рис. 8.13. График частот FM-радиосигнала со сравнением уровней сигнала и шума Итоги Из этой главы вы узнали, что радиосигналы передаются на электромагнитных волнах, час­то­та которых определяет способ их распространения. Вы также увидели, что полоса пропускания сигнала представляет собой диапазон час­тот, которые он занимает в радиочастотном спектре. Наконец-то вы увидели, как выглядит шум, а также поняли важность показателя SNR. Ознакомившись с этими концепциями, вы теперь готовы подключить блок-схемы GNU Radio к аппаратному обес­печению SDR и работать с настоящими радиосигналами в режиме реального времени. https://liveinternet.club/
9 РАБОТА БЛОК- СХЕМ GNU RADIO С SDR- ОБОРУДОВАНИЕМ Ожидание закончилось: в этой главе мы научимся взаимодействовать с настоящим радиоприемником. Мы адаптируем блок-схему FM-приемника для работы с реальным SDR-оборудованием, чтобы он мог принимать и обрабатывать данные о радиочас­то­тах в реальном времени. До сих пор мы уделяли основное внимание программной части SDR-радиосвязи. Входные и выходные данные построенных блоксхем в основном были связаны с компьютерными файлами. Мы извлекали радиочастотные данные из файлов и обрабатывали их с помощью блок-схем, или генерировали математически чистые формы сигналов из специальных блоков-источников и использовали их для иллюстрации различных концепций. Что касается выходных данных, то мы отправляли все данные в выходные блоки GNU Radio, позволяющие визуализировать результаты, или отправляли их на звуковую карту компьютера. Хотя мы смогли таким образом упростить процесс обучения, работая с надежно проверенными файлами данных или математическими конструкциями, пришло время начать работать с реальным радиооборудованием. Как обычно, мы сначала погрузимся в работу с головой, а затем разберемся, что мы сделали. При выполнении 196 Глава 9 https://liveinternet.club/
преобразования в аппаратное обеспечение обращайте внимание на те части блок-схемы, в которые вам необходимо внести изменения, а также те, которые остаются неизменными. Вы можете быть удивлены, увидев, как мало для поддержки аппаратного ввода требуется изменить в блок-схеме FM-приемника, управляемой файлами, но все же есть несколько настроек, зависящих от оборудования, в которые необходимо вникнуть. Для целей этой главы мы будем исходить из того, что у вас есть HackRF SDR, и соответствующим образом адаптируем инструкции. Однако в конце главы мы также объясним, чем отличается процесс настройки для других SDR, таких как устройство Ettus USRP или PlutoSDR. Если у вас другой тип SDR, вы должны быть в состоянии определить, какой исходный блок использовать вместо блоков, описанных здесь, и как его настроить с помощью быстрого поиска в интернете. Создание блок-схемы с аппаратной поддержкой Мы начнем с преобразования существующей блок-схемы FM-прием­ ни­ка в блок-схему, которая может взаимодействовать с реальным HackRF SDR. Сначала откройте проект ch_09/fm_rx.grc. Как вы можете видеть и на своем экране, и на рис. 9.1, функционально он ничем не отличается от FM-радио, созданного в главе 7. Рис. 9.1. Блок-схема FM-приемника с входными данными из файла Работа блок-схем GNU Radio с SDR-оборудованием https://liveinternet.club/ 197
Вам нужно будет изменить эту блок-схему таким образом, чтобы она получала свои данные из реального SDR, а не из файла. Удалите существующий блок File Source, затем добавьте Soapy HackRF Source, подключив его выходной порт ко входам блоков Frequency Xlating FIR Filter, и QT GUI Sink. Как вы можете видеть на рис. 9.2, этот новый блок заменяет предыдущий источник File Source в качестве поставщика радиоданных для блок-схемы. Рис. 9.2. Блок-схема FM-приемника с аппаратным вводом данных Вы можете заметить, что центральная час­то­та этого нового блока уже установлена на определенное значение, но это не те 96 МГц, которые нам нужны. Откройте свойства блока Soapy HackRF Source, перейдите на вкладку RF Options, затем измените полосу пропускания Bandwidth на samp_rate, а центральную час­то­ту Center Freq (Hz) — на center_freq. Эти настройки указывают SDR, на какую час­то­ту следует ориентироваться при захвате радиочастотных данных. После внесения изменений свойства блока должны выглядеть так, как показано на рис. 9.3. 198 Глава 9 https://liveinternet.club/
Рис. 9.3. Свойства блока Soapy HackRF Source Все готово! Все, что вам нужно было сделать, — это поменять источник сигнала, и блок-схема окажется подключена к аппаратуре. Подключение оборудования Теперь мы готовы к подключению SDR-оборудования. Сначала подключите антенну к плате HackRF (мы предполагаем, что у вас ANT500, но подойдут и другие антенны). Лучше всего подключить антенну к SDR до включения питания, поскольку передача сигнала без установленной антенны может привести к повреждению SDR. Даже если вы не планируете использовать SDR для передачи, это все равно важно, поскольку передача может произойти непреднамеренно. Например, возможно, вы нажмете не ту кнопку или выберете не то свойство GNU Radio. Поэтому на всякий случай всегда сначала подключайте антенну. Куда вставлять антенну? На HackRF есть разъем с надписью «ANTENNA» (см. рис. 9.4). Работа блок-схем GNU Radio с SDR-оборудованием https://liveinternet.club/ 199
Рис. 9.4. Модуль HackRF One с разъемом «ANTENNA» в левом нижнем углу Сама антенна ANT500 имеет такой же разъем, но другой конфигурации (рис. 9.5). Они называются SMA-разъемами (SubMiniature version A). Разъем антенны — SMA-штырь (male), а разъем на модуле HackRF — SMA-гнездо (female). Более подробно о разъемах мы поговорим в главе 12. Рис. 9.5. Разъем антенны ANT500 Аккуратно совместите маленький штырек на антенном разъеме с соответствующим отверстием на разъеме модуля HackRF, затем осторожно (чтобы не перекосить разъемы!) навинтите внешний кор­пус антенного разъема на резьбу разъема HackRF, как показано на рис. 9.6. Это не так уж сильно отличается от подключения любых других коаксиальных разъемов, например используемых кабельным телевидением или модемом. 200 Глава 9 https://liveinternet.club/
Рис. 9.6. Подключение антенны к модулю HackRF Затем подключите HackRF к компьютеру с помощью USB-кабеля. Вам понадобится кабель со стандартным разъемом USB type A (большой прямоугольный) со стороны компьютера и разъемом micro-USB type B (миниатюрный плоский) со стороны HackRF. Как только все будет подключено, на HackRF должны загореться несколько лампочек, как показано на рис. 9.7. Рис. 9.7. Светодиоды на модуле HackRF после подключения Если в какой-то момент HackRF перестает отвечать на запросы при попытке запустить его, нажмите кнопку «RESET» на левой стороне модуля. Это часто позволяет восстановить работоспособность. Однако держитесь подальше от кнопки «DFU». Удерживая ее нажатой во время выполнения других действий, вы можете перевести вашу плату в нежелательный режим. Нажимать эту кнопку следует только в том случае, если вам необходимо обновить встроенное ПО модуля HackRF. Работа блок-схем GNU Radio с SDR-оборудованием https://liveinternet.club/ 201
Работа с аппаратным SDR-приемником Теперь, когда модуль подключен и на нем горят индикаторы, можно опробовать радиоприемник. Вернитесь к GNU Radio Companion и нажмите Execute (Выполнить), чтобы запустить программу. В окне консоли должен появиться текст, сообщающий о соединении, которое GNU Radio установила с платой HackRF (данные могут отличаться): Generating: “/home/paul/book/01_field_exp_sdr/ch_09/solutions/top_block.py” Executing: /usr/bin/python3 –u /home/paul/book/01_field_exp_sdr/ch_09/solutions/top_block.py [INFO] Opening HackRF One #0 14d463dc2f6778e1... Затем вы должны услышать либо разборчивый звук, либо помехи, в зависимости от настройки по умолчанию и радиостанций, доступных в вашем регионе. Если значение по умолчанию для параметра freq (один из блоков QT GUI Entry) совпадает с вещательной станцией, то вы услышите что-то похожее на FM-радио — музыку или речь. Однако, скорее всего, вам потребуется настроить радио на нужную станцию. Вы уже должны иметь из главы 6 представление о том, как это сделать, — там мы практиковались в настройке с помощью необработанных радиочастотных данных из записанного файла. Помните, что пики, которые вы видите на частотном графике, соответствуют более высокой интенсивности радиочастотного излучения. В диапазоне FM единственной вероятной причиной этих пиков являются сигналы FM-вещания. Наведите указатель мыши на один из пиков и посмотрите на отображаемую час­то­ту. Если вы находитесь в Соединенных Штатах, эта час­то­та должна быть нечетно кратна 100 кГц. Введите эту час­то­ту в поле ввода freq в верхней части экрана, чтобы прослушать аудио на час­то­те этого сигнала. При запуске блок-схемы в нашем регионе отображается график час­тот, показанный на рис. 9.8, но в вашем конкретном случае картинка, конечно, будет отличаться в зависимости от сигналов FM-вещания, присутствующих в вашем регионе. Потратьте некоторое время на изучение FM-диапазона и посмот­ рите, сколько станций вы можете поймать. Имейте в виду, что единственное различие между аппаратным радио и чисто программными моделями, на которых мы тренировались ранее, заключается в источнике входных данных. Здесь вы получаете данные из окружающего мира в режиме реального времени с помощью SDR-аппаратуры, тогда как раньше вы получали данные из файла с предварительно записанными радиочастотными данными. 202 Глава 9 https://liveinternet.club/
Примечание Если вам кажется, что приемник настроен на радиостанцию, но вы по-прежнему слышите статические помехи, возможно, потребуется изменить взаиморасположение компьютера, модуля SDR и соединительного кабеля. Рис. 9.8. Окно выполнения FM-приемника Использование аппаратуры USRP Инструкции, написанные для HackRF, требуют лишь нескольких изменений для работы с различным SDR-оборудованием. Например, чтобы использовать Ettus USRP, добавьте в блок-схему блок UHD:USRP Source вместо Soapy HackRF Source и подключите его таким же образом, как показано на рис. 9.2. Затем дважды щелкните по этому новому блоку, чтобы открыть его свойства. Как и в случае с блоком Soapy HackRF Source, в этом окне есть несколько вкладок. Перейдите на вкладку RF Options (Параметры RF) и установите следующие значения: Ch0: Center Frequency: center_freq; zz Ch0: Gain Value: 40; zz Ch0: Antenna: RX2 (установка по умолчанию). zz В итоге окно свойств должно выглядеть так, как показано на рис. 9.9. Работа блок-схем GNU Radio с SDR-оборудованием https://liveinternet.club/ 203
Рис. 9.9. Свойства блока UHD:USRP Source После завершения настроек блок-схема будет выглядеть так же, как в версии HackRF, только с другим блоком источника (см. рис. 9.10). Рис. 9.10. Блок-схема FM-приемника с подключенным модулем Ettus USRP Перед запуском программы убедитесь, что антенна подключена к порту RX2 на модуле USRP. 204 Глава 9 https://liveinternet.club/
Использование другого оборудования Если у вас есть другой SDR-модуль, например PlutoSDR, bladeRF или LimeSDR, сначала убедитесь, что для этого оборудования установлены драйверы. За инструкциями по установке обратитесь к производителю соответствующего SDR-модуля. После этого замените блок Soapy HackRF Source в блок-схеме на блок, соответствующий имеющемуся модулю, подключив его порты точно таким же образом. Затем нужно будет настроить свойства блока в соответствии с документацией к подключенному модулю. Названия свойств могут немного отличаться, но в них будут использоваться знакомые значения samp_rate и center_freq. Обычно также требуется указать значение аппаратного усиления (gain value). Имейте в виду, что некоторые платформы могут не поддерживать час­то­ту дискретизации 8 Мбит/с, поэтому вам может потребоваться ее уменьшить. Итоги В этой главе мы, наконец, приступили к подключению физического оборудования! Мы надеемся, что в этом процессе вами осознан ключевой момент: в имеющейся блок-схеме приемника можно легко переключаться между различными источниками радиоданных. Это может быть переключение между различными файлами, содержащими захваченные радиоданные, или, как мы сделали здесь, переключение между файлом и данными радиосвязи в реальном времени из физического SDR-приемника. Остальная часть блок-схемы практически не требует изменений. Теперь, когда вы попробовали свои силы в приеме радиосигналов с помощью реального оборудования, вы, возможно, задумаетесь и о передаче. Для этого в следующей главе мы сначала подробнее рассмотрим, как работает модуляция. https://liveinternet.club/
10 МОДУЛЯЦИЯ В предыдущих главах мы использовали демодуляцию в блок-схемах AM- и FM-приемников для извлечения аудиосигналов из поступающих радиочастотных данных. В этой главе мы рассмотрим противоположный процесс: использование модуляции для преобразования аудиосигнала в передаваемые радиочастотные данные. На самом деле мы пока ничего не будем передавать, но как только поймем, как работает модуляция, можно будет подготовиться и к отправке сигналов с помощью SDR. В главе 1 мы обсуждали модуляцию достаточно подробно, отметив, что она включает в себя использование свойства одного сигнала (информации, которую вы хотите передать) для управления свойством другого сигнала (несущей, обычно базовой синусоидой). Существует три свойства несущей, которые можно изменять: амплитуда, час­то­та и фаза. В этой главе мы дадим определение каждому из этих типов модуляции и проиллюстрируем их работу с помощью блок-схем GNU Radio. Основное внимание мы уделим модуляции аналоговых сигналов, хотя мы также кратко коснемся и цифровых. Однако прежде чем перейти к этим вопросам, начнем с обсуждения входного сигнала модулятора: сигнала базовой полосы час­тот. Сигналы базовой полосы частот Простейшее определение базовой полосы час­тот (baseband) заключается в том, что это информация, которую мы хотим получать от радио­ приемника. Например, в случае наших недавних проектов AM и FM базовую полосу час­тот занимали некоторые аудиоданные. С точки 206 Глава 10 https://liveinternet.club/
зрения передатчика, вы можете рассматривать сигнал базовой полосы час­тот как исходный сигнал, который мы пытаемся передать по радио, до выполнения какой-либо модуляции. Часть термина «базовая полоса час­тот», обозначающая полосу час­ тот, указывает на то, что мы говорим о некоем диапазоне час­тот. Другой способ представления о полосе час­тот — это сигнал, час­то­та которого колеблется от 0 Гц до некоторой предельной час­то­ты (аналог час­то­ты среза в фильтрах). Предельная час­то­та варьируется в зависимости от специфики рассматриваемой радиосистемы, что означает, что диапазон час­тот одного сигнала базовой полосы час­тот будет отличаться от диапазона час­тот другого. Чтобы увидеть, как это определение «от 0 Гц до предельной час­ то­ты» выглядит на практике, давайте вернемся к FM-приемнику из главы 7 и добавим частотный график, показывающий базовую полосу час­тот. Откройте файл ch_10/fm_rx.grc, который содержит копию этого проекта. Затем добавьте блок QT GUI Frequency Sink и подключите его к выходу блока приема WBFM Receive. Установите для свойства Bandwidth блока QT GUI Frequency Sink значение working_samp_rate, для его типа Type значение Float, а для ширины спектра Spectrum Width значение Half. Обратите внимание, что свойство Spectrum Width будет доступно только после установки типа. Теперь блок-схема должна выглядеть так, как показано на рис. 10.1. Рис. 10.1. Блок-схема FM-приемника с выводом графика частот демодулированного сигнала Модуляция https://liveinternet.club/ 207
Поскольку QT GUI Frequency Sink принимает сигнал из блока приема WBFM Receive (демодулятора в этой блок-схеме), это дает нам представление о базовой полосе час­тот: желаемый сигнал после его демодуляции. Результат работы программы должен выглядеть примерно так, как показано на рис. 10.2. Рис. 10.2. Частотный график демодулированной базовой полосы частот сигнала Этот частотный график соответствует свойствам сигнала базовой полосы час­тот, поскольку он варьируется от 0 Гц до некой предельной час­то­ты. В данном случае базовая полоса час­тот соответствует аудиосигналу, содержащему человеческие голоса (обратите внимание, что после повторной дискретизации и усиления сигнал поступает в блок аудиовыхода). У человеческих голосов почти всегда бóльшая часть энергии сигнала сосредоточена в нижней части звукового спектра, и действительно, на графике мы можем видеть, что самые высокие уровни близки к 0 Гц. Строго говоря, частотный график показывает, что сигнал распространяется почти до 200 кГц, что значительно превышает верхнюю границу звукового спектра (20 кГц). Эта часть сигнала является простым шумом и может быть проигнорирована. Если бы наше радио принимало цифровые, а не аналоговые данные, форма сигнала базовой полосы час­тот выглядела бы совсем по-другому и могла бы содержать гораздо более высокочастотные компоненты, чем голосовые данные, показанные на рис. 10.2. Однако независимо от информации, содержащейся в сигнале базовой полосы час­тот, ключевым моментом является то, что именно такой сигнал будет поступать на вход модулятора передатчика и оказываться на выходе демодулятора приемника. 208 Глава 10 https://liveinternet.club/
Примечание В телекоммуникациях, где в одном канале может одновременно передаваться очень много цифровых коммуникационных сигналов (голос, данные, видео и т. д.), термин «базовая полоса час­тот» обычно описывает информацию, содержащуюся в одном канале. Это определение в чем-то похоже на то, как мы использовали этот термин в данном разделе ранее, но есть некоторые важные отличия. Теперь, когда мы кое-что знаем о сигналах базовой полосы час­тот, поступающих в модуляторы, мы можем обратить наше внимание на сами модуляторы. Амплитудная модуляция Амплитудная модуляция влечет за собой уменьшение амплитуды несущего сигнала при низком уровне сигнала базовой полосы час­тот и увеличение при его высоком уровне. Например, на рис. 10.3 показана амплитудная модуляция более низкочастотным сигналом базовой полосы час­тот (обозначен как Mod Input), наложенным поверх несущего сигнала более высокой час­то­ты (Mod Output). Обратите внимание, как уровень AM-сигнала увеличивается и уменьшается в зависимости от формы сигнала из базовой полосы час­тот. Рис. 10.3. Входной сигнал базовой полосы частот и результирующий сигнал с амплитудной модуляцией Модуляция https://liveinternet.club/ 209
Амплитудную модуляцию можно рассматривать как применение переменного усиления к несущей: меньший входной сигнал модулятора — меньшее усиление; больший — большее усиление. Математически это может быть представлено следующим образом: m(t) = bbin(t) × c(t). Здесь m — выходной сигнал модулятора, bbin — входной сигнал базовой полосы час­тот для модулятора, а c — несущая. Все три парамет­ ра являются функциями времени t, то есть их значения меняются с течением времени. Не волнуйтесь, если математические обозначения функций вам незнакомы; вывод здесь заключается в том, что выходной сигнал модулятора в любой момент времени может быть получен простым умножением уровня сигнала базовой полосы час­тот на несущую. Такой подход было бы довольно легко реализовать в GNU Radio, но, к сожалению, есть проблема. Попробуем ее проиллюстрировать, используя блок-схему, а затем обсудим, как эту проблему устранить. Откройте блок-схему, найденную в файле ch_10/amp_mod_begin.grc, которая содержит очень простую имитацию системы радиосвязи, состоящей из модулятора и демодулятора. На вход модулятора поступает сигнал базовой полосы час­тот, т. е. информация, которую мы пытаемся отправить. Выходной сигнал демодулятора, являющийся выходным сигналом приемника в этой простой системе, должен совпадать с сигналом базовой полосы час­тот, с которого все начинается. Блок-схема показана на рис. 10.4. Рис. 10.4. Некорректный амплитудный модулятор 210 Глава 10 https://liveinternet.club/
Форма сигнала основной полосы час­тот в этом примере представляет собой треугольную волну, которая линейно переходит от своего минимального значения (0 в данном случае) к максимальному значению (1) и обратно, подобно шоссе, которое постоянно поднимается или опускается. Это гораздо более простая форма сигнала, чем обычно используется в качестве входного сигнала модулятора, но она будет полезна для наблюдения за ходом процесса. Тип сигнала, генерируемый блоком источника Signal Source, представляет собой сигнал с плавающей запятой, такой, каким и должен быть «реальный» сигнал базовой полосы час­тот. В этой схеме амплитудный модулятор состоит из блока Float to Complex, преобразующего отсчеты с плавающей запятой, поступающие из источника Signal Source, в комплексную форму (подробнее об этом блоке смотрите во врезке «Блок Float to Complex» ниже). Затем линейный сигнал базовой полосы умножается на косинус сигнала несущей. Когда этот косинусный сигнал умножается на меньшие значения, он уменьшается; когда он умножается на бóльшие значения, он увеличивается. Блок Float to Complex Блок Float to Complex выполняет преобразование типов, конвертируя каждый отсчет из одного типа данных в другой. Это похоже на приведение типов в традиционных языках программирования, таких как C++. Блок Float to Complex имеет два входных сигнала с плавающей запятой и один комплексный выходной сигнал1. Каждая пара входных выборок на выходе объединяется в единую комплексную выборку. В математических терминах информация на первом входе называется действительной час­ тью, на втором — мнимой частью результирующего комплексного числа. Поскольку на блок-схеме рис. 10.4 второй вход не подключен, блок принимает для мнимой части значения, равные 0. Таким образом, выходные данные со сложной типизацией математически эквивалентны единственному действительному входу с плавающей запятой. Модулированный сигнал из блока умножения Multiply поступает в блок преобразования Complex to Mag, который выполняет АМ-демодуляцию. Результатом должен быть восстановленный сигнал базовой полосы час­тот. В отличие от блока AM-демодуляции, который мы использовали в предыдущих AM-приемниках и который также имеет встроенную фильтрацию, блок Complex to Mag выполняет только демодуляцию и ничего больше. 1 О представлении сигналов в комплексной форме см. сноску на cтр. 226. Модуляция https://liveinternet.club/ 211
Запустите программу, и вы увидите результат, подобный показанному на рис. 10.5. Рис. 10.5. Выходной сигнал амплитудного модулятора Это выглядит довольно привлекательно, не так ли? Модулированная несущая уменьшается и увеличивается вместе с входным сигналом базовой полосы час­тот. И выходной сигнал демодулятора выглядит аналогично входному. Однако есть проблема. Простое умножение работает, потому что наш сигнал базовой полосы час­тот принимает только положительные значения, поскольку треугольное колебание изменяется от 0 до 1 и обратно. Однако в типичной реальной системе сигнал базовой полосы час­тот принимает как положительные, так и отрицательные значения, и это усложняет процесс. Работа с отрицательными значениями базовой полосы частот Если сигнал базовой полосы содержит отрицательные значения, он не будет демодулирован должным образом. Чтобы устранить проблему, откройте блок источника сигнала базовой полосы час­тот Signal Source и измените его свойство Amplitude на 2*amplitude. (Здесь amplitude — это ID блока QT GUI Range, значение которого по умолчанию равно 1.) Также измените свойство Offset на -1*amplitude. Это приведет к получению сигнала, который будет иметь ту же треугольную форму, что и раньше, но будет изменяться от –1 до +1. Полученную в результате блок-схему можно увидеть на рис. 10.6. 212 Глава 10 https://liveinternet.club/
Рис. 10.6. Амплитудный модулятор с реалистичным сигналом базовой полосы частот Результат работы программы должен выглядеть так, как показано на рис. 10.7. Рис. 10.7. Ошибочный результат выхода амплитудного модулятора Модуляция https://liveinternet.club/ 213
На первый взгляд может показаться, что демодулированный сигнал колеблется в два раза быстрее, чем сигнал базовой полосы час­ тот. Но при ближайшем рассмотрении вы можете заметить, что демодулированный сигнал не опускается ниже 0. Отрицательные части исходного сигнала не восстанавливаются в процессе демодуляции, а вместо этого представляются как положительные. Иными словами, вы наблюдаете изменение фазы. Чтобы понять, что здесь происходит, нам нужно более внимательно рассмотреть синусоиды. Сравните две перекрывающиеся формы сигнала, показанные на рис. 10.8. Одна из них представляет собой синусоиду, а другая — ту же самую синусоиду, умноженную на –1. Рис. 10.8. Две синусоиды, противоположные по фазе Обратите внимание, что визуально разница между синусоидами заключается в том, что они перевернуты по вертикали. Еще один способ описать разницу заключается в том, что они смещены по горизонтали относительно друг друга. Для этого сдвига по горизонтали есть термин: фаза. Не вдаваясь в математику, отметим, что фаза синусоиды зависит от ее положения на горизонтальной оси. Сдвиньте сигнал влево или вправо, и вы измените его фазу. Одна из синусоид на рис. 10.8 сдвинута по горизонтали на величину, равную половине общего периода сигнала. Когда фаза сдвигается на эту величину, считается, что фаза сигнала меняется на противоположную. Другой способ изменить фазу на противоположную — умножить исходную синусоиду на отрицательное значение, что приводит к такому же сдвигу, как на рисунке. 214 Глава 10 https://liveinternet.club/
Возвращаясь к блок-схеме, заметим, что демодулятор не имеет никакого представления о фазе передаваемого в него сигнала. Он выдает результат, основанный исключительно на величине синусоиды, подаваемой на его вход. Таким образом, демодулятор воспринимает обе синусоиды на рис. 10.8 как одинаковые, выдавая идентичный выходной сигнал для обеих систем. Это означает, что текущая схема амплитудной модуляции не позволяет различать положительные и отрицательные значения сигнала базовой полосы час­тот. Правильно сконфигурированный амплитудный модулятор позволяет избежать подачи отрицательных входных сигналов на умножитель, сначала сдвигая форму сигнала базовой полосы час­тот вверх по вертикальной оси. Если, например, сигнал базовой полосы час­тот имеет минимальное значение –1, мы просто добавим к нему 1 перед умножением, чтобы его новое минимальное значение было равно 0. В результате получим новое уравнение амплитудной модуляции: m(t) = (1 + bbin(t)) × c(t). Чтобы добавить это изменение в блок-схему, разорвите соединение между блоками Throttle и Float to Complex и вставьте между ними блок Add Const. Установите для нового блока тип IO Type в значение Float и Constant в значение 1. Затем, чтобы учесть больший сигнал, проходящий через блок-схему, измените свойства Y Min и Y Max блока QT GUI Time Sink под названием Demod Out на 0 и 2 соответственно. Также измените свойства Y Min и Y Max для блока QT GUI Time Sink под названием Modulated Signal на –2 и 2. После завершения этих настроек блок-схема должна выглядеть так, как показано на рис. 10.9. Запустив программу, вы должны увидеть что-то вроде рис. 10.10. Выходной сигнал демодулятора теперь аналогичен входному сигналу базовой полосы час­тот, изменяясь между 0 и 2. Но мы еще не решили проблему: проблема искажения сигнала все еще может возникнуть, если сигнал основной полосы час­тот станет слишком большим. Предотвращение перемодуляции Добавление единицы к сигналу основной полосы час­тот предотвращает изменение фазы, когда сигнал находится в диапазоне от –1 до 1, но что делать, если сигнал падает ниже –1? Изменение фазы опять начнет происходить. Когда входные данные модулятора выходят за пределы допустимого диапазона, это создает ситуацию, называемую перемодуляцией. Результатом перемодуляции также будет изменение фазы, что приведет к ошибкам при демодуляции. Чтобы увидеть это в действии, используйте ползунок блока QT GUI Range, изменив значение амплитуды с 1 на 1,2 во время выполнения программы. Результатом является входной сигнал базовой полосы час­тот, который изменяется от –1,2 до +1,2, что приводит к картинке на выходе, показанной на рис. 10.11. Модуляция https://liveinternet.club/ 215
Рис. 10.9. Исправленный амплитудный модулятор Рис. 10.10. Выходной сигнал исправленного модулятора 216 Глава 10 https://liveinternet.club/
Рис. 10.11. Выход амплитудного модулятора с реверсированием фазы Обратите внимание, что изменение фазы начинается, когда входной сигнал базовой полосы час­тот опускается ниже –1. Именно в этом случае перемодуляция создаст эффект изменения фазы. Ключом к предотвращению перемодуляции является обеспечение того, чтобы входное значение модулятора не опускалось ниже –1, что приводило бы к вводу отрицательных значений в множитель (помните, что мы добавляем 1 перед умножением). Если есть вероятность появления значений сигнала базовой полосы час­тот величиной меньше –1, применяйте ослабление сигнала до тех пор, пока такая ситуация не будет исключена, прежде чем подавать сигнал на модулятор. Например, рассмотрим чрезмерно сильный сигнал, показанный в верхней части рис. 10.12, который меняется от –5 до +5. Сигнал опускается значительно ниже безопасного уровня –1. Чтобы исправить это, мы могли бы применить пятикратное ослабление, используя блок Multiply Const со значением Constant = 0,2. В результате будет получен сигнал, показанный внизу рисунка, который не опускается ниже –1. Теперь ослабленный сигнал можно безопасно передавать на модулятор. Модуляция https://liveinternet.club/ 217
Минимальный безопасный уровень Минимальный безопасный уровень Рис. 10.12. Ослабление сигнала для поддержки в пределах минимального безопасного уровня Частотная модуляция Частотная модуляция (FM) заключается в изменении час­то­ты несущего сигнала в зависимости от величины сигнала базовой полосы час­тот. В этой схеме час­то­та несущей увеличивается, когда входной сигнал увеличивается по величине, и уменьшается, когда уменьшается входной сигнал. В FM-радиостанциях, которые мы использовали в главах 7 и 9, применялся как раз этот метод. Чтобы изучить, как работает частотная модуляция, мы воспользуемся другой готовой блок-схемой. Откройте файл ch_10/fm_mod.grc, который содержит блок-схему, показанную на рис. 10.13. Эта блок-схема содержит только модулятор, но не содержит демодулятора, поскольку мы не будем ничего нарушать, как это было с блок-схемой AM. Здесь нам важно визуализировать влияние частотной модуляции на несущий сигнал. В более реалистичном сценарии эта блок-схема может функционировать как передатчик, при этом модулированный сигнал для передачи через SDR-оборудование необходимо направить на какой-либо блок SDR-вывода. Исходный сигнал базовой полосы час­тот представляет собой такую же треугольную волну от источника Signal Source, которая меняется от –1 до +1. Частота этой волны очень низкая: 0,2 Гц, или 5 секунд на колебание. Хотя такое медленное изменение сигнала базовой полосы час­тот необычно, это позволит легко визуально отслеживать поведение модулятора. Вы можете представить себе этот блок как плавное 218 Глава 10 https://liveinternet.club/
вращение регулятора от минимального значения к максимальному, а затем обратно до упора. Рис. 10.13. Блок-схема частотной модуляции Входной сигнал базовой полосы час­тот поступает в блок Frequency Mod, который и осуществляет модуляцию. Обратите внимание, что нет отдельного блока источника Signal Source, который явно создавал несущий сигнал на определенной час­то­те, как это было в блок-схеме AM. Это не ошибка: блок Frequency Mod создает свою собственную несущую для модуляции с частотой 0 Гц. Несущая с нулевой частотой может показаться странной, но на самом деле это совершенно нормально для блок-схем SDR. Это особенность, которая отличает SDRси­сте­мы от большинства аппаратных систем. Использование несущей с нулевой частотой В самых простых аппаратных радиопередатчиках сигнал базовой полосы час­тот (то, что вы пытаетесь отправить) будет непосредственно модулировать несущую. Например, простой передатчик на час­то­те 433 МГц, использующий частотную модуляцию, увеличил бы час­то­ту несущей с частотой 433 МГц при увеличении сигнала базовой полосы час­тот и уменьшил бы час­то­ту несущей при уменьшении сигнала базовой полосы час­тот. Однако SDR-радиосистемы не выполняют модуляцию на реальной несущей час­то­те, а вместо этого вычисляют результаты операции модуляции в области спектра, математически сосредоточенной вокруг 0 Гц. Модуляция https://liveinternet.club/ 219
После завершения преобразований в блок-схеме эти отсчеты с нулевым центром по час­то­те отправляются в блок SDR-вывода для физической передачи. SDR-аппаратура затем использует данные с нулевым центром для генерации передаваемого сигнала на заданной несущей час­то­те. Свойство Center frequency аппаратного приемника (Soapy, USRP или аналогичного, как мы видели в главе 9) определяет физическую час­то­ту, которую фактически будет использовать радио­ приемник при настройке. Например, если блок-схема передатчика генерирует сигнал с частотой +1 МГц и отправляет его на блок SDRвывода с центральной частотой 433 МГц, сигнал блок-схемы будет физически передаваться на час­то­те 434 МГц (433 + 1). Аналогично если выходной сигнал блок-схемы имеет час­то­ту –2 МГц, то в реальном мире он будет отображаться на час­то­те 431 МГц (433 – 2). Эта последовательность модуляции и передачи отражает то, что мы делали с приемниками и демодуляторами в предыдущих главах: реальные час­то­ты, получаемые SDR, определяются свойством Center frequency и выражаются в МГц или ГГц. Однако сама блок-схема использует час­то­ты с центром в нуле. Мы обсудим эту ситуацию подробнее в главе 13, когда будем детально рассматривать аппаратную передачу. А пока давайте вернемся к блок-схеме и посмотрим на процесс частотной модуляции в действии. Примечание АМ-модулятор, описанный в предыдущем разделе, мог бы работать и на несущей нулевой час­то­ты. Мы решили не создавать его таким образом, поскольку без реальной несущей сложнее увидеть, как работает амплитудная модуляция. Запустите программу, и вы увидите три разных графика, представленных на рис. 10.14. Верхний график показывает входной сигнал базовой час­то­ты, который медленно движется вверх и вниз (так медленно, что он просто выглядит на рисунке с таким масштабом как горизонтальная линия). Если наблюдать изменения, можно оценить его полный период примерно как 5 с. Не стесняйтесь пользоваться секундомером, если хотите быть уверенным. На среднем графике показана форма сигнала на выходе модулятора. Частота сигнала постоянно меняется, синусоида колеблется то быстрее, то медленнее. Она немного напоминает гармошку, сжимаясь на более высоких час­то­тах и растягиваясь на более низких. Это движение отслеживает изменение уровня входного сигнала: когда входной сигнал достигает своего максимального значения (+1), модулятор выдает самую высокую час­то­ту; когда входной сигнал переходит через 0, модулятор выдает самую низкую час­то­ту; и когда входное значение достигает своего минимального значения (–1), модулятор снова выдает то, что представляется самой высокой частотой. 220 Глава 10 https://liveinternet.club/
Рис. 10.14. Окно выполнения частотного модулятора Такое поведение может показаться нелогичным; почему час­то­та модулированного выходного сигнала не достигает самого низкого значения на самом низком входном уровне? Блок Frequency Mod формирует синусоиду выходного сигнала с частотой, пропорциональной входному уровню. Если вы зададите ему относительно высокое значение, он выдаст синусоиду относительно высокой час­то­ты. Если вы зададите ему входное значение 0, он выдаст сигнал с частотой 0 (т. е. который вообще не колеблется). Наконец, при входном значении меньше 0 блок Frequency Mod выдает синусоиду с отрицательной частотой. На первый взгляд, представление отрицательных час­тот во временной области не сильно отличается от представления положительных час­тот. Однако математически они различны, и это различие можно увидеть на нижнем графике, представляющем выходной сигнал модулятора в частотной области. На этом графике частотный всплеск идеально соответствует уровню входного сигнала, перемещаясь вправо и влево, по мере того как входной сигнал перемещается вверх и вниз, и проходя через ноль в середине. Это иллюстрирует ключевое различие между AM и FM. Сигнал с амп­литудной модуляцией всегда отображается на выбранной несущей час­то­те, хотя его интенсивность варьируется. Сигнал с частотной модуляцией будет отображаться на несущей час­то­те, только если на входе модулятора значение сигнала равно 0. Во всех остальных случаях оно будет либо больше несущей час­то­ты (для положительных всплесков), либо меньше (для отрицательных всплесков). Модуляция https://liveinternet.club/ 221
Интерпретация каскадных графиков Мы рассматривали результаты частотной модуляции, используя графики во временнóй и частотной областях, но есть еще один вид графиков, который охватывает как время, так и час­то­ту и дает наглядное представление о том, что происходит во время модуляции: каскадный график (waterfall plots). График этого типа показывает час­то­ту по оси x и время по оси y, создавая прокручивающееся представление БПФ сигнала, вроде сейсмографа, только для радиосигналов. На графике используется цвет, чтобы указать интенсивность сигнала на заданной час­то­те. Возможно, вы уже обратили внимание на блок QT GUI Waterfall Sink, расположенный рядом с другими блоками QT GUI. Сейчас мы попробуем этот блок привлечь к делу. Откройте файл ch_10/fm_waterfall.grc, блок-схему, содержащую FM-модулятор, а также временны́е, частотные и каскадные выходные блоки (рис. 10.15). Рис. 10.15. FM-модулятор с каскадным блоком Запустив программу, вы должны увидеть окно выполнения, подобное рис. 10.16. Каскадный график — верхний график в этом окне. Обратите внимание, как изображение на каскадном графике прокручивается вверх, по сути добавляя временную ось к обычному графику час­тот, показанному в нижней части окна выполнения. Цвета на каскадном графике соответствуют вертикальной оси час­ тотного графика, при этом более яркие и красные цвета указывают на большие значения БПФ, а более темные и синие — на более 222 Глава 10 https://liveinternet.club/
низкие значения. Пик час­то­ты перемещается влево и вправо по мере прокрутки каскадного графика, образуя треугольный узор. Вы можете увидеть свой фактический сигнал базовой полосы час­тот в этой форме. Рис. 10.16. Окно выполнения FM-модулятора с каскадным графиком Каскадные графики особенно полезны, когда вы пытаетесь обнаружить короткие импульсы передачи, которые вы могли бы пропустить на графиках в частотной или временной области. Вам не нужно ловить молниеносный всплеск на БПФ; вы можете просто увидеть пару точек на каскаде, когда они проплывают во времени. Настройка чувствительности FM-модулятора Мы установили, что во время частотной модуляции выходная час­то­та модулятора изменяется в зависимости от уровня входного сигнала базовой полосы час­тот, но не установили, насколько сильно изменяется час­то­та. Это связано с тем, что степень изменения зависит от установки чувствительности модулятора. Этот параметр блока Frequency Mod определяет, насколько сильно изменится час­то­та при заданном изменении входного сигнала. Чтобы проиллюстрировать влияние чувствительности модулятора, блок-схема ch_10/fm_waterfall.grc имеет блок QT GUI Entry, управляющий этим параметром. Запустите блок-схему еще раз, затем используйте текстовое поле для параметра Sensitivity в верхней части окна выполнения для увеличения чувствительности с 1 до 2. На рис. 10.17 показан результат. Модуляция https://liveinternet.club/ 223
Рис. 10.17. Окно выполнения FM-модулятора с параметром sensitivity, равным 2 Во-первых, обратите внимание, как это изменение повлияло на час­ тотный график. Благодаря более высокой чувствительности всплеск теперь перемещается на более широком диапазоне час­тот. Между тем во временнóй области выходной сигнал модулятора изменяется так быстро, что трудно различить отдельные периоды формы сигнала. На каскадном графике изменение чувствительности проявляется в виде гораздо более широкого размаха треугольных всплесков. Теперь попробуйте уменьшить чувствительность до 0,2. Результат показан на рис. 10.18. При более низкой чувствительности, соответственно, уменьшается диапазон перемещения всплеска на графике час­то­ты и диапазон треугольной структуры на каскадном графике. Во временнóй области выходной сигнал модулятора перемещается настолько медленно, что мы больше не видим полный период формы сигнала. Другой способ понять влияние чувствительности — это посмот­ реть на соответствующую характеристику частотной модуляции: девиацию час­то­ты. Она измеряет максимальное изменение час­то­ты относительно час­то­ты несущей. Например, если вы смотрите на FMсиг­нал с несущей частотой 101,5 МГц и наблюдаете его в диапазоне от 101,4 МГц до 101,6 МГц, девиация сигнала составит 0,1 МГц, или 100 кГц. Отношение между чувствительностью блока частотного модулирования и девиацией зависит от час­то­ты дискретизации и максимального размера входного сигнала. Часто бывает проще масштабировать входные сигналы таким образом, чтобы они находились в диапазоне от –1 до +1. В этом упрощенном случае чувствительность (sensitivi224 Глава 10 https://liveinternet.club/
ty) может быть вычислена исходя из час­то­ты дискретизации (sample rate) и желаемой девиации (обозначенной греческой буквой Δ): sensitivity = 2π × ∆ . sample rate Рис. 10.18. Окно выполнения FM-модулятора с параметром sensitivity, равным 0,2 Для примера, пусть наша схема имеет час­то­ту дискретизации 1 Msps, а желаемая девиация равна 10 кГц, тогда чувствительность будет равна (2π × 10 × 103)/(1 × 106) = 0,0628. Однако вместо того, чтобы жестко вводить это значение в блок-схему, лучше создать переменную, содержащую желаемую девиацию (назовем ее deviation), а затем ввести следующее значение для свойства Sensitivity блока Frequency Mod: (2 * 3.1415 * deviation) / samp_rate Такой подход позволяет изменять час­то­ту дискретизации или девиацию вашей схемы без необходимости повторного вычисления чувствительности вручную. При выборе девиации вы должны в основном учитывать компромисс между двумя факторами: потребляемой полосой пропускания и простотой настройки. Ширина полосы пропускания сигнала должМодуляция https://liveinternet.club/ 225
на составлять как минимум двойное значение девиации: одну полосу выше несущей час­то­ты и одну ниже несущей час­то­ты. (На самом деле полоса должна быть немного шире из-за модулируемой полосы пропускания базового сигнала, но мы не будем сейчас вдаваться в математические тонкости.) Таким образом, большее значение девиации приводит к большей полосе пропускания, что означает больший риск возникновения помех другим сигналам. С другой стороны, если девиация очень мала, настройка становится более сложной задачей. Ваш приемник должен быть способен настраиваться на час­то­ту, которая находится в пределах ширины базовой полосы час­тот передаваемого сигнала. Очень маленькая полоса час­ тот означает очень маленькое окно, в которое вы должны «нацелить» свой тюнер. Это особенно важно, если в вашем передатчике или приемнике используется относительно дешевое оборудование. Такое оборудование обычно имеет низкую точность настройки час­то­ты, что приводит к ошибкам настройки. Кроме того, увеличение девиации облегчает приемнику демодуляцию сигнала в условиях шума. Фазовая модуляция Последним базовым типом модуляции является фазовая модуляция (PM). Как обсуждалось ранее в этой главе, фаза сигнала относится к его положению вдоль оси x во временной области. Поэтому в PM мы не используем сигнал базовой полосы час­тот для увеличения или уменьшения несущей (как в AM) и не используем его для того, чтобы заставить нашу несущую колебаться быстрее или медленнее (как в FM). Вместо этого мы сдвигаем несущую вперед или назад во времени, по мере того как сигнал основной полосы становится больше или меньше. Мы будем использовать другую готовую блок-схему для демонстрации PM. Откройте файл ch_10/phase_mod.grc, чтобы просмотреть блок-схему с входным сигналом базовой полосы час­тот и фазовым модулятором, показанную на рис. 10.19. Блок-схема начинается с того же источника Signal Source с медленной треугольной волной базовой полосы час­тот на входе, меняющейся в диапазоне от –1 до +1. Этот сигнал подается на вход фазового модулятора Phase Mod, генерирующего комплексный сигнал, соответствующий нужному нам формату выхода модулятора. Однако этот сигнал с фазовой модуляцией трудно увидеть, поскольку его час­то­та равна 0. Для наглядности мы умножили его на синусоидальную несущую час­ тотой 1 кГц (второй источник Signal Source), чтобы увеличить час­то­ту на выходе модулятора до наблюдаемой. Затем и синусоида частотой 1 кГц, и выходные данные блока умножения Multiply передаются в QT GUI Time Sink, чтобы мы могли видеть их вместе на одном графике. 226 Глава 10 https://liveinternet.club/
Примечание Ранее мы не применяли интерфейс GUI sink с несколькими входами. Если вы хотите добавить такой блок в блок-схему, измените значение свойства Number of Inputs на 2 (или более), и блок будет содержать нужное количество входов. Рис. 10.19. Блок-схема фазового модулятора Запустите программу, и вы увидите что-то похожее на изображение на рис. 10.20. Рис. 10.20. Выход фазового модулятора Модуляция https://liveinternet.club/ 227
На верхнем графике вы можете видеть знакомый треугольный сигнал, медленно перемещающийся вверх и вниз. Как и в случае со схемой FM, он настолько медленный, что на рисунке в этом масштабе выглядит как прямая линия. На нижнем графике показано визуальное представление PM. Неподвижная синусоида (на рисунке синего цвета) представляет собой немодулированную несущую (синусоида частотой 1 кГц до прохождения блока умножения). Движущаяся синусоида (красного цвета) является модулированной несущей. Она смещается влево, когда сигнал базовой полосы положительный, и вправо, когда сигнал базовой полосы отрицательный. Когда модулированный сигнал находится слева от исходного входного сигнала несущей, считается, что он опережает сигнал несущей, поскольку сдвиг влево по оси времени означает, что сигнал поступает раньше. Этот случай показан на рис. 10.20. И наоборот, когда модулированный сигнал находится справа от исходной несущей, говорят, что он отстает от входного сигнала, поскольку при сдвиге вправо сигнал подается позже по времени. Этот случай показан на рис. 10.21. Рис. 10.21. Выход фазового модулятора отстает от несущей При положительных входных сигналах модулированный выходной сигнал опережает входной сигнал все с бóльшим отрывом по мере увеличения входного сигнала. При отрицательных входных сигналах происходит обратное: выходной сигнал отстает от входного пропорционально величине отрицательного входного сигнала. Как и в случае с блоком частотного модулирования Frequency Mod, блок фазового модулирования Phase Mod имеет свойство чувстви228 Глава 10 https://liveinternet.club/
тельности (Sensitivity), которое определяет, насколько сильно происходит фазовый сдвиг при заданном изменении уровня входного сигнала. Однако фазовый принцип обычно не используется для аналоговой модуляции, поэтому здесь не столь важно понимать математические особенности того, как разная чувствительность приводит к разным фазовым сдвигам. Примечание Вы можете заметить, что блок-схема фазового модулятора не содержит демодулятора. Это связано с тем, что реализация фазовой демодуляции с использованием рекомендуемой схемы GNU Radio на самом деле довольно сложна и, следовательно, выходит за рамки данного руководства. Несколько слов о цифровой модуляции Не все сигналы, передаваемые по радио, будут аналоговыми, как, например, голос или искусственные треугольные сигналы, которые мы использовали в этой главе. Что, если вместо этого вы захотите отправить сигнал, содержащий цифровую информацию? Изменит ли это процесс модуляции? Подумаем о том, как генерируются и интерпретируются цифровые сигналы в мире проводной электроники. Например, в системе с напряжением 3,3 В цифровой ноль может быть представлен значением 0 В, а единица — 3,3 В, как показано на рис. 10.22. Рис. 10.22. Простой цифровой сигнал Это довольно простая форма сигнала: в любой момент времени это либо высокое значение, либо низкое, без каких-либо промежуточных значений. Мы можем применить к этому сигналу любой из трех типов модуляции, рассмотренных в этой главе. Например, подумайте о том, какой вид модулированного сигнала получится, если Модуляция https://liveinternet.club/ 229
подать этот цифровой сигнал на вход амплитудного модулятора. При попытке передать нулевое значение система уменьшает амплитуду несущей до минимально допустимого значения. Если вы правильно масштабируете форму сигнала, то эта амплитуда будет равна нулю. Затем, когда система намеревается передать сигнал высокого уровня, она выводит несущую с максимальной амплитудой. Пример можно увидеть на рис. 10.23. Рис. 10.23. Цифровой сигнал с амплитудной модуляцией Вы могли бы использовать эту систему для передачи цифровых значений, и она действительно применяется на практике. Это, пожалуй, самый простой тип схемы цифровой модуляции, и она широко используется для недорогой радиосвязи. Ее называют амплитудной манипуляцией (Amplitude shift keying, ASK). Несмотря на другое название, это всего лишь частный случай амплитудной модуляции. Схемы цифровой модуляции — тема для другой книги. На данный момент следует понимать, что цифровая модуляция основана на частных случаях аналоговой модуляции. Если вы хотите получить более полное представление о том, как выглядит передача цифровых сигналов с использованием частотной или фазовой модуляции, измените форму сигнала базовой полосы час­тот в любой из предыдущих блок-схем с треугольной на прямоугольную и повторно запустите программу. Выбор схемы модуляции В этой главе мы рассмотрели три типа модуляции: амплитудную, час­ тотную и фазовую. Возможно, вам интересно, как выбирать между ними. Более того, зачем нам вообще нужны все эти различные схемы модуляции? Неужели радиочастотные инженеры просто изобретают различные методы, чтобы сохранить свою работу? 230 Глава 10 https://liveinternet.club/
Конечно, нет: не следует изобретать очередную «теорию заговора». На самом деле у каждого типа модуляции есть свои сильные и слабые стороны, которые делают именно его более подходящим для определенных применений. Чтобы наглядно продемонстрировать, чем отличаются эти схемы модуляции, достаточно обратиться к нашему старому знакомому — автомобильному радиоприемнику. Подумайте о разнице в качестве звука между AM- и FM-радио­стан­ циями. Вы, вероятно, заметили, что FM-радиостанция звучит лучше. Но, возможно, вы также помните, что во время загородных поездок FMрадиостанции теряются в паре десятков километров от вашего родного города, в то время как AM-радиостанции работают гораздо дальше. Они также имеют тенденцию исчезать совершенно по-разному: звук FM-станций быстро перестает быть кристально чистым, то появляется, то пропадает, а то и вовсе замолкает. AM-станции, с другой стороны, становятся все более перегруженными статическими помехами и могут медленно появляться и исчезать на границе своего диапазона вещания. Хотя час­то­ты, используемые для передачи этих сигналов, играют определенную роль в разнице диапазонов, схемы модуляции также имеют значение. В основном разница здесь связана с различными час­ тотными диапазонами, используемыми в радиовещании AM и FM. Более низкие час­то­ты AM-радиовещания распространяются дальше, чем более высокие час­то­ты FM-диапазонов. Однако частично этот эффект связан с модуляцией. Хотя FM-радио гораздо более устойчиво к шуму, когда сигнал относительно сильный, оно становится более чувствительным к шуму при низких уровнях сигнала. AM-сигнал становится более шумным по мере его ослабления, причем шум непосредственно проявляется в звуке при снижении уровня отношения сигнал/шум SNR. Поскольку шум непосредственно не влияет на час­то­ту сигнала, FM-сигнал будет очень четким почти до тех пор, пока FM-приемник не перестанет его воспринимать, после чего он, как правило, будет прерываться, а затем исчезнет. Это одна из причин, по которой операторы-радиолюбители выбирают варианты AM, а не FM для передачи на чрезвычайно большие расстояния. И наоборот, для передачи на относительно короткие расстояния лучше использовать FM. А различные варианты фазовой модуляции особенно хорошо подходят для цифровых передач, которые имеют свои особенности. Чтобы еще больше запутать ситуацию, в некоторых схемах цифровой модуляции используется комбинация AM и PM, но это тема для другого разговора. Итоги В этой главе мы раскрыли суть процесса модуляции, используя блок-схемы для иллюстрации того, что происходит во время амплитудной, частотной и фазовой модуляций. В конечном счете модуляМодуляция https://liveinternet.club/ 231
ция — это не что иное, как выполнение GNU Radio математических операций с сигналом базовой полосы час­тот (тем, который мы пытаемся отправить). Ключевое значение имеет то, какой тип модуляции использовать и как установить параметры модуляции. Например, мы рассмотрели, как ослабить сигнал основной полосы час­тот, чтобы сохранить его в диапазоне от –1 до 1 для AM, и как использовать в FM параметр чувствительности для управления полосой пропускания результирующего сигнала. В следующей главе мы более подробно рассмотрим, как на самом деле работает SDR-аппаратура. В сочетании с пониманием модуляции такое довольно глубокое погружение поможет вам чувствовать себя уверенно при использовании SDR как для приема, так и для передачи данных. https://liveinternet.club/
11 ПОД КАПОТОМ SDR-АППАРАТ УРЫ В этой главе мы рассмотрим, как аппаратные средства SDR, такие как HackRF One, способны принимать радиочастотные сигналы из внешнего мира и преобразовывать их в данные, с которыми может работать компьютер. Когда мы впервые столкнулись с SDRоборудованием в главе 9, использовать его в GNU Radio Companion оказалось относительно просто: мы просто вводили блок для взаимодействия с аппаратурой и настраивали некоторые его свойства. Однако для достижения максимального успеха при применении SDR полезно иметь более глубокое представление о том, как работают эти устройства и как их лучше всего использовать. Классическое радио в сравнении с SDR Чтобы понять, как работает SDR-аппаратура, полезно сначала изучить традиционный стиль проектирования радиоприемников с фиксированными функциями. Мы не собираемся тратить много времени на то, чтобы заглянуть под капот обычных радиоприемников, но беглый обзор поможет прояснить некоторые важные термины, используемые в радиосвязи. На рис. 11.1 показана структурная схема традиционного приемника. Такой тип приемника называют супергетеродинным приемником, или просто супергетеродином (superheterodyne). Под капотом SDR-аппаратуры https://liveinternet.club/ 233
Смеситель RF-усилитель IF-фильтр IF-усилитель Демодулятор Аудиоусилитель Локальный генератор Рис. 11.1. Базовая структура супергетеродинного приемника Приятным сюрпризом должно стать то, что на данном этапе для нас ни один из компонентов приемника не является полной загадкой. Вы уже встречались с усилителями, фильтрами и демодуляторами в этой книге. Вы также видели микшеры, хотя, возможно, забыли, что микшер — это просто другое слово, обозначающее перемножитель (multiplier). На самом деле все это не так уж сильно отличается от гораздо более простого представления структуры SDR-радиоприемника на рис. 11.2. Преобра­ зователь с понижением частоты Фильтр Демодулятор Выходной сигнал Управление настройкой Рис. 11.2. Базовая модель радиоприема Если оставить в стороне блоки усиления, то обе системы имеют схожую структуру. Обе они настраиваются путем понижения час­то­ты сигнала и его последующей фильтрации. Затем обе системы используют демодулятор для восстановления информационного сигнала, который является исходным сигналом, переданным передатчиком. Единственные реальные различия заключаются в некоторых деталях, в частности в небольшой аббревиатуре IF на блоках в середине рис. 11.1. IF означает промежуточную час­то­ту (intermediate frequency), и, в отличие от наших блок-схем, эта час­то­та здесь не равна 0 Гц. Вместо этого супергетеродинные радиостанции используют локальный настраиваемый генератор час­то­ты (называемый гетеродином) для понижения час­то­ты входящего радиосигнала до фиксированной относительно низкой час­то­ты. Причем независимо от того, на какую станцию вы настраиваетесь, промежуточная час­то­та всегда бу234 Глава 11 https://liveinternet.club/
дет одинаковой. Этот шаг, понижающий час­то­ту передачи, является определяющей характеристикой конструкции супергетеродина. Зачем нужна эта промежуточная час­то­та? Сложно создать аппаратную начинку радиоприемника, в которой каждый последующий блок имеет изменяющийся диапазон час­тот проходящего через него сигнала. Переход на фиксированную промежуточную час­то­ту означает, что только на начальных этапах приходится работать с переменными час­то­та­ми. После этого вся обработка может выполняться на фиксированных час­то­тах. Другими словами, вам не нужно перестраивать всю последующую электронику каждый раз, когда вы настраиваетесь на новый сигнал, и это значительно упрощает и удешевляет конструкцию радиоприемника. На рис. 11.3 схема супергетеродина разделена на две части: каскады, поддерживающие переменные час­то­ты (в рамке слева), и каскады с фиксированной частотой (в рамке справа). Переменная частота Постоянная частота Смеситель RF-усилитель IF-фильтр IF-усилитель Демодулятор Аудио­ усилитель Локальный генератор Рис. 11.3. Части супергетеродина с переменной и фиксированной частотой Нам не нужно тратить много времени на работу с этим представлением. Главное — увидеть, насколько проще реализовать приемники, использующие SDR-принцип. Если вы пытаетесь воспроизвести функцию существующего радиоприемника и узнаете о существовании промежуточной час­то­ты, просто знайте, что вам теперь не нужно беспокоиться по этому поводу. Благодаря SDR-аппаратуре вы можете осуществлять «прямое преобразование» любых час­тот от 0 Гц без необходимости использования какой-либо промежуточной час­то­ты. Примечание Если вы посмотрите на структурную схему конкретного SDR-оборудования, вы можете обнаружить, что оно содержит супергетеродинную структуру с промежуточной частотой. Например, HackRF One содержит такую структуру. Для использования этой архитектуры при проектировании SDR-аппаратуры существуют технические причины, но вам не нужно беспокоиться о том, как SDR спроектирована внутри. Какой бы вариант конструкции инженеры ни выбрали, SDR для пользователя выглядит как устройство прямого преобразования. Под капотом SDR-аппаратуры https://liveinternet.club/ 235
IQ-дискретизация Можно утверждать, что основная цель SDR-оборудования — генерировать поток комплексных чисел, представляющих часть радиочас­ тотного спектра. Получив эти числа, вы можете использовать их на своем компьютере, демодулируя, декодируя и делая все, что захотите. Это означает, что нам нужно рассмотреть то, чего до сих пор избегали: как получаются сигналы в комплексной форме от явлений реального мира? Ответом является метод, называемый IQ-дискретизацией, или иног­да квадратурной дискретизацией. Этот метод является крае­ уголь­ным камнем SDR. Он использует два аналого-цифровых преобразователя (АЦП) для измерения (дискретизации) двух различных составляющих входящего сигнала: первый АЦП выполняет дискретизацию синфазной (in-phase, I) составляющей, в то время как второй дискретизирует квадратурную (quadrature, Q) составляющую, имеющую другую фазу. При дискретизации этих двух разных фаз одного и того же сигнала получается набор комплексных значений, которые обеспечивают более точное представление сигнала, чем значения, полученные только с помощью одного АЦП. Кроме того, эти комплексные значения включают в себя как положительные, так и отрицательные частотные составляющие. Математические представления, лежащие в основе IQ-дискрети­за­ ции, могли бы составить отдельную книгу по цифровой обработке сигналов и выходят за рамки нашего текущего обсуждения. Вместо этого здесь мы попробуем получить упрощенное представление о том, как работает этот процесс, и заложить основу для дальнейшего изучения, если вы решите приступить к этой теме самостоятельно. В интернете есть несколько отличных описаний IQ-сигналов и IQ-дискретизации, в которых достаточно математики, если вам так хочется1. IQ-сигналы Прежде чем перейти к IQ-дискретизации, давайте рассмотрим сами сигналы I и Q. Ключевое отличие заключается в том, что квадратурная (Q) составляющая сигнала на 90 градусов отличается по фазе от синфазной (I) составляющей («quad» означает 90 градусов — четверть полного 360-градусного периода синусоиды). Не вдаваясь в математику, отметим, что процесс умножения сигнала на синусоиду может привести к изменениям фазы, а также к изменениям час­то­ты, как мы уже видели. I-компонента получается умножением входного RF-сиг­ 1 О принципе разложения сигнала на синфазную и квадратурную составляющие см. https://ru.wikipedia.org/wiki/Синфазная_и_квадратурная_составляющие_ сигнала; подробный разбор понятия IQ-сигналов в применении к радио см. статью по адресу https://radioprog.ru/post/415. 236 Глава 11 https://liveinternet.club/
нала на косинусоидальную волну. Функция косинуса математически определена как имеющая нулевую фазу в начале координат, поэтому она и генерирует синфазную часть. Q-компонента получается путем умножения RF-сигнала на cинусоидальную волну, которая сдвинута на 90 градусов по фазе от связанной с ней косинусоидальной волны, поэтому мы получаем квадратурную часть. На рис. 11.4 показаны две синусоиды с разностью фаз 90 градусов. Обратите внимание, что синусоидальная волна достигает максимума через четверть периода после косинусоидальной. Сдвиг фазы 90° Рис. 11.4. Фазовое соотношение между косинусом и синусом Структурная схема на рис. 11.5 показывает, как эти две различные синусоиды работают параллельно в IQ-дискретизаторе для получения I- и Q-компонентов входных данных. Смеситель I (синфазный) Вход Q (квадратурный) Смеситель Рис. 11.5. Этап микширования IQ-дискретизатора Под капотом SDR-аппаратуры https://liveinternet.club/ 237
И косинусоида, и синусоида настроены на центральную час­то­ту (час­то­ту, на которую настроен SDR). Каждая из синусоид умножается на входной сигнал с помощью смесителя, который обладает тем же эффектом понижающего час­то­ту преобразования, что и смеситель в конструкции супергетеродина на рис. 11.1. Математика, лежащая в основе этих аппаратных смесителей, немного сложнее, чем у программных перемножителей, которые использовались в наших блок-схемах, но ключевым моментом здесь является то, что два смесителя снижают входной RF-сигнал до 0 Гц, хотя и с двумя разными фазами. Аналого-цифровое преобразование Далее от получения IQ-компонентов переходим к IQ-дискретиза­ции. В процессе дискретизации пара АЦП производит выборку сигналов I и Q для получения комплексных цифровых данных1, которые понадобятся блок-схемам. Вы могли бы подумать, что это можно сделать сразу после поступления сигналов от микшеров, как показано на рис. 11.6. Смеситель АЦП I-отсчет Q-отсчет Комплексные данные АЦП Смеситель Рис. 11.6. Концепция IQ-дискретизации Это почти так и работает, но при этом появляется проблема, которую необходимо решить. АЦП могут точно преобразовывать сигналы из аналоговых в цифровые только в ограниченном диапазоне час­тот, известном как окно захвата. Если часть сигнала с частотой, выходящей за пределы окна захвата, попадет в АЦП, это приведет к искажению сигнала, который подлежит преобразованию. Мы упоминали 1 Стоит указать для ясности, что косинусную и синусную составляющие можно рассматривать как компоненты записи комплексного числа в тригонометрической форме cos(ωt) + j · sin(ωt), где j — мнимая единица. Над гармоническими сигналами, записанными в подобной (комплексной) форме, удобнее производить математические операции, отсюда и комплексный тип переменных в блоках SDR. 238 Глава 11 https://liveinternet.club/
об этой проблеме в главе 2, когда говорили, что при правильно функционирующем АЦП целевой сигнал не должен меняться слишком быстро. К сожалению, на входы I и Q АЦП поступает весь радиочас­ тотный спектр, улавливаемый антенной в бесконечном диапазоне час­тот. Несмотря на то что микшеры снизили час­то­ты, большая часть входного сигнала все равно остается на достаточно высоких час­то­ тах и находится за пределами зоны захвата, и эта посторонняя часть спектра будет искажать процесс аналого-цифрового преобразования. Размер частотного окна захвата АЦП определяется теоремой Найквиста—Шеннона о дискретизации1. Эту теорему часто обобщают следующим образом: «чтобы избежать искажений, необходимо выполнять дискретизацию с удвоенной частотой аналогового входного сигнала». Более точное определение теоремы гласит, что цифровая система дискретизации может получить достоверное представление об аналоговом входном сигнале только в том случае, если час­то­ та входного сигнала ограничена половиной час­то­ты дискретизации. Ограничение полосы час­тот просто означает, что все частотные составляющие входного сигнала должны находиться в пределах установленного диапазона, верхним пределом которого является fs /2, где fs — час­то­та дискретизации. Эту час­то­ту называют частотой Найквиста. Поскольку мы говорим об IQ-отсчетах, содержащих информацию как о положительных, так и об отрицательных час­то­тах, нижний предел окна захвата равен – fs /2. На рис. 11.7 показан график час­то­ты правильного сигнала, находящегося в пределах окна безопасного захвата АЦП. На графике нет частотных составляющих больше, чем fs /2, и нет частотных составляющих меньше, чем – fs /2, поэтому выборка сигнала будет произведена правильно. Сигнал Сигнал Окно захвата Частота –fs /2 fs /2 Рис. 11.7. Дискретизация сигнала, находящегося в пределах окна захвата 1 В отечественной литературе теорему называют именем Котельникова или Котельникова—Шеннона. Мы уже упоминали о ней ранее (см. сноску на стр. 157). Под капотом SDR-аппаратуры https://liveinternet.club/ 239
На рис. 11.8 показан другой пример частотного графика. На этот раз сигнал имеет слишком высокую час­то­ту и выходит за пределы окна захвата. Выборка будет сформирована неправильно. Сигнал Сигнал Окно захвата Частота –fs /2 fs /2 Рис. 11.8. Попытка дискретизации сигнала за пределами окна захвата Что происходит, когда час­то­та сигнала превышает час­то­ту Найквиста? Эта ситуация называется алиасингом (сглаживанием). Алиасинг Алиасинг (aliasing) — явление, когда час­то­ты, превышающие час­то­ту Найквиста (fs /2), при дискретизации сигнала отображаются так, как если бы они были час­то­та­ми ниже час­то­ты Найквиста. Мы также упоминали об этой проблеме ранее: в главе 5, когда мы меняли час­то­ту синусоиды, было замечено следующее явление. По мере увеличения час­то­ты синусоиды результирующий тон сначала становится слишком высоким, чтобы его можно было расслышать. Но затем, по мере того как час­то­та продолжает расти, звучание снова появляется и, как это ни парадоксально, становится все ниже и ниже. Это и был алиасинг в действии. Чтобы увидеть эффект более наглядно, давайте проведем небольшой эксперимент. Загрузите блок-схему, которая намеренно нарушает условия, требуемые теоремой Найквиста, и посмотрите, что произойдет после запуска. Блок-схема находится в файле ch_11/nyquist. grc и показана на рис. 11.9. Она генерирует синусоиду переменной час­то­ты, которая направляется в блок Keep 1 in N, после чего отображается в QT GUI Sink, многофункциональном блоке отображения, содержащем интерфейс со вкладками и несколькими различными типами графиков. Ранее мы использовали блок Keep 1 in N в блок-схеме прореживания из главы 6. Он выполняет прореживание, передавая из входных данных в выходные только один из каждых N отсчетов. В том проекте значение N было установлено равным 32, что означает, что отсчеты 240 Глава 11 https://liveinternet.club/
выходят из блока со скоростью 1000 sps, что в 32 раза медленнее, чем у источника Signal Source при скорости 32 000 sps. Частота Найквиста (fs /2) для любых блоков, расположенных по потоку после блока Keep 1 in N, составляет половину от 1000 sps (то есть 500 sps). Рис. 11.9. Блок-схема для эксперимента с частотой Найквиста Блок QT GUI Range позволяет изменять час­то­ту входного сигнала и, следовательно, выходной сигнал блока Keep 1 in N с допустимых значений, меньших час­то­ты Найквиста (499 sps и ниже), на недопустимые значения, превышающие или равные час­то­те Найквиста (500 sps и выше). Запустив программу, вы должны сначала увидеть одиночный пик на час­то­те 0,2 ksps (200 sps), которая является значением величины freq по умолчанию1. На рис. 11.10 показан этот результат. Сначала, передвинув ползунок регулятора час­то­ты вправо, вы должны увидеть, как пик смещается вправо. Затем, когда значение достигнет 500 Гц, пик должен оказаться вблизи правой и левой границ графика, как показано на рис. 11.11. Теперь вы находитесь на грани дозволенного и больше не создаете корректные отсчеты. Продолжайте двигать ползунок до значения 600 Гц. Заданная час­то­ та должна полностью отойти от правого края окна и начать смещаться вправо от левого края окна. Когда вы достигнете 600 Гц, график час­ то­ты должен показать, что час­то­та сигнала при действии алиасинга составляет –400 Гц, как показано на рис. 11.12. 1 Напоминаем (см. сноску на стр. 71), что sps («отсчеты в секунду») и герцы («периоды в секунду») — взаимозаменяемые единицы измерения, просто первые — для дискретизированных, цифровых последовательностей; вторые — для обычных, аналоговых сигналов. Поэтому указание единиц измерения «кГц» на графиках и далее в тексте не должно смущать читателя. Под капотом SDR-аппаратуры https://liveinternet.club/ 241
Рис. 11.10. Исходный результат для блок-схемы эксперимента с частотой Найквиста Рис. 11.11. Результат для блок-схемы при частоте дискретизации вблизи частоты Найквиста Если вы еще больше увеличите ползунок час­то­ты до 700 Гц, пиковая час­то­та продолжит смещаться вправо, до –300 Гц. Сдвиг вправо будет 242 Глава 11 https://liveinternet.club/
продолжаться до тех пор, пока вы не достигнете час­то­ты 1500 Гц, пос­ ле чего произойдет еще одно переключение, и пик снова переместится к левому краю окна. Рис. 11.12. Результат для блок-схемы при частоте дискретизации выше частоты Найквиста В главе 5 мы отмечали, что высота звукового сигнала начала уменьшаться с началом алиасинга. Поэтому вы можете быть удивлены, увидев, что час­то­та постоянно перемещается слева направо при перемещении ползунка вверх. На самом деле когда в главе 5 час­то­та звукового сигнала перескочила на отрицательные час­то­ты, похоже на то, что мы наблюдаем здесь. Для реальных сигналов положительные и отрицательные час­то­ты звучат одинаково, поэтому перемещение от левого края окна к правому привело к тому, что абсолютное значение час­то­ты звукового сигнала снизилось до 0 Гц, потом высота тона снова поднималась. Теперь медленно перемещайте ползунок вправо, пока час­то­та не будет установлена на 1100. Обратите внимание, как пик перемещается с левой стороны графика час­то­ты, минуя нулевую отметку, и продолжается вправо, пока не достигнет 100 Гц. Чтобы вы не подумали, что это странное поведение на графике час­ тот является просто какой-то причудой в способе вычисления быст­ рого преобразования Фурье, перейдите на вкладку Time Domain (временнóй области) окна выполнения. Затем щелкните и обведите изображение так, чтобы увеличить небольшую часть экрана, показанную на рис. 11.13. Под капотом SDR-аппаратуры https://liveinternet.club/ 243
Щелкните и обведите часть рисунка для растяжки Рис. 11.13. Временнóй график сигнала с частотой выше частоты Найквиста Затем щелкните на надписи «imag» (в правом верхнем углу), чтобы скрыть воображаемую часть сложной формы сигнала, оставив только реальную часть («real»). В результате должна получиться простая синусоида, показанная на рис. 11.14. 10 мс = 100 Гц Рис. 11.14. Растянутый график сигнала с частотой выше частоты Найквиста Период этого сигнала составляет около 10 мс, что соответствует час­то­те 100 Гц, даже если вы генерируете сигнал частотой 1100 Гц, период которого должен составлять около 0,9 мс. Это и есть эффект 244 Глава 11 https://liveinternet.club/
алиасинга в действии. Когда производится выборка сигнала частотой 1100 Гц, его принимают за сигнал с более низкой частотой. Это выглядит так, будто час­то­та сигнала принимает «алиас» (псевдоним) 100 Гц. Данный эксперимент показывает, почему необходимо ограничивать диапазон час­тот сигналов перед их дискретизацией, убедившись, что на входах АЦП нет час­тот, превышающих половину час­то­ ты дискретизации. Без этой предосторожности вы будете иметь дело со всеми видами ложных частотных полос, подобных тем, что были показаны. Смещенные час­то­ты наложатся на реальный сигнал и приведут к его искажению. Пример этой ситуации в частотной области показан на рис. 11.15. Сигнал Целевой сигнал Сигнал за пределами диапазона захвата Окно захвата Частота –fs /2 fs /2 Алиасинг Рис. 11.15. Пример алиасинга в частотной области На последнем этапе нашего эксперимента час­то­та дискретизации fs составляла 1 ksps, а измеряемая синусоида имела час­то­ту 1100 Гц. Следовательно, сигнал был значительно выше час­то­ты Найквиста (fs /2), равной 500 Гц, и проявился алиасинг. Один из способов борьбы с этим явлением состоит в том, чтобы в системе с дискретизацией работать только с диапазоном час­тот, укладывающимся в час­то­ту дискретизации (от –fs /2 до +fs /2). Если вы когда-нибудь превысите час­то­ту Найквиста, час­то­та сигнала перевалит за границу диапазона и снова появится на противоположной стороне. Если вы продолжите увеличивать час­то­ту входного сигнала, он будет смещаться все дальше вправо до тех пор, пока не достигнет предела +fs /2 и не повторится снова. Попробуйте подвигать ползунок, чтобы понять, как наложение алиа­ сов дискретизированных сигналов приводит к неточному отобра­же­ нию реального входного сигнала. В целом, однако, результаты наложения нас не интересуют: мы просто хотим избежать этого. Под капотом SDR-аппаратуры https://liveinternet.club/ 245
Фильтрация Чтобы обеспечить ограничение полосы входного сигнала, SDR-аппа­ ра­тура должна использовать фильтр нижних час­тот с частотой среза, не превышающей час­то­ту Найквиста (fs /2). При этом SDR-аппаратура должна использовать аналоговый фильтр, поскольку фильтрация должна выполняться до выполнения оцифровки (исключая цифровые передачи). Правильная фильтрация перед дискретизацией устраняет возможное наложение алиасов, как показано на рис. 11.16. До тех пор, пока компоненты сигнала выше час­то­ты Найквиста попадают в полосу пропускания фильтра, они не будут влиять на сигналы во время дискретизации. Сигнал Целевой сигнал Сигнал за пределами диапазона захвата Полоса задержки фильтра Окно захвата Фильтр Частота fs /2 –fs /2 Устранение алиасинга Рис. 11.16. Представление фильтра нижних частот в частотной области для устранения алиасинга Этот этап фильтрации был недостающим элементом схемы блока дискретизации IQ на рис. 11.6. Добавление двух фильтров нижних час­тот (ФНЧ), одного для компонента I и одного для компонента Q, дает обновленную структурную схему, показанную на рис. 11.17. Как правило, час­то­та дискретизации SDR является переменной, поэтому час­то­та среза фильтра нижних час­тот в IQ-дискретизаторе также должна изменяться. Для некоторых SDR-файлов в GNU Radio вам не нужно будет явно настраивать ширину полосы, поскольку она будет автоматически настраиваться в соответствии с частотой дискретизации. Однако для Soapy HackRF Source придется ширину полосы настроить вручную в соответствии с частотой дискретизации. Мы уже делали это в главе 9, когда устанавливали для свойства Bandwidth на вкладке RF Options значение samp_rate. 246 Глава 11 https://liveinternet.club/
Смеситель АЦП ФНЧ I-отсчет Q-отсчет Комплексные данные АЦП ФНЧ Смеситель Рис. 11.17. Усовершенствованная структурная схема IQ-дискретизации Ширина полосы пропускания SDR и частота дискретизации Ширина полосы пропускания SDR (то есть диапазон час­тот, которые может улавливать SDR) эквивалентна час­то­те дискретизации. Мы видели это при работе с блок-схемой аппаратного FM-приемника в главе 9. Эта блок-схема имела час­то­ту дискретизации 8 Msps, и выход блока QT GUI Frequency Sink также показывал диапазон час­тот 8 МГц. Связь между шириной полосы пропускания и частотой дискретизации соответствует теории дискретизации, которую мы только что обсуждали. Мы установили, что IQ-дискретизатор пропускает ширину спектра сигнала, равную час­то­те Найквиста, в положительном направлении горизонтальной оси, а также эквивалентную полосу в отрицательном направлении, как показано на рис. 11.18. Поскольку час­то­та Найквиста равна половине час­то­ты дискретизации, общая полоса захвата (две час­то­ты Найквиста) равна самой час­то­те дискретизации. Взаимосвязь между частотой дискретизации и шириной полосы пропускания, пожалуй, является наиболее важной концепцией, которую следует запомнить из этой главы. Настройка час­то­ты дискретизации и центральной час­то­ты для SDR определяет окно захвата, или диапазон час­тот, которые будут преобразованы блок-схемой в IQ-данные. Эта область имеет размер (полосу пропускания), равный час­то­те дискретизации, и сосредоточена вокруг центральной час­то­ты SDR. Под капотом SDR-аппаратуры https://liveinternet.club/ 247
Интенсивность сигнала Полоса захвата Частота –fs /2 fs /2 Общая ширина полосы = fs Рис. 11.18. Частотный график IQ-дискретизации с представлением общей ширины полосы пропускания Определение пределов полосы пропускания Три основных фактора ограничивают пропускную способность системы SDR: скорость ее АЦП, скорость интерфейса между SDR и ПК и производительность процессора, на котором выполняется обработка данных GNU Radio. Первые два являются жесткими ограничениями. Спецификация SDR будет отражать оба этих фактора через величину максимальной час­то­ты дискретизации. Например, HackRF определяет максимальную час­то­ту дискретизации в 20 Msps, что есть значение, определяемое скоростью дискретизации АЦП этого модуля, а также возможностями интерфейса USB 2.0. Третье ограничение — производительность компьютера — более изменчиво, и его сложнее определить количественно. Оно зависит от процессора, производительности носителей информации, наличия других программ, работающих одновременно с GNU Radio, и используемой блок-схемы. Максимальная скорость работы блок-схемы будет зависеть от того, какие вычислительные проблемы ей приходится решать и насколько хорошо ваш компьютер оснащен для этой задачи. Она может быть меньше, а может быть и больше скорости вашего SDR. Эффект переполнения Когда данные поступают в блок-схему быстрее, чем блоки могут их обработать, результатом является состояние переполнения (overflow). Чтобы увидеть этот эффект в действии, откройте блок-схему ch_11/fm_rx_ovf_hackrf.grc, показанную на рис. 11.19. 248 Глава 11 https://liveinternet.club/
Рис.11.19. Блок-схема для иллюстрации эффекта переполнения Эта блок-схема аналогична аппаратному FM-радиоприемнику из главы 9, но с увеличенным значением час­то­ты оцифровки samp_rate до 20e6 (вместо 8e6) и блоком QT GUI Entry для динамического управления шириной полосы перехода настраиваемого фильтра. Кроме того, значение ширины полосы перехода по умолчанию меньше предыдущего значения. Перед выполнением установите значение по умолчанию для переменной freq на час­то­ту, соответствующую известной FM-станции в вашем регионе. После запуска может быть трудно выполнить настройку по причинам, которые вы сейчас поймете. В отличие от предыдущих проектов, мы не можем предсказать, что произойдет, когда вы запустите эту блок-схему. Появится графический интерфейс, отображающий полосу пропускания 20 МГц, а также ожидаемые пики час­тот FM-радио, как показано на рис. 11.20. Под капотом SDR-аппаратуры https://liveinternet.club/ 249
Рис. 11.20. Окно выполнения FM-приемника с полосой пропускания 20 МГц Даже если у вас будет новейший компьютер образца 2025 года, вы, скорее всего, должны натолкнуться на какие-то проблемы. Однако если у вас не очень быстрый компьютер, звук будет заметно прерываться. Вы также увидите интересные результаты на панели консоли в левом нижнем углу главного окна программы GNU Radio Companion, похожие на приведенные ниже: Generating: “/home/paul/book/01_field_exp_sdr/ch_11/fm_rx_ovf_hackrf.py “Executing: /usr/bin/python3 –u /home/paul/book/01_field_exp_sdr/ch_11/fm_rx_ovf_hackrf.py [INFO] Opening HackRF One #0 14d463dc2f6778e1... OsOOsOOsOOsOOsOOsOOsOaUOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOO sOOsOOsOOsOOsOOsOOsOOsOOsOaUOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOs OOsOOsOOsOOsOosOOsOOsOOsOOsOOsOOsOaUOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsO OsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOaUOsOOsOOsOOsOOsOOsOOsOOsOOsOO sOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOaUOsOOsOOsOOsOOsOOsOOs OOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOosOOsOOsOOsOOsOOsOOsOOsOOsOaUOsOOsOOsOOsO OsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOaUOsOO sOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOOsOO --snip-- Появление заглавной буквы O на панели консоли указывает на то, что блок-схема находится в состоянии переполнения. Вы также можете увидеть строчную букву a или s. Если небольшая часть этих символов появляется с перерывами, это могут быть просто небольшие сбои, которые не оказывают заметного влияния на работу блок-схемы. Однако если вы видите поток этих символов, как показано здесь, у вас проблема: ваш компьютер обрабатывает данные недостаточно быстро, чтобы успевать за поступающими данными. 250 Глава 11 https://liveinternet.club/
Если вы не сталкиваетесь с существенным переполнением, уменьшите значение ширины переходной полосы transition_width до 4000. Как упоминалось в главе 5, узкие переходные полосы фильтра требуют большей нагрузки на центральный процессор. Это изменение должно привести к переполнению даже на очень быстром центральном процессоре. Однако тем из вас, кто пользуется очень мощными машинами, потребуется еще больше увеличить нагрузку, чтобы наблюдать состояние переполнения. Но как это сделать? В спецификации HackRF говорится, что модуль не может выполнять выборку быст­ рее, чем 20 Msps, на которую блок-схема уже настроена. Так что вы можете сделать, чтобы сделать эту блок-схему более сложной с точки зрения вычислений? Вспомните об одном из правил, которые мы обсуждали в главе 2: «не следует выполнять дискретизацию быстрее, чем это необходимо». Благодаря этому правилу мы научились по возможности сокращать поток данных в блок-схеме, чтобы блоки ниже по потоку могли работать в более щадящем режиме. На самом деле блок-схема на рис. 11.20 содержит только три блока, работающих с начальной частотой дискретизации 20 Msps: источник Soapy HackRF, фильтр Frequency Xlating FIR Filter и QT GUI Sink (обведены на рис. 11.21). 20 МГц Рис. 11.21. Часть блок-схемы, работающая со скоростью 20 Msps Под капотом SDR-аппаратуры https://liveinternet.club/ 251
Все, что находится ниже этих трех блоков по потоку, выполняется в 50 раз медленнее, при значении working_samp_rate, равном 400 ksps. Если вы хотите сделать эту блок-схему более трудной для обработки, все, что нужно сделать, — нарушить рекомендации и запустить нижестоящие блоки быстрее, чем это необходимо. Например, попробуйте изменить свойство working_samp_rate на 1e6. Это приведет к изменению час­то­ты дискретизации в нижних по потоку блоках, увеличив ее до 1 Msps (рис. 11.22). Рис. 11.22. Блок-схема с неоправданно высокой частотой дискретизации в выходных блоках Запустив программу с обновленной блок-схемой, вы почти наверняка услышите искаженный звук (или его полное отсутствие) и увидите в консоли очень быстрый поток символов O и s, даже если вы работаете на очень быстродействующем компьютере. С этой блок-схемой компьютеру работать намного сложнее, потому что все, кроме самой последней части, выполняется в 2,5 раза быстрее, чем раньше. Этот эксперимент покажет, насколько велика разница между хорошо спроектированной и небрежно построенной блок-схемой. До сих пор мы почти полностью фокусировались на приеме, но аналогичный набор ограничений действует и для передающего варианта SDR. Однако когда компьютер работает слишком медленно, вмес­то переполнения у вас будет недостаточный поток (underflow). 252 Глава 11 https://liveinternet.club/
При передаче SDR нуждается в данных, поступающих с компьютера с любой частотой дискретизации, выбранной для выходного SDRбло­ка. Когда компьютер тормозит, SDR некоторое время нечего передавать, поэтому он может отправлять только «мертвый эфир». Когда это происходит, на панели консоли начинают отображаться символы U. Как и в случае с символами O, небольшая группа символов не приведет к катастрофе, но быстрое увеличение их количества означает, что сигнал, который вы пытаетесь передать, серьезно поврежден и блок-схема нуждается в доработке для повышения эффективности. Примечание Явление, похожее на недостаточный поток в передаче, связано с аналогичным явлением в передаче звука (audio underrun), когда аппаратура аудиовоспроизведения не получает данные достаточно быст­ро. GNU Radio Companion укажет на это, отобразив нужные символы на панели консоли. Предотвращение переполнения Если у вас возникли проблемы с переполнением (или недостаточным потоком), необходимо либо уменьшить вычислительную нагрузку на блок-схему, либо увеличить вычислительную мощность компьютера. Мы рекомендуем выполнить следующие действия по устранению неполадок. 1. Оптимизируйте час­то­ту дискретизации по всей блок-схеме, уменьшая ее везде, где только возможно, путем прореживания. 2. По возможности уменьшите час­то­ту дискретизации источников в блок-схеме. Например, действительно ли FM-радио должно работать на час­то­те 20 Msps во всем спектре одновременно? Радио все равно будет работать, даже если вы будете производить дискретизацию только на час­то­те 8 Msps или даже медленнее. 3. Отключите ненужные блоки в блок-схеме, такие как GUI sinks. Иногда обнаруживается, что при отладке вы загромоздили блок-схему различными выходными GUI-блоками. Как правило, вы можете оставить их в покое, но отключение ненужных поможет разгрузить компьютер. 4. Закройте на компьютере другие необязательные приложения или процессы. Они могут замедлять работу компьютера, отбирая полезное время работы процессора у GNU Radio. Аналогичным образом может помочь перезагрузка. Если подобные меры не помогают, возможно, вам потребуется обновить компьютер. Установка более быстрого процессора, как правило, дает наибольшие преимущества. Наличие твердотельного накопителя (SSD), в отличие от механического жесткого диска, также позволит значительно ускорить запись на жесткий диск, если блок-схема передает на диск большие объемы данных. Под капотом SDR-аппаратуры https://liveinternet.club/ 253
Усиление и SDR-аппаратура Помимо IQ-дискретизации, еще одна важная функция, которую выполняет SDR-аппаратура, — усиление сигнала. Это не программно реализованный математический алгоритм усиления, который мы обсуждали в контексте блок-схем GNU Radio, а результат работы усилителей, построенных на аппаратных средствах. Необходимость в аппаратном усилении возникает потому, что многие радиосигналы, которые пользователи SDR пытаются принять, являются слабыми и требуют значительного усиления только для обнаружения. Что касается передачи, пользователям SDR также требуется усиление для повышения мощности передаваемых сигналов. Во многих SDR эти коэффициенты усиления устанавливаются с использованием одного значения, обычно в децибелах. Однако в модуле HackRF усиление сигнала происходит в три этапа. Три ступени усиления На рис. 11.23 показаны три ступени усиления в модуле HackRF. Эти ступени относятся к операциям SDR на приемной стороне. Передающая сторона проходит аналогичные этапы, но в обратном по­ рядке. Выход RF-усиление IF-усиление Усиление базовой полосы Рис. 11.23. Усиление на стороне приема в модуле HackRF Первый этап — радиочастотное (RF) усиление, которое усиливает исходный сигнал сразу после его приема антенной перед обработкой или оцифровкой сигнала. Это этап широкополосного усиления, то есть перед ним не требуется фильтрация. Практически весь радиочастотный спектр, поддерживаемый HackRF (от 1 МГц до 6 ГГц), проходит через этот этап. Никакая фильтрация не производится, за исключением естественных ограничений спектра, происходящих изза ограниченной пропускной способности HackRF. Существует только две настройки для усиления RF-сигнала: 0 дБ или 14 дБ. Вы можете ввести другие значения в свойство RF Gain блока Soapy HackRF Source, но GNU Radio Companion округлит введенное значение до ближайшего из этих двух. Нужно быть осторожным со ступенью RF-усиления, так как более высокое значение может привести к повреждению SDR-оборудования. Для этого требуется очень сильный сигнал, намного более мощный, чем у FM-трансляций, кото254 Глава 11 https://liveinternet.club/
рые мы принимали ранее. Однако если вы работаете с передатчиком, расположенным близко к антенне SDR-приемника (например, антенны передатчика и приемника находятся на столе рядом друг с другом), существует вероятность повреждения. Имейте в виду, что это широкополосное усиление, а это означает, что специальные настройки, не повреждающие оборудование, добавить невозможно. По этой причине рекомендуется первоначально устанавливать коэффициент усиления RF-сигнала на 0 дБ, если есть подозрение, что поблизости могут находиться мощные передатчики. Следующим этапом усиления является усиление промежуточной час­то­ты (IF). Как мы уже упоминали ранее, HackRF, подобно традиционному стационарному радиоприемнику, понижает входящий сигнал до промежуточной час­то­ты перед дальнейшей обработкой, поскольку так она сильно упрощается. Вам в блок-схемах вообще не нужно беспокоиться об этой промежуточной час­то­те, но тем не менее она существует внутри аппаратного обеспечения, и сигнал дополнительно усиливается после того, как происходит это понижающее преобразование. В модуле HackRF коэффициент IF-усиления может быть установлен в диапазоне от 0 до 40 дБ с шагом 8 дБ. В отличие от этапа RFусиления, здесь просто усиливаются внутренние сигналы, что не может нанести никакого реального ущерба SDR-оборудованию. Однако если установить коэффициент IF-усиления слишком высоким, это может привести к искажениям. Команда разработчиков HackRF рекомендует начинать с IF-усиления на уровне 16 дБ и при необходимости увеличивать до максимума. Последним этапом усиления является усиление в базовой полосе час­тот (baseband gain, BB). Этот этап применяется как к I-, так и к Q-составляющим сигнала непосредственно перед их поступлением в АЦП. Здесь существует множество возможностей настройки, поскольку HackRF поддерживает значения от 0 до 62 дБ с шагом в 2 дБ. Официальная рекомендация — установить коэффициент BBуси­ления на 16 дБ, как и коэффициент IF-усиления, и увеличивать его в сочетании с коэффициентом IF-усиления по мере необходимости. Как только вы достигнете 40 дБ и коэффициент усиления IF достигнет максимального значения, вы можете продолжить увеличивать коэффициент усиления BB, если это необходимо. Обратите внимание, что каждая последующая ступень усиления обеспечивает как большее усиление, так и повышенную гибкость при переходе от SDR-входа к компьютерной обработке. Это связано с тем, что требования к час­то­те и полосе пропускания снижаются по мере прохождения различных ступеней, что является результатом использования промежуточной час­то­ты. Как упоминалось ранее, гораздо проще внедрить аппаратное обеспечение, работающее на ограниченных час­то­тах и с меньшей шириной полосы пропускания. Под капотом SDR-аппаратуры https://liveinternet.club/ 255
Ступени усиления при передаче Для передачи модуль HackRF использует ту же последовательность ступеней усиления, что и для приема. Разница в том, что ступени расположены в обратном порядке и отсутствует ступень усиления базовой полосы, как показано на следующем рисунке: Сигнал базовой полосы RF-усиление IF-усиление Когда сигнал поступает на SDR-устройство для передачи, цифровой сигнал преобразуется в аналоговый с помощью цифроаналогового преобразователя (ЦАП). Затем полученный аналоговый сигнал проходит через каскад IF-усиления на промежуточной час­то­те. Потом он проходит заключительную радиочастотную ступень RF-усиления, прежде чем быть переданным на антенну. В дополнение к аппаратному усилению также можно регулировать мощность передаваемого сигнала, изменяя количество отсчетов, отправляемых на выходной блок SDR sink. Например, установка блока Multiply Const со значением 0,1 уменьшила бы выходную мощность в 10 раз, или на 10 дБ. Просто убедитесь, что вы не превышаете максимальное указанное значение для входа блока SDR sink, которое обычно равно 1 для обеих частей последовательности комплексных отсчетов. Мы более подробно рассмотрим усиление при передаче в процессе сборки передатчика в главе 13. Как настроить коэффициент усиления Существует три основных принципа настройки коэффициента усиления в SDR, и их использование часто требует тщательного согласования. zz zz zz 256 Глава 11 https://liveinternet.club/ Убедитесь, что суммарный коэффициент усиления достаточно высок, чтобы АЦП могли преобразовать аналоговый сигнал в точное цифровое представление. Не применяйте слишком большое усиление — это может привес­ ти к искажению сигнала. Будьте осторожны, устанавливая высокое усиление, чтобы не повредить SDR.
Эти указания могут показаться несколько противоречивыми: первый пункт, безусловно, противоречит двум другим. Вот почему работа на радио — это своего рода искусство. Основываясь на этих принципах, при приеме сигнала вы, как правило, должны следовать следующему порядку. 1. Установите начальное усиление на низкий уровень. Это поможет сохранить SDR в безопасности. 2. Запускайте программу с блоком QT GUI Frequency, подключенным к источнику SDR. Посмотрите, сможете ли вы найти на графике какие-либо выбросы, соответствующие предполагаемому целевому сигналу. Если нет, переходите к шагу 3; если да, переходите к шагу 4. 3. Медленно увеличивайте коэффициент усиления, наблюдая за частотным графиком. Вы должны увидеть, как на фоне шума будут медленно проявляться пики. Если вы используете HackRF, начните с увеличения уровня усиления RF-сигнала до 14 дБ, а затем переходите к регулировке уровней IF и BB. 4. Как только вы обнаружите пик, соответствующий целевому сигналу, продолжайте постепенно увеличивать коэффициент усиления. Это увеличит как высоту пика, так и уровень окружающего шума, но сначала пик будет увеличиваться довольно быстро. Напомним, что разница между пиком сигнала и уровнем шума определяется отношением сигнал/шум (SNR). Продолжайте увеличивать коэффициент усиления до тех пор, пока пик не перестанет увеличиваться быстрее, чем уровень шума. На этом этапе можно остановиться: вы максимально увеличили SNR. 5. Демодулируйте сигнал и наблюдайте за выходными сигналами независимо от того, идет ли речь о прослушивании аудио или восстановлении цифровых данных. Если вы ощущаете искажения в звуке или ожидаемой форме цифрового сигнала, попробуйте постепенно уменьшать коэффициент усиления, чтобы увидеть, улучшается ли качество демодулированного сигнала. Если эти действия не помогают, то, скорее всего, у вас проблема с антенной (о чем мы поговорим в следующей главе), или вы пытаетесь принять слишком слабый сигнал, или сигнал на фоне недопустимо большого шума (уровень SNR слишком низкий). Как усиление влияет на сигнал Возможно, вам интересно, почему усиление влияет на пик сигнала и уровень шума по-разному. Вероятно, вопреки здравому смыслу цель применения усиления при приеме заключается не только в увеличении уровня сигнала. Повышение уровня сигнала само по себе не помогает, поскольку усиление влияет как на уровень шума, так и на Под капотом SDR-аппаратуры https://liveinternet.club/ 257
целевой сигнал. А у нас при увеличении усиления шум становится относительно меньше сигнала. Цель усиления приема в SDR — улучшить работу АЦП. Максимальный входной сигнал, который может измерить АЦП, соответствует пределу шкалы (full-scale signal). Если принимаемый сигнал очень мал по сравнению с максимально возможным, АЦП будет выдавать мало информации об этом сигнале. Например, представьте себе 8-разрядный АЦП со шкалой в диапазоне от –1,0 до +1,0. Такой АЦП выдавал бы 28 = 256 различных выходных значений, при этом его максимальный выходной сигнал соответствовал бы +1,0, а минимальный — –1,0. Теперь представьте, что на этот АЦП подается очень слабый входной сигнал, как показано на рис. 11.24. Рис. 11.24. Оцифровка очень маленького сигнала Миниатюрная синусоида на рисунке колеблется всего от +0,015 до –0,015. Из-за малого размаха синусоида преобразуется в относительно небольшое количество цифровых значений; это всего лишь –2, –1, 0, 1 и 2 разряда1. На бумаге это может быть 8-разрядный АЦП, но он производит только 5 различных измерений из 256 возможных, поэтому его практическое разрешение составляет всего 2 или 3 бита. При таком низком эффективном разрешении АЦП не может точно измерить сигнал или предоставить много информации о нем. Эта 1 Цена одного разряда АЦП равна размаху шкалы (в данном примере от –1 до +1 = 2), деленному на разрядность (в данном примере 256), т. е. в данном случае числу 2/256 = 0,0078125 ≈ 0,008. Что и подтверждается графиками рис. 11.24, где максимум синусоиды, равный ≈0,015, соответствует (с округ­ле­нием) выходному числу 2 (а минимум, равный ≈ –0,015, соответствует –2). 258 Глава 11 https://liveinternet.club/
ошибка измерения и проявляется в виде шума, что приводит к ухудшению SNR. С другой стороны, если сигнал достаточно велик, чтобы быть близким к полной шкале АЦП, то при преобразовании получаются значения, подобные показанным на рис. 11.25. Рис. 11.25. Оцифровка сигнала, близкого к полной шкале АЦП В этом случае аналоговый сигнал находится в диапазоне от +0,8 до –0,8, или 80 % от полного диапазона. Таким образом, АЦП может использовать гораздо большее количество разрядов для описания сигнала, обеспечивая значительно большую детализацию. Погрешность измерения намного меньше, чем значения сигнала, и результирующий SNR может быть намного лучше. Однако если вы слишком сильно увеличите коэффициент усиления при приеме, может возникнуть другая проблема: ограничение. Это происходит, когда коэффициент усиления настолько высок, что на входе АЦП возникает сигнал, превышающий полную шкалу. На рис. 11.26 показан пример ограничения, при котором входные данные превышают максимальные и минимальные значения полного диапазона входных данных от +1,0 до –1,0. Отсчеты АЦП корректны до тех пор, пока входной сигнал не достигнет максимальных значений, равных пределу шкалы, после чего АЦП не сможет выводить более высокие значения (то же самое касается и нижнего уровня). При отсутствии каких-либо других опций АЦП выдает максимальное (или минимальное) значение, которое он может использовать, что больше не является значимым измерением сигнала. Это вносит искажения в значения преобразования АЦП и может помешать восстановить точное представление исходного сигнала. Под капотом SDR-аппаратуры https://liveinternet.club/ 259
Рис. 11.26. Ограничения, когда сигнал превышает полную шкалу АЦП Улучшенная модель SDR После обсуждений в этой главе у нас имеется вся информация, необходимая для создания более подробной модели работы аппаратного обеспечения SDR. На рис. 11.27 показана структурная схема платы HackRF, которую мы использовали для этой книги. В других конструкциях SDR могут быть небольшие различия в каскадах усиления, но в целом структура должна быть схожей. Смеситель АЦП Фильтр I-отсчеты BB-усиление Смеситель Цифровая логика RF-усиление Фильтр антиалиасинга USB К компьютеру IF-усиление АЦП Локальный генератор Смеситель Фильтр Q-отсчеты BB-усиление Рис. 11.27. Детализированная модель модуля HackRF SDR Сигнал от антенны поступает непосредственно на радиочастотный (RF) усилитель. После RF-усилителя сигнал переключается на пониженную промежуточную час­то­ту (IF), генерируемую локальным генератором. Полученный IF-сигнал затем усиливается IF-усилителем, после чего будут сгенерированы сигналы I и Q в виде пары синусоид, сдвинутых по фазе на 90 градусов друг от друга. Результирующие сигналы I и Q фильтруются фильтрами низкой час­то­ты для предотвращения алиасинга, а затем усиливаются усилителем третьей ступени: 260 Глава 11 https://liveinternet.club/
BB-усилителем. Наконец, эти отфильтрованные и усиленные сигналы I и Q передаются на пару АЦП для преобразования. Для преобразования необработанного выходного сигнала АЦП в формат, который может быть передан через USB-порт, снова требуется немного цифровых вычислений. Как только это будет сделано, драйвер HackRF на компьютере отправит поток комплексных чисел в блок Soapy HackRF Source в среде GNU Radio, чтобы вы могли обрабатывать его сколько душе угодно. Важно подчеркнуть, что все это происходит непосредственно на SDR-оборудовании, без вашего вмешательства. Вам не нужно слишком беспокоиться о технических деталях, связанных с оборудованием, чтобы использовать его в качестве базового приемника или передатчика. Однако понимание внутренней работы оборудования может оказаться полезным при работе над более сложными проектами SDR. Смещение по постоянному току В работе SDR-аппаратуры есть еще один аспект, о котором следует знать: смещение по постоянному току. Это ложный сигнал, который может возникать ровно в середине частотного графика SDR-при­ем­ ни­ка. Например, на блок-схеме аппаратного FM-приемника из главы 9 этот всплеск был довольно заметным. Он показан на рис. 11.28. Рис. 11.28. Скачок постоянного тока на частотном графике HackRF Скачок вызван реальным физическим явлением, но он не связан с радиосигналами, которые вы пытаетесь поймать. Он возникает при Под капотом SDR-аппаратуры https://liveinternet.club/ 261
час­то­те 0 Гц независимо от радиочастотного входа и возникает из-за несовершенства усилителей, фильтра и схемы АЦП, а также математических особенностей в вычислениях БПФ. В идеальном случае, если бы вы подключили к статическому напряжению 0 В вход усилителя с коэффициентом усиления 10, вы бы увидели 0 В на выходе, как показано на рис. 11.29. Умножьте 0 на 10, и вы все равно получите 0. 0В 0В Усиление = 10 Рис. 11.29. Идеальный усилитель Однако в реальном усилителе вы увидите, что выходной сигнал немного отличается от 0. Недостатки в схеме усилителя приводят к ошибке смещения, при которой входной сигнал интерпретируется как немного более высокий или низкий, чем он есть на самом деле. Допустим, эта ошибка смещения преобразует входной сигнал 0 В в 0,01 В. Затем усилитель умножает этот сигнал 0,01 В на 10, таким образом, ошибка смещения приводит к выходному напряжению 0,1 В, как показано на рис. 11.30. 0В 0,1 В Усиление = 10 Рис. 11.30. Неидеальный усилитель с входным сигналом 0 В Если входной сигнал отличен от нуля, вы все равно увидите ту же ошибку смещения в выходном сигнале. Например, на рис. 11.31 входное напряжение составляет 0,2 В, но вместо идеального выходного напряжения в 2,0 В смещение входного напряжения на 0,01 В приводит к повышению выходного напряжения до 2,1 В. 0,2 В 2,1 В Усиление = 10 Рис. 11.31. Неидеальный усилитель с входным сигналом 0,2 В Строго говоря, инженеры проводят различие между различными типами смещения более формально, чем мы это сделали здесь, но такие подробности нам не нужны. Ключевым фактором здесь будет то, что первичное смещение выглядит как постоянное значение, которое 262 Глава 11 https://liveinternet.club/
добавляется ко всем входным сигналам. Инженеры называют элект­ рическую величину, которая не меняется с течением времени, постоянным током (DC), поэтому этот эффект и называется смещением по постоянному току. Какова час­то­та постоянного напряжения? Поскольку оно не меняется, его час­то­та составляет 0 периодов в секунду. Вот почему по­ явился всплеск на час­то­те именно 0 Гц, прямо в центре графика час­ тот, между отрицательной и положительной час­то­та­ми. Это называют DC-скачком. DC-скачок не соответствует нормальному радиосигналу, и он будет искажать любой сигнал, который находится на час­то­те 0 Гц, поэтому это явление нужно обойти. На практике лучше избегать установки центральной час­то­ты SDR прямо на час­то­те сигнала, который вы пытаетесь перехватить. Вместо этого следует сдвинуть цент­ ральную час­то­ту в ту или иную сторону. Например, на рис. 11.32 целевой сигнал находится на час­то­те 433,9 МГц, но центральная час­то­та была установлена на 433,5 МГц. Это называется настройкой смещения. DC-скачок Целевой сигнал Рис. 11.32. DC-скачок рядом с целевым сигналом Хотя смещение по постоянному току и участвует во всем этом, поскольку оно создает всплеск, которого мы пытаемся избежать, это не совсем то смещение, на которое ссылается «настройка смещения». Термин «настройка смещения» относится к разнице между цент­ ральной частотой SDR и частотой, на которую вы хотите настроить свой приемник. Другой способ описать это — разница между аппаратной частотой (center_freq) и программной частотой настройки (freq). Под капотом SDR-аппаратуры https://liveinternet.club/ 263
Существуют более сложные способы обойти DC-скачок, такие как использование калибровки для минимизации ошибки смещения, но обычно проще просто убрать скачок напряжения немного в сторону по час­то­те. До сих пор все наши блок-схемы радиоприемников выполняли это с помощью настройки смещения; мы просто не обращали внимания на то, что это происходит. Например, блок-схема AMприемника из главы 4, продублированная на рис. 11.33, выполняет настройку смещения с использованием сложного синусоидального умножения, в части схемы, выделенной на рисунке. Это умножение гарантирует, что входные радиочастотные данные будут сдвинуты на 20 кГц, что приведет именно к центрированию целевого сигнала, а не к DC-скачку. Затем целевой сигнал проходит через последующий фильтр нижних час­тот, чем скачок полностью устраняется. Узел смещения Рис. 11.33. Настройка смещения в АМ-приемнике Блок-схема аппаратного FM-приемника из главы 9, воспроизведенная на рис. 11.34, выполняет ту же операцию с блоком Frequency Xlating FIR Filter. При работе с IQ-данными из блока File Source очень важно иметь фиксированное значение для переменной center_freq, соответствующее центральной час­то­те, на которую был установлен SDR при первоначальном захвате данных. (Это значение было включено в на264 Глава 11 https://liveinternet.club/
звания IQ-файлов, см. главу 7.) При указании неверного значения center_freq блок-схема будет отображать неверную интерпретацию час­тот сигналов в IQ-данных. Содержит узел смещения Рис. 11.34. Настройка смещения в аппаратном FM-приемнике При работе с текущими IQ-данными из аппаратного SDR задать значение center_freq можно более удобным способом. Откройте файл ch_11/fm_hackrf.grc, который представляет собой ту же блок-схему аппаратного FM-приемника, которую мы построили в главе 9 и которая показана на рис. 11.34. Затем измените значение center_freq на freq - samp_rate/4. Это гарантирует, что значение центральной час­то­ ты будет смещено от желаемой час­то­ты настройки на четверть час­то­ ты дискретизации, как показано на рис. 11.35. Обратите внимание на положение час­то­ты настройки программного обеспечения (freq) в полосе захвата, на полпути между центром полосы и частотой Найквиста. Вычисление центральной час­то­ты SDR таким образом устраняет DC-скачок из вашего сигнала, гарантируя, что час­то­та будет допустимым значением в пределах полосы захвата, но будет исключать скачок. Благодаря автоматическому вычислению теперь вы можете изменить свою настройку час­то­ты (freq) на любое другое значение, поддерживаемое частотным диапазоном вашего SDR, и центральная час­то­та будет автоматически пересчитана для его поддержки. Под капотом SDR-аппаратуры https://liveinternet.club/ 265
Уровень сигнала Целевой сигнал Полоса захвата Частота –fs /2 fs /4 fs /2 Общая полоса пропускания = fs Рис. 11.35. Соотношение между установками SDR и значениями настройки Важные характеристики SDR Теперь, когда вы в общих чертах понимаете, как работают SDR, давайте рассмотрим их общие характеристики: на что надо обращать внимание в SDR и как эти характеристики влияют на то, что вы можете делать. Диапазон рабочих час­тот (operating frequency) — это диапазон час­тот, которые можно принимать и передавать с помощью SDR. Что касается GNU Radio, то это диапазон допустимых значений, которые можно ввести для свойства Center Frequency SDR-источника или приемника. Для HackRF One этот диапазон составляет от 1 МГц до 6 ГГц, что означает, что HackRF может принимать и передавать данные во всех диапазонах КВ, МВ и ДМВ, а также в части диапазона СВ на низких час­то­тах и в диапазоне УКВ на высоких час­то­тах. Ограничение низких час­тот на СВ означает, что у вас возникнут проблемы с приемом примерно половины диапазона AM-вещания, который полностью занимает полосу примерно от 500 кГц до 1,6 МГц. Ограничение на высоких час­то­тах окажет влияние, если вы планируете использовать спутниковую связь или некоторые виды сотовой связи 5G. Примечательно, что HackRF и многие другие SDR-устройства будут работать на всех час­то­тах телефонии 3G и 4G, а также на многих час­то­тах Wi-Fi. Полнодуплексный или полудуплексный режим (full duplex/ half duplex). Определяет, может ли SDR передавать и принимать сигналы одновременно. Если вы используете полудуплексное устройство HackRF One, вы должны в каждый момент времени выбирать режим передачи или приема. Если вы хотите использовать и то, и другое, вам необходимо либо переключаться из одного режима в другой, либо использовать два устройства HackRF. Полнодуплексные устройства, 266 Глава 11 https://liveinternet.club/
которые могут передавать и принимать данные одновременно, как правило, стоят дороже. Количество каналов (number of channels). Многие высококачест­ венные SDR-системы содержат несколько полнодуплексных каналов, что позволяет использовать несколько передатчиков и приемников, которые могут работать одновременно. Частота дискретизации (sampling rate). Определяет диапазон час­тот дискретизации, который можно использовать. В некоторых случаях это не диапазон, а фиксированная час­то­та, которую нужно использовать. АЦП HackRF One настроены на работу в диапазоне от 2 до 20 Msps. Устройство также будет работать со скоростью и менее 2 Msps, но вы рискуете получить некоторый алиасинг от соседних сигналов из-за аналоговых эффектов, которые невозможно обойти на блок-схеме. Лучше всего вначале делать пробу на час­то­те не менее 2 Msps и потом сокращать ее, если вы хотите снизить скорость. Разрешение (resolution). Это количество битов, генерируемых АЦП на стороне приема, или количество битов, используемых ЦАП на стороне передачи. При дискретизации сигнала всегда возникает некоторая ошибка при преобразовании аналогового сигнала в цифровое значение. HackRF имеет 8-битное разрешение, что означает, что он преобразует каждое получаемое аналоговое значение в одно из 256 (28) различных цифровых значений. Более производительный SDR может иметь разрешение 12 бит, что означает, что он будет делить диапазон на 4096 (212) различных цифровых значений. Очевидно, что такое разрешение обеспечит более точное представление исходного аналогового сигнала. Поскольку неточность АЦП является случайной величиной, возникающая ошибка выглядит как шум. Формальный термин для обозначения этой ошибки — шум квантования. Более высокое разрешение означает меньшее количество такого рода шумов. RX-усиление (RX gain). Усиление на стороне приема, о котором мы говорили ранее в этой главе. В блоке SDR source в GNU Radio будет указано некоторое максимальное значение, на которое это значение можно установить. Имеющийся у вас SDR, скорее всего, будет иметь один регулятор усиления, но он может состоять из нескольких ступеней усиления, как в случае с HackRF One. TX-усиление (TX gain). Коэффициент усиления на стороне передачи, который также будет иметь максимально возможное значение и может состоять из нескольких ступеней усиления. Выходная мощность радиосигнала (RF output power). Вероятно, будет варьироваться в зависимости от час­то­ты, на которой вы осуществляете передачу. Например, HackRF One может выдавать мощность передачи 30 мВт на более низких час­то­тах, но она постепенно снижается по мере увеличения час­то­ты. На час­то­те 4 ГГц максимальная мощность упадет до менее чем 1 мВт. Питание системы. Для SDR может быть указана определенная потребляемая мощность в ваттах или определенный ток питания в милПод капотом SDR-аппаратуры https://liveinternet.club/ 267
лиамперах (мА). Однако чаще всего вас интересует, сможете ли вы запитать SDR от шины USB без использования внешнего адаптера питания. Для большинства доступных SDR, таких как устройства HackRF, ответ «да»1. Интерфейс. Многие SDR-карты подключаются к компьютеру через USB. Однако некоторые более дорогие устройства используют подключение Ethernet (1 Гбит/с или 10 Гбит/с). При подключении к сети эти SDR с поддержкой Ethernet доступны нескольким компьютерам, находящимся на большом расстоянии. В других дорогих SDR используются разъемы PCIe или M.2, поэтому их необходимо подключать непосредственно к материнской плате настольного ПК или компьютера специальной конструкции. Антенный разъем. Как правило, это SMA-разъем, как на плате HackRF. В некоторых других SDR-устройствах, например в некоторых RTL-SDR-ключах, используется разъем MCX. Мы подробнее обсудим радиочастотные разъемы в следующей главе. Тактовый вход. Этот вход может использоваться для подачи на SDR более качественного тактового сигнала, чем тот, который SDR генерирует сам по себе. Под «более качественным» мы подразумеваем более точный в абсолютном смысле, а также более стабильный во времени и при изменении температуры. Нам не понадобится эта функция ни для одного из упражнений в нашей книге. Тактовый выход. При одновременной работе с несколькими SDR для реализации сложной системы связи может оказаться полезным, чтобы они работали с одним и тем же тактовым сигналом. Подключение порта CLKOUT одного SDR к порту CLKIN другого позволит синхронизировать два устройства. Хотя все эти характеристики существенны, но наиболее важными для недорогих SDR-устройств являются диапазон рабочих час­тот и час­ то­та дискретизации. По мере увеличения цены ищите SDR-устрой­ ства, имеющие АЦП/ЦАП с лучшим разрешением и дополнительные частотные каналы. Итоги В этой главе мы рассмотрели работу SDR-оборудования изнутри. Мы говорили о IQ-дискретизации, методе, который аппаратура использует для преобразования радиосигналов в цифровые данные. Вы узнали, что окно захвата SDR имеет полосу пропускания, равную час­то­те дискретизации, и сосредоточено вокруг центральной час­то­ты, а так1 Электронщик, очевидно, сразу же начнет искать указание на напряжение питания (или допустимый диапазон напряжений), однако в случае, например, HackRF One указание про питание простое: USB bus power, что означает совместимость с питанием от USB (5 В постоянного тока). 268 Глава 11 https://liveinternet.club/
же узнали, как настроить коэффициент усиления для SDR и избежать ошибок превышения ограничений. Наконец, мы познакомили вас с несколькими определениями, которые будут полезны для оценки оборудования SDR при использовании и приобретении. Однако наш обзор SDR-аппаратуры не является полным; в следующей главе мы рассмотрим антенны, разъемы и другие периферийные устройства, необходимые для систем SDR. https://liveinternet.club/
12 ПЕРИФЕРИЙНОЕ ОБОРУДОВАНИЕ Вы узнали достаточно, чтобы начать использовать SDR с GNU Radio, но чем больше вы будете работать с радио, тем больше вам придется думать не только о самом SDR, но и о периферийном оборудовании, таком как антенна, разъемы и т. д. В этой главе мы расскажем о периферийных устройствах, которые необходимы для наиболее эффективного использования SDR. Эта глава не претендует на исчерпывающий характер, но должна помочь вам справиться с большинством несложных проектов. Мы также обсудим упущенные из виду факторы, которые могут повлиять на производительность SDR, такие как технические характеристики вашего компьютера, и рассмотрим некоторые аппаратные решения для снижения уровня шума в радиосистемах. Антенны Наиболее важным периферийным устройством SDR является антенна. В предыдущих главах мы уже использовали антенну ANT500, но не тратили времени на объяснение того, что она делает и как работает. Возможно, у вас есть интуитивное понимание того, что антенна — это устройство, которое передает или принимает сигналы из пространства. Если вы достаточно опытный, то, возможно, у вас даже есть некоторый практический опыт ручной настройки антенны, хотя 270 Глава 12 https://liveinternet.club/
вы, вероятно, не придавали этому особого значения, когда возились с рогатыми антеннами, чтобы улучшить картинку в вашем любимом телевизионном шоу 1980-х годов с участием частного детектива в гавайской рубашке1. Теперь давайте превратим эту общую интуицию в практические знания, которые вы сможете применить в экспериментах с SDR. Сначала, как обычно, сделаем оговорку: это не учебник по физике. Здесь не будет глубокого погружения в теорию электромагнитного поля, и мы не будем выводить уравнения Максвелла. Это выходит за рамки данной книги даже больше, чем тема IQ-дискретизации. Основная цель состоит в том, чтобы помочь вам разобраться в нескольких основных характеристиках различных типов антенн. Здесь мы лишь слегка поцарапаем поверхность темы, но этого будет достаточно, чтобы вы могли выполнять основные задачи. Начнем все-таки с физики, в частности электрических и магнитных полей. Мы все сталкивались с ними в повседневной жизни. Вы наверняка когда-нибудь наблюдали, как волоски на руках встают дыбом рядом с одеялом или другой тканью, заряженной статическим электричеством? Это действие электрического поля. Между тем сувенирные магниты на холодильнике являются одним из многих примеров действия магнитных полей. Ключевым моментом для радио является то, как электрические и магнитные поля взаимодействуют между собой. Подключая батарею к проводнику, вы создаете вокруг него элект­ рическое поле. При этом происходит несколько интересных вещей. Во-первых, это приводит к протеканию электрического тока. Во-вторых, движущиеся заряды, из которых состоит этот ток, создают магнитное поле. Еще одна интересная вещь происходит, когда вы помещаете магнит рядом с проводником, а затем начинаете его вращать. Возникающие в результате изменения магнитного поля создают элект­ри­че­ ское поле в проводнике. Другими словами, изменения элект­рического поля вызывают изменения магнитного поля, и наоборот! Очень интересная вещь происходит, когда вы пропускаете переменный ток через специально сконструированный проводник. Неравномерно движущийся электрический заряд в проводе создает изменяющееся магнитное поле. Это изменяющееся магнитное поле, в свою очередь, генерирует изменяющееся электрическое поле, и так далее до бесконечности. Это называется электромагнитной волной, а радиоволны, как мы знаем, — это особый тип электромагнитных волн. Такие волны будут распространяться от провода со скоростью света. Антенна — это не что иное, как только что упомянутый «специально сконструированный проводник». Существует несколько конструкций 1 Отсылка к американскому детективному телесериалу 1980-х продюсера и сценариста Дональда Беллисарио «Частный детектив Магнум». Периферийное оборудование https://liveinternet.club/ 271
антенн с различными характеристиками, и мы подробно рассмот­рим их в следующих двух разделах. Однако прежде чем продолжать, рассмотрим другой вопрос: как вы думаете, что происходит, когда мы пропускаем переменный ток по проводу, который не был специально сконструирован в качестве антенны? На самом деле такой провод тоже является антенной, только относительно плохой. Это означает, что любые провода, по которым проходят изменяющиеся токи (а это почти все провода в любой включенной электрической системе), будут посылать электромагнитные волны во всевозможных случайных направлениях. Что это значит для нас как конструкторов SDR? Еще больше электромагнитного шума. Как будто нам его и так было недостаточно. Характеристики При выборе антенны необходимо учитывать несколько различных факторов. Наиболее важными из них являются час­то­та, полоса пропускания, коэффициент усиления и направленность. Мы также поговорим об импедансе, но для наиболее распространенных типов SDRантенн это будет не самой сложной проблемой. Частота Антенны, как правило, рассчитаны на определенный диапазон час­ тот. Однако, согласно требованиям физики, физический размер антенны прямо пропорционален длине волны или обратно пропорционален час­то­те, для которой она предназначена. Общее эмпирическое правило заключается в том, что размер большинства антенн составляет от одной четвертой до половины длины волны, для которой они сконструированы. Продуманная конструкция может уменьшить этот размер, но если сигнал сильный, оптимизация конструкции не требуется. Например, длина волны сигналов FM-вещания составляет около 3 м. Но вы, наверное, заметили, что принимать FM-сигналы удавалось независимо от того, была ли телескопическая автомобильная антенна растянута на полную четверть длины волны (около 75 см)? Сигналы FM-вещания вблизи станций настолько мощные, что их часто можно уловить с помощью антенны, не имеющей оптимальной конфигурации. Тем не менее общее правило таково: чем выше час­то­та, тем меньше антенна; чем ниже час­то­та, тем больше антенна. Это справедливо как для приема, так и для передачи данных. Полоса пропускания Антенны могут быть сконструированы с более широкой или более узкой полосой пропускания. У каждой из них есть свои преимущества и недостатки. Более широкая полоса пропускания позволяет принимать большее разнообразие сигналов. Однако более узкая полоса 272 Глава 12 https://liveinternet.club/
пропускания лучше отфильтровывает шумы или нежелательные сигналы, поступающие на час­то­тах, выходящих за пределы полосы пропускания. Полосу пропускания антенны можно рассматривать как полосовой фильтр на входе приемника или на выходе передатчика. Коэффициент усиления Более крупные и сложные антенны будут принимать более сильный сигнал, чем антенны меньшего размера и попроще. Мы выражаем это различие, определяя коэффициент усиления антенны. Этот коэффициент усиления измеряется в дБи (dBi), что означает «децибелы относительно изотропной антенны». Изотропная антенна — гипотетическая конструкция, равномерно излучающая энергию по всем направлениям. Нельзя просто сложить коэффициент усиления антенны в дБи с остальными ступенями усиления вашего радиоприемника (в дБ), чтобы рассчитать общее усиление системы. Вместо этого коэффициент усиления в дБи позволяет определить, какое усиление вы будете добавлять к системе, используя одну антенну по сравнению с другой. Просто сравните значения дБи антенн друг с другом1. Направленность Если у вас простая прямая антенна, направленная вверх, она будет одинаково излучать во всех горизонтальных направлениях, а также принимать сигналы с любого горизонтального направления. Вот почему прямые антенны называются всенаправленными. Этот термин может немного ввести в заблуждение: хотя всенаправленная антенна одинаково хорошо работает на все 360 градусов в плоскости, перпендикулярной ее направленности, она не обязательно работает так же хорошо в остальных направлениях. В какой бы ориентации вы не расположили прямую антенну, ее оптимальная рабочая плоскость будет перпендикулярна направлению ее оси, как показано на рис. 12.1. Другие типы антенн являются более направленными, что означает, что они будут излучать более интенсивно в определенных направлениях (например, в направлении, на которое они направлены). Что касается приема, то эти направленные антенны с большей готовностью принимают сигналы с одних направлений, чем с других. Некоторые схемы излучения и приема антенн являются более сложными, чем просто «везде» или «в данном направлении». Мы рассмотрим этот вопрос подробнее при рассмотрении конкретных конструкций антенн позже в данной главе. 1 Важно понимать, что «коэффициент усиления антенны» — не то же самое, что коэффициент усиления усилителя. Антенна (пассивная) ничего не усиливает в физическом смысле: она лишь может концентрировать сигналы в определенных направлениях, игнорируя в других, что выглядит, как будто бы сигналы в этих направлениях подвергаются действию усилителя. Периферийное оборудование https://liveinternet.club/ 273
Рис. 12.1. Направленность простой прямой антенны Импеданс Импеданс — это термин, описывающий, насколько трудно пропускать электрический ток через что-либо1. То есть импеданс антенны говорит о том, насколько трудно пропускать ток через антенну. Поскольку мы в основном работаем с готовыми антеннами и относительно короткими кабелями, нам не нужно тратить много времени на возню с импедансом. Проблема становится более актуальной, если вы пытаетесь создать свою собственную антенну или использовать антенну необычного типа. Тем не менее необходимо убедиться, что импеданс вашей конк­ ретной антенны соответствует импедансу порта антенны SDR-обо­ру­ дования. В противном случае вы будете терять существенную долю из энергии, поступающей в SDR или выходящей из него, что снизит эффективность как при приеме, так и при передаче. Для HackRF One, как и для большинства SDR, оптимальный импеданс составляет 50 Ом. К счастью, многие антенны рассчитаны на импеданс 50 Ом, поэтому если вы хотите использовать антенну определенного типа, это не будет лимитирующим фактором. Конструктивные типы Быстрый поиск в интернете покажет вам, что существует огромное разнообразие конструкций антенн. В этом разделе мы рассмотрим несколько основных типов, которые должны соответствовать большинству ситуаций, с которыми вы можете столкнуться. Если хотите более подробно ознакомиться с этой темой, будет полезен поиск информации про антенны любительского радио в интернете. 1 Импеданс — комплексная величина, обобщение понятия электрического сопротивления на высокочастотные цепи. В русскоязычных источниках импеданс часто называют «комплексным сопротивлением». Как и сопротивление, измеряется в омах (см. далее). 274 Глава 12 https://liveinternet.club/
Штыревые и телескопические антенны Простейшим типом антенны, вероятно, является штыревая антенна, иногда называемая монополем. Она состоит из прямолинейного проводящего материала фиксированной длины, часто гибкого и иногда покрытого защитным покрытием. Пример показан на рис. 12.2. Рис. 12.2. Штыревая антенна Благодаря фиксированной длине штыревые антенны оптимизированы для работы на определенной час­то­те. Они имеют довольно широкую полосу пропускания и являются всенаправленными, поэтому вам не нужно беспокоиться о том, чтобы навести их на цель. Поскольку они лучше всего передают и принимают сигналы в плоскости, перпендикулярной оси, обычно удобнее всего ориентировать их вертикально. Эти штыревые антенны имеют умеренное усиление, примерно 2 дБи в перпендикулярных направлениях (примерно в 1,6 ра­за больше, чем всенаправленные антенны). Телескопические антенны, такие как ANT500, показанные на рис. 12.3, представляют собой просто штыревые антенны переменной длины. Рис. 12.3. Телескопические антенны, сложенная (слева) и растянутая (справа) Периферийное оборудование https://liveinternet.club/ 275
Настраивают телескопическую антенну, выдвигая или укорачивая ее в соответствии с длиной волны в четверть от требуемой. В других отношениях телескопические антенны ведут себя как штыревые антенны. Дипольные антенны Дипольные антенны, подобные той, что показана на рис. 12.4, имеют Т-образную форму. Из-за этой формы их характеристики существенно отличаются от характеристик предыдущих типов. Во-первых, полоса пропускания обычно намного меньше, чем у штыревых антенн. Это хорошо, если ваша антенна согласована с целевой частотой, но означает, что у вас будет меньше возможностей в ситуациях, когда целевая час­то­та отличается. Рис. 12.4. Дипольная антенна Большинство дипольных антенн, с которыми вы столкнетесь, будут либо четвертьволновыми, либо полуволновыми. Это означает, что размер каждой из двух частей поперечины будет равен либо четверти длины волны, либо половине. Если такая дипольная антенна ориентирована горизонтально, то есть «усы» параллельны земле, то антенна будет работать в определенном направлении. Такая ориентация показана на рис. 12.5. Оптимальная горизонтальная ориентация обеспечивает усиление примерно на 5 дБи, или на 3 дБ больше, чем у монополя аналогичного размера, но только в направлениях, перпендикулярных антенне. Сигналы, поступающие в направлении, параллельном поперечине T, будут иметь значительно меньшее усиление, чем простой штырь. На рис. 12.6 показана схема усиления диполя. Диполь, по сути, жертвует усилением по бокам в пользу усиления спереди и сзади. Поскольку вы также будете получать меньше шума 276 Глава 12 https://liveinternet.club/
в этих боковых направлениях, соотношение сигнал/шум при использовании диполя может быть лучше, чем у монополя. Рис. 12.5. Горизонтальная ориентация дипольной антенны Очень низкое усиление Высокое усиление Высокое усиление Очень низкое усиление Кабель к приемнику Рис. 12.6. Усиление диполя в зависимости от направления Рамочные конструкции Рамочные (петлевые, loop) антенны, как правило, очень компактны, даже для работы на длинных волнах. Они часто используются в тех случаях, когда эквивалентная монопольная или дипольная антенна была бы неоправданно большой. На самом деле почти все антенны AM-радиоприемников относятся к этому типу. Пример показан на рис. 12.7. Периферийное оборудование https://liveinternet.club/ 277
Рис. 12.7. Рамочная антенна AM-диапазона Рамочные антенны могут представлять собой катушку из одного или нескольких витков провода. Они являются направленными и лучше всего принимают сигналы вдоль оси намотки, как показано на рис. 12.8. Небольшие рамочные антенны в большинстве случаев не подходят для передачи. Рис. 12.8. Направленность рамочной антенны Другие конструкции Существует множество более сложных конструкций антенн, каждая из которых имеет свою собственную комбинацию полосы пропускания, направленности и коэффициента усиления. Пожалуй, наиболее распространенной из этих конструкций является антенна «волновой канал»1, подобная той, что показана на рис. 12.9. 1 В англоязычных источниках известна под названием antenna Yagi–Uda или просто Yagi antenna («антенна Яги–Уда»), по фамилиям японских изобретателей. 278 Глава 12 https://liveinternet.club/
Рис. 12.9. Антенна «волновой канал» «Волновой канал» — это сложные сборки из множества деталей, в результате которых получается высоконаправленная антенна с высоким коэффициентом усиления. Если они кажутся знакомыми, то это потому, что раньше их часто ставили на крышах для приема телевизионных сигналов. Если вы немного поищете другие антенны, то столкнетесь также с так называемой активной антенной. Эти антенны могут использовать любую физическую топологию, но в них встроен усилитель для обеспечения дополнительного усиления принимаемых сигналов. Для питания этих антенн требуется напряжение питания, которое может подаваться как извне, так и через сам антенный разъем. HackRF One обеспечивает ток до 50 мА для питания активных антенн, но не все SDR-модули поддерживают эту функциональность. Поляризация В предыдущем разделе, посвященном нескольким типам антенн, мы немного поговорили о том, какое значение имеет направление, в котором вы ориентируете антенну. Оказывается, что для антенПериферийное оборудование https://liveinternet.club/ 279
ны также имеет значение и угол поворота в вертикальной плоскости, перпендикулярной направлению приема. Если представить, что стоите прямо за приемником, речь идет об угле поворота с вашей визуальной точки зрения. Это происходит потому, что радиоволны поляризованы: электромагнитная волна имеет свои электрические и магнитные составляющие, каждая из которых колеблется относительно определенной оси. Электрическая составляющая волны будет ориентирована перпендикулярно магнитной составляющей. Как это выглядит, показано на картинке во врезке «Частота и длина волны» на стр. 183. Конкретный наклон передающей антенны будет определять поляризацию результирующих радиоволн. Если приемная антенна ориентирована так же, как и передающая, она будет иметь максимальное усиление. Если одна антенна повернута относительно другой, коэффициент усиления будет снижаться в той степени, в какой они ориентированы по-разному. Теоретически приемная антенна, развернутая к передающей на 90 градусов, вообще не будет воспринимать передаваемый сигнал. Однако на практике этого не происходит. Ориентации никогда не будут точно выровнены, и волны, рассеянные от расположенных между ними объектов, также будут искажать поляризацию, делая ее несовершенной. В конечном счете поляризация означает для вас примерно то же самое, что в 1980-е годы она означала для зрителей, настраивавших свои телевизоры: если принимаемый сигнал слишком слабый, вы можете улучшить его, изменив угол поворота антенны. Эксперимент с антенной Теперь, когда вы немного знаете о том, как работают антенны, давайте посмотрим, что происходит, когда вы манипулируете антенной при работающей программе FM-радио из главы 9. Сначала убедитесь, что все ваше SDR-оборудование подключено должным образом. Антенна ANT500 должна быть подключена к антенному разъему модуля HackRF One, который, в свою очередь, должен быть подключен через USB к компьютеру, на котором запущена среда GNU Radio Companion. Убедившись в этом, откройте и запустите файл ch_12/fm_hackrf. grc. Блок-схема в нем идентична тем, которые мы использовали ранее для приема FM-сигналов. Попробуйте сжать антенну до упора в самое короткое положение, затем настройте радиоприемник на самый сильный сигнал, который наблюдается на частотном графике, введя его час­то­ту в переменную freq. В примере, показанном на рис. 12.10, мы установили его на 94,9 МГц, что соответствует самому высокому пику на нашем частотном графике. У вас самый высокий пик, скорее всего, будет другим. 280 Глава 12 https://liveinternet.club/
Рис. 12.10. Выход блок-схемы FM-приемника при укороченной антенне Обратите внимание на уровень сигнала, наведя курсор на пунктирную зеленую горизонтальную линию. Она перемещается, поэтому просто постарайтесь зафиксировать середину колебания. На нашем графике уровень составлял около –58 дБ. Теперь удлините антенну на один сегмент и посмотрите, что произойдет с уровнем сигнала. В ходе нашего тестирования, как показано на рис. 12.11, величина пика изменяется. В этом случае мощность увеличилась совсем незначительно, примерно до –55 дБ. Теперь продолжайте и вытяните антенну на максимальную длину. Результаты показаны на рис. 12.12. Вы должны заметить значительное повышение уровня сигнала. В нашем случае он достиг почти –40 дБ. Это хорошо согласуется с нашим предыдущим утверждением о том, что антенны обычно работают лучше, если их размер составляет четверть или половину целевой длины волны. Какова длина волны сигнала FM-вещания? Как обсуждалось в главе 8, мы рассчитываем это значение, деля скорость света на час­то­ту сигнала. Математические расчеты будет провести проще, если скорость света, равную 3×108 м/с, записать как 300×106, или 300 млн м/с. Частота обычного FM-радиосигнала составляет около 100 МГц, или 100 млн колебаний в секунду. Таким образом, длина волны сигнала FM-вещания составляет 300 млн м/с, разделенная примерно на Периферийное оборудование https://liveinternet.club/ 281
100 млн колебаний в секунду, что дает 3 м на один период колебания. Четверть от 3 м составляет около 75 см. Полностью вытянутая, антенна ANT500 имеет длину чуть менее 84 см, что близко к четверти длины волны. Рис. 12.11. Выход блок-схемы FM-приемника при частично выдвинутой антенне Вы также можете настроить антенну более точно, если произведете расчет для заданной час­то­ты. В нашем случае это будет 300, разделенное на 94,9; у вас час­то­та станции, вероятно, будет другой. Четверть длины волны для час­то­ты нашей станции составит 79 см. Действительно, когда мы немного укорачиваем антенну, чуть менее чем до 80 см, сигнал немного усиливается, примерно на 0,5 дБ. Уделите минутку, чтобы оценить масштаб изменений, которые вы здесь увидели. Неудачно спроектированная, чрезмерно короткая антенна, с которой мы начинали, обеспечила уровень сигнала примерно –58 дБ, в то время как более оптимизированная антенна давала –40 дБ. Простое увеличение длины антенны позволило повысить уровень сигнала на 18 дБ. Это почти в 10 раз больше по уровню сигнала и более чем в 60 раз — по мощности, как следует из нашего обсуждения децибел в главе 51. 1 См. также сноски на стр. 104 и 106. 282 Глава 12 https://liveinternet.club/
Рис. 12.12. Выход блок-схемы FM-приемника при полностью выдвинутой антенне Влияние компьютеров на работу SDR Один элемент периферийного оборудования SDR настолько очевиден, что вы можете забыть о его важности: это сам компьютер. Учитывая, что мы говорим о программно-определяемом радио, вполне естественно, что на программное обеспечение будут влиять характеристики компьютера, на котором оно работает. Ниже приведены основные проблемы, связанные с вычислениями. Скорость вычислений. Если компьютер работает слишком медленно, вы столкнетесь с нехваткой ресурсов и с эффектом переполнения, что ухудшит способность вашей аппаратуры отправлять и получать сигналы. Часто эти проблемы можно устранить, оптимизировав производительность блок-схемы (см. главу 11). Скорость интерфейса передачи данных. Если интерфейсы USB или Ethernet не могут поддерживать необходимую скорость передачи данных, у вас возникнут проблемы с недостаточным потоком данных (см. гл. 11). Их можно устранить, только убрав перегрузку интерфейса или уменьшив час­то­ту дискретизации SDR, тем самым снизив скорость передачи данных в блок-схеме. При использовании устройства с интерфейсом USB 3 будьте осторожны и не подключайте его к порту USB 2, иначе вы, скорее всего, столкнетесь с подобными Периферийное оборудование https://liveinternet.club/ 283
проблемами. Вы также можете столкнуться с проблемами скорости интерфейса при запуске GNU Radio на виртуальной машине, поскольку драйверы программного обеспечения виртуальной машины могут не соответствовать скорости передачи данных, требуемой вашей SDR-аппаратурой. Емкость дискового накопителя. При работе с SDR-файлами мы часто собираем данные и сохраняем их в файл для последующего анализа. Файлы с необработанными IQ-данными могут быть очень большими, их размер может легко достигать нескольких гигабайтов. Если ваш компьютер оснащен только небольшим диском, мы рекомендуем приобрести дополнительный накопитель. Это может быть второй твердотельный накопитель (SSD), магнитный жесткий диск, флеш-накопитель USB или даже SD-карта. Какой бы носитель вы ни выбрали, убедитесь, что скорость передачи данных на накопитель выше, чем скорость поступления данных, которые вы собираетесь записывать. В следующем разделе мы рассмотрим методы минимизации воздействия шума от вашего компьютера, а также от других видов помех. Снижение уровня шума Мы обсуждали шум в предыдущих главах, и вы знаете, что шум — это плохо, но что с ним делать? Вот несколько приемов, которые вы можете применить в своем периферийном оборудовании для уменьшения уровня шума, проникающего в вашу систему. Большинство из этих советов касаются принимающей стороны, но некоторые из них также относятся к передаче. Ориентация антенны. Если у вас имеется направленная антенна, например дипольная, то направление, в котором она установлена, может иметь большое значение. Посмотрите, сможете ли вы найти ориентацию, которая снижает уровень шума, но при этом направляет антенну на целевой сигнал с высоким коэффициентом усиления. Цель состоит в том, чтобы сориентировать антенну таким образом, дабы отношение сигнал/шум SNR было максимальным. Источник питания. Источники питания большинства компьютеров, особенно настольных, очень шумные. Это также может быть проб­лемой при использовании дешевых зарядных устройств сторонних производителей для ноутбуков. Если вы пользуетесь ноутбуком, то можете заметить снижение уровня шума при отключении зарядного устройства от сети; как правило, оборудование, питающееся от батарей или аккумуляторов, обладает самым низким уровнем шума. Экранированные кабели. Если вы прокладываете кабель между антенной и SDR, а не подключаете антенну напрямую, обязательно используйте экранированный кабель. Он обеспечивает слой металли284 Глава 12 https://liveinternet.club/
ческого материала на внешней стороне кабеля, который предотвращает попадание шума внутрь кабеля1. Ферритовые дроссели. Для снижения помех от источника питания, которые могут возникать в USB-кабеле, используйте ферритовые дроссели. По сути, это фильтры, которые можно подключить к кабелю извне. Вы можете либо купить кабель со встроенными дросселями на каждом конце (см. рис. 12.13, слева), либо приобрести дроссели отдельно и закрепить их на любом кабеле (рис. 12.13, справа). Любой из этих вариантов относительно недорогой. Рис. 12.13. USB-кабель со встроенным ферритовым дросселем (слева) и кабель с подключением отдельного ферритового дросселя (справа) Помимо этих мер, одно из самых простых действий, которое вы можете предпринять для снижения уровня шума, — просто переместить устройство SDR подальше от компьютера. Поскольку шум, излучаемый источником, будет быстро уменьшаться с увеличением расстояния, удаление вашего радиоприемника от него часто улучшает ситуа­ цию. Чтобы увидеть этот эффект в действии, попробуйте выполнить простую программу, которая направляет выходные данные SDR в интерфейс QT GUI sink, и понаблюдайте за изменением уровня шума в режиме реального времени при перемещении SDR в пространстве. Разъемы Еще одним элементом периферийного оборудования, на который следует обратить внимание, является разъем, соединяющий антенну с SDR. Существует огромное разнообразие различных типов разъ­емов. 1 В экранированных кабелях экран (металлический внешний слой) обычно служит одним из проводников, соединяющим через корпус разъема вашу аппаратуру с антенной. Следует избегать дешевых кабелей, в которых экраном служит алюминиевая или медная фольга: в них контакт между корпусом разъема и экраном легко нарушается, о чем вы можете даже не узнать. Намного более надежны традиционные кабели с экраном в виде переплетенных тонких гибких проволочек. Особенно это критично для передающей аппаратуры с запретом на подключение без антенной нагрузки (см. раздел «Подключение оборудования» в главе 9): вследствие нарушения контакта в экране она может быть повреждена, и найти источник неисправности будет очень сложно. Периферийное оборудование https://liveinternet.club/ 285
Если вы используете HackRF One и ANT500, вам не нужно беспокоиться об этом, поскольку они уже совместимы. Однако если в какой-то момент вы решите начать работать с разными антеннами, у вас могут возникнуть проблемы с подключением их к SDR. В этом разделе мы рассмотрим основные типы разъемов, с которыми вы можете столкнуться. Однако прежде всего важно подчеркнуть различие между разъемами-штырями и разъемами-гнездами. Практически для всех существующих типов разъемов правильное соединение выполняется при вставке или ввинчивании штыревой части разъема в гнездовую. При поиске разъема или адаптера убедитесь, что вы подключаете его не только к нужному типу, но и к нужному полу1. SMA — распространенный тип разъема для маломощных радио­ частотных устройств. В HackRF One используется гнездовая часть разъема SMA для подключения к антенне со штыревой частью SMA. Подключение осуществляется путем установки и последующего накручивания разъема на стороне антенны на резьбу на стороне устройства (аналогично разъемам коаксиального телевизионного кабеля). На рис. 12.14 показаны как штыревые, так и гнездовые части разъемов SMA. Рис. 12.14. Штыревой (слева) и гнездовой (справа) разъемы SMA MCX — гораздо более компактный тип разъема, используемый в некоторых RTL-SDR-ключах, а также в других SDR-устройствах. Для подключения достаточно просто подключить его, не поворачивая. На рис. 12.15 показаны разъемы MCX обоих типов. RCA показаны на рис. 12.16. Возможно, вы видели их в домашних развлекательных системах2, но в некоторых антеннах также используются разъемы RCA. Это еще один простой вставной разъем, который не требует вращения. 1 2 Намек на принятое в английском языке наименование частей разъема: штыревой части — male (мужская), гнездовой — female (женская). В русскоязычном инженерном жаргоне распространен буквальный аналог такого подхода (не принятый, впрочем, официально, в отличие от англоязычного): штыревая часть именуется «папой», гнездовая — «мамой». RCA-разъемы более всего известны как один из вариантов для передачи компонентного аналогового видео/аудиосигнала; три таких разъема, окрашенных в разные цвета (красный—желтый—белый), еще недавно присутствовали на задней стенке любого телевизора. В настоящее время вытесняются универсальным интерфейсом HDMI. 286 Глава 12 https://liveinternet.club/
Рис. 12.15. Гнездовой (слева) и штыревой (справа) разъемы MCX Рис. 12.16. Штыревой (вверху) и гнездовой (внизу) разъемы RCA Коаксиальный. Это те же разъемы, которые, вероятно, используются в вашем телевизоре для подключения кабеля или антенны. Поскольку это резьбовые разъемы, их необходимо вставить, а затем завернуть. На рис. 12.17 показаны коаксиальные разъемы с внутренним и наружным подключением. Разъемы BNC обычно используются для более дорогого радиочас­ тотного оборудования, они имеют механизм поворота для фиксации. Однако вместо винта с резьбой, требующего многократного вращения, разъем BNC фиксируется на месте после полуоборота1. Обе части разъема показаны на рис. 12.18. 1 Такой механизм фиксации называется байонетным. Периферийное оборудование https://liveinternet.club/ 287
Рис. 12.17. Коаксиальные разъемы гнездового (слева) и штыревого (справа) типа Рис. 12.18. Гнездовой (слева) и штыревой (справа) разъемы BNC SO-239 — это еще один тип разъемов с резьбой, аналогичный коаксиальному. На рис. 12.19 показан пример. Рис. 12.19. Пример гнездовой части разъема SO-239 RP-SMA — еще один тип разъемов, заслуживающий упоминания, который имеет необычный внешний вид и странную историю. Из-за того, что Федеральная комиссия по связи (FCC) не хотела, чтобы вы снимали антенну с вашего Wi-Fi-маршрутизатора и заменяли ее на другую, они постановили, что все устройства Wi-Fi, продаваемые в Соединенных Штатах, не могут быть совместимы со стандартным форм-фактором SMA. Так появился на свет разъем RP-SMA, что означает reverse polarity SMA (с обратной полярностью). Этот разъем также имеет штыревую и гнездовую части, аналогичные оригинальному разъему SMA, но гнездовая часть сочетается с накидной гайкой с внутренней резьбой (устанавливается на стороне антенны), а штыревая имеет наружную резьбу на корпусе. На рис. 12.20 показан разъем RP-SMA. 288 Глава 12 https://liveinternet.club/
Рис. 12.20. Гнездовая сторона разъема RP-SMA При покупке оборудования SMA убедитесь, что это настоящий SMA, а не RP-SMA. Если вам все же необходимо подключить RP-SMA или любой другой тип разъема, отличного от SMA, вы всегда можете использовать адаптер, о чем мы поговорим в следующем разделе. Создание SDR-инструментария Мы рассмотрели несколько различных типов периферийных устройств SDR, но вам определенно не нужно спешить приобретать их все прямо сейчас. Однако чем дольше вы работаете с SDR, тем больше вы будете ценить доступ к набору компонентов, включающему разное полезное оборудование. Следующие предлагаемые элементы перечислены примерно в порядке приоритетности, хотя вы все равно будете адаптировать набор компонентов к своим потребностям. Надеюсь, этот раздел поможет определиться с тем, что вам понадобится. К счастью, большинство периферийных устройств, о которых идет речь, недороги и их легко найти в интернете. Антенны Вы можете значительно увеличить производительность ANT500, которая, вероятно, поставляется в комплекте с HackRF One. Поскольку можно регулировать длину антенны, настраивая ее на широкий спектр час­тот, это одна из самых удобных антенн общего назначения. Если вы планируете работать в определенных диапазонах радиочастот и нуждаетесь в большей направленности или усилении, вам дополнительно следует приобрести дипольную антенну для необходимого целевого диапазона. Однако при снижении час­то­ты диполи становятся довольно большими, и целесообразность их применения ниже 100 МГц постепенно снижается. Если вам нужно работать на час­то­тах в килогерцы, для приема сигналов планируйте приобрести рамочную антенну. Поскольку это прос­то витки проволоки с радиусом, определяемым целевой час­ тотой, вы также можете смастерить такую антенну самостоятельно; в интернете есть несколько руководств, показывающих, как это сделать. Периферийное оборудование https://liveinternet.club/ 289
Адаптеры Если вы планируете использовать другие антенны, вам, скорее всего, потребуется запас адаптеров для их успешного подключения к SMAразъему SDR-оборудования. Это можно сделать одним из двух способов. Во-первых, вы можете приобрести несколько адаптеров с разъ­ емами SMA на одном конце и разъемом, совместимым с вашей целевой антенной, на другом. Например, адаптер, показанный на рис. 12.21, имеет разъем SMA слева и коаксиальный разъем справа. Просто подключите адаптер между антенной и SDR. Рис. 12.21. Адаптер для перехода со штыревой части SMA на гнездовую коаксиального разъема Другой вариант — приобрести комплект, содержащий несколько частей разъемов разной конфигурации, которые соединяются винтами для создания любой комбинации, которая вам понадобится. Второй вариант дороже, чем требуется большинству людей, но он обеспечивает максимальную гибкость. Какой бы путь вы ни выбрали, вам, скорее всего, понадобятся адаптеры для подключения гнездовой части SMA (той, что устанавливается на оборудование) к следующим разъемам: RP-SMA, MCX и RCA. Желательно, чтобы количество подключенных адаптеров было как можно меньшим, поскольку каждый адаптер в цепи приводит к некоторой потере сигнала. Повышающие преобразователи Возможно, вы заметили, что HackRF One работает только на радио­ час­то­тах, превышающих примерно 1 МГц. Это означает, что вы не можете просто подключить его и начать работать с низкочастотными сигналами, такими как нижняя часть диапазона AM-радиовещания или некоторые диапазоны любительского радио. Аппаратным решением данной проблемы является повышающий преобразователь. Он работает точно так же, как понижающие преобразователи, которые мы до сих пор встраивали в каждый из наших радиоприемников, но вместо понижения час­то­ты он повышает ее. Принимая сигналы с частотой менее 1 МГц и переводя их в диапазон час­тот выше 1 МГц, повышающий преобразователь (см. рис. 12.22) позволяет HackRF One 290 Глава 12 https://liveinternet.club/
работать с этими сигналами. Как и сам HackRF One, эти устройства обычно имеют SMA-входы и выходы. Рис. 12.22. Повышающий преобразователь Подключите антенну ко входу повышающего преобразователя и SDR-приемник к его выходу. Вам также потребуется подключить питание, обычно это можно сделать через USB-кабель. Балун-устройства Балун (от англ. balun, сокр. от balanced-unbalanced) — это инструмент, который позволяет сбалансированному устройству, такому как SDR, эффективно подключаться к несбалансированному устройству, такому как определенные антенны. В данном контексте термин «несбалансированный» означает, что устройство имеет один сигнальный провод и провод заземления, в то время как «сбалансированный» означает, что оба провода передают сигналы относительно друг друга. Балуны особенно полезны при подключении SDR к самодельным антеннам, которые иногда могут просто представлять собой кусок длинного провода1. Разное В дополнение к уже упомянутым основным элементам у вас также должен быть USB-кабель с ферритовым дросселем. Кроме того, кабель SMA-гнездо/SMA-штырь может использоваться в качестве удлинителя для подключения антенны, позволяя отнести антенну дальше от SDR. Таким образом, вы сможете расположить антенну в более выгод1 Подробнее о согласующих устройствах см. статью Википедии по адресу https://ru.wikipedia.org/wiki/Балун. Периферийное оборудование https://liveinternet.club/ 291
ном положении, подальше от радиопомех, хотя и за счет небольшого снижения уровня сигнала. Помимо основных периферийных устройств, которые мы рассмот­ рели, следующие компоненты также могут пригодиться как при расширенном использовании, так и в особых случаях. Малошумящий усилитель (low-noise amplifier, LNA) — аппаратный усилитель между вашей антенной и SDR в режиме приема. LNA обеспечивает дополнительное усиление для обнаружения и демодуляции слабых сигналов. Большинство из таких усилителей рассчитаны на ограниченный диапазон час­тот, поэтому обязательно убедитесь, что приобретаемый LNA соответствует вашим целевым час­то­там. Малошумящий блок понижающего преобразователя (low-noi­ se block downconverter, LNB) — устройство принимает сигналы на час­то­тах, слишком высоких для обработки SDR, и понижает их до рабочего диапазона SDR. Эти высокие час­то­ты обычно используются спутниками или некоторыми системами 5G. Представляйте LNB как высокочастотный аналог понижающего преобразователя. GPS-антенна — активная антенна, специально разработанная для приема сигналов GPS, которые довольно слабы и их трудно поймать на обычную антенну. К этой антенне необходимо подключать питание постоянным током, обычно через SMA-порт. HackRF One может питать эту антенну без каких-либо дополнительных компонентов, но для других SDR может потребоваться разделитель Bias tee (см. далее), подающий питание постоянного тока на SMA-соединение. Bias tee — устройство-разделитель в цепи соединения SDR с антенной, передающее радиочастотный сигнал и постоянное напряжение для питания усилителей, подключенных к антенне. Если имеющийся у вас SDR не поддерживает эту функцию разделения сигналов и постоянного тока, вы можете добавить ее с помощью Bias tee, содержащего два сигнальных порта и разъем питания. Радиочастотный аттенюатор (RF attenuator) — уменьшает уровень RF-сигнала, подающегося на SDR-приемник. Как мы уже говорили, высокие уровни сигнала могут повредить SDR-оборудование. Если вы считаете, что такое возможно, можете установить аттенюатор между приемной антенной и SDR. Эти устройства доступны с несколькими различными уровнями ослабления. Кроме того, они сами имеют заданный максимальный уровень сигнала на входе, поэтому если приемник находится слишком близко к мощному передатчику, позаботьтесь о том, чтобы ваш аттенюатор мог выдержать необходимую мощность радиочастотного излучения. Наконец, аттенюаторы рассчитываются на определенный диапазон рабочих час­тот. Радиочастотный ограничитель (RF limiter) — ограничивает уровень сигнала, передаваемого на SDR, если он выше установленного порога. Устройство неактивно, если уровень RF-сигнала ниже порогового значения ограничителя, но не допускает превышения этого 292 Глава 12 https://liveinternet.club/
порога. В дополнение к заданному предельному порогу эти устройства также имеют установленный диапазон час­тот и максимальную мощность сигнала, при которой они могут работать. Возможно, вам не понадобятся эти специализированные компоненты немедленно. Мы упомянули о них, чтобы вы знали, что они существуют, на случай, если эксперименты с SDR приведут вас к их необходимости. Итоги В этой главе мы рассмотрели различные типы антенн и способы их использования. Мы также рассмотрели другие элементы, такие как адаптеры, повышающие преобразователи и балуны, которые, возможно, вам понадобятся в качестве персонального набора инструментов для работы с SDR. Вам не нужно бежать и покупать весь комплект сразу, но теперь вы должны иметь представление о том, что доступно в продаже и как это может вам помочь. Мы также обсудили некоторые стратегии снижения уровня шума и разобрали, как производительность вашего компьютера может повлиять на SDR. Теперь, когда вы знакомы с антеннами и другими периферийными устройствами SDR, вы готовы к последнему шагу в вашем начинающемся путешествии по SDR: передаче данных. https://liveinternet.club/
13 ПЕРЕДАЧА Почти все, что мы делали до сих пор в этой книге, касалось приема сигналов, но как насчет передачи? В этой главе мы построим блок-схему, которая будет генерировать данные, необходимые для передачи широковещательного FM-сигнала. Однако мы не будем привязывать эту блок-схему к физическому SDR. Это может быть нарушением, поскольку может привести к глушению законного FM-вещания. Вместо этого мы запустим блок-схему только в программном режиме, подключив выход передатчика непосредственно к блок-схеме FM-приемника, чтобы убедиться, что они работают. В данной главе мы также обсудим некоторые юридические и практические тонкости передачи данных. Построение FM-модулятора Для начала создадим новую блок-схему с именем fm_tx.grc и изменим в ней значение переменной samp_rate по умолчанию на 8e6. Затем добавим четыре блока переменных Variable , перечисленных в табл. 13.1. Таблица 13.1. Переменные блок-схемы передатчика Блок Variable 1 Variable 2 Variable 3 Variable 4 294 Глава 13 https://liveinternet.club/ ID Значение center_freq working_samp_rate audio_samp_rate t_width 100e6 320000 32000 chan_width/20
Также создайте блок QT GUI Entry с идентификатором freq_tx, типом Float и значением по умолчанию 98.1e6. Наконец, создайте еще один блок QT GUI Entry с идентификатором chan_width, типом Float и значением по умолчанию 150e3. Когда вы закончите, у вас будет множество блоков переменных и блок Options, как показано на рис. 13.1. Рис. 13.1. Переменные для передатчика Эти переменные определяют час­то­ту дискретизации и все остальные частотные характеристики сигнала, которые нам понадобятся при построении блок-схемы. С большинством из них мы уже сталкивались, но кратко опишем каждую из них по мере ее использования. Настройка источника звука Поскольку FM-вещание — это средство передачи голоса, мы будем использовать для передачи источник, связанный со звуком. При желании вы можете записать свой собственный звук или использовать аудиофайл ch_05/HumanEvents_s32k.wav, который можно загрузить из архива книги. Добавьте блок Wav File Source, укажите в нем выбранный аудиофайл и установите для параметра Repeat (Повтор) значение Yes (Да). FM-вещание использует схему модуляции, официально известную как широкополосная (wideband) FM, или WBFM. Это отличает ее от узкополосной (narrow-band) FM, или NBFM, использующей меньшую полосу пропускания, но с худшим качеством звука. Максимальное отклонение WBFM, или величина, на которую может изменяться час­ то­та при модуляции несущей сигналом базовой полосы час­тот, составляет 75 кГц. Это означает, что нам нужно будет выполнять FMмодуляцию с частотой дискретизации, по крайней мере в два раза превышающей это значение (помните час­то­ту Найквиста?). Чтобы полностью себя обезопасить, мы пойдем немного дальше и используем значение working_samp_rate, равное 320 000. Вы уже видели эту переменную ранее в проекте FM-приемника, и сейчас вы увидите, что здесь она выполняет ту же функцию, что и там: определяет более низкую час­то­ту дискретизации, чем представленную значением samp_rate. Следующий блок в блок-схеме будет выполняться с более низкой частотой дискретизации, чтобы минимизировать нагрузку на компьютер. Передача https://liveinternet.club/ 295
Модуляция сигнала Далее мы будем использовать блок WBFM Transmit для управления модуляцией. Подключите вход этого блока к выходу блока Wave File Source и задайте его свойства следующим образом: Audio Rate: audio_samp_rate; zz Quadrature Rate: working_samp_rate; zz Tau: 75e-6; zz Max Deviation: 75e3; zz Preemphasis High Corner Freq: -1.0. zz Последние три параметра уже должны иметь правильные значения, являющиеся настройками по умолчанию для широковещательного стандарта FM. Свойства Tau и Preemphasis High Corner Freq связаны с небольшим трюком модуляции WBFM, называемым preemphasis. Этот метод немного повышает час­то­ты в сигнале базовой полосы час­тот, что приводит к улучшению отношения сигнал/шум и, следовательно, к улучшению качества звука. Приемник WBFM использует противоположный метод — deemphasis, чтобы вернуть сигнал базовой полосы час­тот на место. Как мы уже обсуждали, свойство Max Deviation определяет, насколько сильно может измениться несущая час­то­та из-за модуляции. Как мы и ожидали, это свойство равно 75 кГц. Переменная Quadrature Rate — это час­то­та дискретизации исходящего модулированного сигнала, а Audio Rate — час­то­та дискретизации входящего базового сигнала (аудиосигнала). Блок WBFM Transmit ожидает, что Quadrature Rate будет целым значением, кратным Audio Rate, поэтому мы выбрали, чтобы переменная working_samp_rate была ровно в 10 раз больше. Преобразование сигнала с повышением частоты Теперь, когда у нас есть модулированный сигнал, нам нужно преобразовать его с повышением до нужной час­то­ты перед отправкой. Мы будем использовать блок умножения Multiply и синусоидальную несущую. Эти блоки должны работать с частотой дискретизации 8 Msps. Поэтому, прежде чем реализовать повышающее преобразование, нам нужно еще раз увеличить час­то­ту дискретизации данных. Создайте блок Rational Resampler, подключите его вход к выходу блока WBFM Transmit и задайте его свойства следующим образом: Type: Complex->Complex (Complex Taps); zz Interpolation: int(samp_rate/working_samp_rate); zz Decimation: 1. zz Этот блок увеличивает час­то­ту дискретизации в 25 раз, доводя данные до значения samp_rate, которое равно 8e6. После этого создайте 296 Глава 13 https://liveinternet.club/
блок умножения Multiply и подключите выход Rational Resampler к одному из его входов. Затем подключите другой вход Multiply к блоку Signal Source, сконфигурированному следующим образом: Sample Rate: samp_rate; zz Waveform: Cosine; zz Frequency: freq_tx - center_freq; zz Amplitude: 1. zz Результатом этой последовательности блоков является преобразованный с повышением час­то­ты модулированный сигнал. Если бы мы попытались реально передать этот сигнал, мы бы подключили его к Soapy HackRF Sink с центральной частотой center_freq и запустили блок-схему в работу. Сигнал будет физически передаваться на час­то­ те, определенной параметром freq_tx (опять же, блок-схема работает с час­то­та­ми с нулевым центром, а аппаратное обеспечение SDR преобразует час­то­ту с нулевым центром в значение center_freq, указанное в выходном блоке SDR sink). Как упоминалось ранее, фактическая передача сигнала может быть незаконной. Чтобы не подвергать себя такому риску, мы подключим FM-передатчик непосредственно к блок-схеме FM-приемника. Однако сначала давайте посмотрим, как выглядит выходной сигнал передатчика, передав выходные данные блока Multiply в QT GUI Sink со следующими свойствами: Center Frequency: center_freq; Bandwidth: samp_rate; zz Show RF Freq: Yes. zz zz Готовая блок-схема должна выглядеть так, как показано на рис. 13.2. Запустив программу, вы увидите результат, подобный показанному на рис. 13.3. Вместо четкого всплеска на час­то­те передачи 98,1 МГц наблюдается также несколько других всплесков. Они значительно ниже и не вызвали бы никаких проблем, но основной принцип радиосвязи заключается в том, чтобы обеспечить правильную передачу, используя необходимую полосу пропускания и не выходя за пределы нужной полосы час­тот. Поэтому мы покажем, как решить эту проб­ лему, если в будущем вы столкнетесь с более крупными скачками напряжения. Откуда взялись эти посторонние всплески? Если расставить выходные блоки QT GUI Sinks ранее в блок-схеме, можно обнаружить, что проблемы начинаются сразу после Rational Resampler. Оказывается, умножение час­то­ты путем интерполяции — это не просто прореживание в обратном порядке. Простая интерполяция вносит искажения в сигнал, и чем больше степень интерполяции, тем больше искажение. Передача https://liveinternet.club/ 297
Рис. 13.2. Готовая схема передатчика Рис. 13.3. Выход блок-схемы передатчика 298 Глава 13 https://liveinternet.club/
Фильтрация после интерполяции Чтобы устранить посторонние всплески, рекомендуется фильтровать сигнал после проведения любой интерполяции значительной степени. К счастью, блок Rational Resampler обладает встроенными возможностями фильтрации. Обратим внимание на свойство блока Taps. Как и свойство Taps в блоке Frequency Xlating FIR Filter, рассмот­ ренном в главе 71, оно устанавливает набор значений, необходимых для реализации фильтра нижних час­тот с конечной импульсной характеристикой (FIR-фильтра). Есть только одно предостережение: чтобы фильтрация работала должным образом, вы можете выполнять с помощью блока только интерполяцию, а не прореживание. Поэтому свойству Decimation должно быть присвоено значение 1. К счастью, соотношение между samp_rate (8e6) и working_samp_rate (320000) является целым числом, равным 25, поэтому в прореживании нет необходимости. Имея это в виду, мы изменим блок Rational Resampler для фильт­ рации сигнала после интерполяции. Обновите поле Taps в Rational Resampler следующим образом: firdes.low_pass(1, samp_rate, chan_ width/2, t_width). Как и в главе 7, мы устанавливаем свойство Taps, используя функцию Python под названием firdes.low_pass(), которая вычисляет значения для фильтра нижних час­тот. Мы указываем, что фильтр должен иметь коэффициент усиления, равный 1, и работать на уровне samp_rate с частотой среза, равной половине ширины канала, и шириной перехода, равной t_width. Мы используем переменную chan_ width, потому что ее значение (150e3) является ожидаемой полосой пропускания выходных данных WBFM. Любая энергия сигнала на час­то­те выше 75 кГц или ниже –75 кГц не является частью модулированного звука и, таким образом, является искажением, которое мы хотим отфильтровать. Значение transition_width снова вычисляется на основе нашего простого эмпирического правила, состоящего из одной десятой. График час­то­ты на выходе передатчика после запуска программы должен теперь выглядеть так, как показано на рис. 13.4. Похоже, что фильтры устранили искажения. 1 См. сноску на стр.168. Передача https://liveinternet.club/ 299
Рис. 13.4. Выход передатчика с доработанным блоком Rational Resampler Правила RF-передач Помните предупреждение о том, что не следует запускать передатчик через SDR-аппаратуру? Хорошо. Как правило, передача в диапазоне FM-вещания без лицензии является незаконной. Однако если вы внимательно ознакомитесь с правилами, то обнаружите, что в них есть некоторые исключения. Использование передатчика не является полностью невозможным, если у вас есть четкое представление о том, что делаете, и вы очень внимательно следите за тем, чтобы передатчик работал таким образом, дабы попадать в категорию разрешенных. Поэтому прежде чем мы перейдем к программной проверке работы передатчика, следует уделить немного времени обсуждению юридических и практических вопросов, возникающих при использовании SDR для передачи. Внимание! Хотя цель этого раздела — дать представление о юридических вопросах, связанных с передачей данных, это определенно не юридическая консультация. Если вы столкнетесь с проблемами от Федеральной комиссии по связи (FCC) из-за ваших экспериментов, не 300 Глава 13 https://liveinternet.club/
указывайте на эту книгу как на авторитетный юридический источник. Это не он. Юридические вопросы В Соединенных Штатах руководящими полномочиями в отношении того, как может использоваться радиочастотный спектр, обладает Федеральная комиссия связи (FCC). В других странах имеются аналогичные инстанции1. Федеральная комиссия связи (FCC) делит радио­ частотный спектр на несколько широких категорий. Одной из них являются общие лицензируемые диапазоны, в рамках которых компании могут приобретать у правительства или сдавать в аренду права на использование определенных час­тот. К этой категории относятся компании сотовой связи, а также организации эфирного радио и телевидения. Кроме общих, имеются диапазоны, выделенные для любительского использования. Лицензированные операторы радиолюбительской связи могут использовать эти диапазоны в зависимости от конкретной лицензии, которой они обладают. Однако даже лицензированные радиолюбители должны соблюдать правила, касающиеся мощности передачи и других аспектов использования спектра. Наконец, существуют нелицензируемые диапазоны спектра, для работы в которых не требуется никаких лицензий или оплат. Однако и здесь есть правила, регулирующие использование этих диапазонов. Еще раз подчеркнем, что мощность передачи имеет первостепенное значение. Другое ключевое ограничение связано с коэффициентом заполнения, определяющим процент времени, в течение которого передатчик активно передает данные. Например, передатчик со 100%-ным коэффициентом заполнения непрерывно излучает радиосигналы, в то время как 50%-ный коэффициент заполнения означает, что половину времени он излучает радиосигнал, а другую половину времени оставляет свободной. Если вы ознакомитесь с соответствующими правилами FCC для нелицензируемого спектра, вы часто найдете таблицу, в которой указаны пары максимальных уровней мощности и коэффициентов заполнения. Если вы передаете с меньшим коэффициентом заполнения, вам будет разрешено использовать более высокий уровень мощности. Соответственно, если вам нужно передавать данные чаще (то есть 1 В России — Федеральная служба по надзору в сфере связи, информационных технологий и массовых коммуникаций (Роскомнадзор). При Минцифры РФ имеется также Государственная комиссия по радиочас­то­там (ГКРЧ), формирующая нормативную правовую базу и технические требования. Перечисляемые авторами далее юридические и технические требования в отношении радиопередач, действующие в США, в целом одинаковы во всех странах, хотя, конечно, имеются и отдельные различия (в том числе в час­то­тах лицензируемых/нелицензируемых диапазонов). Передача https://liveinternet.club/ 301
с бóльшим коэффициентом заполнения), вам необходимо снизить уровень мощности. Практические вопросы Допустим, вы потратили много времени на просмотр веб-сайта Федеральной комиссии по связи (FCC) и решили, что достаточно хорошо разбираетесь в запрещениях и разрешениях, чтобы безопасно и законно использовать частную радиостанцию с низкой мощностью, вещающую в FM-диапазоне. Вы провели все эти исследования, чтобы гарантировать, что Федеральная комиссия по связи (FCC) не наложит на вас ежедневный штраф в размере 10 000 долларов, как на пиратское радио. Что дальше? При использовании SDR в качестве передатчика необходимо учитывать еще несколько практических соображений, в том числе как настроить антенну и установить коэффициент усиления при передаче. Выбор и расположение антенны Какую антенну вы бы выбрали для маломощного FM-передатчика? Поскольку вам, вероятно, нужна всенаправленная передача, ANT500 подойдет как нельзя лучше. Если антенну полностью выдвинуть, вы получите примерно четверть длины волны и, следовательно, приличное усиление. В зависимости от близлежащего ландшафта вам может потребоваться немного приподнять антенну, чтобы увеличить радиус ее действия. С другой стороны, поскольку вам не нужно или вы не захотите передавать данные на большие расстояния, вам не следует поднимать антенну больше, чем это необходимо для обеспечения прямой видимости ожидаемых приемников. Для некоторых диапазонов вам придется подумать о том, стоит ли вообще размещать приемные и передающие устройства на открытом воздухе, если сигналы с частотой около 100 МГц, характерные для наших блок-схем, будут проникать в большинство зданий1. Усиление при передаче В главе 11 мы обсуждали усиление SDR почти исключительно на стороне приема, но SDR-аппаратура обеспечивает усиление также и при 1 Опыт показывает, что межкомнатные перегородки, деревья и стены зданий (если последние сделаны не из металла или армированного железобетона) начинают оказывать заметное влияние на сигнал, начиная с час­тот около 1 ГГц. Иными словами, сотовую связь и Wi-Fi они могут заметно ослаблять, а на телерадиопередачи или любительские рации (типа «воки-токи») практически не будут оказывать влияния. Общее правило: чем ниже час­то­та, тем выше проникающая способность (вспомните, что ДВ- и СВ-диапазоны работают на межконтинентальных расстояниях). Правда, в КВ- и УКВ-диа­ пазонах это работает при условии размещения антенн таким образом, чтобы избежать экранирования складками местности. 302 Глава 13 https://liveinternet.club/
передаче. Напомним, что передатчик HackRF One имеет два аппаратных каскада усиления, показанных на рис. 13.5. Сигнал базовой полосы RF-усиление IF-усиление Рис. 13.5. Ступени усиления передатчика HackRF One Усилитель RF-сигнала может быть подключен со значением 0 или 14 дБ, в то время как усиление IF-сигнала регулируется в диапазоне от 0 до 47 дБ с шагом 1 дБ. Вы также можете создать третью ступень усиления в программе, установив в блок-схеме блок Multiply Const непосредственно перед выходом в Soapy HackRF Sink. Однако есть одна проблема: блок Soapy HackRF Sink предназначен только для обработки диапазона значений примерно от –1 до +1 (здесь речь идет о комплексных числах, но мы упрощаем ради простоты). Вы не получите правильного результата за пределами этого диапазона. Если максимальная амплитуда сигнала, поступающего в блок, не превышает указанных пределов, вы сможете программно увеличить коэффициент усиления. Если максимальная амплитуда сигнала уже близка к границе этого диапазона, увеличение коэффициента усиления программным способом может привести к ограничениям и искажениям. При создании блок-схемы с физической передачей следует установить два значения усиления при передаче (RF и IF) блока Soapy HackRF Sink на уровне 0 дБ и посмотреть, способен ли приемник при этом принимать полезный сигнал. Вы можете убедиться в этом, просмот­ рев график час­тот на выходе блока Soapy HackRF Source приемника. Обратите внимание на всплеск на ожидаемой час­то­те. Если вы не видите всплеска, увеличьте коэффициент RF-усиления до 14 дБ и проверьте еще раз. Наконец, медленно увеличивайте значение коэффициента IF-усиления, пока приемник не начнет работать. Вы должны увидеть, что при увеличении коэффициента усиления всплеск на целевой час­то­те у приемника увеличивается в размерах. Несмотря на то что это всего лишь мысленный эксперимент, он иллюстрирует хорошее эмпирическое правило: не используйте более мощный сигнал, чем необходимо для выполнения работы. Поскольку максимальная выходная мощность HackRF One относительно невелика, дальность передачи, скорее всего, будет довольно ограниченной, если только у вас нет хорошо расположенной антенны с высоким коэффициентом усиления. Тем не менее следуйте рекомендациям и старайтесь не увеличивать мощность выше необходимого. Чрезмерная мощность имеет ряд недостатков. Во-первых, это увеличивает риск повреждения приемного оборудования при отладПередача https://liveinternet.club/ 303
ке. Во-вторых, вы можете передавать дальше, чем это необходимо, и, возможно, создавать помехи для чужих передач. В-третьих, увеличивается вероятность появления искажений, которые могут привести к тому, что ваша передача выйдет за пределы заданного диапазона на соседние час­то­ты, что также может создавать помехи для других пользователей. Тестирование FM-передатчика Даже если забыть о юридических проблемах, мы предполагаем, что у вас нет двух физических SDR: одного для запуска FM-передатчика и другого для его тестирования с помощью FM-приемника. Вместо этого мы завершим проект передатчика добавлением к блок-схеме программного FM-приемника, чтобы убедиться, что передающая часть работает правильно. На самом деле даже если у вас есть необходимая аппаратура для работы как передатчика, так и приемника, все равно рекомендуется по возможности программно смоделировать обе части системы, чтобы найти и устранить ошибки, прежде чем подключать оборудование. Для понимания, как будет работать смоделированная система передатчик—приемник, сначала представьте, что вы создаете аппаратные версии каждой половины. Если использовать их обе, вся система будет выглядеть примерно так, как показано на рис. 13.6. Передающая блок-схема Входной сигнал SDRпередатчик SDRприемник Приемная блок-схема Выходной сигнал Рис. 13.6. Общая структура аппаратной WBFM-системы На стороне передачи входной сигнал проходит через передающую блок-схему для обработки, и результат отправляется в SDR-пе­ре­дат­ чик для отправки через антенну. На приемной стороне другая антенна улавливает сигнал и передает его через SDR-приемник в блок-схему приема, обрабатывающую полученные радиочастотные данные для получения выходного сигнала, соответствующего исходному входному сигналу. То, что мы собираемся сделать сейчас, — это исключить SDR-аппаратуру и подключить передатчик непосредственно к приемнику, полностью разместив это соединение внутри блок-схемы. В общем виде результирующая система будет выглядеть так, как показано на рис. 13.7. Таким образом, наша цель состоит в том, чтобы добавить программные компоненты блок-схемы аппаратного FM-приемника (см. главу 9) к к разработанной выше блок-схеме передатчика. 304 Глава 13 https://liveinternet.club/
SDRпередатчик Входной сигнал SDRприемник Передающая блок-схема Приемная блок-схема Выходной сигнал Рис. 13.7. Общая структура эмулятора WBFM-системы Восстановление сигнала Первым шагом в работе приемника является настройка на входящий сигнал. К счастью, большинство переменных, которые здесь понадобятся, уже определены на стороне передатчика. Вам просто понадобится новый входной интерфейс для управления тюнером приемника. Добавьте блок QT GUI Entry и настройте его следующим образом: ID: freq_rx; Type: Float; zz Default Value: 98.1e6. zz zz Ранее источник Soapy HackRF Source FM-приемника подавался на блок Frequency Xlating FIR Filter, поэтому мы также будем использовать его. Добавьте блок в блок-схему, подключите его вход к выходу блока умножения Multiply и измените следующие настройки: Decimation: int(samp_rate/working_samp_rate); zz Taps: firdes.low_pass(1, samp_rate, chan_width, t_width); zz Center Frequency: freq_rx - center_freq; zz Sample Rate: samp_rate. zz Это реализует настройку путем понижения час­то­ты, фильтрации и прореживания принимаемого сигнала. После этого мы можем демодулировать, фильтровать и повторно дискретизировать его, чтобы извлечь исходный аудиосигнал. Для демодуляции подключите выход блока Frequency Xlating FIR Filter ко входу приемника WBFM Receive и настройте его следующим образом: Quadrature Rate: working_samp_rate; zz Audio Decimation: int(working_samp_rate/audio_samp_rate). zz Выходной сигнал приемного блока WBFM Receive теперь будет содержать демодулированный звук, час­то­та дискретизации которого снижена в 10 раз — с 320 ksps до 32 ksps. Чтобы прослушать результат на выходе, подключите WBFM Receive к аудиовыходу Audio Sink с час­ тотой дискретизации 32 кГц. Теперь блок-схема должна выглядеть так, как показано на рис. 13.8. Передача https://liveinternet.club/ 305
Передача Прием Рис. 13.8. Комбинированная блок-схема передатчика и приемника На левой половине рисунка вы можете увидеть передающую часть, на правой — принимающую. Обязательно сравните полученную приемную часть с блок-схемой FM-приемника из главы 9, чтобы убедиться, что они эквивалентны. Работа блок-схемы Запустите программу. Поскольку входные значения QT GUI Entry freq_tx и freq_rx по умолчанию одинаковы, приемник настроен на ту же час­то­ту, что и передатчик. Поэтому вы должны слышать звук, хотя, возможно, придется увеличить громкость: либо значение volume в блок-схеме, либо уровень в динамиках компьютера. Если звук чистый, значит, передатчик работает. Попробуйте перенастроить приемник на другой канал. Установите для параметра freq_rx любое значение, которое покажется вам интересным, но оставьте значение freq_tx в покое. Это означает, что передатчик по-прежнему посылает сигнал на час­то­те 98 МГц, но приемник будет настроен на другую час­то­ту. На большинстве иных час­ тот, которые вы можете выбрать случайным образом, вы не услышите ничего или сплошные помехи. Но попробуйте что-нибудь конкретное: например, установите значение freq_rx равным 98,4 МГц, как показано на рис. 13.9. 306 Глава 13 https://liveinternet.club/
Рис. 13.9. Частотный график WBFM-приемника с намеренно неправильной настройкой Хммм... почему вы все еще слышите звук, хотя настроены на другую час­то­ту? Несмотря на то что он несколько искажен, звук все равно должен быть узнаваемым. Из-за этого вы можете подумать, что в блок-схеме есть какие-то недостатки. Однако, как ни странно, этот эффект возникает скорее по противоположной причине: ваша блок-схема слишком хороша! Этот эффект обусловлен двумя факторами. Во-первых, процесс WBFM-модуляции вызывает значительное количество гармонических искажений. Это означает, что в дополнение к модулированному сигналу на заданной час­то­те по обе стороны от нее также будут уменьшенные копии этого сигнала, известные как гармоники. Причем на каждой стороне будет не по одной копии, а бесконечный ряд копий с равномерно распределенными частотными интервалами, уменьшающихся по мере удаления от целевой час­то­ты, как показано на рис. 13.10. Передача https://liveinternet.club/ 307
Целевой сигнал Частота Гармоники Гармоники Рис. 13.10. Представление гармоник в частотной области Обычно эти гармоники не являются проблемой. Они и так относительно малы, и их еще больше уменьшает фильтр во втором блоке Rational Resampler. Однако какими бы малыми ни были эти гармоники, блок приема WBFM Receive, похоже, обнаруживает их. Вот тут-то и возникает второй фактор. Поскольку блок-схема передатчик—приемник работает в искусственной среде, практически полностью свободной от помех, отношение сигнал/шум этих гармоник все еще остается значительным. Обычно приемник улавливает всевозможные шумы из окружающей среды, которые заглушают гармоники, но единственные шумы в полностью программной системе имеют чисто математическое происхождение — это шум вычислений и шум дискретизации. Поскольку все математические вычисления выполняются с использованием 32-разрядных значений с плавающей запятой, этот математический шум практически отсутствует. Насколько велик уровень этого шума? Посмотрите на QT GUI Sink на выходе передатчика и прокрутите колесико мыши вниз, пока не увидите что-то вроде рис. 13.11. Прокрутив страницу вниз, вы увидите равномерно распределенные пики дополнительных гармоник. Вы также увидите, что уровень шума снижается почти до –200 дБ. Это невероятно низкое значение, которое не встречается в природе. Таким образом, требуется, чтобы уровень сигнала или гармоники превышал всего-навсего –200 дБ. Моделирование шума Мы уже обсуждали, как отсутствие шума приводит к странному поведению блок-схемы. Что мы можем с этим поделать? Попытаемся сделать схему более похожей на реальность, добавив между передающей и приемной частями немного искусственного шума. Уровень этого шума должен быть установлен на уровне, аналогичном тому, который наблюдается в реальной SDR-системе. Когда мы использовали аппаратный FM-приемник из гл. 7, минимальный уровень шума наблюдался примерно на уровне –80 дБ, поэтому постараемся добиться того же самого. 308 Глава 13 https://liveinternet.club/
Рис. 13.11. Уровень шума в эмуляторе Разорвите соединение между блоками Multiply и Frequency Xlating FIR Filter. Затем добавьте блок источника шума Noise Source со следующими настройками: Noise Type: Uniform; zz Amplitude: 0.01. zz Уровень шума, создаваемого этим блоком, определяется свойством Amplitude. К сожалению, мы не можем задать его в децибелах. Мы ука- зали значение 0,01, которое соответствует требуемому уровню шума –80 дБ. Если вам нужен другой уровень, попробуйте задать свойство Amplitude динамически с помощью QT GUI Entry и последовательно вводите значения, пока не получите желаемый уровень шума. Смысл свойства Noise Type выходит за рамки данной книги. Затем создайте блок сложения Add с двумя входами. Подключите первый вход к выходу блока Noise Source, а второй — к выходу блока Multiply. Затем подключите выходной сигнал блока Add на вход блока Frequency Xlating FIR Filter. Эта операция объединяет шум с предполагаемой передачей до того, как результирующие радиочастотные данные будут получены приемником. Наконец, переместите вход интерфейса QT GUI Sink на выход блока Add, чтобы вы могли видеть сигнал плюс шум, а не только исходный сигнал. Когда вы закончите, у вас получится что-то вроде рис. 13.12. Передача https://liveinternet.club/ 309
Добавление Рис. 13.12. Итоговая блок-схема WBFM с моделированием шума Запустите программу и убедитесь, что значение freq_rx снова установлено на 98.1e6. Теперь вы должны увидеть, что шумы по обе стороны от сигнала повысились до нормальных уровней, как показано на рис. 13.13. Это больше похоже на блок-схему FM-приемника, когда вы запускали ее с аппаратным обеспечением, не так ли? Несмотря на шум, вы все равно должны слышать воспроизводимый звук. Это означает, что шум не повлиял на правильную работу вашего передатчика или приемника. Однако теперь, когда вы настраиваетесь на другую час­то­ту, изменяя значение freq_rx на 98,4 МГц (или любое другое пустое значение), вы больше не должны слышать искаженный звук, только помехи. Отношение сигнал/шум дополнительных гармоник слишком низкое, чтобы их можно было отличить от шума. Ключевой урок здесь заключается в том, что вы всегда должны добавлять шумы к моделируемым блок-схемам, чтобы гарантировать, что ваше радио будет работать должным образом при подключении реального SDR-оборудования. 310 Глава 13 https://liveinternet.club/
Рис. 13.13. Окончательный график частоты WBFM с шумом Итоги В этой главе мы собрали свой первый передатчик и узнали, как законно протестировать его в достаточно реалистичной среде моделирования. Кроме того, мы продумали, как использовать передатчик с SDRаппаратурой и как регулировать коэффициент усиления. Вы также получили несколько не имеющих обязательной юридической силы советов о том, что следует учитывать при эксплуатации аппаратного радиоприемника, чтобы обеспечить соблюдение правил. Мы подошли к концу ознакомительного путешествия по SDR! Теперь вы должны уметь создавать базовые передатчики и приемники с помощью GNU Radio Companion. Вы познакомились с основами теории, лежащей в основе этих радиоустройств. И наконец, узнали, как пользоваться устройствами SDR и какие аппаратные аксессуары могут быть полезны. https://liveinternet.club/
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ A Aliasing. См. Алиасинг AM. См. Амплитудная модуляция AM-приемник, 58, 123 F Flowgraph, 19, 44 FM. См. Частотная модуляция FM-приемник, 158 G GNU Radio, 42 установка, 42 GNU Radio Companion, 44 H HackRF One, 18, 199 I IQ-дискретизация, 236 IQ-сигнал, 236 S SDR-аппаратура, 233, 254 А Адаптер, 289 антенный, 290 питания, 268 Алиасинг, 240 Амплитуда, 29, 95 Амплитудная модуляция, 29, 209 Аналого-цифровой преобразователь. См. АЦП Антенна, 18, 40, 200, 270, 280 активная, 279 «волновой канал», 278 конструктивные типы, 274 характеристики, 272 ANT500, 200, 270, 280 Аудиосигнал, 27, 28, 29, 37 АЦП, 33, 37, 40, 236, 238, 245 Б Базовая полоса частот, 206 Балун (balun), 291 Блок Add, 90, 93, 100, 109, 121, 309 312 Предметный указатель https://liveinternet.club/ Add Const, 90, 100, 215 AM Demod, 67–70, 74, 147–151, 159 Audio Sink, 47, 70, 71, 74, 78, 79, 90, 96, 97, 122, 123, 151, 173, 189, 305 Band Pass Filter, 118 Band Reject Filter, 120 Complex to Mag, 211 Constant Source, 48, 50, 51, 53, 54 File Sink, 47 File Source, 46, 62, 63, 67, 74, 124, 126, 130, 135, 159, 165, 174, 193, 264, 296 Float to Complex, 211, 215 Frequency Mod, 219, 221, 223, 225, 228 Frequency Xlating FIR Filter, 164, 167–171, 176, 184, 185, 198, 251, 264, 299, 305, 309 High Pass Filter, 113, 118 Keep 1 in N, 152, 154, 240, 241 Low Pass Filter, 66–68, 74, 109, 110, 113, 135, 144, 147, 161, 164, 188, 189 Multiply, 65, 67, 74, 100, 131, 135, 144, 164, 211, 226, 296, 297, 305, 309 Multiply Const, 55, 96, 100, 102, 173, 217, 256, 303 Noise Source, 193, 309 Options, 59, 130, 295 Phase Mod, 226, 228 QT GUI Entry, 59–64, 72, 82, 110, 116, 118, 131, 132, 135–138, 172, 176, 202, 223, 249, 295, 305, 306, 309 QT GUI Frequency Sink, 85, 90, 93, 101, 122, 124, 127, 130, 131, 143, 144, 148, 189, 193, 207, 247 QT GUI Range, 82, 97, 172, 189, 212, 215, 241 QT GUI Time Sink, 48, 50, 55, 79, 90, 96, 97, 101, 102, 135, 152, 215, 226 QT GUI Waterfall Sink, 222 Rational Resampler, 69, 70, 71, 74, 156, 162, 171, 173, 296–299, 308 Signal Source, 46, 64, 67, 74, 78, 79, 82, 85, 89, 93, 96, 97, 102, 131, 136, 143, 152, 161, 164, 167, 211, 212, 218, 226, 241, 297 Soapy HackRF Source, 198, 203, 246, 254, 261, 303, 305 Throttle, 48, 50, 55, 130, 131, 152, 154, 193, 215 UHD:USRP Source, 203 Variable, 59, 71, 72, 167, 168, 170, 171, 193, 294 Wav File Source, 93, 99, 188, 295
WBFM Receive, 162, 165, 171, 207, 305, 308 WBFM Transmit, 296 Блок-схема, 44 БПФ. См. Быстрое преобразование Фурье Быстрое преобразование Фурье, 85, 243 Прореживание, 151 Р Д Разрешение (АПЦ), 267 Разъем, 285 коаксиальный, 287 BNC, 287 MCX, 286 RCA, 286 RP-SMA, 288 SMA, 200, 286 Рамочная антенна, 277 И Сигнал, 25 обработка, 32, 63, 76 Супергетеродин, 233 Г Гармоники, 307 Гетеродин, 234 Громкость, управление, 172 Децибел, 101 Дипольная антенна, 276 Дискретизация, 32, 37 Импеданс, 274 Интерполяция, 155 Источник питания, 284 С Т К Телескопическая антенна, 275 Теорема Найквиста–Шеннона (теорема Котельникова), 239 Тип данных, 69 Л Ультразвук, 77 Усиление, 254 Усилитель, 97, 254 радиочастотный (RF), 260 Каскадный график, 222 Комплексные данные, 54, 124, 238 Комплексные числа, 69, 238 Коэффициент усиления, 95 Лицензируемые диапазоны, 301 М Манипуляция, 230 Модуляция, 26 амплитудная. См. Амплитудная модуляция фазовая. См. Фазовая модуляция частотная. См. Частотная модуляция Н Нелицензируемые диапазоны, 301 Несущая, 28, 29, 146, 210, 226 О Окно захвата, 238 Отношение сигнал/шум (SNR), 194 П Передискретизация, 151 Перемодуляция, 215 Полнодуплексный, 266 Полоса перехода, 116 подавления, 115 пропускания, 107, 115, 116, 118, 121, 126, 161, 184, 185, 272 Полудуплексный, 266 Поляризация, 279 Постоянный ток (DC), 263, 292 Потоковый граф, 19, 44 Преобразование Фурье, 85, 107, 125 У Ф Фазовая модуляция, 226 Ферритовый дроссель, 285 Фильтр, 106 высоких частот, 113 низких частот, 107 полосовой, 118 режекторный, 120 Ц ЦАП, 37, 40, 256, 267 Цифро-аналоговый преобразователь. См. ЦАП Ч Частота, 76 дискретизации, 37, 238 Найквиста, 241, 247 среза, 110 Частотная модуляция, 218 Ш Ширина полосы частот, 184 Э Эквалайзер, 120 Экранированный кабель, 284 Электромагнитная волна, 179 Электромагнитный спектр, 179 Предметный указатель 313 https://liveinternet.club/
Дэвид Кларк, Поль Кларк SDR на практике: основы разработки программно-определяемого радио Главный редактор Зам. главного редактора Мовчан Д. А. Яценков В. С. Перевод Корректор Верстка Дизайн обложки Ревич Ю. В. Синяева Г. И. Чаннова А. А. Мовчан А. Г. editor@dmkpress.com Гарнитура PT Serif. Печать цифровая. Усл. печ. л. 25,51. Тираж 200 экз. https://liveinternet.club/
https://liveinternet.club/