Поиск навигационного сигнала (лабораторная работа)

Материал из SRNS
Перейти к: навигация, поиск

Содержание

Цели работы

  • Составить представление о подходах моделирования работы алгоритмов обработки сигналов в НАП
  • Проверить работоспособность алгоритма поиска сигналов, изложенного на лекционных занятиях

Состав стенда

Для выполнения лабораторной работы необходим персональный компьютер с ОС семейства Linux или Windows с установленным пакетом ПО Matlab.

Описание

Как известно из курса радиоавтоматики, системы слежения обладают конечной полосой захвата. Поэтому после включения приемника, либо появления нового спутника в области радиовидимости, необходимо произвести передачу целеуказания системам слежения - сообщить примерные параметры частоты и задержки сигнала.

Поиск - это этап обработки навигационного радиосигнала, целью которого является грубое определение параметров с точностью, достаточной для осуществления захвата системами слежения. Конкретная величина допустимой погрешности определяется применяемыми алгоритмами, но характерный порядок - десятые доли символа дальномерного кода для оценки задержки и сотни герц для системы слежения за частотой.

Для осуществления процедуры поиска используются корреляционные свойства сигнала.

Модель блока поиска и входных сигналов

Для проведения имитационного моделирования необходимо:

  • Составить модель исследуемого алгоритма поиска
  • Составить модель сигналов, с помощью которых будет проводиться тестирование работы алгоритма поиска (т.н. testbench)

Для реализации поставленной задачи воспользуемся средой Matlab. Код модели разместим в двух файлах:

  • main.m - главный скрипт модели, с которого начинается исполнение
  • resize_arr.m - файл, содержащий код функции передискретизации вектора

Средствами Matlab легко сохранять полученные данные. В прошлой лабораторной работе была рассчитана M-последовательность, используемая в качестве дальномерного кода гражданских сигналов системы ГЛОНАСС. Вектор её 511 символов сохранен в файл MCode.mat. Символы принимают значения \pm 1. Воспользуемся этим файлом в ходе работы.

1. Создайте файл main.m. Внесите первые строчки кода:

clc % Очистить Command Window
clear % Очистить список переменных и вернуть системе память, выделенную для них
close all % Закрыть все объекты типа figure

Запуск скрипта сохранит изменения в файле, после чего произведет соответствующие коду действия.

2. Зададим ось времени

Tc = 0.001; % Период ПСП = период когерентного субнакопления
Fd = 10*5.11e6; % Частота дискретизации на выходе АЦП
Td = 1/Fd; % Период дискретизации на выходе АЦП

t = Td:Td:Tc; % Моменты взятия отсчетов АЦП. Команда Td:Td:Tc возвращает вектор-строку от Td с шагом Td до Tc.
C = length(t); % Число элементов в векторе-строке t

Запустите скрипт.

N_fft = 1022; % Размерность БПФ


load MCode.mat L_psp = length(MCode); % Длина ПСП


% Модель сигнала АЦП f_if = 10.8e6; % Промежуточная частота для сигнала ГЛОНАСС с литерой 0. w_if = 2*pi*f_if; max_f_dop = 10e3; f_dop = max_f_dop * 2*(rand(1,1) - 0.5); % Доплер - СВ +/- 10кГц w_dop = 2*pi*f_dop;


MCode_C = resize_array(MCode, C); % ПСП с частотой дискретизации АЦП и нулевой задержкой tau_C = round(C*rand(1,1)); % Задержка в тактах АЦП - СВ с равномерным распределением MCode_C_shifted = circshift(MCode_C, [0 tau_C]); % Задержанное ПСП tau_chip = tau_C / C * L_psp; % Задержка, измеренная в чипах ПСП;


phase0 = rand(1,1)*2*pi; % Начальная фаза Phase = w_if*t + w_dop*t + phase0; % Полная фаза на выходе АЦП


stdn = 22; % СКО шума на выходе АЦП qcno_dBHz = 55; % Отношение сигнал/шум в дБГц qcno = 10^(qcno_dBHz/10); A = 2*stdn*sqrt(qcno*Td); % Амплитуда сигнала на выходе АЦП для данных параметров


y_adc = A*cos(Phase + MCode_C_shifted*pi) + stdn*randn(1,C); % Сигнал на выходе АЦП без учета ЦИ



hF = 0; hF = figure(hF + 1); plot(t, y_adc); xlabel('t, s'); ylabel('y_{ADC}');


% Модель преднакопления Npr = 50; % Число точек преднакопления Ipr = zeros(1, N_fft); Qpr = zeros(1, N_fft); % Инициализация нулями n = 1:N_fft;


cos_op_pr = cos(w_if*t); sin_op_pr = sin(w_if*t); for j = 1:N_fft

   for npr = 1:Npr
       index_pr = Npr*(j-1) + npr;
       Ipr(j) = Ipr(j) + y_adc(index_pr).*cos_op_pr(index_pr);
       Qpr(j) = Qpr(j) + y_adc(index_pr).*sin_op_pr(index_pr);
   end

end


hF = figure(hF+1); plot(n, Ipr, n, Qpr); xlabel('n') ylabel('I_{pr}, Q_{pr}') xlim([1 N_fft])



% Ячейки по частоте и задержке dFdop_s = 1/5 * 2/3 * 1/Tc; % Шаг по частоте Fdop_s = -max_f_dop:dFdop_s:max_f_dop; s_Fdop_s = length(Fdop_s);


IQ_pole = nan(s_Fdop_s, N_fft); % Инициализациия поверхности поля поиска


MCode_N_fft = resize_array(MCode, N_fft); % ПСП ДК с для свертки fft_MCode = conj(fft(MCode_N_fft));


i = sqrt(-1); for j = 1:s_Fdop_s

   t_j = (Npr*Td)*n;
   cos_op = cos(2*pi*Fdop_s(j)*t_j);
   sin_op = sin(2*pi*Fdop_s(j)*t_j);
   Sig = (Ipr - 1i*Qpr) .* (cos_op + 1i*sin_op);%Ipr.*cos_op - i*Qpr.*sin_op;
   pole_row = ifft( fft(Sig) .* fft_MCode ); 
   IQ_pole(j, :) = pole_row;

end


hF = figure(hF + 1); if s_Fdop_s > 1

   mesh((n-1)/(N_fft-1)*L_psp, Fdop_s, abs(IQ_pole)/max(max(abs(IQ_pole))));
   xlabel('\tau, chips')
   ylabel('Fdop, Hz')

else

   plot((n-1)/(N_fft-1)*L_psp, abs(IQ_pole) / max(abs(IQ_pole)));
   xlabel('\tau, chips')
   ylabel('abs(IQ)')

end


fprintf('Real delay = %.3f, chips\n', tau_chip); fprintf('Real dopler = %.3f, Hz\n', f_dop);

Персональные инструменты
Пространства имён

Варианты
Действия
SRNS Wiki
Рабочие журналы
Приватный файлсервер
QNAP Сервер
Инструменты