реклама на сайте
подробности

 
 
> декодер ADPCM (АДИКМ) на AVR, теория
Alt.F4
сообщение Oct 1 2010, 09:47
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Есть у Atmel аппнот: "AVR336: ADPCM Decoder" (там и исходники на Си есть, но Си в упор не понимаю, поэтому хочу сам код написать на Ассемблере), но т.к. с английским дружу только со словарем, то понять как декодировать АДИКМ из этого апнота, для меня нереально.
Искал в интернете, но ничего конкретного по этому вопросу не нашел...
В общем понял, что полезная информация умещается в 4бита.
Эти 4 бита необходимо умножить на текущую величину шага и прибавить предыдущий отсчет, тем самым получая очередной отсчет.
Вопрос: как узнать текущую величину шага и что делать дальше с полученным отсчетом?
Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alt.F4
сообщение Oct 2 2010, 12:07
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Цитата
Если будет время то после выходных попробую вспомнить и разжевать
Буду очень благодарен!!! cheers.gif
Go to the top of the page
 
+Quote Post
zombi
сообщение Oct 4 2010, 12:02
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(Alt.F4 @ Oct 2 2010, 15:07) *
Буду очень благодарен!!! cheers.gif


Обьявляем констатнты:
indextable : массив 16 чисел (-1,-1,-1,-1,2,4,6,8,-1,-1,-1,-1,2,4,6,8)

stepsizeTable: массив 89 чисел
(7, 8, 9, 10, 11, 12, 13, 14, 16, 17,
19, 21, 23, 25, 28, 31, 34, 37, 41, 45,
50, 55, 60, 66, 73, 80, 88, 97, 107, 118,
130, 143, 157, 173, 190, 209, 230, 253, 279, 307,
337, 371, 408, 449, 494, 544, 598, 658, 724, 796,
876, 963, 1060, 1166, 1282, 1411, 1552,1707, 1878, 2066,
2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358,
5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899,
15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767)


Обьявляем переменные
D : результат 16 бит
Index : смещение в stepsizeTable
A и S : переменные 16 бит


Инициализируем переменные:
D=8000H
Index=0


M1:

C=входные 4 бита ADPCM

S=stepsizeTable[Index]
A=0

Если 2-й бит в C =1 то A=A+S
Сдвигаем S на один бит вправо
Если 1-й бит в C =1 то A=A+S
Сдвигаем S на один бит вправо
Если 0-й бит в C =1 то A=A+S
Сдвигаем S на один бит вправо
A=A+S

Если 3-й бит в С=1 то D=D-A иначе D=D+A
Index=Index+Indextable[C]

Сохраняем D
Идем на М1

Go to the top of the page
 
+Quote Post



Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 20:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01386 секунд с 7
ELECTRONIX ©2004-2016