Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Forward DCT 2D тестовые вектора
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
AlexanderX
Добрый день, глубоко уважаемый ALL!

Написали ядро 2D DCT. Вроде работает, вроде выдает результаты, математически соответствующие тем операциям, которые были заложены в алгоритм. Промежуточные результаты вычислений были проверены на корректность и было подтверждено их соответствие используемому алгоритму. Однако есть проблема следующего характера - необходимо проверить блок на соответствие тому, что понимает JPEG под DCT. На данный момент найти необходимые тестовые вектора не удалось.

В Xilinx Application Note 610 есть упоминание о тестовых векторах в книге "Image and Video Compression Standards," second edition, by Vasudev Bhaskaran and Konstantinos Konstantinides, ISBN 0-7923-9952-8. Поиски в Гуглях закончились ничем. Из нескольких разрозненных источников были получены несколько исходных матриц и соответствующих им DCT-2D, однако они как правило противоречат друг другу и не совпадают с нашими результатами.

Есть ли у кого информация откуда взять нормальные тестовые вектора, используемые в коде JPEG компрессора?
des00
Цитата(AlexanderX @ Nov 21 2005, 11:04) *
Добрый день, глубоко уважаемый ALL!

Написали ядро 2D DCT. Вроде работает, вроде выдает результаты, математически соответствующие тем операциям, которые были заложены в алгоритм. Промежуточные результаты вычислений были проверены на корректность и было подтверждено их соответствие используемому алгоритму. Однако есть проблема следующего характера - необходимо проверить блок на соответствие тому, что понимает JPEG под DCT. На данный момент найти необходимые тестовые вектора не удалось.

В Xilinx Application Note 610 есть упоминание о тестовых векторах в книге "Image and Video Compression Standards," second edition, by Vasudev Bhaskaran and Konstantinos Konstantinides, ISBN 0-7923-9952-8. Поиски в Гуглях закончились ничем. Из нескольких разрозненных источников были получены несколько исходных матриц и соответствующих им DCT-2D, однако они как правило противоречат друг другу и не совпадают с нашими результатами.

Есть ли у кого информация откуда взять нормальные тестовые вектора, используемые в коде JPEG компрессора?


не вижу ничего сложного
собираем испыт. стенд (TestBench) типа черного ящика.
Берем реф.код JPEG, вырезаеем функцию ДКТ, подаеем на вход вырезнной функции и вашей реализации ДКТ динаковый набор РАНДОМИЗИРОВАННЫХ чисел, в кол-ве 2**48-1 или около того и сравниваем выхлоп

П,С, а параметры вашей реализации ДКТ можете огласить ?
AlexanderX
Цитата(des00 @ Nov 22 2005, 07:26) *
не вижу ничего сложного
собираем испыт. стенд (TestBench) типа черного ящика.
Берем реф.код JPEG, вырезаеем функцию ДКТ, подаеем на вход вырезнной функции и вашей реализации ДКТ динаковый набор РАНДОМИЗИРОВАННЫХ чисел, в кол-ве 2**48-1 или около того и сравниваем выхлоп

П,С, а параметры вашей реализации ДКТ можете огласить ?


Самое важное в людях - это чувство юмора smile.gif <2**48-1 или около> входных значений будут симулироваться даже очень шустрым симулятором думаю пару месяцев чистого времени wink.gif или около того.

А что имеется ввиду под параметрами реализации ДКТ? Если разрядности шин данных и коеффициентов - то они параметризуемые, если быстродействие - то ограничивается только быстродействием умножителей, если по ресурсам, то около 400 триггеров, около 400 логических функций, 8 аппаратных умножителей и один блок памяти для транспонирования промежуточных результатов.

Пытались сделать реализацию a-la Theora DCT, с двумя умножителями, двумя сумматорами-вычитателями и кучей мультиплексоров, о которой как-то говорил Андрей Филлипов. По результатам синтеза оказалось что она экономит только аппаратные умножители, но просто по-хамски maniac.gif относится ко всему остальному. A-la Theora FDCT-1D заняла около 400 логических функций и те же 200 триггеров. Умножая результаты на 2 для FDCT-2D получилась бы совсем неприглядная картина cranky.gif

Таким образом, по крайней мере из нашего опыта, оптимизационные схемы вычисления 2D-DCT хороши для процессоров или DSP, но мало применимы для FPGA.
des00
Цитата(AlexanderX @ Nov 22 2005, 04:08) *
Самое важное в людях - это чувство юмора smile.gif <2**48-1 или около> входных значений будут симулироваться даже очень шустрым симулятором думаю пару месяцев чистого времени wink.gif или около того.

А что имеется ввиду под параметрами реализации ДКТ? Если разрядности шин данных и коеффициентов - то они параметризуемые, если быстродействие - то ограничивается только быстродействием умножителей, если по ресурсам, то около 400 триггеров, около 400 логических функций, 8 аппаратных умножителей и один блок памяти для транспонирования промежуточных результатов.


Ну почему smile.gif чпросто я имел в виду что взять нужно хорошо рандомизированный поток и проверить это дело хотя бы на одном кадре (просто снять дампы на входе и выходе из ДКТ в реф. коде (с МПЕГ я поступаю аналогично)).
А насчет параметров меня интересовала в превую очередь конвеерная схема или не конвеерная, кол-во тактов и латентность по тактам на одну операцию ДКТ, разрядность входной/выходной шины (в словах).
но если у вас 8 умножителей то подразумеваю что вы "режете" матрицу по строкам/столбцам и потом работаете с ней.
Начет транспонирования на памяти хммм спорно спорно, тут т архитектуры зависит, иногда бывает лучше сделать на регистрах smile.gif
AlexanderX
Цитата(des00 @ Nov 22 2005, 11:25) *
А насчет параметров меня интересовала в превую очередь конвеерная схема или не конвеерная, кол-во тактов и латентность по тактам на одну операцию ДКТ, разрядность входной/выходной шины (в словах). но если у вас 8 умножителей то подразумеваю что вы "режете" матрицу по строкам/столбцам и потом работаете с ней. Начет транспонирования на памяти хммм спорно спорно, тут т архитектуры зависит, иногда бывает лучше сделать на регистрах smile.gif


Угу, все так и выглядит. В первом блоке 4 умножителя, столько же во втором. Pipeline составляет 4 такта на каждый коеффициент, суммарно, на два блока с учетом транспонирования - около 80 тактов. Данные на вход могут подаваться без пауз. Рабочая частота для Cyclone II 8 speed grade составляет 160MHz и ограничивается умножителями. Код синтезируется и под Xilinx и под Altera.

Транспонирование на регистрах - забавно, каких-нибудь 1400 триггеров, плюс некоторое количество мультиплексоров и логика управления всем этим хозяйством - не, мы лучше как-нибудь с памятью поработаем smile.gif
des00
Цитата(AlexanderX @ Nov 22 2005, 05:51) *
Угу, все так и выглядит. В первом блоке 4 умножителя, столько же во втором. Pipeline составляет 4 такта на каждый коеффициент, суммарно, на два блока с учетом транспонирования - около 80 тактов. Данные на вход могут подаваться без пауз. Рабочая частота для Cyclone II 8 speed grade составляет 160MHz и ограничивается умножителями. Код синтезируется и под Xilinx и под Altera.

Транспонирование на регистрах - забавно, каких-нибудь 1400 триггеров, плюс некоторое количество мультиплексоров и логика управления всем этим хозяйством - не, мы лучше как-нибудь с памятью поработаем smile.gif

Хммм странно странно, что то в тактах много получаеться smile.gif
насчет регистров забыл что у вас не 4*4 а 8*8 матрицы, если мне память не изменяет.

Я делал на ксалинксе ДКТ, 4*4 транспонировать матрицу на регистрах получилось быстрее и меньше по совокупному объему smile.gif (2 перемножителя + транспонирование).
правда дкт то было для h.264
считало это все с задеркой 8 тактов, расчитанно что матрица прилетает построчно

Кстати можно обойтись и без транспонирования вобще, да и над структурой матрицы немного репу почесать smile.gif)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.