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; // Переход к обработке следующей пачки
/**********************************************************/
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.