Эксперименты с передачей голоса через ESP32 и кодек 2 на скоростях 2400 и 1200 бит/с для радиоканалов.
Ask about this video. Answers come from its transcript only — with the timestamp, so you can check them.
Generated from the transcript and can be wrong — check the timestamp.
Key Takeaways
- Для передачи речи по радиоканалу нужна компрессия звука с помощью кодека для снижения битрейта.
- Кодек 2 — эффективное опенсорсное решение для низкоскоростной передачи речи на ESP32.
- Предварительная обработка звука (фильтрация и АРУ) значительно улучшает качество передачи.
- Кодек 2 работает только с 8 кГц частотой дискретизации, что требует соответствующей подготовки сигнала.
- Даже при очень низких скоростях передачи (2400 и 1200 бит/с) речь остаётся разборчивой.
What the video covers
- Автор продолжает эксперименты по цифровой передаче голоса через модули LoRa с использованием ESP32.
- Рассматривается ввод звука через микрофон с АЦП и интерфейсом I2S, передача и воспроизведение на другом контроллере.
- Обсуждается важность обработки звука: фильтрация верхних частот и автоматическая регулировка усиления (АРУ).
- Поясняется необходимость использования кодеков для сжатия звукового потока, чтобы снизить скорость передачи.
- Кодек 2 — опенсорсный кодек, позволяющий передавать речь на очень низких скоростях от 700 бит/с до 32 кбит/с.
- Показан пример работы кодека 2 на скорости 2400 бит/с с хорошей разборчивостью речи, несмотря на цифровые искажения.
- Объясняется, что кодек 2 работает только с частотой дискретизации 8 кГц, поэтому важна предварительная обработка звука.
- Демонстрируется ухудшение качества при отсутствии фильтрации и компрессии перед подачей сигнала на кодек.
- Планируется дальнейшее тестирование кодека 2 на скорости 1200 бит/с.
- Автор делится техническими деталями интеграции кодека 2 в Arduino IDE и ESP32.
Full Transcript — Download SRT & Markdown
Speaker A
Всем привет. Я продолжаю свои эксперименты по подготовке к тому, чтобы сделать передачу голоса в цифровом виде через модули Лора по радиоканалу. Сначала я провёл серию экспериментов собственно с самими модулями, а теперь провожу серию экспериментов с обработкой и передачей звука. В предыдущем видео из этой серии про звук я вам показал, как я ввожу звук с помощью микрофона с аналого-цифровым преобразователем и с интерфейсом I2S в память контроллера ESP, передаю всё это дело на другой контроллер с помощью пакетов, и в другом контроллере опять всё это дело вывожу через интерфейс I2S во внешний цифро-аналоговый преобразователь с интерфейсом I2S и с усилителем низкой частоты, к которому подключён громкоговоритель, и через разветвитель ещё и устройство записи, через которое вы слышите звук. В прошлом видео я показал вам эксперименты, в которых я подобрал хорошие какие-то цифро-аналоговый преобразователь, аналого-цифровый преобразователь и небольшую обработку, фильтрацию звука, а именно фильтр верхних частот, который срезает ненужные низы, бубню, и небольшую компрессию, сжатие динамического диапазона с помощью АРУ — автоматической регулировки усиления. И вот этот сигнал, уже так сказать подготовленный, оцифрованный, можно теперь подавать на кодек. Но прежде чем это делать, пару слов о том, что такое кодек, для чего он вообще нужен. Вообще в принципе кодек не очень-то нужен: оцифровали звук, обработали, можно его передавать, но в таком виде передаваемая информация занимает очень много места. Например, во всех моих четырёх прошлых экспериментах, в прошлом видео скорость передачи звука была 128 кбит в секунду, то есть 16 бит оцифровки и 8 кГц соответственно частота дискретизации. Получается 16 на 8, 128 кбит. Вот такая была скорость. В принципе для интернет-соединения эта скорость очень небольшая, но для того, чтобы передавать речевую информацию по радиоканалу, это просто гигантская скорость, неоправданно большая. Поэтому нужно использовать кодек. Кодек будет производить сжатие этого самого потока информации, и скорость получится гораздо меньшая. С разными кодеками мы с вами встречаемся в жизни постоянно. Например, самый популярный кодек для сжатия записанных звуков, музыки — это MP3. Конечно, он предназначен для сжатия высококачественных записей, я имею в виду не передачи речи, а для записи музыки, и он нам здесь не подойдёт, потому что даже если этот кодек MP3 использовать с битрейтом, например, 16 кбит в секунду, то качество звука будет не очень хорошее, а скорость всё-таки 16 кбит — это всё равно очень много. Хотелось бы использовать какие-то другие кодеки. В радиосвязи используются кодеки: в DMR одни, в P25 другие, в сотовой связи третьи, свои какие-то. Но все эти кодеки коммерческие, они платные. Для того чтобы их использовать в своих проектах, нужно за это платить. Мало того, за каждую копию — платить. В общем-то, конечно, я делаю этот проект для себя в первую очередь, и если бы я использовал какие-то платные кодеки просто так в своём домашнем проекте, никто бы об этом не узнал, и никто бы, я думаю, не был против этого, но всё равно хочется использовать какие-то опенсорсные кодеки, тем более сейчас есть уже несколько лет прекрасный опенсорсный кодек, так и называется — кодек 2. Он, мало того что опенсорс, он позволяет кодировать речь в очень узкие каналы, так скажем, в очень маленькие скорости потоков. Максимальная скорость потока — 32 килобит, а также он работает со скоростью 2,4, 1,6, 1,2 и даже 700 бит в секунду. Это очень-очень маленькие скорости, ничтожно. Если бы мне 20 лет назад рассказали, что будет такой кодек, который позволяет речь передавать нормально, разборчиво со скоростью 1200, вот я бы очень удивился, а сейчас это норма. И этот кодек может работать ещё и в микроконтроллерах, в таких маленьких, а не просто там на компьютере. В общем, продолжение экспериментов было: четыре эксперимента со звуком, теперь будут соответственно следующие — пятый, шестой и так далее. Напомню просто для начала, что оцифрованный голос с частотой оцифровки 16 кГц, дальше пересчитан в 8 кГц и обработанный фильтром верхних частот и автоматической регулировкой усиления, то есть компрессором, передан с одного модуля на другой, и здесь соответственно опять пересчитан в 16 кГц для улучшения качества звука именно работы цифро-аналогового преобразователя с интерфейсом I2S звучит следующим образом. Я сейчас буду говорить в микрофон вот в этот вот. 1, 2, 3, 4, 5. И меня так прекрасно слышно из динамика. Я могу динамик отключить, а устройство записи останется подключённым к выходу вот этого цифро-аналогового преобразователя. И вот с таким качеством вы меня слышите без кодеков. Это пока 16 бит и 8 кГц передача по каналу, но оцифровка 16 кГц. Теперь давайте сравним всё это дело с работой уже с кодеком. Библиотека этого самого кодека, кодек 2, есть в интернете под платформу ESP32, но версия портирования устаревшая, поэтому мне пришлось в моём средстве разработки в Arduino IDE понизить версию ядра для ESP32 на какую-то предпоследнюю, и тогда библиотека кодека кодек 2 стала нормально у меня компилироваться, собираться. Ну и в общем-то удалось провести все эти эксперименты. Итак, слушаем, как меня будет слышно с кодеком под названием кодек 2 со скоростью 2,4 килобита, то есть 2400 бит в секунду. Вот так вот меня слышно с этим кодеком. В принципе разборчивость стопроцентная. Я отключил динамик, чтобы эха не было. Разборчивость стопроцентная, все слова отчётливо слышно, даже в принципе можно узнать голос. Конечно, цифровые искажения очень сильно заметны, но ведь 2,4 кбит всего. Это можно практически по обычным там УКВ-каналам, где частотные модуляции используются в радиостанциях, обеспечить такую скорость 2,4 кбит, а тут через неё речь передаётся. По-моему, прекрасный результат для кодека, и это ещё не предел. Этот кодек может работать на более низких скоростях, мы сейчас с вами обязательно попробуем его на более низких скоростях. Но прежде чем это сделать, давайте я вам покажу, как бы звучал этот кодек, если бы я не сделал всё то, что я сделал в предыдущем видео, то есть в экспериментах с обработкой звука. Если не делать оцифровку в 16 кГц, а делать её сразу в 8. На всякий случай поясню, что кодек этот работает только с оцифровкой 8 кГц, то есть на него нельзя подавать на вход буфер с цифровкой 16 кГц, только 8. А я делаю оцифровку в микрофоне с аналого-цифровым преобразователем, интерфейсом I2S с частотой 16 кГц. Вот если делать сразу 8 и не делать фильтрацию с помощью фильтра верхних частот, не срезать низы, не делать компрессию, то есть сжатие динамического диапазона, а просто всё, что вышло ЦАП с частотой дискретизации 8 кГц, сразу подавать на вход кодека, и то же самое в приёмной стороне. У меня тут два модуля: передающий, приёмной и в приёмной стороне то же самое. Всё, что вышло с выхода кодека, это у нас буфер с частотой дискретизации, буфер, где записан оцифрованный звук после кодека с частотой дискретизации 8 кГц. Если сразу брать этот буфер и передавать его в цифро-аналоговый преобразователь с интерфейсом I2S, и после этого послушать, так сказать, звук, то звучать будет по-другому, то есть тот же самый кодек с теми же самыми параметрами, тот же самый 2,4, но нет вот этой всей обработки, подготовки, о которой я вам говорил в предыдущем видео. Вот давайте послушаем, как это будет звучать. Сырое хуже, самый, которым подаётся на вход теми же самыми параметрами, просто сигнал не подготовленный. Поэтому вот такое вот ужасное качество получается. Поэтому делайте, так сказать, выводы, насколько важна обработка звука после того, как он был оцифрован, перед тем как его подавать на вход кодека. Это очень важно. Это очень нужный, так сказать, момент в речевых каких-то цифровых системах связи. Ну да ладно, послушали, как всё это звучит в таком ужасном варианте, возвращаемся снова к обработанному звуку, подаваемому на вход кодека. Ну давайте попробуем, как этот кодек будет работать на скорости 1200 бит, то есть 1,2 кбит, и в этом у нас в потоке будет закодирована речь. Заливаю новую, так сказать, прошивку в каждый из этих контроллеров, соответственно сюда приёмную часть, сюда передающую прошивки для всех этих экспериментов. Ну вернее исходный код всех этих экспериментов, пары компле.
Speaker A
этой серии про звук я вам показал как я ввожу звук с помощью микрофона с аналогом цифровым преобразователем и с интерфейсом itos в память контроллера ESP передаю ВС это дело на другой контроллер с помощью пакетов и в другом контроллере
Speaker A
опять ВС это дело вывожу через интерфейс it в внешне цифро аналоговый преобразователь с интерфейсом it и с усилителем низкой частоты к котором подключен громкоговоритель и через разветвитель ещё и устройство записи через которое вы слышите звук в прошлом видео я показал вам эксперимента в
Speaker A
которых я подобрал хорошие какието с цифро аналоговым преобразователем аналого цифровым преобразователем и небольшую обработку фильтрацию звука а именно фильтр верхних частот который срезает ненужные низы бубню и небольшую компрессию сжатия динамического диапазона с помощью Ару автоматической регулировки усиления и вот этот сигнал
Speaker A
уже так сказать подготовленный оцифрованный можно теперь подавать на кодек Но прежде чем это делать пару слов о том что такое кодек для чего он вообще нужен вообще в принципе кок не очень-то нужен оцифровали звук обработали можно его передавать но в таком виде
Speaker A
передаваемая информация занимает очень много места например во всех моих четырёх прошлых экспериментах в прошлом видео скорость передачи звука была 128 кбит в секунду То есть 16 бит оцифровки и 8 кгц соответственно частота дискретизации получается 16 на на 8.18 кбит Вот такая была скорость в
Speaker A
принципе для интернет-соединения эта скорость очень Небольшая но для для того чтобы передавать информацию речевую по радиоканалу это просто гигантская скорость неоправданно большая Поэтому нужно использовать кодек кодек будет производить сжатие этого самого потока информации и скорость получится гораздо меньшая с разными кодеками мы с вами
Speaker A
встречаемся в жизни постоянно например самый популярный кодек для сжатия записанных звуков музыки это MP3 конечно он предназначен для сжатия высококачественных записей Я имею в виду не передачи реч для записи музыки и он нам здесь не подойдет потому что даже если этот кодек M3 использовать
Speaker A
с битрейтом например 16 кибит в секунду То качество звука будет не очень хороший а скорость всё-таки 16 кибит - это в равно очень много хотелось бы использовать какие-то другие кодеки в радиосвязи используются кодеки В dmr одни в25 другие в сотовой связи третьи
Speaker A
свои какие-то Но все эти кодеки они коммерческие они платные для того чтобы их использовать в своих проектах нужно за это платить мало того за каждую копию ко платить в общем-то конечно я делаю Этот проект для себя в первую очередь и
Speaker A
если бы я использовал какие-то платные кодеки просто так в своём домашнем проекте никто бы об этом не узнал и никто бы я думаю не был против этого но всё равно хочется использовать какие-то опенсорс нее кодеки тем более сейчас
Speaker A
есть Уже несколько лет прекрасный опенсорс най кодек так и называется кодек 2 он мало того что опенсорс он позволяет кодировать речь в очень узкие каналы так скажем в очень маленькие скорости потоков максимальная скорость потока 32 килобит а также он работает со
Speaker A
скоростью 2,4 1,6 Киби 1,2 и даже 700 бит в секунду Это очень-очень маленькие скорости ничтожно если бы мне 20 лет назад рассказали что будет такой кодек который позволяет речь передавать нормальную разборчиво со скоростью 12.00 вот я бы очень удивился а сейчас это
Speaker A
норма И он такой кодек может работать ещё и В микроконтроллерах в таких маленьких а не просто там на компьютере в общем продолжение экспериментов было четыре эксперимента со звуком теперь будут соответственно следующие пятый шестой и так далее напомню просто для начала что
Speaker A
оцифрованный голос с частотой оцифровки 16 кибит дальше пересчитаны 8 кибит и обработанный фильтром верхних частот и автоматической регулировкой усиления то есть компрессором переданный с одного модуля на другой и здесь соответственно опять пересчитаны в 16 кгц для улучшения качества звука именно
Speaker A
работы цифро аналогового преобразователя с интерфейсом it звучит следующим образом я сейчас буду говорить в микрофон вот в этот вот 1 2 3 4 5 и меня так прекрасно слышно из динамика я могу динамик отключить а устройство записи останется подключенное к выходу вот
Speaker A
этого цифро аналого преобразователя и вот с таким качеством Вы меня слышите без кодеков это пока 16 бит и 8 кгц передача по каналу но оцифровка 16 кгц теперь Давайте сравним всё это дело с работой уже с кодеком библиотека этого
Speaker A
самого кодека кодек 2 есть в интернет порро под платформу esp32 нони версия портирование версии а устаревший поэтому мне пришлось в моём средстве разработке в Arduino IDE понизить версию ядра для esp32 на какую-то пред предпоследнюю и тогда библиотека кодека кодек 2 стало
Speaker A
нормально у меня компилировать собираться Ну и в общем-то удалось провести все эти эксперименты Итак слушаем как меня будет слышно с кодеком под названием кодек 2 со скоростью 2,4 килобиты то есть 2400 бит в секунду вот так вот меня слышно с этим
Speaker A
кодеком в принципе разборчивость стопроцентная я отключил динамик чтобы эха не было разборчивость стопроцентная все слова отчётливо слышно даже в принципе можно узнать голос конечно цифровые искажения очень сильно заметны Но ведь 2,4 Киби всего это можно практически по обычным там УКВ каналам
Speaker A
где частотные модуляции используется в радиостанциях обеспечит такую скорость 2,4 кби а тут через неё речь передаётся по-моему прекрасный результат для кодека и это ещё не предел этот кодек может работать на более низких скоростях мы сейчас с вами обязательно попробуем его на более
Speaker A
низких скоростях Но прежде чем это сделать Давайте я вам покажу как бы звучал этот кодек если бы я не сделал всё то что я сделал в предыдущем видео то есть в экспериментах С обработкой звука если не делать оцифровку в 16 гц а
Speaker A
делать её сразу в во на всякий случай поясню что кодек этот работает только с оцифровки 8 кгц то есть на него нельзя подавать на вход буфер с цифров кой 16 кгц только 8 а я делаю оцифровку в микрофоне с аналого цифровым
Speaker A
преобразователем интерфейсом it с частотой 16 кгц вот если делать сразу 8 и не делать фильтрацию с помощью фильтра высоких частот не срезать низы не делать компрессию то есть сжатие динамического диапазона а просто всё что вышло ЦП с частотой дискретизации 8 кгц сразу
Speaker A
подавать на вход кодека и то же самое в приёмной стороне у меня тут два модуля передающие приёмной и в приёмной стране то же самое всё что вышло с выхода кодека это у нас буфер с частотой дискретизации буфер где записано записан
Speaker A
оцифрованный звук после кодека с частотой дискретизации 8 кгц если сразу Брать этот буфер и передавать его в цифро аналоговый преобразователя с интерфейсом i2s И после этого послушать так сказать звук то звучать будет подругому то есть тотже самый кодекс с
Speaker A
теми же самыми параметрами тотже самый 24 но нет вот этой всей обработки подготовки о которой я вам говорил в предыдущем видео Вот давайте послушаем Как это будет звучать сыго хуже самы которым подаётся на вход теми же самым м
Speaker A
параметром просто сигнал не подготовленный Поэтому вот такое вот ужасное качество получается Поэтому делайте так сказать выводы что насколько важна обработка звука после того как он был оцифрован перед тем как его подавать на вход кодека это очень важно Это очень
Speaker A
нужный так скажем момент в речевых каких-то цифровых системах связи Ну да ладно послушали как всё это звучит в таком ужасном варианте возвращаемся снова к обработанном звуку подаваемого на вход кодека Ну Давайте попробуем как этот кодок будет работать на скорости
Speaker A
1.200 бит то есть 1,2 ки Бита и в этом У нас в потоке будет закодирована речь Заливаю новую так сказать прошивку В каждый из этих контроллеров соответственно сюда приёмную часть сюда передающую прошивки для всех этих экспериментов Ну вернее исходный кот
Speaker A
всех этих экспериментов пары комплекты файлов для приёмного модуль е32 и для передающего все они есть в архиве для всех этих экспериментов по ссылочки в описании к видео 1 2 3 4 5 проверка связи на скорости 12 отключу динамик чтобы не
Speaker A
было Итак скорость 1,2 Киби 1200 бит в секунду к 2 бит потом пересчёт в 8 кгц соответственно с фильтрацией с подготовкой С обработкой небольшой И после этого кодек 2 и вот так вот всё это звучит вот такая вот разборчивость
Speaker A
на скорости 1.200 БТ по-моему это офигенно Очень неплохо работает этот кодекс на таких низких скоростях ещё у неё есть скорость более низкая 700 бот Я думаю что она мне не понадобится и есть скорость ещё 3.600 по-моему самая большая для этого кодека в общем в своих
Speaker A
экспериментах с передачей звука в цифровом виде через модули Лора я буду использовать одну из этих скоростей или 1.00 или может быть 100600 или 2400 Ну может быть 3600 не знаю какой-то из этих скоростей я и буду использовать как
Speaker A
видите речь при этом передаётся Очень неплохо всё вполне разборчиво всё читается особенно если сначала сделать небольшую вот такую подгото звука оцифрованного на этом пока всё мои эксперименты с обработкой передачей звука через кодек 2 интерфейс it на этом пока закончен напомню что всё я это
Speaker A
делаю для того чтобы сделать некое подобие цифровых радиостанций то есть радиостанции которые бы передавали голос в оцифрованного виде кодированным с помощью кодек 2 и передаваемым в эфире в виде цифровых пакетов с помощью модулей лора и вот чтобы всё это сделать я
Speaker A
провёл сейчас такие эксперименты по поводу передачи звука ссылка на архив с исходными текстами программ которые были в этом эксперименте использованы есть в описании к этому видео Там же есть ссылочки на страница AliExpress где я купил модули itos аналого цифровой цифр
Speaker A
аналоговые преобразователи и модули esp32 всё это просто купил на AliExpress и соответственно ссылки на эти странички есть в описании к видео спасибо что смотрели это видео как всегда я вам говорю Используйте радиосвязь занимайтесь техническим творчеством конструированием что-нибудь подобное
Speaker A
конструируется или совсем не подобное А может быть аналоговую даже ламповую технику Ну в общем Главное чтобы всё это было вам интересно Главное чтобы всё это было чем-то новым чем-то для вас таким важным в жизни как радиосвязь например для меня Ну и конечно смотрите мои видео
Speaker A
подписывайтесь на канал которые есть на разных площадках если у кого-то на YouTube Мои видео сейчас не очень хорошо просматриваются то они есть на Яндекс Zen и даже на rut Ну и есть группа ВКонтакте Telegram канал и страница с
Speaker A
дополнительными материалами на сайте бусти и в ещё одном отдельном Telegram канале Всем пока H
Topics:ESP32передача звукакодек 2цифровая связьLoRaI2Sрадиоканалсжатие звукаавтоматическая регулировка усиленияфильтрация звука











