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 нравится? 5


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

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

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



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

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

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

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

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


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

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

 20.3 Автозапуск GSM на ATmega8 и Sim800L
 8.3 Удаленное управление исполнительными устройствами ...
 8.3 ИБП или UPS по взрослому
1

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


28.3 Всем доброго вечера. Вопрос касательно физики LR ...
28.3 Здравствуйте. Подскажите, я правильно понимаю, что ...
2
25.2 Как отличить танталовый конденсатор от ...
5