Форум по радиосвязи предназначен прежде всего для постояльцев портала, которые кроме паяния жучков умеют жать на тангенту, проводить QSO, которые возлюбили свои антенны, и трансиверы как самого себя. Правила данного форума в рамках пп 6.6., 6.7.8., 6.7.9 соответствуют регламенту проведения радиосвязей
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
В настоящее время портирую Codec2-700C, возникли проблемы: отладчиком выяснил, что декодирование идёт неверно, по сравнению с отлаженной версией на ПК (Win32)....
Напомню, с данным кодеком можно сделать чутье приемника -133 дБм (0,05 мкв).
--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
QUOTE (radiofan @ Jan 16 2017, 04:56 PM)
Имхо, ниже 600бит/с нет смысла стремится,там уже разборчивость не получить, приемлимую.Дальше только текстовый режим,клавиатурный набор,или голосовой.
Пожалуй, при своих возможностях, соглашусь. Без исходных кодов на 300-600 бит/с - сделать менее 800 бит/с с разборчивым звучанием не выходит. А у версии 2400 есть предел (из-за мелкой кодовой книги).
Детище Дэвида на 700 бит/с - будет реальным пределом для данного устройства.
--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
Разобрался с декодированием, теперь вторая проблема с этим кодеком на STM: не хватает вычислительной мощности!
Там кодовая книга на 80 кБ. Попробовал сдублировать её в SRAM чтоб меньше тактов при чтении из неё - ничего не дало.
Также подключил CMSIS-овскую FFT для ARM Cortex M4 - прибавки к скорости не заметил.
Уже во float превратил вычисления - ничего не дало.
Частота поднята до 240 МГц - всё равно не хватает....
Пробовал отдельно на декодирование - работает и на 32 мГц.
Тормоза только с кодированием (ну и я такое и ожидал - поиск наилучшего звукового образца по кодовой книге - ресурсоемкая вещь). Становится понятно почему MELP1200 тоже тормозил.
--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
Если идею немного модифицировать, чтобы одна базовая станция с бОльшей мощностью передавала голосовые сообщения, то какое минимальное железо можно поставить на абонентских приемниках?
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
_Sergeyka_
QUOTE
А как же 1-ватные модули, они же уже в пути
Планируется совершенно новое устройство на них - с новым функционалом, новыми возможностями. Это примерно как Денди с СЕГА сравнивать Что есть у СЕГА, чего нет у Денди?
Что касается самих модулей - застряли на таможне... По трекингу новых записей нет уже пол-недели (экспресс-доставка)..
vladlen
QUOTE
Если идею немного модифицировать, чтобы одна базовая станция с бОльшей мощностью передавала голосовые сообщения, то какое минимальное железо можно поставить на абонентских приемниках?
Недостаточно данных, чтобы точно ответить. Но идея понята - сделать сотовую связь!
Опытным путём обнаружил, что восходящий канал будет хуже нисходящего.
Иными словами - абонента сверху будет хорошо слышно абонентом снизу. А вот абонента снизу будет плохо слышно абонентом сверху. При прочих равных...
romanetz
QUOTE
На 7й и 3й серии CCM может быть и памятью программ
Пока неизвестна причина тормоза, что там Дэвид наворотил в версии 700C... Пробовал 700A и 700B - пашут на 128 МГц вместе с VAD и Noise suppression.
А вот профайлинг в винде показывает примерно одинаковые значения во всех трёх режимах!:
CODE
700C: 1941877 rdtsc
700B: 1454767 rdtsc
700A: 1353278 rdtsc
Новые файлы для кодека 700C:
CODE
newamp1.c ------------- функции кодека 700С mbest.c ------------- поиск в кодовой книге codebooknewamp1.c ---- кодовая книга 80 кБ !!!
В mbest.c динамически создаются/изменяются/удаляются списки(!). Может в этом как раз дело.
Уже под стек и кучу выделил по 64+64 кб ОЗУ.
А malloc и free пробовал заменить библиотекой BGET. Стало ещё медленнее Вернул всё в зад.
Почему именно 700С на STM32 тормозит - загадка. Профайлинги в Win32 одинаковы - и это настораживает.
--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
Интересная статейка с практическими примерами - как один человек жал архиватором кодек2 и добился сжатия в 1,5-2 раза: http://catethysis.ru/codec2_miniz/
У меня в режиме 700С вышло 14 фреймов по 28 бит по идее тоже можно такое сделать, но порча 1 бита приведёт к потере звука на 0,5 сек..... А применение коррекции ошибок сведёт на нет всё сжатие!
Это сообщение отредактировал Gospodin_Riba - Jan 18 2017, 10:52 AM
--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
Отлично, в статье получили поток 4800 бит/сек при качестве звука 700 бит/сек, браво! Может, лучше ничего не трогать было? На 4,8 кбитах отличный звук почти без матана.
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
QUOTE (romanetz @ Jan 18 2017, 01:23 PM)
Отлично, в статье получили поток 4800 бит/сек при качестве звука 700 бит/сек, браво! Может, лучше ничего не трогать было? На 4,8 кбитах отличный звук почти без матана.
У него в кодеке стоит не 700 бит/с, а 1200. Автор писал на момент когда не было ещё кодека 700C. Звучание на 1200 бит/с у кодек-2 ИМХО лучше чем у 700А и 700В.
Но с появлением ультра-свежей версии 700С вы оказываетесь правы! А именно (по заявлениям Дэвида) - 700C одинаков с 1300. Что полностью делает статью автора лишённой смысла.
++++++++++++++
Нашёл причину тормоза 700С.
Дело оказалось в использовании крайне медленной библиотечной функции возведения в степень: powf() в функции mbest_search(), которая часто вызывается.
Вот фрагмент функции в листинге:
Это сообщение отредактировал Gospodin_Riba - Jan 18 2017, 02:16 PM
Присоединённое изображение (Нажмите для увеличения)
--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
Немного подумав, я сделал предположение, что тормозит из-за неё. Хоть она может и использует FPU, но её реализация громоздка + несколько тактов на вызов/выход этой функции.
ИМХО, не лучшее решения для нахождения квадрата. Заменил перемножением числа на само себя.
Теперь выглядит так:
Это сообщение отредактировал Gospodin_Riba - Jan 18 2017, 02:28 PM
Присоединённое изображение (Нажмите для увеличения)
--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
void mbest_search( register const float *cb, /* VQ codebook to search */ register float vec[], /* target vector */ register float w[], /* weighting vector */ register int k, /* dimension of vector */ register int m, /* number on entries in codebook */ register struct MBEST *mbest, /* list of closest matches */ register int index[] /* indexes that lead us here */ ) { register float e; register int i,j; register float diff;
Вот тебе и "Ассемблер" ! Одно дело тут орать на форумах и создавать темы ни о чём про ассемблер. Совсем другое дело - его применять и разбираться. Надеюсь, вы поняли о ком речь
--------------------
По всем вопросам пишите на почту: repstosw2018 [собака] gmail [точка] com Энтузиазм заканчивается, когда начинается Кризис. Рождается Капитализм :)
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
Кстати, почти во всех модах Codec2 видна явная перегруженность в районе частот 0..200 Гц. Если наложить ФВЧ со срезом 150-200 Гц, то перегруз убирается.
Вот как звучит детище Дэвида "700C" в рации (запись). Конечно уступает MELP2400, зато чутьё приемника будет выше(-133 дБм).
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
QUOTE (romanetz @ Jan 18 2017, 08:59 PM)
Так БИХ на 6й порядок много времени не займет, а то, что фазу крутит, так пофиг уже...
У VS1063 есть двухполосный эквалайзер по дефолту и многополосный эквалайзер через плагин Так что напрягаться не пришлось...
Всё-же решил не резать частоты ниже 200 Гц, так как теряются индивидуальные признаки голоса говорящего.
Зато высокие поднял с 1 кГц и выше (до 4 кГц включительно). Это улучшило разборчивость в рациях (без коррекции было глуховато). Теперь в наушниках отлично, но в звуковой пробе ниже будет немного звонко.
Выкладываю релизную прошивку Codec2 700 бит/с свежая версия "С":
Отличный звук, как по мне разборчивость выше чем MELP 975, радует отсутствие робо-призвука, который как раз и делал длинные слова не очень разборчивыми. Да, проще звучит, плосковато, за то на мой взгляд тембр голоса более естественен.
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
Подумываю проработать вопросы, связанные с улучшенной помехоустойчивостью.
Хочу отказаться от FEC LoRa (точнее задействовав его малый коэффициент 4/5) и сделать коррекцию ошибок, заточенную под вокодер.
Создатель Codec2 Дэвид в своем сайте пишет, что планирует добавить FEC к своему детищу - защитив только важные биты фрейма: http://www.rowetel.com/?p=5373 читать со слов "Next Steps Some thoughts on FEC. A (23,12) Golay code........"
Только что проанализировал важность битов фрейма, путём инверсии по отдельному биту и слушал результаты. В общем: важны только 13 бит из 28 - биты кодовой книги, старшие биты тона и усиления. Остальные не дают теряться разборчивости речи: попробовал занулить их - в итоге речь как была так и осталась.
Так что... (13/28)*700 = 325 бит/с - до такого можно снизить битрейт.
Ну а идею защиты только важных бит можно принять на вооружение.
Вот запись с битрейтом 325 бит/с - практически не изменилось ничего:
Группа: Автор
Сообщений: 2137
Пользователь №: 116127
Регистрация: 26-April 16
Испытал Codec2 700C ещё с одним знакомым, результатами остался недоволен. Понять чё говорит этот знакомый можно было заставив его говорить медленее и выразиельнее.
Ради эксперимента проверили его голос на MELP2400 - всё понятно.
В общем фтопку этот Codec2, столько возился с ним и всё коту под хвост.
И кстати, шумоподавление с Codec2 работает неэффективно - этот кодек оказался очень чувствительным к малейшим флуктуациями, которые слышны как закипание желатина на фоне полезного сигнала.
Ещё если передать нулевой сигнал на Codec2, то на выходе будет шум примерно на -24 дБ ниже речевого сигнала, что вообще меня возмутило (отрицательно). У MELP такого нет.
+++++++++++
Собрал ради интереса другой вокодер: CELP на 4800 бит/с. Сделал звуковые пробы (голоса женские, мужской).
По идее должен быть лучше MELP2400.
Позже на STM32 перенесу.
Это сообщение отредактировал Gospodin_Riba - Jan 21 2017, 01:42 PM