Запускаем DAB-мультиплекс у себя дома

Привет, Geektimes.

Цифровое радиовещание постепенно внедряется в различных странах. В Европе и Австралии это стандарт DAB/DAB+, в США HD Radio, в Китае CDR (China Digital Radio). Из плюсов для пользователя — более чистый звук за счет цифрового потока, дополнительные сервисы (например название композиции и имя исполнителя на экране приемника), и, в случае DAB, большее число станций по сравнению с FM. Приемники с поддержкой цифрового радио уже сейчас относительно недороги, их цена начинается примерно от 40$.

Россия пока официально не присоединилась ни к одному из стандартов, но если это произойдет, скорее всего, это будет DAB. Его тестовая эксплуатация уже проводилась в Москве, да и приемники европейского рынка для РФ географически более доступны, чем американские. Новые европейские авто (которых опять же, больше чем американских) часто уже оснащены приемником с DAB. Ну а пока в тестовых целях, запустить DAB у себя дома, при наличии SDR-трансивера может любой желающий.

Запускаем DAB-мультиплекс у себя дома
(Image Source / Getty)

Подробности под катом (осторожно, много длинных и скучных конфигов).

Как это работает

К сожалению, разные стандарты несовместимы между собой.

Европейский DAB представляет собой MP2 или AAC поток, передаваемый с помощью ODFM в каналах c частотами от 174 до 239МГц. Максимально возможно более 30 каналов, ширина каждого около 1.5МГц, в канале может одновременно передаваться несколько станций. Согласно Википедии, использование DAB при использовании битрейта 192kbps в 3 раза эффективнее по числу станций, чем у обычного FM.

Спектр одного канала DAB на экране SDR выглядит так:

Для сравнения, так при том же масштабе, выглядят FM-станции:

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

Спектр HD Radio выглядит так (скриншот с youtube):

Китайский CDR решил копировать американский подход, увы, моего нулевого знания китайского недостаточно чтобы найти по нему более подробную информацию.

Что касается приемников, то их цена на amazon составляет от 30$ за самые простые модели, до >100$ за более продвинутые с тачскрином, Wifi или цветным экраном.

Но «чукча не читатель», так что тестовое радио в формате DAB/DAB+ мы запустим сами. HD Radio запустить увы, не выйдет, формат закрытый, и доступных кодеров для него нет.

Запускаем DAB/DAB+

Процесс на самом деле, не сложный, но весьма кропотливый в плане создания нужных конфигов. Для теста нам понадобится Linux и SDR с возможностью передачи, например HackRF или USRP.

1. Компиляция проекта

Linux нужен для компиляции кодера. Я использовал Ubunty, готовый образ для VirtualBox был скачан с http://www.osboxes.org/ubuntu/.

Компилируем ODR-AudioEnc
Сначала нужно скомпилировать DAB/DAB+ audio encoder, найти его можно на странице github.com/Opendigitalradio/ODR-AudioEnc.

git clone https://github.com/Opendigitalradio/ODR-AudioEnc.git cd ODR-AudioEnc/ ./bootstrap ./configure --enable-alsa --enable-vlc make sudo make install 

Компилируем ODR-DabMux
ODR-DabMux объединяет цифровые потоки в один мультиплекс. Подробнее на странице github.com/Opendigitalradio/ODR-DabMux.

git clone https://github.com/Opendigitalradio/ODR-DabMux.git cd ODR-DabMux/ ./bootstrap.sh ./configure make sudo make install 

Компилируем ODR-DabMod
Это модулятор, который собственно и посылает данные в трансмиттер. Принцип сборки тот же, команда для скачивания:

git clone https://github.com/Opendigitalradio/ODR-DabMod.git  

Если при сборке не будет хватать каких-либо библиотек, их нужно поставить с помощью apt-get.

Теперь все части проекта собраны, и со всем этим попытаемся взлететь.

2. Конфигурация

К сожалению, USRP не заработал в виртуальной машине, а ставить полноценный Linux на диск было лень. Поэтому я не стал рассматривать режим потокового вещания — мультиплекс был собран из заранее подготовленных mp3-файлов, а получившийся IQ-файл был запущен под Windows. Да в общем, для дома потоковое вещание и не нужно, задачи делать «пиратскую станцию» не было.

Более подробно разные настройки описаны здесь: http://opendigitalradio.github.io/mmbtools-doc/mmbtools.pdf.

Подготовка данных
В нашем мультиплексе будет 2 канала, для которых я скачал с youtube 2 mp3-файла и назвал их (кто бы догадался) соответственно sound01.mp3 и sound02.mp3.

Конвертируем файлы в WAV c битрейтом 48000:
ffmpeg -i sound01.mp3 -ar 48000 sound01.wav
ffmpeg -i sound02.mp3 -ar 48000 sound02.wav

Конвертируем их в формат DAB:
odr-audioenc —dab -b 128 -i sound01.wav -o prog1.mp2
odr-audioenc —dab -b 128 -i sound02.wav -o prog2.mp2

На выходе должно быть 2 файла prog1.mp2 и prog2.mp2.

Создание мультиплекса

Сначала нужно создать файл, описывающий конфигурацию нашей «радиостанции». Напомню, в одном канале DAB может быть множество станций, каждая со своими параметрами.

Создаем файл «config.mux» со следующим текстом:

general {     dabmode 1     nbframes 2000     ; Set to true to enable logging to syslog     syslog false     ; Enable timestamp definition necessary for SFN     ; This also enables time encoding using the MNSC.     tist false } remotecontrol { telnetport 0 } ensemble {   id 0x4fff   ecc 0xec ; Extended Country Code    local-time-offset auto   international-table 1   label "mmbtools"   shortlabel "mmbtools" } services {   srv-p1 { label "Station1" }   srv-p2 { label "Station2" } } subchannels {  sub-p1 {   type audio   inputfile "prog1.mp2"   bitrate 128   id 10   protection 4  }  sub-p2 {   type audio   inputfile "prog2.mp2"   bitrate 128   id 11   protection 4  } } components {  comp-p1 {   service srv-p1   subchannel sub-p1  }  comp-p2 {   service srv-p2   subchannel sub-p2  } } outputs { output1 "file://output.eti?type=raw" } 

Конфиг описывает каналы, которые будут в мультиплексе и их источники данных. Параметр nbframes указывает, сколько фреймов создать, 2000 фреймов соответствует примерно одной минуте воспроизведения.

Когда файл сохранен, создаем мультиплекс:

odr-dabmux config.mux

На выходе должен получиться файл output.eti, в моем случае его размер составил 12Мб.

Передача

Тут есть две возможности. В «настоящем» Linux odr-dabmod может непосредственно передавать данные в трансивер, но под VM оно не заработало. Поэтому в качестве выходного параметра я указал raw-файл, который будет содержать данные, совместимые с Gnu Radio.

Создаем файл config.ini:

[input] transport = file source = output.eti loop=0  [modulator] digital_gain=0.9 rate=2048000  [output] output = file  [fileoutput] format = complexf_normalised ;format = s8 filename = output.iq 

Здесь ключевой момент — выходной формат и его тип. Для USRP я использую формат complexf_normalised, для HackRF по идее, подойдет 8-битный s8.

Сохраняем конфиг, запускаем конвертацию:

odr-dabmod config1.ini

Все! На выходе должен получиться config.iq, в моем случае размером порядка 700Мб на одну минуту записи (формат IQ float). Копируем его на «основной» компьютер, и Linux можно закрывать.

3. Тестирование

Как я уже говорил ранее, DAB-приемника у меня нет, чукча не читатель, радио я вообще не слушаю 🙂 Для тестирования я использовал RTL-SDR «свисток» и бесплатную программу Welle.io.

Первым делом, подключаем приемник, запускаем Welle.io и находим свободный канал. В моем случае, им сказался 12B:

Запоминаем частоту, и создаем простейший граф для передачи в Gnu Radio:

Запускаем, ждем несколько секунд, и… слышим записанную музыку через welle.io.

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

Да, весь «передающий комплекс» выглядит вот так:

Заключение

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

Антенна разумеется, была не настроена на нужную частоту (да и антенного анализатора у меня нет), максимальная мощность от USB3 наверное не более 1Вт, да и то она распределена по полосе в 1.5МГц. Так что максимальная дальность передачи получилась примерно 0.5м.

Если кто-то захочет повторить эксперименты с большей мощностью, поиск на ebay по слову «RF Power Amplifier» дает много полезных ссылок (официально для вещания нужна лицензия, конечно, ну и стоит убедиться что не создаются помехи другим службам).

 
Источник

Читайте также