Администрирование Разное Создание приемника FM на RTL-SDR с помощью GNU Radio Companion Thu, March 28 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Создание приемника FM на RTL-SDR с помощью GNU Radio Companion Печать
Добавил(а) microsin   

RTL-SDR сегодня очень популярная тема в сети. Существует множество информации, как использовать это недорогое устройство под Windows и Linux. В этой статье (перевод [1]) описан еще один интересный для экспериментатора способ использования RTL-SDR (приемников на основе чипов RTL28xxU) - создание FM-приемника из функциональных блоков системы GNU Radio Companion [10] (далее сокращенно GRC). Возможно это руководство поможет Вам при создании собственных вариантов приемников для других диапазонов и других сигналов. Непонятные термины и сокращения см. в разделе "Словарик" статьи [11].

[Шаг 1. Что такое RTL-SDR?]

Если Вас интересует только создание проекта GRC, то переходите сразу к шагу 5.

RTL-SDR это самый дешевый способ попробовать в работе приемник SDR (Software Defined Radio). Это новая технология, предлагающая основную обработку принимаемого сигнала (фильтрация, демодуляция и другие функции, которые ранее реализовывались чисто аппаратно) выполнять процессором компьютера PC. Некоторые реализации SDR устройств даже могут синтезировать передаваемый сигнал (устройства RTL-SDR этой функцией не обладают). Приемник RTL-SDR обычно позволяет прослушивать сигналы радиоэфира в диапазоне частот от 1 до 2000 МГц (крайние пределы зависят от особенностей реализации устройства).

Вот краткий перечень сигналов, которые может обработать приемник RTL-SDR:

- Обычные вещательные станции FM.
- Радиосвязь полиции.
- Радиосвязь воздушных диспетчеров, передача информации о положении самолетов и морских судов.
- Сигналы портативных передатчиков наподобие ключей от машины или двери гаража.
- Сигналы спутников GPS.
- Передачи МКС и другой космической связи с частотами ниже 2 ГГц.
- Сигналы аппаратуры радиоуправления моделями.

[Шаг 2. Где взять RTL-SDR?]

Самый простой и экономный метод - купить на AliExpress или eBay. Устройство RTL-SDR может стоить от $10 и выше, в зависимости от разновидности и комплектации. Лучше всего купить устройство RTL-SDR V3 на чипе RTL2832U в алюминиевом корпусе [2] (цена около $16 и выше). Более дешевый вариант приемника на основе чипа R820T (цена около $8). Поиск на сайтах AliExpress и eBay рационально проводить по наименованию чипа:

RTL SDR find

При выборе устройства обращайте внимание на варианты реализации устройства, они могут быть изготовлены на различных чипах, и от этого зависит качество приема и диапазон рабочих частот. Общие различия приемников рассмотрены в статье [3].

Очень многое зависит от качества приемной антенны. Обычно в комплект приемника входит короткая штыревая антенна, которая обеспечивает удовлетворительный прием местных радиостанций в диапазоне частот от 70 до 500 МГц. Для приема радиолюбительского обмена в диапазонах длин волн от 2м до 160м понадобится внешняя антенна соответствующего размера (например, см. [5]).

[Шаг 3. Что понадобится?]

Приемник RTL-SDR, антенна, соединительный кабель для передачи сигнала от антенны к приемнику, операционная система Linux. Автор [1] использовал приемники RTL2838 и Rafael Micro на чипах R820T под операционной системой Arch Linux.

RTL SDR DVB T RTL2832U

[Шаг 4. Подключение аппаратуры и установка ПО]

Первое, что нужно сделать - подключить Ваше SDR-устройство к компьютеру, и определить, как оно определилось в системе (какой в нем используется чип). Для этого выполните на Linux команду dmesg | tail или journalctl. Ответ на команду dmesg может быть примерно таким (показана часть вывода dmesg со строками, относящиеся к тюнеру):

[ 4009.326338] usb 7-5: new high-speed USB device number 4 using ehci-pci
[ 4009.466712] usb 7-5: dvb_usb_v2: found a 'Realtek RTL2832U reference design' in warm state
[ 4009.531594] usb 7-5: dvb_usb_v2: will pass the complete MPEG2 transport stream to the software demuxer
[ 4009.531613] DVB: registering new adapter (Realtek RTL2832U reference design)
[ 4009.534554] usb 7-5: DVB: registering adapter 0 frontend 0 (Realtek RTL2832 (DVB-T))...
[ 4009.534627] r820t 4-001a: creating new instance
[ 4009.546177] r820t 4-001a: Rafael Micro r820t successfully identified
[ 4009.552681] Registered IR keymap rc-empty
[ 4009.552783] input: Realtek RTL2832U reference design as /devices/pci0000:00/0000:00:1d.7/usb7/7-5/rc/rc1/input20
[ 4009.552854] rc1: Realtek RTL2832U reference design as /devices/pci0000:00/0000:00:1d.7/usb7/7-5/rc/rc1
[ 4009.553275] input: MCE IR Keyboard/Mouse (dvb_usb_rtl28xxu) as /devices/virtual/input/input21
[ 4009.554466] rc rc1: lirc_dev: driver ir-lirc-codec (dvb_usb_rtl28xxu) registered at minor = 0
[ 4009.554474] usb 7-5: dvb_usb_v2: schedule remote query interval to 400 msecs
[ 4009.565930] usb 7-5: dvb_usb_v2: 'Realtek RTL2832U reference design' successfully initialized and connected

Автор [1] столкнулся с проблемой драйвера по умолчанию, которая приводила к зависанию операционной системы при отключении тюнера от USB. Проблема была решена запретом этого драйвера путем создания нового .conf файла в /etc/modprobe.d, где содержалась одна строка:

blacklist dvb_usb_rtl28xxu

После этого путь до файла было добавлен в переменную FILES в /etc/mkinitcpio.conf:

FILES="/etc/modprobe.d/blacklist.conf"

Далее был сгенерирован новый образ командой mkinitcpio -p linux, после перезапуска проблема исчезла (на других операционных системах та же процедура может совершенно отличаться).

Если операционная система правильно определила Ваш тюнер, то Вы можете установить пакеты, необходимые для использования RTL-SDR. Это пакеты rtl-sdr, sdrsharp-svn, gnuradio и gr-osmosdr-git.

rtl-sdr. Это основной драйвер, и он может быть установлен на Arch из community-репозитория (обратите внимание, что это делается с правами root):

# pacman -S rtl-sdr

Альтернативно есть git-версия доступная на AUR как rtl-sdr-git.

sdrsharp-svn. Этот пакет (доступный на AUR) содержит GUI-программу SDR#, она дает основной доступ к радиоприемнику RTL-SDR, и может использоваться для проверки. SDR# может декодировать сигналы AM, FM и другие виды модуляции, и эта программа хорошо подходит для первоначального знакомства с технологией SDR.

RTL SDR SDRsharp

gnuradio. Наиболее мощный инструмент для SDR это программный пакет GNU Radio, и его графическая утилита GNU Radio Companion (GRC). Пакет gnuradio доступен на AUR под именем gnuradio. Пакет gnuradio также требует установки пакета gr-osmosdr-git из AUR, который нужен в GRC для использования тюнера RTL-SDR в качестве источника цифровых данных.

На других операционных системах Linux процедуры установки необходимых пакетов могут отличаться. На Ubuntu пакет rtl-sdr должен быть доступен из apt-get, и на Fedora он также должен быть в репозиториях по умолчанию. Хорошая инструкция по инсталляции gnuradio есть по ссылке [4].

Теперь можно применить программу SDR#, чтобы найти частоту станции FM с достаточно сильным и качественным сигналом. Запишите эту частоту, она понадобится для проверки, насколько хорошо работает Ваш самодельный приемник GNU Radio. Он должен работать не хуже, чем в программе SDR#.

[Шаг 5. Теоретическое введение в FM Radio]

Самое простое FM-радио состоит из нескольких элементов:

- Источник сигнала. В нашем случае это тюнер RTL-SDR (RTL-SDR Source).
- Фильтр (Low Pass Filter).
- Демодулятор WBFM (WBFM Receive).
- Вывод звука - звуковая карта нашего PC (Audio Sink).

Могут быть и другие элементы, в зависимости от входной и выходной частоты дискретизации. На рисунке ниже показаны основные используемые GRC-блоки.

RTL SDR main GRC blocks

Редактор GRC красным цветом показывает, что что-то не так. Блоки требуют соединений друг с другом, и их параметры также необходимо настроить. Все это будет проделано на следующих шагах.

[Шаг 6. RTL-SDR Source]

Здесь вместо RTL-SDR Source также может использоваться источник данных osmocom Source. Оба источника можно найти в категории Sources, находящейся в правой панели GRC.

GRC RTL SDR Source

Для источника нужно настроить частоту дискретизации (sample rate) на 2M. Это делается путем редактирования переменной samp_rate, и установки её значения в 2e6. Для источника также настраивается частота принимаемой радиостанции с помощью переменной freq. Имена переменных samp_rate и freq подставляются в соответствующие поля ввода диалога свойств источника сигнала.

GRC RTL SDR Source Properties

[Шаг 7. Low Pass Filter]

Следующий шаг состоит в фильтрации частот кроме той, которую мы установили на предыдущем шаге. Эта задача выполняется блоком low pass filter (дословно переводится как фильтр низких частот, ФНЧ). Его можно найти в категории filters.

GRC Low Pass Filter

Частоту среза фильтра установите с помощью переменной cutoff со значением 100e3 (это стандартная полоса частот приема станции FM).

Параметр Transition Width обозначает длину спада характеристики фильтра. Автор [1] подобрал этот параметр опытным путем с помощью значения переменной transition, которая была установлена в 1M.

Для того, чтобы звуковая карта могла принять поступающий поток цифровых данных 2M, необходимо предварительно снизить частоту выборок до допустимого значения. Эта операция называется прореживанием выборок (децимация), и коэффициент прореживания устанавливается в поле Decimation диалога свойств фильтра, в этом примере как int(samp_rate/500e3). В результате получился коэффициент прореживания 4. Значение 500e3 было выбрано исходя из параметра Quadrature Rate демодулятора FM (который устанавливается на шаге 8), равного 500k. Частота выборок сигнала на выходе Low Pass Filter после децимации все еще достаточно высока, она будет дополнительно понижена впоследствии после дополнительных преобразований.

GRC Low Pass Filter Properties

Соедините выход RTL-SDR Source со входом Low Pass Filter. Обратите внимание, что заголовок компонента RTL-SDR Source изменил цвет с красного на черный. Это означает, что блок RTL-SDR Source подключен корректно. У блока Low Pass Filter цвет заголовка пока не поменялся, потому что необходимо подключить его выход к получателю цифровых данных, что будет сделано на следующем шаге.

[Шаг 8. WBFM Receive]

Теперь нужно подключить к выходу Low Pass Filter демодулятор сигнала FM. Этот блок можно найти в разделе modulators, он называется WBFM Receive. Параметр Quadrature Rate, соответствующий частоте поступления входных выборок, был оставлен в значении по умолчанию 500k. Соедините выход Low Pass Filter со входом WBFM Receive.

GRC WBFM Receive

[Шаг 9. Формирование звукового потока данных и регулирование громкости]

Эти две задачи могут быть выполнены блоками Rational Resampler (передискретизация с рациональным коэффициентом, находится в разделе resamplers) и Multiply Const (умножитель на константу, находится в разделе math operators).

Rational Resampler. Выборки данных с частотой 500k необходимо преобразовать в частоту выборок 48k, этот поток данных способен обработать любой драйвер звуковой карты PC. Преобразование частоты выборок (передискретизация) делается компонентом Rational Resampler, и это настраивается параметрами Interpolation (интерполяция, предварительное умножение со сглаживанием) и Decimation (прореживание). В нашем примере сначала делается децимация с коэффициентом 500 (деление частоты выборок на 500), и затем интерполяция с коэффициентом 48 (умножение частоты выборок на 48), в результате получается частота выборок сигнала 48k.

GRC Rational Resampler and Multiply Const added

Multiply Const. В этом блоке параметр Constant может использоваться для регулирования громкости звука. Для этого создается переменная volume, которая будет связана с графическим элементом - ползунком регулирования "WX GUI Slider". Это позволит нам регулировать громкость звучания приемника после запуска программы GRC.

GRC WX GUI Slider

[Шаг 10. Audio Sink]

Последний шаг состоит в добавлении блока получателя звуковых данных Audio Sink (находится в разделе Audio). В нем нужно только установить необходимую частоту выборок сигнала (параметра Sample Rate). Это делается выбором 48k из выпадающего списка. Если по какой-то причине звуковая карта PC не предоставляет такого значения, то установите другое, и подберите соответствующие параметры блока Rational Resampler.

GRC Audio Sink

Во время тестов созданной схемы приемника было обнаружено, что децимация до 500k должна быть не на выходе блока фильтра, а на его входе. После этого демодулированный звук воспроизводится лучше.

GRC FM receiver final change

Конечная рабочая схема FM-приемника:

GRC FM receiver sch01

Обратите внимание, что некоторые коннекторы GRC-блоков синие, а некоторые оранжевые. Синие относятся с комплексным данным (complex data, которые имеют реальную и мнимую составляющие). Оранжевые коннекторы показывают тип данных Float. В большинстве случаев система GRC может сама преобразовывать типы данных, однако иногда требуется явное преобразование.

Готовый GRC-проект приемника FM можно скачать по ссылке 190508FM-receiver.grc.

Этот проект был реализован на LInux Mint 18.3 Cinnamon 3.6.6. Пакет rtl-sdr был установлен через PyBOMBS [6].

GRC FM receiver sch02

В этом проекте добавлены компоненты отображения водопада (GUI Waterfall Sink), спектра частот (GUI Frequency Sink) и улучшена обработка стереосигнала FM:

GRC FM receiver sch03

Еще один проект, где автор также столкнулся с проблемой замены драйвера RTL-SDR:

GRC FM receiver sch04

В этом проекте использовался дополнительный блок Rational Resampler на входе фильтра, а также блок WX GUI FFT Sink:

GRC FM receiver sch05

Проект на скриншоте ниже реализован в GNU Radio Companion под Windows 10. Поначалу удавалось принимать с помехами одну или две радиостанции, и после того, как было подстроено усиление в блоке RTL-SDR Source на 50dBm, прием стал намного лучше.

GRC FM receiver sch06

Реализация проекта под Mac OS:

GRC FM receiver sch07

Еще одна минимальная реализация:

GRC FM receiver sch08

[AM приемник]

Этот проект простого приемника был повторен мной и немного переделан на основе информации по ссылкам [8, 9]. На схеме зеленым цветом добавлены пояснения на русском языке и основные взаимосвязи между компонентами приемника (к сожалению, такие комментарии нельзя добавлять в редакторе GRC).

GNUradio AM receiver 15Mhz

Опции проекта. Блок содержит общие свойства - заголовок (Simple receiver AM), тип генерируемого исполняемого кода Python (WX GUI), размер окна запущенного проекта (1280,1024) и другие опции.

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

Настройка частоты. Эта группа блоков задает частоту настройки для блока приемника RTL-SDR Source. Частота настройки SDR-тюнера вычисляется по следующей формуле:

freq+offset_coarse+offset_fine+HamItUp_freq

Здесь переменная freq это основная частота настройки, задаваемая полем ввода WX GUI Text Box. Переменные offset_coarse и offset_fine задают грубую и точную подстройку частоты соответственно (эти переменные меняется движками-слайдерами WX GUI Slider). Переменная HamItUp_freq учитывает смещение частоты вверх на 125 МГц, которую создает аппаратный конвертер Ham It Up (производство Nooelec), подключенный между антенной и входом RF приемника RTL-SDR RTL2832U.

Усиление RF. Этот слайдер задает значение параметра усиления по радиочастоте блока RTL-SDR Source (SDR-приемник RTL2832U).

Управление полосой приема. В этой группе два блока - Low Pass Filter (фильтр низкой частоты), и WX GUI Slider (движок, которым можно настраивать полосу фильтра). Фильтр выполняет две важные функции - ограничивает полосу пропускания выходного тракта приемника (полоса регулируется слайдером в диапазоне от 2 до 40 кГц), а также выполняет прореживание выборок сигнала (децимацию) с коэффициентом 32. Децимация необходима для повышения производительности приемника - остальные блоки приемника будут обрабатывать только необходимую полосу частот.

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

Передискретизация. С помощью блока Rational Resampler реализована подгонка частоты дискретизации сигнала 64 кГц на выходе фильтра Low Pass Filter (samp_rate/32 = 64 кГц) к стандартной частоте дискретизации звуковой карты компьютера 48 кГц (используется блоком вывода звука Audio Sink). Подгонка осуществляется с помощью интерполяции на 12 и децимации на 16, в результате получается частота 64 * 12 / 16 = 48 кГц.

АРУ. Блок AGC3 осуществляет автоматическую регулировку усиления приемника.

Детектор АМ. Блок AM Demod осуществляет демодуляцию амплитудно-модулированного сигнала.

Громкость звука. Блок слайдера и блок умножения на константу осуществляют управление громкостью звучания принимаемого сигнала.

Готовый GRC-проект приемника AM можно скачать по ссылке 190516AM-receiver.grc.

[Ссылки]

1. RTL-SDR FM Radio Receiver With GNU Radio Companion site:instructables.com.
2. RTL-SDR Blog V3 RTL2832U 1PPM TCXO HF BiasT SMA Software Defined Radio site:aliexpress.com.
3. rtl-sdr site:osmocom.org.
4. Installing GNU Radio site:gnuradio.org.
5. АНТЕННА БЕВЕРИДЖА практическая реализация.
6. HackRF и GNU Radio, быстрый старт.
7. GNU Radio + RTLSDR под Windows для начинающих site:youtube.com.
8. GNU Radio Companion, Part 2 HACKADAY site:youtube.com.
9. YOUR FIRST GNU RADIO RECEIVER WITH SDRPLAY site:hackaday.com.
10GNU Radio Companion.
11GNU Radio, краткий справочник.

 

Добавить комментарий


Защитный код
Обновить

Top of Page