Запускаем DAB-мультиплекс у себя дома
Цифровое радиовещание постепенно внедряется в различных странах. В Европе и Австралии это стандарт 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.
Компилируем ODR-DabMux ODR-DabMux объединяет цифровые потоки в один мультиплекс. Подробнее на странице github.com/Opendigitalradio/ODR-DabMux.
Компилируем ODR-DabMod Это модулятор, который собственно и посылает данные в трансмиттер. Принцип сборки тот же, команда для скачивания:
Если при сборке не будет хватать каких-либо библиотек, их нужно поставить с помощью apt-get.
Теперь все части проекта собраны, и со всем этим попытаемся взлететь.
2. КонфигурацияК сожалению, USRP не заработал в виртуальной машине, а ставить полноценный Linux на диск было лень. Поэтому я не стал рассматривать режим потокового вещания — мультиплекс был собран из заранее подготовленных mp3-файлов, а получившийся IQ-файл был запущен под Windows. Да в общем, для дома потоковое вещание и не нужно, задачи делать «пиратскую станцию» не было.
Подготовка данных В нашем мультиплексе будет 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» со следующим текстом:
Конфиг описывает каналы, которые будут в мультиплексе и их источники данных. Параметр nbframes указывает, сколько фреймов создать, 2000 фреймов соответствует примерно одной минуте воспроизведения.
Когда файл сохранен, создаем мультиплекс:
На выходе должен получиться файл output.eti, в моем случае его размер составил 12Мб.
Тут есть две возможности. В «настоящем» Linux odr-dabmod может непосредственно передавать данные в трансивер, но под VM оно не заработало. Поэтому в качестве выходного параметра я указал raw-файл, который будет содержать данные, совместимые с Gnu Radio.
Создаем файл config.ini:
Здесь ключевой момент — выходной формат и его тип. Для USRP я использую формат complexf_normalised, для HackRF по идее, подойдет 8-битный s8.
Сохраняем конфиг, запускаем конвертацию:
Все! На выходе должен получиться 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» дает много полезных ссылок (официально для вещания нужна лицензия, конечно, ну и стоит убедиться что не создаются помехи другим службам).