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

Речевой кодек для задачи, поставленной GeGel

Жесткие требования по кварцу как раз таки есть. Лучше находить 2ppm, 5 ppm похуже. Обычно подешевле дотупны 10ppm_ные, на этой плате он и установлен. Тут нужно не забывать что такая высокая чувствительность ( или бюджет линка) во многом обеспечивается идеальными условиями и отлаженным, согласованым RF трактом с учетом антенны, не столько малой полосой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

400bps - это хорошо. Я так понимаю, фрейм у Вас остается 22.5 mS. Не пробовали играть с параметрами MELPE1200, объединяющего 3 фрейма? Или сделать все по документу на 600 (4 фрейма, 90mS)?

 

Оригинальный MELP 2400:

фрейм 180 семплов = 22,5 ms

биты:

LSF 25 = 7 +6 +6 + 6

FMag 8

Pitch 7

Gain 8

BPV 4

Jitter 1

Sync 1

Итого: 54 бита на 1 фрейм

 

Мои преобразования в 400 бит/c:

фрейм 640 семплов = 80 мс

LSF 13 = 7+ 6 (msvq_index 3,4 выкинул - это составляющие высшего порядка, не смертельно)

FMAg = 0 - полностью убрал (полагаю, это дубляж инфы LSF для реализации исправления ошибок по FEC) - в melpe-600 их нет

Pitch 7

Gain 8

BPV 4 - оставил фильтры как есть (а то женский голос может стать мужским)

Jitter =0 - выкинул

Sync =0 - это вообще выкинул не задумываясь

Итого: 32 бита или 4 байта ровно

 

Зло тут ИМХО в длинном фрейме: местами речь похожа на мычание.

 

Показывал знакомым: 50 на 50: одни говорят неприемлемо, другие считают - приемлемо.

 

Касаемо документов, я нашёл:

 

1) Real Time Implementation of 600 bps MELP Vocoder

 

2) Stanag 4591 .. the 600 bps 1200 bps and 2400 bps NAT0 interoperable narrow band voice coder (с подписью вица-адмирала)

 

3) New Nat0 stanag narrowband voice coder 600 bps

 

Но у меня не так много знаний в голове чтобы выполнить ВСЁ что там предлагается.

 

На "Попугае Какаду" на 600 бит/с(с сайта melpe) всё-же речь разборчивее чем на моём моде 400 бит/с.

fspeech_600_demo.wav

 

А на счет софта на RFM96 - так в инете его куча , проблем особо нет. Правда, я родил свой инклуд (модуль) для RFM96 на основе подобной библиотеки..

 

А вот мой "Какаду" на 400 бит /с. Из слышимых недостатков: местами невнятная речь и эффект звучащей струны:

kakadu400.wav

 

Надо бы попробовать несколько коротких фреймов обработать(4) и обобщить лишь часть параметров и сунуть в пакет (как в melpe 600).

 

Жесткие требования по кварцу как раз таки есть. Лучше находить 2ppm, 5 ppm похуже. Обычно подешевле дотупны 10ppm_ные, на этой плате он и установлен. Тут нужно не забывать что такая высокая чувствительность ( или бюджет линка) во многом обеспечивается идеальными условиями и отлаженным, согласованым RF трактом с учетом антенны, не столько малой полосой.

С вами согласен, при полосах уже 62 кГц, лучше использовать TCXO. А те кварцы что у меня стоят - разнятся на 300+ Гц, но на UHF набег аж в 3,6 кГц дал.

За неимением лучшего - скорректировал множитель синтезатора в приемнике, так чтобы этот набег компенсировался.

 

А на счёт ВЧ трактов, я индикатором напряженности поля нашел частоту при которой показания индикатора поля максимально. И надеюсь что на приеме ВЧ тракт братьями-китайцами сделан правильно!

 

Антенна - диполь полуволновый раскрыв 135 - 180 градусов 50-75 Ом. Так что в принципе ВЧ часть терпимо.

 

Ранее с CC1101 экспериментировал, так результаты были хуже - жуткая интерференция даже в комнате: приём глох

Изменено пользователем Mister_DSP

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробовал объединить некоторые параметры из 4-х соседних фреймов. Ничего путного не вышло, возможно из-за отсутствия расширенной кодовой книги.

 

Сделал так 600 бит/с:

LSF: 7 бит (msvq_index[0], остальные не используются)

PITCH: 7

Gain: 8

BPVC: 4

итого: 26 бит/фрейм

 

длина фрейма 348 байт.

 

Вариант "советского какаду" с таким конфигом:

kakadu_348.wav

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Наверное, я помешался на вокодерах, но идея получить 200-300 бит/с при граничной разборчивости меня не оставляет совсем......

 

Освоил мульти-фреймовое кодирование, всё-же смог утрамбовать биты от 4-х фреймов.

Вот первые результаты:

 

600 бит/с (фрейм 320 семплов - в 2 раза меньше по сравнению с предыдущим образцом 640 семплов - выросла разборчивость):

melpe600bps.wav

 

Ну и ради пробы 300 бит/с (фрейм 640 семплов - как в старой копии):

melpe300bps.wav

 

По сравнению с предыдущим 300 бит/с - не трещит!

 

Секрет прост: некоторые параметры речевого сигнала меняются медленно - так что их можно было обобщить. Спасибо си-шному printf, который позволил проследить за параметрами :)

 

В записях звука есть небольшое дрожжание тона, как в фирменном "какаду" скачанного с сайта melp.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно пригодится ув. GeGel и остальным кто в теме вокодеров.

 

В репозитории piarphone в папке melpe, есть файлик "mathhalf_i.h". Из него убрать всё вида:

 

    if ((acc > MAX_40) || (acc < MIN_40) || (acc != floor(acc))) {
        fprintf(stderr, "BASIC_OP: Error in 40 bits format.\n");
        exit(0);
    }

 

Инными словами - убрать всё что касается printf с проверкой и вычисление условия.

На тестовом образце кодирование уменьшилось с 8 секунд до 3,5 с.

 

Пока всё. Дальше ещё посмотрим что можно сделать....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно пригодится ув. GeGel и остальным кто в теме вокодеров.

 

В репозитории piarphone в папке melpe, есть файлик "mathhalf_i.h". Из него убрать всё вида:

 

    if ((acc > MAX_40) || (acc < MIN_40) || (acc != floor(acc))) {
        fprintf(stderr, "BASIC_OP: Error in 40 bits format.\n");
        exit(0);
    }

 

Инными словами - убрать всё что касается printf с проверкой и вычисление условия.

На тестовом образце кодирование уменьшилось с 8 секунд до 3,5 с.

 

Пока всё. Дальше ещё посмотрим что можно сделать....

я не понял, там что #ifdef DEBUG нету??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я не понял, там что #ifdef DEBUG нету??

Если б было, то я об этом здесь не писал.

Дальнейший анализ этого злосчастного MELP 1200 привело меня к профайлингу.

Пытался вычислить что там так безбожно тормозит.

В итоге нашёл ответ : ВСЁ !!!

Даже замена функций вещественными БПФ и ДПФ ничего не даст, так как остальной код целочисленный и приходится конвертить целое в вещественное туда-обратно.

Видел этот референс с АСМ-инструкциями для Ti.

 

Так что остаётся лепить из 2400, с чего и начинал.

 

Обращался в Ti, сказали фиг мы вам что дадим, так как вы - не крупная фирма с громким именем! (dspini.com)

Хотел там сорцы TWELP 300 купить. Посмотреть реализацию.

 

Однако я сам на пороге 300 бит/с с качеством лучшим чем Codec2 450 bps! :smile3046:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все ушли на фронт или есть что нового?

Пока ничего. Рыдал над ГОСТом. Полностью повторил методику поверки. Пришлось очень много переделать. Но до "отлично" не дотянул, да и не получится, видимо. Но честное "хорошо" есть. Если интересно, выложу иллюстрации для 800...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я тоже остановился на 600 бит/с - это как раз компромисс между чутьем приемника и разборчиостью.

есть версия на 300 бит/с - но голос слегка робототехнический.

 

с версией 600 бит/с - фрейм 240 семплов (30 мс)

с 300 бит/с - фрейм 320 семплов (40 мс)

 

в принципе речь стационарна до 30 мс. так что я особо не грущу - сойдёт и так! :)

 

занят рисованием печатной платы....

 

ну на счет образцов - если нетрудно, выложите плиз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я тоже остановился на 600 бит/с - это как раз компромисс между чутьем приемника и разборчиостью.

 

19.WAV

20.WAV21.WAV

22.WAV54.WAV

 

Изменено пользователем Милливольт

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и всё-же я смотрю, вы отклонились от первоначальной задумки: конкретный словарь на 1 человека.

всё-же на 100 бит/с звучало великолепно (в самом первом посте)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и всё-же я смотрю, вы отклонились от первоначальной задумки: конкретный словарь на 1 человека.

всё-же на 100 бит/с звучало великолепно (в самом первом посте)

Да, пока дела неважные. Эти записи сделаны для словаря "из двух человек", и именно их голоса и используются.

Т.е. работы еще до дьявола и больше.

Плохо с детскими голосами (большое отличие основного тона вверх) и т.п.

Сделали обсуждение этой темы. Результаты не радуют.

1. Научная ценность - 0 (здесь я согласен)

2. Никакого практического применения при отсутствии полностью универсального алфавита (спорно, на мой взгляд)

3. Применимость даже при полном успехе - сомнительная, т.е. заменить стандартный кодек 2400 на 800 даже при идентичном качестве - ничего не дает,

разумнее просто поработать над расширением полосы пропускания (пожалуй, согласен)

4. Коммерческие перспективы нулевые - ловить пару децибел в радиосвязи бессмысленно,

а повысить, допустим, пропускную способность каналов связи без разработчиков этих каналов - не по чину слэйвз (наверное, где-то так)

5. Затраты на реализацию алгоритма на современном программном уровне потенциально очень велики (с учетом зарплаты программистов) - а таких денег нет и не предвидится (вынужден согласиться).

 

Т.е. поиграться можно, но реальность - увы - вот она.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Основная задумка с вокодерами: с их помощью поднять бюджет линка, за счёт увеличения чутья приемника из-за с-ужения полосы пропускания(понижения скорости битов).

 

Мои данные получены на практике:

1) MELP 2400 бит/с - чутьё -124 дБм

2) Codec2 300 бит/с - чутьё -135 дБм

 

Выигрыш между 2) и 1) в 11 дБм, а это в 3,5 раза увеличена дальность при прочих равных. Это же здОрово!

 

С детскими голосами действительно проблема. Даже с MELP :) Потому что как писали сами TI (они придумали MELP), кодовая книга составлена из мужксих и женских голосов дикторов (взрослые) TIMT на многих языках + немного аборигенов прихватили :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выигрыш между 2) и 1) в 11 дБм, а это в 3,5 раза увеличена дальность при прочих равных. Это же здОрово!

 

Это если считать "напрямую" в безэховой камере, например. А в реальности подстилающий эфирный шум сильно подпортит картину.

Кроме того, во много раз проще и дешевле увеличить мощность, чем выжимать последние капли имени Бриллюэна. Тем более, надежность связи будет тем выше, чем пропорционально больше мощность передатчика относительно мощности шумов, которые могут неожиданно (Sic!) превысить свой базовый уровень.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...