Разработка методов многокритериального синтеза сигналов и устройств обработки, обеспечивающих робастные качественные показатели системы, страница 35

               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;

Приложение III

Акты о внедрении результатов диссертационной работы