Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Где достать алгоритмы для DCT
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Pechkin
Решил попробовать описать дискретное косинусное преобразование своими ручками. Как я понял существует несколько алгоритмов, но для в реализации в железе наиболее подходит описанный вот в этой статье C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics, Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991.
Однако саму статью найти не смог. Может есть у кого описание этой реализации преобразования?
Andrey Filippov
Цитата(Pechkin @ Apr 11 2005, 12:11)
Решил попробовать описать дискретное косинусное преобразование своими ручками. Как я понял существует несколько алгоритмов, но для в реализации в железе наиболее подходит описанный вот в этой статье C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT  Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics,  Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991.
Однако саму статью найти не смог. Может есть у кого описание этой реализации преобразования?
*

А вам какое именно и для какой цели? Подробное описание алгоритмов 8-ми точечного (судя по "11 Multiplications" вам нужно именно такое) прямого и обратного DCT есть, например, в этом документе http://www.theora.org/doc/Theora_I_spec.pdf
Если вас интересует практическая реализация описанных там алгоритмов в FPGA и ваше применение совместимо с лицензией GNU/GPL, то вы можете загрузить код на Verilog-е (для Xilinx Spartan 3) здесь
Pechkin
Цитата(Andrey Filippov @ Apr 11 2005, 21:37)
А вам какое именно и для какой цели? Подробное описание алгоритмов 8-ми точечного (судя по "11 Multiplications" вам нужно именно такое) прямого и обратного DCT есть, например, в этом документе http://www.theora.org/doc/Theora_I_spec.pdf
Если вас интересует практическая реализация описанных там алгоритмов в FPGA и ваше применение совместимо с лицензией GNU/GPL, то вы можете загрузить код на Verilog-е (для Xilinx Spartan 3) здесь
*

Да меня интересует как раз 8 ми точечный алгоритм с целью получения практических навыков работы с Verilog. Спасибо за ссылку. Сейчас посмотрю
irum4
Чтобы не изобретать велосипед я пользовался DCT-корочкой из IP-Core от Xilinx
Pechkin
Цитата(irum4 @ Apr 12 2005, 12:41)
Чтобы не изобретать велосипед я пользовался DCT-корочкой из IP-Core от Xilinx
*

Задача не получить результат, а получить опыт при работе с Верилогом
Rok
Цитата(Pechkin @ Apr 11 2005, 21:11)
Решил попробовать описать дискретное косинусное преобразование своими ручками. Как я понял существует несколько алгоритмов, но для в реализации в железе наиболее подходит описанный вот в этой статье C. Loeffler, A. Ligtenberg and G. Moschytz, "Practical Fast 1-D DCT  Algorithms with 11 Multiplications", Proc. Int'l. Conf. on Acoustics,  Speech, and Signal Processing 1989 (ICASSP '89), pp. 988-991.
Однако саму статью найти не смог. Может есть у кого описание этой реализации преобразования?
*

А зачем использовать АЖ целых 11 умножителей? Лучше 8.
Ставим параллельно 8 МАСов и получаем ДКТ. Просто как грабли smile.gif
Pechkin
Цитата(Rok @ Apr 12 2005, 15:55)
А зачем использовать АЖ целых 11 умножителей? Лучше 8.
Ставим параллельно 8 МАСов и получаем ДКТ. Просто как грабли smile.gif
*

Объясните темному и неграмотному как это сделать. Ну там схемку и алгоритмик накидайте. Пожалуста
Andrey Filippov
Цитата(Rok @ Apr 12 2005, 06:55)
А зачем использовать АЖ целых 11 умножителей? Лучше 8.
Ставим параллельно 8 МАСов и получаем ДКТ. Просто как грабли smile.gif
*

Вообще-то умножители - дорогой ресурс, лучше их экономить. В той реализации, ссылку на которую я привел, правда, пиксельная частота вдвое меньше тактовой (62,5 МГц и 125 МГц, соответственно, на Spartan 3), но используется не 8, а всего один умножитель на 8-точечный DCT (два - на двумерный). В комментариях приведены требуемые ресурсы.
Rok
Цитата(Pechkin @ Apr 12 2005, 16:39)
Цитата(Rok @ Apr 12 2005, 15:55)
А зачем использовать АЖ целых 11 умножителей? Лучше 8.
Ставим параллельно 8 МАСов и получаем ДКТ. Просто как грабли smile.gif
*

Объясните темному и неграмотному как это сделать. Ну там схемку и алгоритмик накидайте. Пожалуста
*


MAC - Multiply and Accumulate, т.е. умножитель с аккумулятором. Вам нужно получить 8-точечное ДКП, зн., необходимо 8 МАСов на каждую точку. Данные приходят последовательно, зн. через 8 тактов вы получите ДКП. Но...
Вам уже ответили, что умножители дорогой ресурс. И поэтому систему нужно строить оптимально. Т.е. смотреть на тактовую частоту системы и частоту входных пикселов. И если у вас МАС работает на частоте 40 Мгц, а входные пикселы с частотой 5 МГц, то вообще можно использовать только 1 МАС.
Т.е. все крутиться вокруг МГц.
Andrey Filippov
Цитата(Rok @ Apr 13 2005, 01:32)
Цитата(Pechkin @ Apr 12 2005, 16:39)
Цитата(Rok @ Apr 12 2005, 15:55)
А зачем использовать АЖ целых 11 умножителей? Лучше 8.
Ставим параллельно 8 МАСов и получаем ДКТ. Просто как грабли smile.gif
*

Объясните темному и неграмотному как это сделать. Ну там схемку и алгоритмик накидайте. Пожалуста
*


MAC - Multiply and Accumulate, т.е. умножитель с аккумулятором. Вам нужно получить 8-точечное ДКП, зн., необходимо 8 МАСов на каждую точку. Данные приходят последовательно, зн. через 8 тактов вы получите ДКП. Но...
Вам уже ответили, что умножители дорогой ресурс. И поэтому систему нужно строить оптимально. Т.е. смотреть на тактовую частоту системы и частоту входных пикселов. И если у вас МАС работает на частоте 40 Мгц, а входные пикселы с частотой 5 МГц, то вообще можно использовать только 1 МАС.
Т.е. все крутиться вокруг МГц.
*


Зачем же вы людей смущаете про 8 умножителей (или замедление в 8 раз)? Я же чуть выше привел пример реализацмм, где 1 умножитель обеспечивает частоту входных/выходеых пикселей всего в два раза ниже тактовой, а не в восемь, как вы написали - пиксели 62,5МГц, тактовая - 125МГц
Если в указанной папке найти нужные файлы сложно, вот прямые линки на код:
прямое 8-ми точечное DCT:
http://cvs.sourceforge.net/viewcvs.py/elph...1.4&view=markup
обратное 8-ми точечное DCT:
http://cvs.sourceforge.net/viewcvs.py/elph...d.v?view=markup


Короткое пояснение:
Если вам нужно 11 умножений, а пиксели приходят на 1/2 частоты, то 8 входных пикселей занимают 16 тактов, что больше, чем 11. Так что при правильной раскладке по тактам один умножитель справится.
Rok
Цитата(Andrey Filippov @ Apr 13 2005, 17:59)
Зачем же вы людей смущаете про 8 умножителей (или замедление в 8 раз)? Я же чуть выше привел пример реализацмм, где 1 умножитель обеспечивает частоту входных/выходеых пикселей всего в два раза ниже тактовой, а не в восемь, как вы написали - пиксели 62,5МГц, тактовая - 125МГц
Если в указанной папке найти нужные файлы сложно, вот прямые линки на код:
прямое 8-ми точечное DCT:
http://cvs.sourceforge.net/viewcvs.py/elph...1.4&view=markup
обратное 8-ми точечное DCT:
http://cvs.sourceforge.net/viewcvs.py/elph...d.v?view=markup

Короткое пояснение:
Если вам нужно 11 умножений, а пиксели приходят на 1/2 частоты, то 8 входных пикселей занимают 16 тактов, что больше, чем 11. Так что при правильной раскладке по тактам один умножитель справится.
*

Спасибо за уточнение. Действительно это так, но только я так понимаю первый отсчет ДКП появится не через 8 тактов?
Все таки ваш подход более правильный, умножители действительно нужно беречь. Особенно если их не 8, а 1. Хорошая экономия ресурсов. А то что результат будет позже - это уже не так важно.
Еще раз спасибо за хорошую мысль. a14.gif
Pechkin
спасибо за консультацию, буду разбираться
Andrey Filippov
Цитата(Pechkin @ Apr 14 2005, 07:47)
спасибо за консультацию, буду разбираться
*

Еще могут помочь мои "черновики", где я разбирался с алгоритмами и раскладывал операции по регистрам и тактам - веселые такие цветные пасьянсы :-)
Внутри архива - файл в формате Open Office
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.