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

 
 
> Обращение матриц на ПЛИС
jojo
сообщение Feb 3 2006, 18:29
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 574
Регистрация: 9-10-04
Из: FPGA-city
Пользователь №: 827



Обращение матриц на ПЛИС

Тут надо комплексную матрицу 16x16 обратить (эрмитову). Формат исходных данных int32, результат - не хуже float, лучше - double. Есть ли готовые мегафункции, не обязательно нелицензионные?

Если кто-то делал похожее, интересно, сколько заняло ресурсов и какое быстродействие получилось.

В нынешней реализации обращения на DSP используются квадратный корень и деление (вещественные), сложение, вычитание и умножение (комплексные).

Хочу уменьшить нагрузку на DSP и разместить обращение матрицы в относитильно защищенной от взлома ПЛИС.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jojo
сообщение Feb 10 2006, 13:35
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 574
Регистрация: 9-10-04
Из: FPGA-city
Пользователь №: 827



#include <math.h>

Обращение выполняется за 4 этапа. С двумя последними мне все понятно, там "* + -" с плавающей точкой. И с регуляризацией понятно. Но во что обойдется реализация этапа 2 в ПЛИС. Как я понимаю, придется сделать значительный кусок АЛУ DSP, который делает sqrt и 1/x во флоате.


Вообще сколько стоит денег в Москве такое реализовать? Может, руководство согласится и вместо TS203 мы поставим ПЛИС и простенький DSP..

Но не люблю я эти Плисы. Тут есть много проектов, которые накрылись из-за того, что аффторы не справились из-за Плис.

A - массив 16x16 структур {float Re, float Im}.
d - число для регуляризации матрицы
N - 16, N2 - 32 (так автор алгоритма захотел)
S и K - временные массивы 16x16 структур {float Re, float Im}.

void inv(float *A, int N, int N2, float *S, float *K, float d)
{
int p,q,k,pr,pi,qr,qi,kr,ki;
float a,ar,ai;

//(Этап 0 приведен полностью) регуляризация
q=0;
for (p=0;p<N;p++)
{
A[p*N2+q]+=d;
q+=2;
}

//(Этап 1 приведен полностью) вычисление S
//p=1
a=A[0];
S[0]=sqrt(a);
S[1]=0.;
K[0]=1./S[0];
K[1]=0.;
//re и im
for (p=0;p<N2;p++)
{
S[p]=A[p]*K[0];
}

//p>1
pr=0;
pi=1;
for (p=1;p<N;p++)
{
pr+=2;
pi+=2;
a=A[p*N2+pr];
for (q=0;q<=p-1;q++)
{
a-=(S[q*N2+pr]*S[q*N2+pr]+S[q*N2+pi]*S[q*N2+pi]);
}


S[p*N2+pr]=(float)sqrt(a);
S[p*N2+pi]=0.;
K[p*N2+pr]=1./S[p*N2+pr];
K[p*N2+pi]=0.;


qr=pr;
qi=pi;
for (q=p+1;q<N;q++)
{
qr+=2;
qi+=2;
ar=A[p*N2+qr];
ai=A[p*N2+qi];
for (k=0;k<=p-1;k++)
{
ar-=(S[k*N2+pr]*S[k*N2+qr]+S[k*N2+pi]*S[k*N2+qi]);
ai-=(S[k*N2+pr]*S[k*N2+qi]-S[k*N2+pi]*S[k*N2+qr]);
}
S[p*N2+qr]=ar*K[p*N2+pr];
S[p*N2+qi]=ai*K[p*N2+pr];
}
} //(Этап 1 завершен)


//Этап 2 пропущен. Это перемножение матриц S и K
ar-=(S[p*N2+kr]*K[k*N2+qr]-S[p*N2+ki]*K[k*N2+qi]);
ai-=(S[p*N2+kr]*K[k*N2+qi]+S[p*N2+ki]*K[k*N2+qr]);
K[p*N2+qr]=ar*K[p*N2+pr];
K[p*N2+qi]=ai*K[p*N2+pr];

//Этап 3 пропущен. Это перемножение матриц K и транспонированной K
ar+=(K[p*N2+kr]*K[q*N2+kr]+K[p*N2+ki]*K[q*N2+ki]);
ai+=(K[p*N2+ki]*K[q*N2+kr]-K[p*N2+kr]*K[q*N2+ki]);
A[]=ar;
A[]=ai;
A[]=ar;
A[]=-ai;

return;
};
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- jojo   Обращение матриц на ПЛИС   Feb 3 2006, 18:29
- - cdg   ИМХО если не за 1 такт надо, то с ПЛИС и не стоит ...   Feb 7 2006, 08:58
- - jojo   Да, я все больше убеждаюсь, что ПЛИС "дороже ...   Feb 7 2006, 10:46
- - cdg   В пору аспирантской юности, помнится сталкивался с...   Feb 7 2006, 15:26
- - Harbour   На плис проект будет работать все равно быстрее че...   Feb 8 2006, 07:35
|- - des00   Цитата(Harbour @ Feb 8 2006, 02:35) На пл...   Feb 8 2006, 08:52
- - Harbour   Это правда если сравнивать современные DSP с доист...   Feb 9 2006, 09:34
|- - dxp   Цитата(Harbour @ Feb 9 2006, 15:34) Это п...   Feb 9 2006, 10:57
- - jojo   Думаю, по меньшей мере последние этапы обращения м...   Feb 9 2006, 11:17
- - Harbour   Цитата(dxp @ Feb 9 2006, 12:57) Цитата(Ha...   Feb 9 2006, 14:48
|- - dxp   Цитата(Harbour @ Feb 9 2006, 20:48) Ну-ну...   Feb 10 2006, 05:25
|- - des00   Цитата(dxp @ Feb 10 2006, 00:25) И если у...   Feb 10 2006, 06:07
- - des00   Ну в качестве примера, RLE кодирование большого ма...   Feb 9 2006, 15:33
- - Harbour   Как по мне так RLE параллелится, это сильно зависи...   Feb 9 2006, 18:45
- - Harbour   Цитата(dxp @ Feb 10 2006, 07:25) Цитата(H...   Feb 10 2006, 06:53
|- - dxp   Цитата(Harbour @ Feb 10 2006, 12:53) Ну-у...   Feb 10 2006, 07:18
|- - des00   Цитата(Harbour @ Feb 10 2006, 01:53) Как ...   Feb 10 2006, 08:09
- - Harbour   Статей про распараллеливание рле полно в инете, во...   Feb 10 2006, 10:50
|- - des00   ЦитатаСтатей про распараллеливание рле полно в ине...   Feb 10 2006, 11:49
- - Harbour   Цитата(des00 @ Feb 10 2006, 13:49) Тут сл...   Feb 10 2006, 12:56
- - Harbour   Прикинул на пальцах Ваши матрицы, вот чего вышло :...   Feb 11 2006, 12:46
- - psL   Код-----------------------------------------------...   Feb 11 2006, 13:36
- - jojo   В процессоре этап 1 выполняется за 14.3 мкс (7128 ...   Feb 11 2006, 17:09
- - jojo   Вытащил из процессора таблицу начальных приближени...   Feb 13 2006, 10:53


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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 16:57
Рейтинг@Mail.ru


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