Внимание! Перед тем как создавать тему на форуме, воспользуйтесь поиском! Пользователь создавший тему, которая уже была, будет немедленно забанен! Читайте правила названия тем. Пользователи создавшие тему с непонятными заголовками, к примеру: "Помогите, Схема, Резистор, Хелп и т.п." также будут заблокированны навсегда. Пользователь создавший тему не по разделу форума будет немедленно забанен! Уважайте форум, и вас также будут уважать!
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
После очередной творческой депрессии, в голову пришла мысль освоить цифровую передачу/приём данных, а именно - передача голоса/музыки.
Проанализировав схемные решения на портале VRTP и не только, пришел к выводам, что в основном это передача голоса с помощью ADPCM с низкой частотой дискретизации + амплитудная манипуляция. Как дополнительная опция - шифрование данных.
Конструкции от blaze, rakov и ещё нескольких уважаемых людей (прошу прощения, что назвал не всех!)
Я же поставил себе цель - построить радиоканал для передачи умеренно качественного голоса/звуков или музыки.
Освоил приёмопередатчик от ChipCon(ныне сожран - TI): CC1101. В конструкциях приёмника и передатчика применён фабричный модуль RXQ4-433 - в целях ускорения макетирования. CC1101 отлично подходит для передачи потоковых данных - выский битрейт и буфер данных на прием и передачи!
Сколько подводных камней пришлось разгребать несколько ночей напролёт - промолчу!
В качестве кодера/декодера применил микросхему от финской фирмы VLSI Oy - VS1053b. Этот чип может декодировать звук в IMA ADPCM, OGG Vorbis и MP3 (ну и много чего другого ещё). Кодировать звук - только в IMA ADPCM и OGG Vorbis.
Кодирование MP3 в VS1053 не предусмотрено, а плагины недоступны из-за копирасторских ограничений на MP3.
1) Макетировать начал с архитектуры "Streaming – File based server / client". Получилось цифровое радио с такими показателями: поток MP3 128 кбит/с стерео или моно.
2) Закончил макетирование архитектурой "Streaming – Realtime server / client". Вышел цифровой радиомикрофон и приемник с такими параметрами: IMA ADPCM, 44100 Гц, моно, 176,4 кбит/с - сжатие голоса в 4 раза OGG Vorbis 44100 Гц,, моно, фактор качества 5, до 87 кбит/с - сжатие аудиопотока более чем в 8 раз!
Виды модуляции, показавшие отличную эффективность в устройствах: GFSK и 4FSK.
Ниже на рисунки показаны архитектуры, заложенные в макетах.
На самом деле функционал можно расширить: например, добавить карту памяти на приемнике. Ну или вообще сделать равноценные устройства - которые могли бы работать в обоих режимах - передатчик и приёмник.
Присоединённое изображение (Нажмите для увеличения)
--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
Ниже представлен макет цифрового передатчика.
Управляющий контроллер - ATmega128A, на тактовой частоте 12 МГц, питание 3,3V. Выбор контроллера продиктован наличием отладочной платы.
Как оказалось, большой объём Flash-памяти контроллера пригодился, так как кодер VS1053 требует заливку в неё патчей для ADPCM- и OGG- кодирования звука. А размер OGG-патча - несколько десятков килобайт!
Есть перспектива задействовать более совершенную версию кодера: VS1063.
Для неё не нужны патчи (ну может небольшие какие, пока не разбирался) и она может кодировать также в MP3, G.711 (u-law, A-law); G.722 ADPCM
Вопрос доставки VS1063 в настоящее время завис в состоянии "ждём"...
Карта памяти - MMC+ от Kingston - считается, что это самая вреднючая из всех карт памяти, которая либо не запускается, либо не работает как надо... Карта - не SDHC.
Основная неприятность в том, что карта в неактивном состоянии (CS=1) линию вывода(DO) не переводит в Z-состояние, что порождает конфликт на шине SPI - она мешала работать трансиверу CC1101.
Пришлось на линию DO карты памяти повешать буферок с тремя состояниями и рулить по CS.
Модуль RXQ4-433 здесь работает only TX mode.
Кодер VS1053 собран на 4-слойной плате - огрызок от сарого проекта.
Микрофон INMP510 - самый чоткий малошумящий микрофон со встроенными усилителем и фильтром питания. Он подключен к кодеру на ногу Line22. Тоесть встроенный микрофонный усилитель с балансным входом не используется.
Как оказалось - этого достаточно чтобы чухать шёпот из соседнего помещения!
Присоединённое изображение (Нажмите для увеличения)
--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
Ниже показаны блоки цифрового передатчика. Как видно, каждый блок собран на печатной плате, согласно всем правилам разводки. Так что вопрос с аналоговой частью в кодере и сплошной землёй на ВЧ диапазоне вроде как отпал.
Единственно, что пришлось сделать: на линию питания, выход на наушники и шлейф программатора - надеть ферритовые втулки / каркасы, чтобы они не становились отрицательным плечом антенны-диполя и не вносили дисбаланс в точку приёма.
Присоединённое изображение (Нажмите для увеличения)
--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
Так как второй отладочной платы у меня не было, а покупать Arduino за 1000 рублей или ковырять STM Discovery - не было желания, пришлось сваять отладочную плату для приёмника самому.
В приемнике применил контроллер ATmega8A - единственно что было на руках, частота 12 МГц, питание 3,3V.
Реально ощутил проблему с памятью, когда надо было упихать патч для VS1053 и OGG-хедер.
Здесь VS1053 в режиме декодирования.
Пробовал применить более древнюю VS1011E - с отладочной платы "Smart MP3" , так она, падла IMA ADPCM-потоки не могла синхронизировать - требует выравнивания.
В VS1053 декодирование потоков синхронизируется автоматом, что радует!
Модуль RX-433 тут в режиме "RX only".
Присоединённое изображение (Нажмите для увеличения)
--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
На этой фотке обратные стороны платы кодера/декодера и отладочная плата с контроллером ATnega8, которая несмотря на то, что выгладит страшновато - работает как надо!
В плате VS1053 (красная которая) применены элементы вплоть до 0402. Это наследие от старого проекта - когда "Электроконнект" ещё кучу плат выслал
Присоединённое изображение (Нажмите для увеличения)
--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
В один из дождливых дней, когда я усердно работал над проектом - через окно, меня посетил вот такой товарищ.
Выпустил товарища в открытое окно, так как жалко его стало - умрёт он в квартире от голода... Лучше пусть на улице под листья спрячется от дождя , зато еду найдёт легко.
Присоединённое изображение (Нажмите для увеличения)
--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
Дальнейшие возможные перспективы проекта:
1) Внедрить VS1063 для кодирования/декодирования MP3, G.711 (u-law, A-law); G.722 ADPCM (в настоящей версии кодирование в IMA ADPCM, OGG Vorbis)
2) Увеличить мощность передатчика до с 10 мВт до 0,5 - 1 Вт
3) Увеличить чувствительность и избирательность приёмника, применив малошумный УВЧ + ПАВ фильтр.
4) Собрать приемник и передатчик на отдельных платах.
5) Поработать над вопросам ультра-миниатюризации передатчика.
6) Выбрать оптимальный микроконтроллер.
7) .... ещё много чего.....
Результаты, что имеем:
1) ОТличное качество звука
2) Сжатие аудио-потока
3) Опробованы алгоритмы шифрования: шифровать можно побитно, побайтно или весь пакет. Ключ - постоянный, либо меняющийся во времени, зависящий от предыдущих данных... Завернуть можно сильно...
4) Запас ресурсов микроконтроллера хватает на:
- запись/чтение сектора карты памяти, в то время когда кодер/декодер готовят/воспроизводят аудиопоток.
- самые изощренные алгоритмы шифрования.
--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
QUOTE
А чем MCU занимается в передатчике во время трансляции?
Опрашивает регистр кодека SCI_HDAT1 на число новых байтов для отправки их сразу в FIFO передатчика.
QUOTE
Какова структура пакетов, что происходит при кратковременной потере связи?
Настройки пакетов могут быть самыми гибкими.
В текущей версии софта испоьзуется преамбула из 4 байт, далее синхрослово(2 байта), затем payload(полезный пакет) 64 байта, и CRC-слово.
Можно навернуть адрес устройства(первый байт) и/или длину пакета в случае переменной длины, но мне оно не надо.
При кратковременной потере связи происходит потеря пакета (битые пакеты естественно не пропускаются приемником по CRC, но это частная настройка) - декодирование ADPCM замолкает и при появлении пакетов снова возобновляется.
При декодировании пакетов MP3 и OGG Vorbis потеря пакетов может привести к лязгающему звуку на доли секунды, но после восстанавливается.
В приемнике предусмотрена предварительная отправка IMA ADPCM- и OGG- хедеров, что позволяет принимать эти потоки с любой позиции и не требует синхронности с включением передатчика.
Для MP3 потока хедер не нужен.
QUOTE
Не совсем понял, 180кГц полоса это в каком случае, для какой модуляции и какого битрейта? Полоса смотрелась по спектру или по настройкам приёмника?
Конкретно для режима OGG Vorbis 44100 Гц Q=5 и битрейтом до 87 кбит/с:
Битрейт взял в 1,5 раза больше(чтобы было время на опрос готовности новых данных или запись на SD карту памяти): итого 130,5 кбит/c. На самом деле запас можно сделать меньше: критически установил коэффициент 1,25 - 1,3, но лучше предусмотреть запас.
Манипуляция 4FSK, значит бОдрейт в 2 раза меньше: 130,5/2=65,25 кбОд/с
Девиация частоты outer(крайняя которая, не inner 1/3) в 2 раза меньше бОдрейта: +/- 32,7 кГц.
Реальная же полоса сигнала несколько больше, смотрел сканером - всё сходится с теорией 4-FSK сигналов.
Модуляция GFSK (Гауссовская 2FSK) потребует в 2 раза большие битрейт и девиацию и полосу пропускания.
Для радио MP3 44100 Гц моно/стерео 128 кбит/с использую такой профиль:
Модуляция GFSK Скорость передатчика в 1,5 раза больше: 128*1,5 = 192 кбит/с Девиация: 192/2 = +/- 96 кГц Полоса: 2*dev + bitrate = 384 кГц
На практике сканером получилось меньше, из-за гауссовского фильтра после данных.
Для MP3 радио также применял 4FSK и как следствие с-ужение полосы пропускания.
Читается сектор 512 с MMC карты памяти, далее контроллер отправляет их пачками 8 раз по 64 байта (максимальный размер FIFO передатчика/приемника), затем идёт читать следубщий сектор.
В режиме записи: ждет данных от кодека, читает буфер 512 байт, пишет в карту, затем снова ждет данных.
Ресурсов ATmega* 12 МГц хватает. Даже и при 8 Мгц хватало.
QUOTE
Какова разрядность входных данных - 10, 12, 16-bit?
Если VLSI не врёт, то 18 бит.
Тесты звука сделаю, позже выложу.
Это сообщение отредактировал Gospodin_Riba - Aug 12 2016, 06:32 PM
--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
Запись, со сканнера IC-R5 на ровно на частоте приёма, амплитудный детектор(AM).
Вначале идёт шум эфира, затем импульс включения, затем серия коротких пакетов передачи OGG-хедера, затем плотно идут пакеты данных, затем импульс выключения.
В любом WAV-редакторе картинка происходящего нагляднее...
IMAADPCM.zip не коректоно записан, похоже, ошибки в заголовке файла. Да и что-то шумноват он, как для 44100 и 18 бит. На сайте есть примеры, где при меньшей дискретизации звук куда качественнее.
OGGVorbis отличный звук.
В целом, качество звукопередачи и чутья по микрофону - весьма достойное.
Группа: Автор
Сообщений: 12972
Пользователь №: 55667
Регистрация: 10-November 09
Место жительства: BY
QUOTE (Gospodin_Riba @ Aug 13 2016, 02:06 PM)
Вначале идёт шум эфира, затем импульс включения, затем серия коротких пакетов передачи OGG-хедера, затем плотно идут пакеты данных, затем импульс выключения.
Вставлю своё мнение. Моторола ДМР чуть иным путём - меньше занятия частоты, чаще смены...думаю, все слышали "РРРР"
Думаю, в ихнем подходе пакетной передачи есть свой сакральный смысл
Группа: Автор
Сообщений: 7625
Пользователь №: 35582
Регистрация: 3-August 08
Место жительства: Украина, Харьков
Отличный звук и конструкция, особенно в наше время, пока остальные собирают перделки на двух транзисторах УНЧ подряд и паве. Микроконтроллер задействует свои режимы энергосбережения, или пока нет?
Это сообщение отредактировал vitalik_b - Aug 13 2016, 08:25 PM
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
QUOTE
IMAADPCM.zip не коректоно записан, похоже, ошибки в заголовке файла.
Так как это поток, который может длиться условно бесконечно, то все длины в хедере установлены в 0xFFFFFFFF вместо FileSize-8 и FileSize-60. Поэтому, возможно в некоторых плеерах не пойдёт.
Использую старый Winamp 556 lite, с ним звук корректный, разве что тупняк при первой загрузки файла из-за коллизии между размером файла и указанной в хедере бесконечной длины потока
QUOTE
Да и что-то шумноват он, как для 44100 и 18 бит.
У меня есть соображения, что дополнительный шум вносится из-за просадки на линии питания в момент записи на MM карту памяти.
Пока сделано как на верхнем рисунке.
QUOTE
В целом, качество звукопередачи и чутья по микрофону - весьма достойное.
Сравнивал уровень громкости с аналоговым жучком. У цифрового чутьё по микрофону меньше. С микрофона выходное напряжение около 0,4V RMS максимально.
Попробую всё-же задействовать микрофонный усилитель, переделав балансный в ход в небалансный. Балансный вход имеет смысл если микрофон подключен к плате длинными проводами, чтоб убрать наводку с кабеля.
QUOTE
Вставлю своё мнение. Моторола ДМР чуть иным путём - меньше занятия частоты, чаще смены...думаю, все слышали "РРРР"
Это всё условно... Сейчас я читаю 64 байта с буфера кодека (а он вообще 8-килобайтный в OGG Vorbis кодере), затем сразу отправляю в FIFO передатчика (тоже 64 байта).
Пробовал вычитывать по 256 и по 512 байт из буфера кодека и серией отправлять на TX FIFO по 4 и по 8 раз соответственно. Там временные соотношения пакетов будут сильно различны.
QUOTE
Микроконтроллер задействует свои режимы энергосбережения, или пока нет?
У плагина OGG Vorbis и ADPCM нет механизма давать прерывания по заполненному (или частично заполненному) буферу. Приходится опрашивать регистр заполнения буфера.
Но так как VS10xx - на самом деле - это "просто DSP", то можно написать свой плагин, который давал перерывание на одну из свободных ножек GPIO.
Но это надо мучать разработчиков в VLSI вопросами, и кодить в VSIDE. тоесть серьезно подойти к освоению этого DSP.
В идеале, было бы вообще красиво - избавиться от ATmega*** и сделать VSDSP основным контроллером и подкллючить к нему MMC/SD карту и передатчик CC1101.
Общался с разработчиками, они сказали, что SPI их VS DSP не имеет, а то SCI/SDI что для управления - исключительно для управления и заливки плагинов/патчей. С его помощью можно также читать/писать RAM и читать ROM.
--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
Ещё пара интересных возможностей VS10xx:
1) Есть АРУ микрофонного усилителя/линейного входа. Проверял - работает. Усиление плавно гаснет если источник звука сильный.
2) В OGG Vorbis плагине есть VOX с регулируемой паузой. А также возможность сигнализировать на GPIO4. Так что можно дёргать передатчик и усилитель мощности при активации голосом. Полезно для тех, кто озабочен экономичностью энергопотребления!
--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
Тест кодера IMA ADPCM 44100 Гц, 1 канал, 4 бита => 176,4 кбит/с:
IMAADPCM Открылось виндовс медиа плеером без проблем. Слышно звуки, принятые микрофоном и импульсную помеху по питанию - лечится банкой в нужном месте. Т.е. шума от самой оцифровки очень мало.
В идеале, было бы вообще красиво - избавиться от ATmega*** и сделать VSDSP основным контроллером и подкллючить к нему MMC/SD карту и передатчик CC1101.
В идеале надо избавиться от ATmega и VSDSP, применив GR DSP
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
Переделал микрофонный вход. Завёл микрофон на встроенный микрофонный усилитель, который даёт прибавку к усилению около 20 раз по напряжению (см. даташит).
До этого микрофон был на Line In и регистр SCI_AICTRL1 был в 0xFFFF тоесть на максимальном усилении в 64 раза.
С микрофонным усилителем значение этого регистра пришлось уменьшить до 4*1024 тоесть сделать усиление в 4 раза, что привело к общему усилению 80 - чуть большим чем было(64x).
Зато при установке SCI_AICTRL1 в 10..15* 1024 появляется возможность слушать всё что делается за окном !!!
При 20*1024 уже свист в наушниках на расстоянии 1 метра от микрофона.
Сами разработчики рекомендуют почему-то использовать микрофонный усилитель и как можно меньшее значение в SCI_AICTRL1.
QUOTE
Слышно звуки, принятые микрофоном и импульсную помеху по питанию - лечится банкой в нужном месте. Т.е. шума от самой оцифровки очень мало
Опытный образец начну делать когда отмакетирую вариант с VS1063. Там и подумаю над фильтрами питания.
Потому что хранить 25,5 килобайт OGG кодека - это сразу ведёт к ATmega32. Или к SPI EEPROM AT45xx.
QUOTE
В идеале надо избавиться от ATmega и VSDSP, применив GR DSP
Согласен, что ядро VS_DSP проприетарное и разработчики там весьма своенравные, но лед двинулся в сторону приоткрытия тайн:
- выложено VSIDE в свободном доступе - это в чём писать (C + ASM)
- на VS1063 есть подробный даташит с описанием всех регистров и прерываний
- есть книга "First steps with VS1053 ..." но она платная. Пока не нужна, но позже может закажу у них.
--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)