Перейти к содержанию
    

kaktus_M

Участник
  • Постов

    5
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Посетители профиля

520 просмотров профиля
  1. Оживлю тему. В стадии разработки вокодеры на 356 и 178 бит/с. Подробнее здесь: http://vrtp.ru/index.php?showtopic=27904&st=690
  2. По части шума, полосы и сигналов. Использую приемник трансивера LORA1278F30 в режиме LoRa, SNR детектора в выбранных конфигурациях ниже 0 дБ. Экспериментально ещё раз подтвердился тот факт, что нет смысла делать MELP именно на 600 или кпримеру на 300 бит/с. Потому что неоптимально по качеству сигнала или по длине(времени) пакета. Если провозиться с Semtech Lora Calculator или курить матан в даташитах (формула длительности пакета в эфире), то можно заметить , что по мере заполнения Payload время пакета меняется скачками. Причем это зависит от остальных параметров приемного тракта. Поэтому в качестве отправной точки брал приоритеты: максимальное чутье, максимально заполненный Payload без скачка по времени пакета в эфире, минимальное число фреймов, разборчивость речи, максимальный коэффициент коррекции ошибок (убивает полезный битрейт в 2 раза, у нас не космос c АБГШ, а мегаполис с релеевской моделью). Вместо MELP 600 вывел под радиотракт MELP 711,111... бит/с - это 32 бита на 2 фрейма (все параметры фреймов векторно проквантованы) и длина фрейма 22,5 мс (180 семплов). На практике, предпочтительнее учитывать корреляцию между фреймами и векторно квантовать, а не увеличивать размер одного фрейма в семплах, что ведет к слоговой неразборчивости. Итого радиотракт: SF=10 BW=250 kHz CR = 4 (FEC 2:1) чутье -130 дБм --- что на+6 дБ больше чем конфа с оригинальным MELP2400 c чутьем приемника -124 дБм. Дальность связи в 2 раза больше. Payload = 14байт (7 фреймов по 2 байта) Preamble=10байт (37% от времени всего пакета в эфире) - более 1/3 всего пакета под преамбулу. Длинная преамбула повышает надежность в радиосвязи. Tair=156.67 ms < 157.5 ms (7Frame * 22,5 ms) Вывод пролазим! И лучше чем MELP 600 !!! Задержка распостранения звукового сигнала между приемником и передатчиком: 2*7*tFr = 14*22.5 = 0,315 sec. Следующий шаг: чутье -133дБм SF=10 BW=125 кгц CR=4 Для достижения такой чувствительности был выведен MELP 355,555 бит/с. А не MELP 300. Тут уже векторно проквантованы параметры 4-х смежных фреймов и занимает те же 32 бита, но на 4 фрейма. Payload=14 байт Preamble = 10 байт (37% от времени всего пакета) Tair = 313.34 ms< 315 ms (14F* 22.5 ms) Тоже пролезаем! И лучше чем MELP300bps Задержка распостранения звукового сигнала между приемником и передатчиком: 2*14*tFr = 28*22.5 = 0,63 sec. А вот если взять уже пакет с Payload не 14 байт, а 15 кпримеру, - то резко возрастет время пакета в эфире, которое превысит время N фреймов. И это все не голая теория, а практические результаты и данные, у меня есть возможность проверить. Конфигурации 711,111 и 355,555 бит/с были получены путём векторного квантования параметров -2х и -4х соответственно: LSF: VQ(13)- такой кодовой книги на 8192 слова хватает, чтобы обеспечить разборчивость голосов, которых нет в кодовой книге и без заметных искажений. Pitch: VQ(7) Gain: VQ (8) BPV: VQ (4) ----------------- Итого: 32 бита на 2 или 4 фрейма соответственно. Или 4 байт/суперкадр. При этом размер 1 фрейма без изменений - 180 семплов = 22,5 мс Архив с иллюстрациями прилагаю (оригинал , 712 бит/с и 356 бит/с). При этом кодовая книга не содержит этих голосов: 356bps_712bps_orig.rar ИМХО недурно, за счет сохранения короткой длины фреймов вытянута слоговая разборчивость в словах! Пора наверное научную степень давать!
  3. petrov, Вы правы, M_DSP это я... :) Пришлось зарегаться по-новой так как забыл пароль и ящик на который регистрировался ранее... Милливольт, большой Вам привет и велкам! :) Эксперименты показали, что 8 бит на кодовую книгу не хватает, чтобы охватить все голоса. Оптимально 12 бит или ещё с запасом- 13 бит. Сделал нарезку из 10 звуковых файлов мужских голосов + 10 женских голосов. Из этой нарезки сделал 2 кодовые 13-бит: 1) Одноуровневое векторное квантование 2^13 = 8192 наборов LSF 2) Двух-уровневое векторное квантование 7+6 => 2^7 + 2^6 = 192 наборов LSF Вариант 2 быстрее и экономичнее, но искажения больше, чем в варианте 1. Первый вариант с кодовой книгой VQ(13): vq13.rar Второй вариант с MSVQ(7+6) - звучит хуже: msvq76.rar В этих двух пробах 1 фрейм = 30 мс и 29 бит на фрейм. Очень приятно удивило, что 20 дикторов хватило, чтобы вокодер мог корректно воспроизводить звук других людей. Так что скорее всего американский акцент кодека MELP связан с тем что кодовая книга там под граждан США:) Получившийся битрейт 966,666666... бит/с - радиотракт моего приёмника оптимально прокачивается пакетом с достижением чутья -130 дБм. При этом качество звука намного лучше, чем в прошлой конфе(тема M_DSP) на 975 бит/с. :) Использую готовый модуль LORA1278F30, дальность радиосвязи там хоть отбавляй. С мощностью 1 Вт и чутьем -124 дБм Но есть соблазн всегда получить больше: цель сделать -130дБм. Есть ли в природе приемник дающий чутье более -133 дБм на скорости 1 кбит/с ? Частоты 70 см диапазона
  4. Осмелился векторно проквантовать параметры: Pitch, Gain и BPV. Приятно был удивлен, что векторное квантование хорошо жмет с минимальными потерями плавно меняющиеся данные. Размер фрейма вернул на прежнее: 180 семплов. Зато применил мультифреймовое квантование: брал 4 смежных фрейма и квантовал соответстующие параметры. Биты распределены так: LSF: VQ(8) + VQ(8) + VQ(8) + VQ(8) - в оригинальном MELP2400 было MSVQ(7+6+6+6)на 1 фрейм, а тут 4 фрейма по VQ(8) что снижает точность, но если со своей кодовой книгой, то нормально! GAIN: VQ(9) - в оригинальном MELP было просто 8 бит(5+3) без квантования между фреймами PITCH: VQ(8) - в оригинале было 7 бит без квантования между фреймами BPVC: VQ(5) - в оригинале было 4 бита без межфреймового квантования Итого: 8+8+8+8+9+8+5 = 54 бита на 4 фрейма, что точно соответствует 600 бит/с. Результат: межфреймовое векторное квантование - отлично сжимает данные ссильной корреляцией почти без потерь качества. Звуковая иллюстрация такого сета MELP 600: melp600bps.rar Если увеличить размер фрейма в 2 раза (и размеры LPC- и FFT- окон тоже в 2 раза) - то тупо получаем MELP 300 bps. Правда это уже халтура - фрейм 360 семплов = 45 мс, параметры речи уже плохо описываются как стационарные. Имеем местами нечленораздельное звучание - тут только говорить по-медленнее. Ради любопытства прикладываю MELP 300(черновик): melp300bps.rar Кодовая книга в образцах, конечно же сделана своя под голос диктора! Надо будет ещё попробовать применить векторное квантование к 40 LSF коэффициентам чтобы сжать 29 бит MSVQ. Тогда: LSF MSVQ(8+7+7+7) PITCH VQ(9) GAIN VQ(10) BPVC VQ(6) Те же 54 бита на 4 фрейма, но LSF более эффективно пожата,что позволяет закодировать LSF-ы 4-х фреймов сразу! Проверял на чужих голосах без переделки кодовых книг - работает, на 600 бит/с разборчиво, но характер голоса становится другим. У кого какой опыт возни с низкобитрейтовыми вокодерами, тема актуальна или нет? Мне вот надо -133 дБм вприемнике выжать, поэтомуснижаю скорость передачи
  5. MELP (MELPe) 600

    Уважаемые форумчане! Мозг требует постоянных движений в динамике,сложа руки сидеть никогда и не подумывал, а доступных исходников на MELP 600 бит/с я не видел. Научные статьи на эту тему, которые довелось мне видеть, содержат финальные результаты и в кратце то, что было проделано. Никакой конкретики нет и не было. Поэтому осмелился восполнить пробел и сделать MELP 600 бит/с самому. :) За основу были взяты исходники от MELP 2400 бит/с (референтный код, с плавающей точкой). Заставив его собираться в GCC, начал эксперименты. Как известно, исходный фрейм в MELP 2400 - это 22,5 мс, что соответствует 180 одноканальным семплам. Биты фрейма расписываются так: Линейно-спектральные частоты - 7+6+6+6 бит = 25 бит (10 LSF частот типа float(4 байта) векторно квантуются в 4 стадии) Магнитуды Фурье: 10 бит Энергия фрейма: 5 + 3 бита - квантуется по половине фрейма Основной тон - 7 бит Фильтры по 4-м полосам: 4 бита Джиттер: 1бит Синхробит - 1 бит Путём экспериментов выяснил, несколько важных моментов: 1) Магнитуды Фурье можно выкинуть, вместо них домножить на 1.0 2) Синхробит- вообще не нужен 3) Джиттер - информация тривиальная и получается вычислением других данных Получается, вместо 56 бит можно использовать только 44 бита без заметного ухудшения качества и распознаемости речи. Далее, известно, что параметры человеческой речи могут быть описаны стационарно без потерь разборчивости на фреймах длительностью не более 40 мс. Что соответствует 320 семплам при Fs=8кГц. Именно фреймы такой длины используются в кодеке Codec2 (опции с малыми битрейтами). Выбор между Codec2 и MELP2400 в качестве отправной точки тоже неслучаен. Эксперименты показали, что Codec2 крайне не поддается шумоподавлению с помощью адаптивных фильтров - флуктуации помехи на фоне полезного сигнала сохраняются и ведут к резкому падению речевой разборчивости. Зато MELP2400 отлично работает с адаптивным шумоподавителем, речь без дополнительных фоновых звуков. Основная трудность: создание своей собственной кодовой книги путём векторного квантования. Нужно из речевых фрагментов получать 10 LSP коэффициентов, затем их преобразовывать в LSF-коэффициенты. Всё это отражено в исходниках MELP2400. Проблема возникла на этапе векторного квантования LSF - было непонятно, как из векторов LSF оставить только те, которые нетривиальныпо отношению друг к другу. Читал про LGB-алгоритми про центроиды: кроме теории практических примеров - ноль, не говоряуже о том что квантование должно быть мульти-стадийным. Завершилась эпопея с кодовой книгой - путем скачивания с pudn.com программы одного китайского гражданина, которая после допиливанияделала то что надо! А именно: из LSF-векторов строила кодовую книгу - оставляла нетривиальные вектора, да и причем уровень разрядности и количество стадий можно кастомно задать! Не буду напрягать промежуточными изысканиями, скажу что данного битового распределения хватает чтобы получить MELP600: LSF: 8 бит - одноуровневое векторное квантование (256 элементов кодовой книги из голоса конкретного диктора) Gain: 5 бит - усиление усредняетсяза2 полуфрейма и квантуется скалярно 32 значениями Pitch: 7 бит- тут без изменений BPV: 4 бит- тоже без изменений Итого 24 бита- ровно 3 байта на 1 фрейм. Фрейм взят 40 мс - 320 семплов. При таком раскладе получаем MELP со скоростью 600 бит/с. Сделал несколько наглядных иллюстраций : 2 прикрепленых архива. В каждом: оригинал + синтезированная вокодером запись. Брал голоса дикторов (женский голос). Vahonina_Elvira.rar Собственно вот в чём вопрос: 1) годится ли полученный MELP 600 бит/с в качестве вокодера для служебной радиосвязи? 2) какова разборчивость в процентах от всего звукового образца? 3) Помогите с векторным квантованием четырёх величин - по какому алгоритму можно проквантовать уровни громкости в 4-х соседних фреймах? Звуковая иллюстрация второго диктора: Baldenkova_Svetlana.part1.rar Baldenkova_Svetlana.part2.rar
×
×
  • Создать...