Pull to refresh

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

Reading time5 min
Views33K
Привет, Geektimes.

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

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


(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» дает много полезных ссылок (официально для вещания нужна лицензия, конечно, ну и стоит убедиться что не создаются помехи другим службам).
Tags:
Hubs:
Total votes 17: ↑17 and ↓0+17
Comments64

Articles