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

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


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

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



Есть у Atmel аппнот: "AVR336: ADPCM Decoder" (там и исходники на Си есть, но я хочу сам код написать на Ассемблере), но т.к. с английским дружу только со словарем, то понять как декодировать АДИКМ из этого апнота, для меня нереально.
Искал в интернете, но ничего конкретного по этому вопросу не нашел...
Смысл я понял такой, в EEPROM (МК или внешнюю) грузим кодированный в АДИКМ звук (можно в Sound Forge). Затем декодируем и с помощью ШИМ выводим аналог. Я вот только понять не могу, как ШИМ потом с помощью фильтра сделать "звуком". Ведь у ШИМ амплитуда одинакова, у "звука" разная, а ФНЧ обрезает только частоту...
И еще интересует весь процесс декодирования, от загрузки байта из EEPROM, до вывода на ШИМ.
Может, угостите хорошей ссылкой по этому вопросу, или книгу умную порекомендуете rolleyes.gif .
Спасибо.

Сообщение отредактировал Alt.F4 - Sep 30 2010, 12:30
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Alt.F4
сообщение Oct 24 2010, 20:42
Сообщение #2


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

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



zombi описал алгоритм декодирования АДИКМ, но у меня по такой схеме на выходе постоянно 0x8000.
Может кто-нибудь перепроверит данный алгоритм, т.к. пытаясь понять Си исходники декодеров в апннотах MicroChip мне показалось, что в конце необходимо проверять чтобы D был не более 32768 и не менее -32768, а index был в пределах 0-88, т.е. схема в цитате описана не до конца?
Спасибо.
Цитата
Обьявляем констатнты:
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
p.s. на выходе 8 битный ИКМ?

Сообщение отредактировал Alt.F4 - Oct 24 2010, 22:05
Go to the top of the page
 
+Quote Post
zombi
сообщение Oct 26 2010, 14:28
Сообщение #3


Гуру
******

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



Цитата(Alt.F4 @ Oct 24 2010, 23:42) *
zombi описал алгоритм декодирования АДИКМ, но у меня по такой схеме на выходе постоянно 0x8000.
Может кто-нибудь перепроверит данный алгоритм, т.к. пытаясь понять Си исходники декодеров в апннотах MicroChip мне показалось, что в конце необходимо проверять чтобы D был не более 32768 и не менее -32768, а index был в пределах 0-88, т.е. схема в цитате описана не до конца?
Спасибо.
p.s. на выходе 8 битный ИКМ?

Да. Проверять обязательно!
На выходе 16 бит.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Alt.F4   декодер ADPCM (АДИКМ) на AVR   Sep 30 2010, 12:28
- - Mike18   Цитата(Alt.F4 @ Sep 30 2010, 16:28) Есть ...   Sep 30 2010, 12:54
- - SasaVitebsk   Принцип ШИМ прост. Есть период ШИМ. Есть заполнени...   Sep 30 2010, 13:06
- - Alt.F4   Mike18, читал я AVR335 на русском. Там ответов на ...   Sep 30 2010, 13:07
|- - Mike18   Цитата(Alt.F4 @ Sep 30 2010, 17:07) Читал...   Sep 30 2010, 13:24
- - Alt.F4   ЦитатаТам после фильтра ещё усилитель нужно и дина...   Sep 30 2010, 13:38
|- - Mike18   Цитата(Alt.F4 @ Sep 30 2010, 17:38) ... В...   Sep 30 2010, 13:53
- - Alt.F4   Mike18, эту статью тоже читал. Про реализацию деко...   Sep 30 2010, 14:01
|- - Mike18   Цитата(Alt.F4 @ Sep 30 2010, 18:01) Mike1...   Sep 30 2010, 15:39
- - Alt.F4   Мне б на русском...   Sep 30 2010, 15:47
|- - Mike18   Цитата(Alt.F4 @ Sep 30 2010, 19:47) Мне б...   Oct 4 2010, 17:12
|- - Maik-vs   Цитата(Alt.F4 @ Sep 30 2010, 19:47) Мне б...   Oct 29 2010, 14:01
- - Alt.F4   Почему все исходники на Си? Ни одного не нашел на ...   Oct 1 2010, 08:21
- - Alt.F4   ЦитатаНа выходе 16 бит.А 8бит никак?   Oct 26 2010, 14:50


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 13:34
Рейтинг@Mail.ru


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