среда, 29 января 2014 г.

Сжатие динамического диапазона звука

Недавно приобрел платку STM32F0308-disco, решил начать изучение ARM-процессоров с простого. Как положено помигал светодиодом и стал изучать встроенные в мк устройства такие как каналы DMA, таймеры и АЦП.

В микроконтроллере установленном на плату присутствует АЦП разрядностью 12 бит. Для хранения звука использовать все 12 бит неоптимально, так как передаточная функция линейна. Стоит использовать сжатие динамического диапазона, есть такие форматы как u-Law и A-Law используемые в телефонии.

Я искал различные варианты сжатия, легко реализуемые на микроконтроллерах и наткнулся на данную статью.

По примеру написал свои пару функций применимых к микроконтроллеру. Они преобразуют 12 бит в 8, используя формат похожий на плавающую точку: 1 бит знаковый, 3 - смещение(показатель степени) и 4 значение(мантисса).