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

 
 
 
Reply to this topicStart new topic
> Forward DCT 2D тестовые вектора, Как протестировать FDCT-2D по точности и корректности результатов
AlexanderX
сообщение Nov 21 2005, 16:04
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 21-07-05
Из: Киев
Пользователь №: 6 977



Добрый день, глубоко уважаемый 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 компрессора?
Go to the top of the page
 
+Quote Post
des00
сообщение Nov 22 2005, 05:26
Сообщение #2


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(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 или около того и сравниваем выхлоп

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


--------------------
Go to the top of the page
 
+Quote Post
AlexanderX
сообщение Nov 22 2005, 09:08
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 21-07-05
Из: Киев
Пользователь №: 6 977



Цитата(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.
Go to the top of the page
 
+Quote Post
des00
сообщение Nov 22 2005, 09:25
Сообщение #4


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



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

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


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


--------------------
Go to the top of the page
 
+Quote Post
AlexanderX
сообщение Nov 22 2005, 10:51
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 21-07-05
Из: Киев
Пользователь №: 6 977



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


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

Транспонирование на регистрах - забавно, каких-нибудь 1400 триггеров, плюс некоторое количество мультиплексоров и логика управления всем этим хозяйством - не, мы лучше как-нибудь с памятью поработаем smile.gif
Go to the top of the page
 
+Quote Post
des00
сообщение Nov 22 2005, 11:15
Сообщение #6


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(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)


--------------------
Go to the top of the page
 
+Quote Post

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

 


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


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