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

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

Милливольт, спасибо за поддержание темы и беседу!

Было интересно скачать и послушать образцы звуков.

 

У меня любительский подход к делу, да и знаний в теоретическом плане маловато(в теории обработки информации), поэтому оцениваю качество распознавания синтезированной вокодером речи чисто субъективно по ощущениям. По моему опыту - вокодеры очень не любят когда речь произносится оператором нечленораздельно , очень быстро без пауз и выделения слов. При достаточном удалении также могут проглатываться отдельные слоги в словах.

 

Я пытаюсь сейчас найти свой "критерий Шеннона", компромисс своего рода между разборчивостью речи и дальностью связи, которая зависит от чувствительности приемника. Более низкий битрейт позволяет либо с-узить полосу пропускания приемника, либо увеличить спред-фактор, либо навернуть бОльший коэфициент избыточности в FEC (в RFM96 она аппаратная 5/4 ... 8/4). Забыл написать, что в ней корелляционный приемник, могущий принимать сигнал на десятки децибелл меньше шума.

 

Моя цель: сделать сверхдальние приемо-передатчики для служебной связи. Вопросы шифрования имеют второстепенное значение.

 

В вашем же проекте как я понял, основной упор идёт на протаскивание зашифрованного канала через сети GSM с устойчивостью к атакам взлома и де-анонимизации всех мастей.

Тоже интересное направление и восстребованное как и хорошими так и плохими дядьками :) - крайне рисковано.

 

Нашёл тему про проброс канала здесь на форуме (старая) "криптофон", в гугле ищется.

Также видел репозиторий от ув. человека GeGel, он почему-то использует MELP1200 с Fixed Point - у меня эта версия на STM32 легла не очень хорошо: требуется повышение частоты в 3-4 раза или оптимизация на асме.

Взял MELP2400 c Floating Point - она на STM32 пашет реактивно с FPU.

 

Всё-же если можно, было бы интересно ваш кодек протестить на предмет сжатия/качества звука : у вас есть скомпилированный бинарник под Win32, который мог бы сжимать/разжимать?

 

На vrtp в тему добавил новый пост.

 

Сделал несколько звуковых проб своими модами вокодеров: test1, test2. Приложил ниже.

 

Codec2 на 300 bps проигрывает по качеству - звучание с MELP 489 bps лучше. ИМХО.

 

test1.zip

test2.zip

 

 

Ещё вопрос, встречал тут тему про кодек MELP(e), насколько ясно из темы с доступностью MELP 2400/1200 проблем особо нет, но кому-нибудь удалось достать MELPe 600 bps именно версию от Federal Standard ? Я понимаю, что можно самому доработать, но всё-ж было бы интересно взглянуть на реализацию "от первых рук".

 

Поиск в Гугле по именам констант/переменных закончился только упоминанием о 1200 и 2400.

 

Ниже выложил кодеки Codec2 300 bps с препроцессором шума и MELP 489 bps под Win32 для экспериментов. На вход требует моно файл 8 кГц 16 бит без wav-хедера (0.raw).

 

melp_489bps.zip

 

codec2_300bps.zip

 

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

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


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

[

 

Моя цель: сделать сверхдальние приемо-передатчики для служебной связи. Вопросы шифрования имеют второстепенное значение.

 

Это дело почтенное...

 

 

В вашем же проекте как я понял, основной упор идёт на протаскивание зашифрованного канала через сети GSM с устойчивостью к атакам взлома и де-анонимизации всех мастей.

Тоже интересное направление и восстребованное как и хорошими так и плохими дядьками :) - крайне рисковано.

 

Никак нет. Нехай они все околеют, и террорюги, и борцы с ними.

 

Спасибо за иллюстрации - их всегда не хватает. В качестве ответа прилагаю первые звуки моего ребеночка с универсальным алфавитом. http://exfile.ru/483070 (эквалайзер пока не подключен)

Скорость около 800 без сжатия выходного цифрового потока - со сжатием получается около 300.

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

Отличие разработанного мной кодека заключается в том, что кодируется не речь, а ее короткие фрагменты. При экспериментальной работе (в предположении, что общепринятая модель генерации голоса неверна) выяснилось: в речевом сигнале есть участки повышенной стационарности. Т.е. если рассматривать процесс как нестационарный (в широком(!) смысле), то при коротких реализациях можно найти особые точки, в окрестностях которых стационарность резко возрастает, и процесс можно считать эргодическим(NB!). Экспериментально установлено, что эти точки встречаются в речевом сигнале с плавающим периодом от 5 до 20 мсек, и чаще всего (но не обязательно) их период совпадает с периодом "пульса" речи. Энергетические спектры этих реализаций несут всю информацию об эргодической составляющей (математиков прошу не кривиться) процесса. А оставшаяся стохастическая компонента нам и не нужна.

Для радиосвязи получается замечательная ситуация: один раз в 5...20 мсек мы передаем номер спектра (всего-лишь!). Все остальное время можем молчать. А для демодулятора лучше будет, если мы передаем этот номер непрерывно в виде какой-то, допустим, синусоидальной посылки. Т.е. есть особая точка - передаем частоты 1 и 5 к примеру. Пока не пришла следующая точка, тогда передаем следующие частоты 2 и 11 к примеру. При такой передаче свертка этой синусоиды с ее копией, а еще проще - спектроанализатор скользящего окна на выходе демодулятора, дадут нам хорошее приближение к теоретическому оптимуму по энергии. А уж если нам известны частоты или их комбинации, которые могут встречаться, и которые не могут - то простейший корректирующий код будет несложно организовать хоть в реальном времени.

Т.е. все как-то "удобно упаковывается" для радиосвязи. И неудобно для криптографии, но тут я дилетант. Впрочем, сейчас каждый программист, не говоря о системщиках, знает криптографию вдоль и поперек, и имеет собственный метод, причем гарантированной стойкости.

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

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


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

Ваш уровень знаний в математике(в терминологии) выше, чем мой. Я не совсем хорошо владею терминологией и некоторые моменты в посте не понял.

Предположу в своих терминах, что в вашем вокодере используется "таблично-волновой" метод синтеза речи: в режиме обучения человеческая речь нарезается на кусочки и составляется алфавит ортогональных нетривиальных речевых фрагментов фиксированной длительности (с алгоритмом отсева похожих повторов). А уже непосредственно при кодировании/декодировании идёт распознавание речевого фрагмента - сравнение его с элементами из алфавита и выбор наиболее похожего.

Классические схемы вокодеров больше "частотно-синтезные", чем "таблично-волновые". Как с музыкальными синтезаторами: FM-синтезатор и WaveTable-синтезаторы. Что-то похожее между принципами есть...

 

Тогда на базе такого вокодера можно сделать "именные телефоны", которые закреплены за одним человеком или группой людей(с функцией переключения банков речи).

 

Без кодовой книги - с универсальным алфавитом: я ничего не смог понять, когда прослушал последнюю запись.

 

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


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

Тогда на базе такого вокодера можно сделать "именные телефоны", которые закреплены за одним человеком или группой людей(с функцией переключения банков речи).

 

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

Так что, все в растрепанных планах, увы.

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

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


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

Тоесть конечного результата/продукта не будет?

А если отбросить коммерцию, доступно ли повторение вашей конструкции радиолюбителями?

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


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

В вашем же проекте как я понял, основной упор идёт на протаскивание зашифрованного канала через сети GSM с устойчивостью к атакам взлома и де-анонимизации всех мастей.

Тоже интересное направление и восстребованное как и хорошими так и плохими дядьками :) - крайне рисковано.

Это как раз таки в моем проекте. Ув. Милливольт придерживается противоположного мнения.

 

1. Научно-техническое творчество - абсолютная ценность, тут и обсуждать нечего.

2. Такие вещи полезны для общества как естественный противовес против тотального перевеса в игре одного субъекта по отношению к другим субъектам.

Золотые слова. Добавлю лишь, что ни я, ни кто другой не вправе делить дядек на плохих и хороших.

 

Mister_DSP, ваша тема весьма созвучна с работами David Rowe, у них сильная комьюнити, стоит присоединиться.

Да, давно я не заходил на vrtp - интересный монолог у Вас. И что примечательно, я тоже сейчас насилую дешевые китайские LoRa-модули :)

 

Справедливое (по Вашей ссылке) замечание о неуниверсальности решения с предварительной отправкой "алфавита" в цифровой форме. Пытаюсь обойти эту трудность - сделать алфавит универсальным. Пришлось отказаться от иллюстраций во временной области - звук, увы, в этом случае становится "вокодерным".

Многие отказываются от голосового общения в пользу того же Torchat только из-за возможности идентификации, и не просто так в Торфоне появился вокодер, убирающий из параметров избыточную индивидуальную информацию, облегчающую идентификацию. Поэтому у меня есть огромный интерес к разработке кодека, сохраняющего разборчивость, но максимально обезличивающего голос. И это намного более востребовано, чем кажется, спросите, например, на том же SilkRoad :)

 

И вопрос по поводу перфоманса MELPE: хватил ли STM32F446 (180MHz/225DMIPS) для одновременной работы кодера/декодера?

Как вариант, сейчас использую $13 NanoPi:

 

http://www.friendlyarm.com/index.php?route...;product_id=109

 

(OpenHW/OpenSW, Debian) с $5 MicroSD, $3 USB WiFi, $4 2.4' TFT+TouchPad и $7 PowerBank.

 

Прекрасное портативное решение для OnionPhone и телефонии через Tor, но слишком прожорливое для PairPhone. Хотелось бы подобрать более адекватное железо для этой цели.

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


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

Многие отказываются от голосового общения в пользу того же Torchat только из-за возможности идентификации, и не просто так в Торфоне появился вокодер, убирающий из параметров избыточную индивидуальную информацию, облегчающую идентификацию. Поэтому у меня есть огромный интерес к разработке кодека, сохраняющего разборчивость, но максимально обезличивающего голос. И это намного более востребовано, чем кажется, спросите, например, на том же SilkRoad :)

Как неожиданно... У нас после долгих обсуждений, прослушиваний и даже ругани было сформулировано требование: не хуже MP3! А то нежные юноши и еще более нежные девы с гневом отвергнут неполноценную поделку из недоразвитой области Ойкумены. Я выметал икру и весь богатейший словарный запас, но не признать правоту коммерсантов не могу.

Этого, понятное дело, достичь невозможно. Но кое-что улучшить удалось: http://exfile.ru/483111

А тут еще оказалось, что и компрессор недопустим. Ни в каком виде. В общем, - абсолютно гробовая тема.

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

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


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

Да, увы, к сожалению сегодняшнее молодое поколение "большого пальца" требует качества MP3(кстати оно тоже разное бывает и далеко не всегда самое разборчивое при 8 кГц :) ).

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

Такой кодек может быть очень сильно восстребован когда нужно получить высокий бюджет линка без требований к качеству речи.

Могу посоветовать поискать других заказчиков - пожарная / МЧС / альпинисты / геологи..... радолюбители "со специфическим уклоном" также будут рады.

 

Но кое-что улучшить удалось: http://exfile.ru/483111

ИМХО отлично вышло! Разборчивасть приемлема для служебной связи. Главное понятно что сказано.

 

При прослушивании Ваших записей периодически слышу эффект "стука каблуком сапога Петра Великого об паркетный пол :) " Что весьма придаёт оттенок Петровской России, что забавно - как будто задиктовывают царские указы! :) Но это так, эмоции...

 

Что касается Дэвида Рува и присоединения к его коммунити.

Дэвид работает над Codec2 и насколько понял разборчивость вполне устраивает. Хотя Codec2 на 700 бит/с звучит хуже чем MELPe 600. ИМХО.

На счет радиотракта - у него классическая NFM, с LoRa режимами и подшумовым приемом замечен мной не был.

 

А на счёт обезличивания голоса, ИМХО можно вокодировать с постоянным Pitch-ем. Вот, приложил варианты голосовых проб с постоянным дефолтовским Pitch-eм. ЕМНИП =50.0 в MELP. В итоге имеем "голос робота", хозяина которого установить невозможно? (или уже и это возможно?)

 

robot_melp_489bps.rar

 

Как вариант, сейчас использую $13 NanoPi:

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

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

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


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

При прослушивании Ваших записей периодически слышу эффект "стука каблуком сапога Петра Великого об паркетный пол :) " Что весьма придаёт оттенок Петровской России, что забавно - как будто задиктовывают царские указы! :) Но это так, эмоции...

Огромная, просто гигантских размеров благодарность! Ваше точное наблюдение здорово помогло.

Я не обращал на это внимание, а следовало бы! Причину и следствия доложу попозже.

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


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

Добавлю: в результате проблема с универсальным алфавитом успешно решилась. Он обещает быть не более 10КБ, что для современных ЗУ вполне приемлемо. Прилагаю иллюстрацию, в которой два голоса, причем в алфавите пока нет кластеров, полученных из женских голосов(NB!).

Чуть не сдох за две ночи.

http://exfile.ru/483127

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


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

Какой битрейт у последнего образца?

По распознаваемости хорошо, даже пол голоса можно отличать.

 

Кодовую книгу можно сделать больше, современные контроллеры имеют около 1 Мбайта флеша, поэтому не проблема.

Главное чтобы неявно РАМу не жрал (как это с Codec2) - а то понапишут malloc-и - и потом сиди думай сколько памяти на кучу(heap) отводить :)

 

У моего мода MELP489 тоже есть один призвук: слегка пукает когда тишина, но это вокодер так акустический шум с микрофона вокодирует.

Проблема решается простым Noise-Killer-ом:

#define NOISE 50

 

u8 NoiseKiller(s16* buf)

{

u32 i=FRAME;

s32 a=0;

while(i--)if(*buf<0)a-=*buf++;

else a+=*buf++;

if((a/FRAME)<NOISE)

{

memset((void*)(buf-FRAME),0,FRAME<<1);

return 1;

}

return 0;

}

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


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

Какой битрейт у последнего образца?

 

Пока динамический. Т.е. каждые 5...20 мсек идет один байт номера кластера. Несжатые данные для приведенной иллюстрации уложились в 850 бит/сек (женский голос требует несколько большего количества данных вследствие более высокой частоты следования посылок). Если убирать периоды молчания и хотя бы в простейшем виде сжимать выходную цифровую последовательность (а она хорошо сжимается даже классическим Хаффменом) то легко выйти на 300. Дальше надо извращаться, но пока не до того, бардак в программе дикий.

 

Кстати, по поводу возможности неидентификации голоса абонента: в предлагаемом методе все получается легко и просто. http://exfile.ru/483128

Можно сравнить с предыдущей иллюстрацией. И это не работа УСЧ, восстановить исходные частоты формант и посылок обратным преобразованием не удастся.

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

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


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

ИМХО VBR для радиосвязи не очень, потому что на лету не есть камильфо дёргать регистр бодрейта передатчика/приемника. Ну и синхронизировать как-то надо. Поэтому берется максимальный (пиковый битрейт).

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


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

ИМХО VBR для радиосвязи не очень, потому что на лету не есть камильфо дёргать регистр бодрейта передатчика/приемника. Ну и синхронизировать как-то надо. Поэтому берется максимальный (пиковый битрейт).

 

В каноническом варианте - именно так. А мы попробуем адаптировать модулятор к особенностям кодера. Ведь речь идет о полудуплексе. Заодно и синхронизацию можно будет похерить. Если на входе спектроанализатор скользящего окна... Но то такэ... Сначала надо для демонстрации серьезности заявки передать цифровой сигнал поверх GSM.

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


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

Ниже выложил пробу звука на 978 бит/с - это тоже что и MELP 1200, только без битов FEC.

Средний вариант между 1956 bps и 489 bps.

 

proba_978_bps.rar

 

Как видно, уже такого битрейта хватает на предельное распознавание речи в развлекательных радиопередачах.

 

Ну ещё 4 пробы звука с микрофона: оргигнал, melp 978, и пара обезличенных проб: робот с высоким и низким значением Pitch:

 

melp_978bps_examples.rar

 

:)

 

Ну и сам вокодер для достоверности в экспериментах:

MELP_978BPS.rar

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

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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