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

 
 
 
Closed TopicStart new topic
> декодер 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
zombi
сообщение Oct 1 2010, 12:20
Сообщение #2


Гуру
******

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



Вам надо поискать в сети ADPCM алгоритм.
Когда то занимался. Помню находил как минимум два, отличающихся только STEP SIZE.

P.S. Вот нарыл у себя один
Прикрепленные файлы
Прикрепленный файл  adpcm.pdf ( 17.96 килобайт ) Кол-во скачиваний: 84
 
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Oct 1 2010, 12:53
Сообщение #3


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

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



"I don't understand English, I don't understand C"
А в сети только английский, английский и все примеры на Си.
На русском и примеров на Ассемблере к сожалению нет.
Наверное придется закупать по-больше EEPROM и записывать все в ИКМ (wav).
Go to the top of the page
 
+Quote Post
МП41
сообщение Oct 1 2010, 14:20
Сообщение #4


4 синих кубика
****

Группа: Участник
Сообщений: 526
Регистрация: 19-09-08
Из: полупроводника, металла и стекла
Пользователь №: 40 326



Понимать Cи стоило бы научиться, в будущем это ещё пригодится.


--------------------
p-n-p-p-n-p-n-n-p-n-p структура однако очень эффективна
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Oct 1 2010, 19:14
Сообщение #5


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

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



там С транслируется в Асм почти один к одному, ничего сложного.
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Oct 2 2010, 08:01
Сообщение #6


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

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



Цитата
там С транслируется в Асм почти один к одному
это где?
Цитата
ничего сложного.
Может опишите в двух словах алгоритм: "закодированный байт разделить на Х, прибавить Y..."
Спасибо.
Go to the top of the page
 
+Quote Post
awtoap
сообщение Oct 2 2010, 08:53
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 25-04-07
Пользователь №: 27 301



Цитата
там С транслируется в Асм почти один к одному, ничего сложного.


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

Изучать языки верхнего уровня рано или поздно придется, если цените своё время....
Go to the top of the page
 
+Quote Post
zombi
сообщение Oct 2 2010, 10:50
Сообщение #8


Гуру
******

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



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

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

Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Oct 2 2010, 12:07
Сообщение #9


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

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



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


Гуру
******

Группа: Свой
Сообщений: 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
Alt.F4
сообщение Oct 4 2010, 15:46
Сообщение #11


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

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



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

Сообщение отредактировал Alt.F4 - Oct 4 2010, 17:23
Go to the top of the page
 
+Quote Post
zombi
сообщение Oct 4 2010, 17:44
Сообщение #12


Гуру
******

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



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

1.Да
2.D это амплитуда сигнала, его нуно на ЦАП подавать.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Oct 5 2010, 07:23
Сообщение #13


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Клонирование темы является нарушением правил.
Тему закрыл и перенёс.
Модератор.
Go to the top of the page
 
+Quote Post

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

 


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


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