nabbla (nabbla1) wrote,
nabbla
nabbla1

Categories:

Тестируем алг. захвата - перемножение матриц

Наконец-то запишем матрицу из прошлой части в секцию .data нашей программы:

;заранее посчитанная матрица для ближней дистанции
;МБД 8-6-7-3-5-4,  отражатели 1-2 не берём, они в другой плоскости
ShortRangeAffine:
SaMat00	Int16	0x10D8	;0,13158
SaMat01	Int16	0xAC5F	;-0,65334
SaMat02	Int16	0x13B5	;0,15396
SaMat10	Int16	0x1FA3	;0,24715
SaMat11	Int16	0x0E03	;0,10948
SaMat12	Int16	0x13B5	;0,15396
SaMat20	Int16	0x0DDD	;0,10832
SaMat21	Int16	0x459E	;0,54387
SaMat22	Int16	0x13B5	;0,15396
SaMat30	Int16	0xF223	;-0,10832
SaMat31	Int16	0x459E	;0,54387
SaMat32	Int16	0x13B5	;0,15396
SaMat40	Int16	0xE05D	;-0,24715
SaMat41	Int16	0x0E03	;0,10948
SaMat42	Int16	0x13B5	;0,15396
SaMat50	Int16	0xEF28	;-0,13158
SaMat51	Int16	0xAC5F	;-0,65334
SaMat52	Int16	0x13B5	;0,15396


Напомним, что всё содержимое этой секции превращается в файл инициализации памяти (Memory Initialization File) QuatCoreData.mif, который затем становится составной частью конфигурации ПЛИС. Как только ПЛИС конфигурируется - в памяти уже лежит не мусор, а ровно то, что мы хотели - ОЧЕНЬ УДОБНО. По сути, мне не нужны никакие загрузчики, которые бы переносили содержимое ПЗУ в ОЗУ и всё в этом духе - уже всё сделано :)

Вот теперь есть всё необходимое, чтобы проверить процедуру перемножения матриц, которую мы написали здесь, попутно и заменив адресацию "4j" на "3j", т.к она нужнее. Вот всё вместе и проверим.

Для начала - когда мишень стоит горизонтально, но с небольшим наклоном, тупо чтобы влезть в поле зрения при 0,5 метрах.

Пока что всё это умещается в 115 слов кода (230 байт), это алг. ближней дистанции вплоть до перемножения матриц. Хотя ещё забьём, дурное дело не хитрое.

Выполнение всего алгоритма (нахождение 2 наиболее отдалённых, сортировка "слева направо", поиск центральных точек, проверка Берегового, перемножение матриц) занимает 226 мкс в этом случае. Сразу посмотрим дамп памяти, и если там всё хорошо - можно в "осциллограмме" не копаться.

Результаты вычислений должны лежать с адреса 0x52, их я выделил синим:


Что расшифровывается в такое:


Выглядит многообещающе.


Как и следовало ожидать при небольшом крене, должны быть большие диагональные компоненты (так сказать, помноженные на cosα) и маленькие по бокам (помноженные на sinα), причём почти совпадающие по величине и с противоположными знаками.

Но большие диагональные компоненты отличаются на 21%, а именно по оси X масштаб указан меньше. Так и должно быть из-за наших "прямоугольных пикселей". А разница по частоте, 29,8 МГц (которые должны быть, чтобы пиксели были квадратные) / 25 МГц (что сейчас) = 1,192. Похоже на правду.

На всякий случай проверил вычисления в экселе, совпало почти что:


Небольшие расхождения - потому что здесь я брал элементы матрицы, записанные с 5 десятичными разрядами после запятой, а в программе использовались 16-битные значения, они отличаются немножко.


Отлично! Остальная возня с этой матрицей у нас уже реализована, надо только с масштабом под конец не ошибиться. Но это уже на следующей неделе. Пожалуй, пора ехать на дачу, там конь не валялся...
Tags: ПЛИС, математика, программки, работа, странные девайсы
Subscribe

  • Тестируем atan1 на QuatCore

    Пора уже перебираться на "железо" потихоньку. Решил начать с самого первого алгоритма, поскольку он уже был написан на ассемблере. В программу внёс…

  • Формулы приведения, что б их... (и atan на ТРЁХ умножениях)

    Формулу арктангенса на 4 умножениях ещё немножко оптимизировал с помощью алгоритма Ремеза: Ошибка уменьшилась с 4,9 до 4,65 угловой секунды, и…

  • Алгоритм Ремеза в экселе

    Вот и до него руки дошли, причина станет ясна в следующем посте. Изучать чужие библиотеки было лениво (в том же BOOSTе сам чёрт ногу сломит), писать…

  • atan на ЧЕТЫРЁХ умножениях

    Мишка такой человек — ему обязательно надо, чтоб от всего была польза. Когда у него бывают лишние деньги, он идёт в магазин и покупает какую-нибудь…

  • Ай да Пафнутий Львович!

    Решил ещё немного поковыряться со своим арктангенсом. Хотел применить алгоритм Ремеза, но начал с узлов Чебышёва. И для начала со своего "линейного…

  • atan(y/x) на двух умножениях!

    Чего-то никак меня не отпустит эта тема, всё кажется, что есть очень простой и эффективный метод, надо только его найти! Сейчас вот такое…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments