AR=ABS AX0;
IF NEG AR=AY0, DM(I2,M0)=L0;
Pr_i : DM(I1,M0)=AR;
CALL fft;
RTS;
.ENDMOD;
======================================================
Модуль синтеза коэффициентов весового фильтра.
Время выполнения: 36 + 2×(NÓÌÍÎÆÅÍÈß)+(NÒÐÀÍÑÏ)+(NÃÀÓÑÑÀ)
.MODULE Synth_Philtr;
.CONST N_filtr=186,N_otkl=278;
.CONST N_mp=5{51708},N_umn1=5{34596};
.CONST N_umn2=186;
.VAR/DM/RAM mp[N_mp],otkl[N_otkl];
.VAR/DM/RAM filtr[N_filtr],mp_t[N_mp];
.GLOBAL mp,otkl,filtr;
.GLOBAL mp_t;
.EXTERNAL TRANSPON,GAUSS,SPMM;
.VAR/DM alfa;
.ENTRY sint;
sint : L0=0;
L1=%mp;
L2=%mp;
L3=0;
L4=0;
L5=0;
L6=0;
L7=0;
I7=^alfa;
M1=1;
M2=186;
M4=1;
M5=0;
I1=^mp;
I2=^mp_t+N_mp;
CALL TRANSPON;
I6=I1;
CALL SPMM;{ В DM(I1) ХРАНИТСЯ РЕЗУЛЬТАТ}
CNTR=185;
AR=0;
AX0=DM(I1,M1), AY0=PM(I7,M5);
DO m_1 UNTIL CE; {СЛОЖЕНИЕ ДИАГОНАЛЬНЫХ}
MODIFY(I1,M2); {ЭЛЕМЕНТОВ С ALFA}
AR=AX0+AY0,AX0=DM(I1,M1),AY0=PM(I7,M5);
m_1: DM(I4,M4)=AR;
L6=N_otkl;
I6=^otkl;
{В ЭТО ВРЕМЯ I2=^mp_t;}
CALL SPMM;
I3=I1;
I5=^filtr+N_filtr;
CALL GAUSS;
RTS;
. ENDMOD;
======================================================
Подпрограмма транспонирования матриц размером k‑строк×m‑столбцов (в памяти они сохранены по строкам).
Входные данные: a - матрица размера k×m,
k ‑ число строк,
m - число столбцов.
Выходные данные: a_t - транспонированная матрица размера m×k.
Время выполнения: 36×m×k тактов.
.Module TRANSPON;
.ENTRY trans;
.CONST l=11;
.EXTERNAL a, a_t;
trans:
I1=^a;
I2=^a_t;
I3=0;
M1=l;
M2=1;
AX0=I1;
AY1=M1;
AR=AX0+AY1;
M3=AR; {ЗДЕСЬ ЗАПИСЫВАЕТСЯ ЧИСЛО}
MODIFY(I3,M2); {ИНКРЕМЕНТ АДРЕСА а ,i=i+1}
AX0=I3;
m_2: MX0=DM(I1,M1); {СЧИТЫВАНИЕ ЭЛЕМЕНТА ai}
AY0=^a_t; {УКАЗАТЕЛЬ НА ЭЛЕМЕНТ}
AR=AX0+AY0; {МАТРИЦЫ a_t}
I2=AR;
DM(I2,M1)=MX0; {ЗАПИСЬ а_t <--- a}
AX1=I2;
AY0=M3; {ЕСЛИ СЧИТАЛИ СТРОКУ ,}
AF=AX1-AY0; {ТО УСТАНАВЛИВАЕМ УКАЗАТЕЛЬ a_t}
IF EQ JUMP m_2; {НА НОВЫЙ ЭЛЕМЕНТ}
AF=AX0-AY1; {ТЕПЕРЬ НА НОВЫЙ СТОЛБЕЦ}
IF LE JUMP trans;
RTS;
.ENDMOD;
======================================================
Подпрограмма решения алгебраических уравнений методом Гаусса
Входные данные: А - матрица коэффициентов при переменных, размера [m*m],
В - вектор свободных членов.
Выходные данные: X ‑ вектор решения.
Время выполнения: N » 2×m3/3 тактов.
.MODULE GAUSS;
.ENTRY met_gaus;
.EXTERNAL a,b,x;
.CONST m=186;
met_gaus : I0=0;
I1=0;
I2=0;
I3=^b;
I4=^a;
I5=^x+m;
I6=0;
I7=m;
M0=0;
M1=m;
M2=1;
M3=-1;
M4=m+1;
M5=1;
M6=0;
M7=-1;
CNTR=M1;
DO m_3 UNTIL CE;
CNTR=I7;
DO m_1 UNTIL CE;
AY1=DM(I1,M1);
AX0=DM(I1,M0);
DIVS AY1,AX0;
AR=-AY0;
I0=I1;
I2=I4;
I6=I3;
MODIFY(I6,M5);
MY0=AX0;
AY0=DM(I2,M2);
I5=I7;
MODIFY(I5,M7);
CNTR=I5;
DO m_2 UNTIL CE;
MR=AR*MY0(SS),MY0=DM(I6,M6);
AY1=AR;
AR=MR0+AY0,AY0=DM(I2,M2);
DM(I1,M2)=AR;
m_2: AR=AY1;
MY0=DM(I6,M6);
MR=AR*MY0(SS),AY0=DM(I3,M0);
AR=MR0+AY0;
DM(I6,M6)=AR;
m_1: AR=AY1;
MODIFY(I1,M2);
MODIFY(I4,M4);
MODIFY(I7,M7);
m_3: MODIFY(I3,M2);
{ОБРАТНЫЙ ХОД}
M0=-m;
I0=1;
I5=^x;
CNTR=M1;
DO m_4 UNTIL CE;
AX1=DM(I1,M0);
AY1=DM(I6,M7);
I2=I1;
I7=I5;
MR0=0;
MX0=0;
MY0=0;
CNTR=I0;
DO m_5 UNTIL CE;
m_5: MR=MR+MX0*MY0(SS),MX0=DM(I2,M3),MY0=PM(I7,M7);
AF=AY1-MR0;
DIVS AF,AX1;
DM(I5,M7)=AY0;
m_4: MODIFY(I0,M2);
RTS;
.ENDMOD;
Акты о внедрении результатов диссертационной работы
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.