Демодулятор сигналов с дискретной модуляцией. Приёмы ввода испытательных сигналов и вывода данных, страница 3

7.7. Каков принцип работы испытуемого демодулятора? Какие другие варианты демодуляторов ОФМ Вам известны?

7.8. Расскажите о функциях имитатора, выполнявшихся благодаря командам Fill и Streams.

7.9. Каковы структура алгоритма программы Test_dem, назначение её основных частей и  их взаимодействие?

7.10. Расскажите о взаимодействии имитатора и программы Test_dem.

7.11. Каков механизм отображения работы демодулятора в виде осциллограммы на экране монитора?

Программы к ЛР № 8

/*   ADSP-2181     Subroutine Demo                                                             файл Demo.asm

Эта подпрограмма выполняет демодуляцию дискретных сигналов с однократной относительной фазовой модуляцией.

Способ демодуляции - сравнение фаз соседних элементов сигнала после корреляционной обработки.

Алгоритм демодуляции:

Ввод отсчётов X и Y, полученных в двух корреляторах;

Z := X*X0 + Y*Y0;  - вычисление функционала правдоподобия;

X0 := X;  Y0 := Y; - сохранение отсчётов сигнала;

R := sign(Z);    - принятие решения по знаку функционала правдоподобия.

Входные параметры         MX0,MY1 - составляющие X и Y принимаемого                                                                         сигнала, находящиеся в квадратуре;

Сохраняемые параметры  MY0,MX1 - составляющие X0 и Y0, сохраняемые для                                                                  обработки следующего элемента сигнала;

Выводимое значение          SR1 - решение R о переданном элементе.

Используемые регистры

MX0, MY0, MX1, MY1, MR, SR.

*/

.GLOBAL DEM;

.section/pm  program;

DEM:

MX0=DM(I2,M2), MY1=PM(I6,M6);                       // Ввод X и Y

MR=MX0*MY0(SS), MY0=MX0;                            // Z := X*X0; X0 := X;

MR=MR+MX1*MY1(SS), MX1=MY1;                    // Z := Z + Y*Y0; Y0 := Y;

SR=LSHIFT MR1 BY 1 (LO);                                   // R := sign(Z)

RTS;                                                                            // возврат из подпрограммы

/*  Программа для испытания подпрограммы демодулятора DEM совместно  с внешней программой Test_DEM                                                 файл MAIN1.asm  

*/

#define   Mx  512                               // Размер массивов для выборки до 512 элементов.

#define   z_out 0x300

.section/data   data1;

.VAR  x_mas[Mx];                            // Массив для ввода данных из xin.dat

.VAR  argum[3] = "arg.dat";              // Для ввода параметров Sample, Krat и др.

.section/pm       pm_da;

.VAR  y_mas[Mx];                             // Массив для ввода данных из yin.dat

.EXTERN DEM;

.section/pm interrupts;                                   //--- Таблица векторов прерываний --_reset: JUMP start; NOP; NOP; NOP;         // 0x0000: вектор сброса

RTI; NOP; NOP; NOP;                                                                     

RTI; NOP; NOP; NOP;                                                                     

RTI; NOP; NOP; NOP;                                                                     

RTI; NOP; NOP; NOP;                                                                     

RTI; NOP; NOP; NOP;                                                                     

RTI; NOP; NOP; NOP;                                                                     

RTI; NOP; NOP; NOP;                                                                     

RTI; NOP; NOP; NOP;                                                                     

RTI; NOP; NOP; NOP;                                                                     

RTI; NOP; NOP; NOP;                                                                     

.section/pm program;

start:

MY0=0x4000;                        // Начальное значение вектора [0.5,0.5]

MX1=0x4000;                        // для предшествующего элемента сигнала

repeat:

I1=argum;  L1=0;

I2=x_mas;  L2=0;  M2=1;      // Инициализация индексных

I6=y_mas;  L6=0;  M6=1;      // регистров для буферов

AX0=DM(I1,M2);                 // Чтение Sample

CNTR=AX0;                         // Размер пачки элементов = Sample

DO loop1 UNTIL CE;           // Цикл обработки пачки элементов

CALL DEM;                         // Вызов подпрограммы демодуляции

DM(z_out)=MX0;                // Контроль составляющей X сигнала

DM(z_out)=MY1;                // Контроль составляющей Y сигнала

DM(z_out)=MR1;                // Контроль функционала правдоподобия

DM(z_out)=SR1;                 // Вывод принятого символа

loop1:   NOP;

break1:

JUMP repeat;                       // Переход к обработке следующей пачки

/**********************************************************/