Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: декодер ADPCM (АДИКМ) на AVR
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Alt.F4
Есть у Atmel аппнот: "AVR336: ADPCM Decoder" (там и исходники на Си есть, но Си в упор не понимаю, поэтому хочу сам код написать на Ассемблере), но т.к. с английским дружу только со словарем, то понять как декодировать АДИКМ из этого апнота, для меня нереально.
Искал в интернете, но ничего конкретного по этому вопросу не нашел...
В общем понял, что полезная информация умещается в 4бита.
Эти 4 бита необходимо умножить на текущую величину шага и прибавить предыдущий отсчет, тем самым получая очередной отсчет.
Вопрос: как узнать текущую величину шага и что делать дальше с полученным отсчетом?
Спасибо.
zombi
Вам надо поискать в сети ADPCM алгоритм.
Когда то занимался. Помню находил как минимум два, отличающихся только STEP SIZE.

P.S. Вот нарыл у себя один
Alt.F4
"I don't understand English, I don't understand C"
А в сети только английский, английский и все примеры на Си.
На русском и примеров на Ассемблере к сожалению нет.
Наверное придется закупать по-больше EEPROM и записывать все в ИКМ (wav).
МП41
Понимать Cи стоило бы научиться, в будущем это ещё пригодится.
ukpyr
там С транслируется в Асм почти один к одному, ничего сложного.
Alt.F4
Цитата
там С транслируется в Асм почти один к одному
это где?
Цитата
ничего сложного.
Может опишите в двух словах алгоритм: "закодированный байт разделить на Х, прибавить Y..."
Спасибо.
awtoap
Цитата
там С транслируется в Асм почти один к одному, ничего сложного.


Там до почти, как до Киева )))

Изучать языки верхнего уровня рано или поздно придется, если цените своё время....
zombi
Цитата(Alt.F4 @ Oct 2 2010, 11:01) *
Может опишите в двух словах алгоритм: "закодированный байт разделить на Х, прибавить Y..."
Спасибо.

Нет там ни делить ни умножать ничего ненадо. Только прибавлять или вычитать.
Операции с текущим значением ЦАП на основаниее 4-х бит использую таблицу шагов.
Если будет время то после выходных попробую вспомнить и разжевать biggrin.gif

Alt.F4
Цитата
Если будет время то после выходных попробую вспомнить и разжевать
Буду очень благодарен!!! cheers.gif
zombi
Цитата(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

Alt.F4
zombi, вот это класс!!! Спасибо. a14.gif
Правда возникло несколько вопросов:
1) В одном закодированном байте, выходит по два закодированных 4бита ADPCM?
2) D можно пускать на ШИМ? Это выходит, что ADPCM в 4 раза меньше PCM, я думал в 2 раза.
Спасибо.
zombi
Цитата(Alt.F4 @ Oct 4 2010, 18:46) *
zombi, вот это класс!!! Спасибо. a14.gif
Правда возникло несколько вопросов:
1) В одном закодированном байте, выходит по два закодированных 4бита ADPCM?
2) D можно пускать на ШИМ? Это выходит, что ADPCM в 4 раза меньше PCM, я думал в 2 раза.
Спасибо.

1.Да
2.D это амплитуда сигнала, его нуно на ЦАП подавать.
IgorKossak
Клонирование темы является нарушением правил.
Тему закрыл и перенёс.
Модератор.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.