9zip.ru - технологии для людей
9zip.ru Инструкции Декодер сжатого звука

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

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

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

Процедура не зависит от частоты нарезки и разрядности отсчетов. Я не мастер формализовать алгоритмы, но выглядит это примерно так:
Алгоритм помнит два значения:
- предыдущее значение сигнала A(n)
- текущий шаг D(n)

На вход поступают два бита:
- знак S
- величина M

Надо получить:
- следующее значение сигнала A(n+1)
- следующий шаг D(n+1)

Если не вдаваться в тонкости реализации, то процедура элементарная. Здесь для простоты описания введена переменная Delta.
1. Считаем дельту:

Если M==0:
Delta = D(n)
D(n+1) = D(n) / 2

Eсли M==1:
Delta = D(n) * 3
D(n+1) = D(n) * 2


2. Считаем сигнал:

Eсли S==0:
A(n+1) = A(n) + Delta

Если S==1:
A(n+1) = A(n) - Delta


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

Звук получается довольно шумный, но вполне разборчивый. Я пробовал играть коэффициентами или добавлять цифровые фильтры. Иногда удается получить лучший по качеству звук (особенно, когда известна частота нарезки и АЧХ сигнала) Но мне показалось, что вычислительные затраты растут неадекватно росту качества звучания. Кроме того, хотелось сохранить простоту и интуитивную понятность идеи. Впрочем можете поэкспериментировать сами.

Вся функция декодера написана на ассемблере для линковки с AVR-GCC проектом. Скорость ее работы зависит от входных данных, но худший случай - 28 тактов на выборку.


10 нравится? 6


01.02.2015 © 9zip.ru
Авторские права охраняет Роскомнадзор

Понравилась статья?
Коля говорит:
поделись с друзьями!

Хочешь почитать ещё про инструкции? Вот что наиболее популярно на этой неделе:
Лампы против транзисторов или предрассудки против качества и красоты?
Согласование усилителя с аккустической системой
Простой генератор звуковой частоты



Есть вопросы, комментарии? Напиши:

Имя
Комментарий
Длина текста:
число с картинки
Правила прочитал(а)
Как вставить картинку в свой комментарий?

Дальше в разделе Инструкции: Описание работы схемы центрифуги, Электродвигатель питается от сети переменного тока напряжением 220 В частотой 50 Гц. Под крышкой центрифуги установлен выключатель, блокирующий включение двигателя при открытой крышке. Установкой требуемой выдержки времени подготавливают цепи включения реле и нагревателя.

Главная 9zip.ru База знаний радиолюбителя Контакты
Девять кучек хлама:

Радиотехника, электроника и схемы своими руками Ремонт домашней электроники Виртуальный музей старых радиодеталей XX века Ламповый звук hi-end и ретро электроника Катушки Теслы Радиодетали и модули с Aliexpress Интернет и сети, компьютеры и программы Категория свободна Инструкции


Дайджест
радиосхем

Новые схемы интернета - в одном месте!

 15.11 Терморегулятор с двумя каналами на ATtiny13
 15.11 Часы на ESP32 и светодиодах WS2812b
 15.11 Акустическая система с открытым верхом

Задай вопрос радиолюбителям!


2.11 Есть проект, где к МК через транзистор подключен ...
1
28.10 Здравия Всем. Нужна помочь, чтоб после запуска ...
18.10 Ребята помогите сделать схему простенькую для ...
2