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

              L4=0;

              L5=0;

              L6=0;

              L7=0;

              CALL psp;

              CALL corel;

              CALL fft_s;

              CALL fsp_;

              M1=1;

              M3=0;

              M4=0;

              M5=1;

              I4=^ps;

{Основной оптимизационный цикл}

              DO mc_1  UNTIL CE;

                  AX0=PM(I4,M4);

                  AR=-AX0;

                  PM(I4,M4)=AR;

{Осуществление коррекции АКФ }

                  SI=AR;

                  SR=LSHIFT SI BY 1(LO);

                  MY0=SR0;

                  AX0=I4; { Указатель на номер измененного элемента }

                  AY0=N_div_2;

                  AR=AX0-AY0;

                  IF LT  JUMP mj_0;

                  Cntr=I4;

                  JUMP mj_1;

mj_0 :        AX0=N;

                  AY0=I4;

                  AF=AY0-AX0;

                  AR=AF+1;

                  Cntr=AR;

mj_1 :        SR0=Cntr;

                  AX0=I4;

                  AY1=N;

                  DO  mc_0  UNTIL CE;

                      AY0=Cntr;

                      AR=SR0-AY0, SR1=DM(I0,M3);

                      I0=AR;

                      AR=AX0+AY0;

                      AX1=AR;

                      AR=AX1-AY1;

                      IF LT JUMP  mj_2;

                      AF=AX0-AY0;

                      AR=PASS AF;

                      I5=AR;

                      AR=AF-1;

                      IF GE JUMP  mj_3 ;

                      JUMP  mc_0;

mj_2 :            I5=AX1;

                  MX0=PM(I5,M4);

                  MR=MX0*MY0(UU);

                  AY0=MR0;

                  AR=SR1+AY0;

                  JUMP  mc_0;

mj_3 :        MX0=PM(I5,M4);

              MR=MX0*MY0(UU);

              AY0=MR0;

              AR=SR1+AY0;

mc_0 :   DM(I0,M3)=AR;

{Поиск максимального элемента массива значеий боковых

выбросов АКФ}

              I0=^akf;

             AX0=0;

             Cntr=N;

             DO  mj_4  UNTIL  CE;

                 AR=DM(I0,M1);

                 AF=ABS AR;

                 AY0=AR     ;

                 AF=AX0-AF;

                 IF GE JUMP mj_4;

                 AX0=AY0  ;

mj_4 :       NOP;

{ В регистре AX0 - искомый максимум }

            DM(R_max_i)=AX0;

            CALL fsp_adj; {Коррекция спектральной плотности мощности, выходной параметр - переменная dli_f (память  программ)}

             AX0=DM(dl_f);

             AY0=DM(dli_f);

             AR=AX0-AY0;

             MX0=AR;

             MY0=DM(k_alf1);

             AX0=DM(R_max);

             MR=MX0*MY0(UU);

             AY0=DM(R_max_i);

             AR=AX0-AY0;

             MX0=AR;

             MY0=DM(k_alf2);

             MR=MR+MX0*MY0(UU);

             AY0=0x3FFF;

             AR=MR0-AY0;

             IF GE JUMP mc_1;

             AX0=PM(I4,M4);

             AR=-AX0;

             PM(I4,M4)=AR;

mc_1 :  MODIFY(I4,M5);

{ Последовательность сформирована и передается во внешнее устройство - подпрограмма "sprt"}

             CALL sprt;

.ENDMOD;

======================================================

Подпрограмма формирования псевдослучайной последовательности.

Время выполнения:   13×N + 9

.MODULE        PSP;

.ENTRY          psp;

.CONST N=93;

.VAR/DM ps[N];

psp :

           MY1=25;               { Cтаршая половина k1 }

           MY0=26125;           { Младшая половина k1}

           SR1=0;

           SR0=0;

           L0=0;

           AX0=1;

           M0=1;

           Cntr=N;

           I0=^ps;

           DO mk0 UNTIL CE;

               MR=SR0*MY1(UU);        { k1(hi) * x(lo) }

               MR=MR+SR1*MY0(UU);

               AR=MR1;

               MR1=MR0;

               MR2=AR;

               MR0=H#FFFE;                  { k2=32767 }

               MR=MR+SR0*MY0(UU);

               SR=ASHIFT MR2 BY 15 ( HI );

               SR=SR OR LSHIFT MR1 BY -1 ( HI );

               SR=SR OR LSHIFT MR0 BY -1 ( LO );

               AR= ABS SR1;

               IF NEG AR=-AX0;

               IF POS AR=PASS AX0;

mk0 :      DM(I0,M0)=AR;

RTS;

.ENDMOD;

======================================================

Подпрограмма вычисления автокорреляционной функции.

Время выполнения:   18 + 2×N + (N-1)×(N+9)

.MODULE        AKF_i_R_max;

.ENTRY          corel;

.EXTERNAL       R_max, N, ps, psp_ , akf;

corel :    M6=1;

              I7=^R_max;

              M7=0;

              M0=1;

              M2=0x3FFF;

              I1=^ps;

              I0=I1;

              Cntr=DM(N);

              I5=^ps+1;

              I6=^akf;

              I4=^psp_;

              MR2=DM(N);

              PM(I6,M6)=MR2;

              DO  trans  UNTIL CE;

                  AY0=DM(I0,M0);

trans :         PM(I4,M6)=AX0;

              Cntr=MR2;

              DO  ext  UNTIL CE;

                  I0=I1;

                  I4=I5;

                  Cntr=I2;

                  MR=0, MY0=PM(I4,M6), MX0=DM(I0,M0);

                  DO  ext_1  UNTIL CE;

ext_1:    MR=MR+MX0*MY0(UU),MY0=PM(I4,M6), MX0=DM(I0,M0);

                  MY0=PM(I5,M6), MX0=DM(I2,M0);

                  AR=MR0-AY0;

                  IF GE  AR=PASS MR0;

                  AR=AY0;

      DM(I7,M7)=AR; {ЕСЛИ ТЕКУЩЕЕ ЗНАЧЕНИЕ R_max МЕНЬШЕ}

ext: PM(I6,M6)=MR0;{ВЫБРАННОГО ТО R_max <-- ЭТО ЗНАЧЕНИЕ}

RTS;

.ENDMOD;

======================================================

Подпрограмма вычисления спектра.

Время выполнения:   13 + 6×NG + nfft

.MODULE        SPEKTR;

.ENTRY          fft_s;

.EXTERNAL twid_real, twid_imag, in_real, in_imag, NG, NG_div_2;

.EXTERNAL       fft;

fft_s:   I1=^in_real;

           Cntr=NG  ;

           DO  ex_0  UNTIL  CE;

ex0:         DM(I1,M1)=L0;

           I0=^ps      ;

           I1=^in_real ;

           I2=^in_imag ;

           Cntr=NG ;

           AY0=8400H;

           AY1=0400H;

           DO  Pr_i  UNTIL CE;

               AX0=DM(I0,M0);

               AR=AY1     ;