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
Авторские права охраняет Роскомнадзор

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

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



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

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

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

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

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


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

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

 29.9 Сканер шины I2C на Discovery
 21.9 Bosch M1.5.4 изменение температуры включения ...
 21.9 Простая программа создания матричных символов.

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


20.1 С помощью выходов К561ИЕ8 можно зажечь поочередно, ...
372
28.9 У телевизора на одной из двух светодиодных лент ...
1
24.9 Здравствуйте, получил такую интересную работу , ...
3