Лабораторная работа № 2
Код спутников GPS
Цель работы: формирование и исследование псевдослучайного кода спутников GPS.
Порядок выполнения лабораторной работы:
1. Создайте папку cod_GPS_My и скопируйте в ее все программы из папки cod_GPS.
2. ЗапуститеMatLab, откройте функцию cod_GPS, изучите программные процедуры и комментарии, выполните задания1- 10.
3. Задание 1. Откройте файлPR1_cod_GPS.m, сгенерируйте код спутника, определите, что получили в командном окне и занесите ответы в отчет.
4. Задание 2. Откройте файлPR2_cod_GPS.m, сгенерируйте коды спутников, определите, что получили в командном окне и занесите ответы в отчет.
5. Задание 3. Откройте файл PR3_cod_GPS.m, сгенерируйте коды спутников, определите, что получили в командном окне и занесите ответы в отчет.
6. Задание 4. Откройте файл PR4_cod_GPS.m, сгенерируйте коды спутников, определите, что получили в командном окне и занесите ответы в отчет.
7. Задание 5. Откройте файл PR5_cod_GPS.m, сгенерируйте коды спутников, определите, что получили в командном окне и занесите ответы в отчет.
8. Задание 6. Откройте файл PR6_cod_GPS.m, сгенерируйте коды спутников, определите, что получили в командном окне и занесите ответы в отчет.
9. Задание 7. Откройте файл PR7_cod_GPS.m, сгенерируйте коды спутников, определите, что получили в командном окне и занесите ответы в отчет.
10. Задание 8. Откройте файл PR8_cod_GPS.m, сгенерируйте коды спутников, определите, что получили в командном окне и занесите ответы в отчет.
11. Задание 9. Откройте файл PR09_cod_GPS.m, сгенерируйте коды спутников, определите, что получили в командном окне и занесите ответы в отчет.
12. Задание 10. Откройте файл PrCodGPS.m, сгенерируйте коды спутников, определите, что получили в командном окне и занесите ответы в отчет.
Функции и файлы из папки cod_GPS
Программа cod_GPS.m
function [cod, cod_bin,column_7,n]=cod_GPS(Sv_id,n);
%{
Имя: cod_GPS
Функция предназначена для генерации псевдослучайного кода
любого спутника GPS генерация 37 С/А кодов
Sv_id - номер спутника
cod - вектор, содержащий выходную последовательность
g2s - вектор, содержащий соответствующее значения сдвига кода g2 для
получения кода С/А требуемого спутника (например,
для Sv_id=25 – используется сдвиг =513)
n- количество символов в последовательности
%}
%сдвиг кода в соответствии с ICD-GPS-200C для 37 значений
g2s=[5;6;7;8;17;18;139;140;141;251;252;254;255;256;257;258;...
469;470;471;472;473;474; 509;512;513;514;515;516;859;...
860;861;862;863;950;947;948;950];
g2shift=g2s(Sv_id);
%{
генерация последовательности G1 cогласно
n = 20;
%}
%начальное состояние регистра сдвига
shift_reg=-ones(1,10);
for i=1:n
g1(i)=shift_reg(10); %последовательность G1
% сложение (заменено умножением по модулю 2 третьего и десятого разрядов
% регистра
modulo2=shift_reg(3)* shift_reg(10);
% сдвиг разрядов 1:9
shift_reg(2:10)=shift_reg(1:9);
% присвоение modulo2 первому разряду регистра
shift_reg(1)=modulo2;
end
g1;
% генерация кода G2 согласно
% начальное состояние регистра сдвига
shift_reg=-ones(1,10);
for i=1:n
g2(i)=shift_reg(10); %последовательность G2
% сложение (заменено умножением по модулю 2 второго,3,6,8,9,10
% разрядов регистра
modulo2=shift_reg(2)*shif_reg(3)*shift_reg(6)*shift_reg(8)...
*shift_reg(9)*shift_reg(10);
% сдвиг разрядов 1:9
shift_reg(2:10)=shif_reg(1:9);
% присвоение modulo2 первому разряду регистра
shift_reg(1)=modulo2;
end
g2;
[G1_G2] = [g1; g2]';
% сдвиг G2 на соответствующее номеру спутника число бит
g2tmp(1:g2shift)=g2(n-g2shift+1:n);
g2tmp(g2shift+1:n)=g2(1:n-g2shift);
%Сохранение сдвинутого кода
g2=g2tmp;
% формирование С/А кода поразрядным умножением G1 и G2
cod=g1.*g2;
%формирование кода спутника GPS в двоичных символах
cod_bin=-(cod-1)/2;
% формирование контрольного числа согласно в соответствии с ICD-GPS-200C
str=sprintf('%d',cod_bin(1:10));
column_7=dec2base(bin2dec(str),8,4);
Примеры применения функции cod_GPS.
Файл PR1_cod_GPS.m
%Пример PR1_cod_GPS.m
%Входные данные
Sv_id=2;% номер спутника
n=1023;% количество символов
[cod, cod_bin,column_7,n]=cod_GPS(Sv_id,n);
% Выходные данные
cod= cod(1:11) % 11 символов
cod_bin=cod_bin(1:11) % 11 символов в бинарном виде (0 и 1)
column_7% восьмеричное число первых 10 символов спутника № 2
ФайлPR2_cod_GPS.m
clear
%Пример PR2_cod_GPS.m
%Расчет кодов любого или всех спутников
n=1023;
d=1:37;
for Sv_i d=1:37
[cod(Sv_id,:),cod_bin(Sv_id,:),col_7(Sv_id,:),n]=cod_GPS(Sv_id,n);
end
cod1=cod(1:23,10:30) %вывод в командное окно кодов 23 спутников в символах +1 и -1
cod2=cod_bin(1:23,10:30)' %вывод в командное окно кодов 23 спутников в символах 1 и 0
col_7(1:5,:) % вывод в командное окно восьмеричных значений кодов 1...5 спутников
ФайлPr3_cod_GPS.m
clear
%Пример Pr3_cod_GPS
%Визуализация кода GPS
n=1023;
for Sv_id=1:37
[cod(Sv_id,:),cod_bin(Sv_id,:),column_7,n]=cod_GPS(Sv_id,n);
col_7(Sv_id,:)= column_7;
end
M_P= cod_bin(2,1:30);
M_P1=cod(2,1:30);
stem(M_P), axis([ 0 30 -0.1 1.1])
xlabel('Код GPS в двоичных символах','FontName','Times New Roman ','FontSize',12)
grid
figure
stem(M_P1),axis([ 0 30 -1.1 1.1])
xlabel ('Код GPS в символах "1","-1"','FontName','Times New Roman ','FontSize',12)
grid
Рис. 1.5. Графическое изображение 30 перевых символов кода спутника GPS
Файл Pr4_cod_GPS.m
clear
%Пример Pr4_cod_GPS.m
%Дискретизация кода спутника GPS
n=1023;
for Sv_id=1:37
[cod(Sv_id,:),cod_bin(Sv_id,:),column_7,n]=cod_GPS(Sv_id,n);
col_7(Sv_id,:)= column_7;
end
Cod3 = cod(3,:);
%Дискретизация
Fd=1.023*10^6;%символьная скорость
FsFd=2;% отношение частоты дискретизации к символьной скорости
Fs=Fd*FsFd;% частота дискретизации
t=(0:length(Cod3)*FsFd-1)/Fs;% дискретное время
F_mod1 = Cod3(floor(Fd*t)+1);%код
A_2=F_mod1(1:n);%код GPS
subplot(1,2,1), stem(cod(3,1:30)),axis([ 0 30 -1.1 1.1])
xlabel('a', 'FontSize',12, 'FontName','TimesNewRoman')
grid
subplot(1,2,2), stem(A_2(1:60)),axis([ 0 60 -1.1 1.1])
xlabel('b','FontSize',12,'FontName','TimesNewRoman')
grid
Результат выполнения файла:
Файл Pr5_cod_GPS.m
clear
%Имя файла:Pr5_cod_GPS.m
%Автокорреляционная функция кода GPS
n=1023;
for Sv_id=1:37
[cod(Sv_id,:),cod_bin(Sv_id,:),column_7,n]=cod_GPS (Sv_id,n);
col_7(Sv_id,:)= column_7;
end
Cod4 = cod(4,:);
%Дискретизация
Fd=1.023*10^6;%символьная скорость
FsFd=2;% отношение частоты дискретизации к символьной скорости
Fs=Fd*FsFd;% частота дискретизации
t=(0:length(Cod4)*FsFd-1)/Fs;% дискретное время
F_mod1 = (1/sqrt(FsFd))*Cod4(floor(Fd*t)+1);%код
m=n*FsFd;
nn=1023*FsFd;
A_2=F_mod1(1:m);%код GPS
[CorA2,lags]=xcorr(A_2,nn);%автокорреляция кода GPS
%Графика сигналов
subplot(1,2,1),plot(CorA2), axis([ 0 2*nn -100 1100])
xlabel('a','FontSize',12, 'FontName','TimesNewRoman')
grid on
subplot(1,2,2), plot(CorA2), axis([ 0 nn -150 150])
xlabel('б', 'FontSize',12,'FontName','TimesNewRoman')
grid on
Файл Pr6_cod_GPS.m
clear
%Имя файла:Pr6_cod_GPS.m
%Взаимная корреляция кодов спутников GPS
n=1023;
for Sv_id=1:37
[cod(Sv_id,:),cod_bin(Sv_id,:),column_7,n] =cod_GPS(S v_id,n);
col_7(Sv_id,:)= column_7;
end
Cod24 = cod (24,:);
Cod13 =cod(13,:);
%Дискретизация
Fd=1.023*10^6;%символьная скорость
FsFd=2;% отношение частоты дискретизации к символьной скорости
Fs=Fd*FsFd;% частота дискретизации
t=(0:length(Cod24)*FsFd -1)/Fs;% дискретное время
F_mod1 = (1/sqrt(FsFd))*Cod24(floor(Fd*t)+1);%код
F_mod3 = (1/sqrt(FsFd))*Cod13(floor(Fd*t)+1);%код
m=n;
m=n*FsFd;
nn=1023*FsFd
A_2=F_ mod1(1:m);%код GPS
A_3=F_ mod3(1:m);%код GPS
Cor_13_24 = xcorr(A_2,A_3,nn);%взаимная корреляция кода 13 и 24
Cor_13_24_1 = xcorr(A_2(1:1023),A_3(1:1023),nn/2);
%Графика сигналов
subplot(1, 2, 1), plot(Cor_13_24),axis([ 0 2*nn -100 100])
xlabel('a ','FontSize',12,'FontName','TimesNewRoman')
grid on
subplot(1, 2, 2), plot(Cor_13_24_1),axis([0 nn -100 100])
xlabel('б ','FontSize',12,'FontName','TimesNewRoman')
grid on
Результат выполнения Файла Pr6_cod_GPS.m:
Файл Pr7_cod_GPS.m
clear
%Имя файла:Pr7_cod_GPS.m
%Взаимная корреляция кода и копии кода спутников GPS
n=1024*2;
for Sv_id=1:37
[cod(Sv_id,:),cod_bin(Sv_id,:),column_7,n]=cod_GPS(Sv_id,n);
col_7(Sv_id,:)= column_7;
end
Cod24 = cod(24,:);
%Дискретизация
Fd=1.023*10^6;%символьная скорость
FsFd=2;% отношение частоты дискретизации к символьной скорости
Fs=Fd*FsFd;% частота дискретизации
t=(0:length(Cod24)*FsFd-1)/Fs;% дискретное время
F_mod1 = (1/sqrt(FsFd))*Cod24(floor(Fd*t)+1);%код
m=n*FsFd;
nn=1023*FsFd;
A_2=F_mod1(1:m);%код GPS
Cor_24 = xcorr(A_2(500:2546),nn);%автокорреляция кода спутника
Cor_24_24_2 = xcorr(A_2(500:2546),A_2(500:2546),nn);%автокорреляция кода спутника с точной копией
Cor_24_24 = xcorr(A_2(498:2540),A_2(500:2546),nn);%взаимная корреляция кода с задержанной на 2 отсчета копией кода
Cor_24_24_1 = xcorr(A_2(502:2548),A_2(500:2536),nn);%взаимная корреляция кода с опережающей на
2 отсчета копией кода
%Графика сигналов
subplot(4, 1, 1), stem(Cor_24_24),axis([ 2040 2055 -100 1100])
xlabel('a ','FontSize',12,'FontName','TimesNewRoman')
grid on
subplot(4, 1, 2), stem(Cor_24),axis([ 2040 2055 -100 1100])
xlabel('б ','FontSize',12,'FontName','TimesNewRoman')
grid on
subplot(4,1,3), stem(Cor_24_24_2),axis([ 2040 2055 -100 1100])
xlabel('в ','FontSize',12,'FontName','TimesNewRoman')
grid on
subplot(4, 1, 4), stem(Cor_24_24_1),axis([2040 2055 -100 1100])
xlabel('г ','FontSize',12,'FontName','TimesNewRoman')
grid on