Файл: Учебное пособие ( Лабораторный практикум на компьютере ) Київ 2008 1.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.01.2024
Просмотров: 344
Скачиваний: 5
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
3. Запишите в папку Vsion_GLONASS_GPS_My альманах спутников GPS и ГЛОНАСС в формате YUMA и выполните задания 1, 2, 3
4. Задание 1. Разберите тексты функций и файлов в папке Vsion_GLONASS_GPS_My.
Откройте файл Vision_GLONASS_GPS.m и внесите в него входные данные: имя аль- манаха и время, на которое выполняется моделирование (в комментариях к файлу это указано). Выполните файл и результаты визуализации с полярной диаграммы внесите в отчет.
5. Задание 2. Измените время наблюдения на 6 часов, выполните файл
Vision_GLONASS_GPS.m. Занесите результаты наблюдения в отчет и объясните при- чины изменения конфигурации спутников.
6. Задание 3. В файле Vision_GLONASS_GPS.m. измените дату наблюдения на два дня, сохранив время наблюдения и выполните файл. Занесите результаты выполнения про- граммы в отчет и объясните причины, по которым спутники ГЛОНАСС изменили свое местоположения, а спутники GPS почти остались на том же месте.
5.3.3 Контрольные вопросы и задания для самоподготовки
1. Чему равен период обращения спутников GPS?.
2. Чему равен период обращения спутников ГЛОНАСС?
3. Применяя второй закон Кеплера и данные альманаха определите периоды обращения спутников GPS и спутников ГЛОНАСС.
5.3.4 Функции и файлы из папки Vsion_GLONASS_GPS
Файл Vsion_GLONASS_GPS.m
clear all
%Имя m-файла:Vsion_GLONASS_GPS.m
%Программа рассчитывает углы видимости навигационных спутников GPS и ГЛОНАСС (азимута и места)
%видимых спутников на заданный момент времени
%Входные данные:
%файл альманаха в формате Yuma,имя файла альманаха присваивается
%переменной "Dat",например,Dat = 'имя файла альманаха';
%данные о начале отсчета "d2",d2='месяц/день/год';h=час;min=минута;s=секунда;
%координаты позиции приемника -lat(широта в радианах),lon (долгота в радианах,
%hr (высота в метрах);
%шаг с каким будут рассчитываться параметры (step,секунды);
%количество точек (L), в которых будут рассчитываться параметры орбит
%L=12*3600/step,L читается так: количество часов (например,12)
174
%число секунд в часе (3600) деленное на шаг (step)
%Постоянные:
%скорость вращения Земли
OMEGAeDOT=7.2921151467e-005;
%радиусы земного эллипсоида
A_WGS84=6378137.0;
B_WGS84=6356752.314;
%константы mu=398600500000000;
F_CONST =
4.442807633E-10; kt=1;%установка времени на титульной надписи графика, определяется параметрами d2'; h; min; s и j или L;
%Задание цветов для графики color6(1:14) = ['k' 'b' 'g' 'r' 'c' 'm' 'r' ':' 'g' ':' 'b' ':' 'k' 'h'];
%Входные данные
%Dat = 'AlmGLONASS11_12_06.yum';
Dat = 'AlmGG_1.yum';
%Dat = 'YumaGL8_11_06.alm'; d2='12/21/2006'; h=14; min=52.0; s=58.0;
%координаты точки, из которой наблюдаются спутники lat = 0.88032730015257;%50 градусов 26минут 20.54 секунд lon = 0.53109641675259;%30 градусов 25 минут 46.4995секунд hr=187.488;% метров
X_label=['Широта' ':' num2str(lat) ';' 'долгота' ':' num2str(lon) ';' 'высота' ':' num2str(hr)]; step=300;%шаг отсчета времени в секундах (300=5 минутам);шаг можно изменять step=0;
%L=(24*3600) / step;% убрать % перед L для вывода таблицы улов видимости и азимута
L=1;% установить % перед L для вывода таблицы улов видимости и азимута
%Чтение альманаха
[alm,max_kol] = Yuma_GPS_GLONAS_Alm(Dat);
%max_kol = 32; nom = 1; i = 0; k = 0; i = 0;
% for i = 1 : max_kol while ( i <61)
175
id = alm(nom).ID;
Health = alm(nom).Health;
%fprintf('1: i=%i k=%i nom=%i id=%i Health=%i \n', i, k, nom, id, Health); if ( id > 0)
Health = alm(nom).Health; if ( Health == 0) k = k + 1; nom_ns(k) = id;
% fprintf('2: i=%i k=%i nom=%i id=%i Health=%i \n', i, k, nom, id, Health); nom = nom + 1; else nom = nom + 1; end; else nom = nom + 1; end; i = i + 1; end; % i kol = k; fprintf('kol=%i \n', kol); nom_ns % - номер навигационного спутника
[Rx,Ry,Rz] = ECEFLLH(lon, lat,hr);
%Rx=0;Ry=0;,Rz=0;%центр масс Земли
%Начало отсчета текущего времени
[week,modeweek,d,dweek,weeks]=Tim(d2,h,min,s); for j = 1% 0:L
% for j = 1:L % 0:L t( j )=weeks+step*(j); %-step;
%t1(j) = t(j)/60; %изменение дискретности текущего времени
%d_wn = (week - alm(i).Week);
%d_wn = 0; for k = 1 : kol i = nom_ns(k) ; % input "i" !!!
% fprintf('i=%i alm(i).Week= %i \n',i, alm(i).Week) d_wn=(modeweek - alm(i).Week);%еслив альманахе не учтено 1024 tk = t(j) + d_wn * 604800 - alm(i).TOA; d_wn = abs(modeweek - alm(i).Week);
176
Health = alm(nom).Health;
%fprintf('1: i=%i k=%i nom=%i id=%i Health=%i \n', i, k, nom, id, Health); if ( id > 0)
Health = alm(nom).Health; if ( Health == 0) k = k + 1; nom_ns(k) = id;
% fprintf('2: i=%i k=%i nom=%i id=%i Health=%i \n', i, k, nom, id, Health); nom = nom + 1; else nom = nom + 1; end; else nom = nom + 1; end; i = i + 1; end; % i kol = k; fprintf('kol=%i \n', kol); nom_ns % - номер навигационного спутника
[Rx,Ry,Rz] = ECEFLLH(lon, lat,hr);
%Rx=0;Ry=0;,Rz=0;%центр масс Земли
%Начало отсчета текущего времени
[week,modeweek,d,dweek,weeks]=Tim(d2,h,min,s); for j = 1% 0:L
% for j = 1:L % 0:L t( j )=weeks+step*(j); %-step;
%t1(j) = t(j)/60; %изменение дискретности текущего времени
%d_wn = (week - alm(i).Week);
%d_wn = 0; for k = 1 : kol i = nom_ns(k) ; % input "i" !!!
% fprintf('i=%i alm(i).Week= %i \n',i, alm(i).Week) d_wn=(modeweek - alm(i).Week);%еслив альманахе не учтено 1024 tk = t(j) + d_wn * 604800 - alm(i).TOA; d_wn = abs(modeweek - alm(i).Week);
176
dd = 302400.0 + d_wn * 604800; if ( ( alm(i).A05 > 0 ) & ( alm(i).Health == 0 ) ) while (abs(tk) > dd) if tk > dd tk = tk - 604800; else if tk < -dd tk = tk + 604800; end end % if end % while
%Справочник по альманаху- цифра в скобках обозначает порядковый номер
%параметра альманаха в формате YUMA
%alm(ID).ID(1); alm(ID).Health(2); alm(ID).e(3); alm(ID).TOA(4); alm(ID).deltai(5);
%alm(ID).OMEGADOT(6); alm(ID).A05(7); alm(ID).omega0(8); alm(ID).omega(9);
%alm(ID).M0(10); alm(ID).Af0(11); alm(ID).Af1(12); alm(ID).Week(13); n0=sqrt((mu) / (alm(i).A05^6)); j2 = 1082.68E-6; re = (A_WGS84 + B_WGS84) / 2.; sin55 = sin(55.0 * pi / 180.0); dn = 1.5 * j2 * re * re / (alm(i).A05^4 ) * (1. - 1.5 * sin55 * sin55);
%dn = 0; n=n0 * (1 + dn);
Mk = alm(i).M0 + n*tk; e=alm(i).e;
%решение уравнения Кеплера eps = 1.0E-15; y = e * sin(Mk); x1 = Mk; x = y; for k = 0 : 15 % количество итераций x2 = x1; x1 = x; y1 = y; y = Mk - (x - e * sin(x)); if (abs(y - y1) < eps)
177
%Справочник по альманаху- цифра в скобках обозначает порядковый номер
%параметра альманаха в формате YUMA
%alm(ID).ID(1); alm(ID).Health(2); alm(ID).e(3); alm(ID).TOA(4); alm(ID).deltai(5);
%alm(ID).OMEGADOT(6); alm(ID).A05(7); alm(ID).omega0(8); alm(ID).omega(9);
%alm(ID).M0(10); alm(ID).Af0(11); alm(ID).Af1(12); alm(ID).Week(13); n0=sqrt((mu) / (alm(i).A05^6)); j2 = 1082.68E-6; re = (A_WGS84 + B_WGS84) / 2.; sin55 = sin(55.0 * pi / 180.0); dn = 1.5 * j2 * re * re / (alm(i).A05^4 ) * (1. - 1.5 * sin55 * sin55);
%dn = 0; n=n0 * (1 + dn);
Mk = alm(i).M0 + n*tk; e=alm(i).e;
%решение уравнения Кеплера eps = 1.0E-15; y = e * sin(Mk); x1 = Mk; x = y; for k = 0 : 15 % количество итераций x2 = x1; x1 = x; y1 = y; y = Mk - (x - e * sin(x)); if (abs(y - y1) < eps)
177
break end x = (x2 * y - x * y1) / (y - y1); end % kepler
Ek = x; deltr = F_CONST * alm(i).e * alm(i).A05 * sin(Ek); dt1 = alm(i).Af0 + alm(i).Af1 * tk + deltr; tk = tk - dt1; vd = 1. - alm(i).e * cos(Ek); nuk =atan2(sqrt(1-alm(i).e^2)*sin(Ek) / vd,(cos(Ek)-alm(i).e) / vd);
Ek = acos((alm(i).e+cos(nuk))/(1+alm(i).e*cos(nuk)));
Fk =nuk + alm(i).omega; uk =Fk; ik=alm(i).deltai;
% alm(i) rk =(alm(i).A05^2)*(1.0-alm(i).e*cos(Ek)); xkk =rk*cos(uk); ykk =rk*sin(uk);
OMEGAk =alm(i).omega0+(alm(i).OMEGADOT-OMEGAeDOT)*tk-OMEGAeDOT*alm(i).TOA;
% fprintf('i=%i j=%i \n ',i, j);
Xk(j,i) = xkk*cos(OMEGAk)-ykk*cos(ik)*sin(OMEGAk);
Yk(j,i) = xkk*sin(OMEGAk)+ykk*cos(ik)*cos(OMEGAk);
Zk(j,i) = ykk*sin(ik);
%Дальности до спутников
PR(j,i) = sqrt((Xk(j,i) - Rx)^2 + (Yk(j,i) - Ry)^2 + (Zk(j,i) - Rz)^2);
%Перевод в географическую систему если требуется
%[lons,lats,hrs] = LLHECEF(Xk,Yk,Zk);
%(Llon(j),Llat(j),Hhr(j)) = [lons,lats,hrs];
%расчет угла видимости спутника xls = Xk(j,i) - Rx; yls = Yk(j,i) - Ry; zls = Zk(j,i) - Rz; range1 = sqrt(xls*xls+yls*yls+zls*zls); if j>1 doppler(j-1) = (range1 - range2) * 5.2514 / step; end range2 = range1;
P = sqrt(Rx * Rx + Ry * Ry + Rz * Rz); tdot = ( Rx*xls+Ry*yls+Rz*zls)/range1/P;
178
Ek = x; deltr = F_CONST * alm(i).e * alm(i).A05 * sin(Ek); dt1 = alm(i).Af0 + alm(i).Af1 * tk + deltr; tk = tk - dt1; vd = 1. - alm(i).e * cos(Ek); nuk =atan2(sqrt(1-alm(i).e^2)*sin(Ek) / vd,(cos(Ek)-alm(i).e) / vd);
Ek = acos((alm(i).e+cos(nuk))/(1+alm(i).e*cos(nuk)));
Fk =nuk + alm(i).omega; uk =Fk; ik=alm(i).deltai;
% alm(i) rk =(alm(i).A05^2)*(1.0-alm(i).e*cos(Ek)); xkk =rk*cos(uk); ykk =rk*sin(uk);
OMEGAk =alm(i).omega0+(alm(i).OMEGADOT-OMEGAeDOT)*tk-OMEGAeDOT*alm(i).TOA;
% fprintf('i=%i j=%i \n ',i, j);
Xk(j,i) = xkk*cos(OMEGAk)-ykk*cos(ik)*sin(OMEGAk);
Yk(j,i) = xkk*sin(OMEGAk)+ykk*cos(ik)*cos(OMEGAk);
Zk(j,i) = ykk*sin(ik);
%Дальности до спутников
PR(j,i) = sqrt((Xk(j,i) - Rx)^2 + (Yk(j,i) - Ry)^2 + (Zk(j,i) - Rz)^2);
%Перевод в географическую систему если требуется
%[lons,lats,hrs] = LLHECEF(Xk,Yk,Zk);
%(Llon(j),Llat(j),Hhr(j)) = [lons,lats,hrs];
%расчет угла видимости спутника xls = Xk(j,i) - Rx; yls = Yk(j,i) - Ry; zls = Zk(j,i) - Rz; range1 = sqrt(xls*xls+yls*yls+zls*zls); if j>1 doppler(j-1) = (range1 - range2) * 5.2514 / step; end range2 = range1;
P = sqrt(Rx * Rx + Ry * Ry + Rz * Rz); tdot = ( Rx*xls+Ry*yls+Rz*zls)/range1/P;
178
xll = xls/range1; yll = yls/range1; zll = zls/range1; if tdot >= 1.00 b = 0.0; elseif tdot <= -1.00 b = pi; else b = acos( tdot); end satang = pi/2.0 - b;
TT =satang;
TT(j,i) =TT;%угол видимости спутников
%расчет угла азимута спутников xn =-cos(lon)*sin(lat); yn =-sin(lon)*sin(lat); zn = cos(lat); xe =-sin(lon); ye = cos(lon); xaz = xe*xll + ye*yll; yaz = xn*xll + yn*yll + zn*zll; if (xaz == 0) or (yaz == 0) az(j)= 0; else az(j,i) = atan2(xaz,yaz); end if az(j,i) < 0 az(j,i) = az(j,i) + pi*2; end
AZ(j,i) =az(j,i) *180/pi;%угла азимута спутников в градусах
EL(j,i) = TT(j,i) *180/pi;%угла видимости спутников в градусах
% ПЕРЕСЧЕТ ВРЕМЕНИ
A(j)=mod(t(j),86400); her(j)=floor(A(j)/3600); m(j)=floor((A(j)-her(j)*3600)/60); sek(j)=A(j)-her(j)*3600-m(j)*60;
%Построение полярной системы координат
179
TT =satang;
TT(j,i) =TT;%угол видимости спутников
%расчет угла азимута спутников xn =-cos(lon)*sin(lat); yn =-sin(lon)*sin(lat); zn = cos(lat); xe =-sin(lon); ye = cos(lon); xaz = xe*xll + ye*yll; yaz = xn*xll + yn*yll + zn*zll; if (xaz == 0) or (yaz == 0) az(j)= 0; else az(j,i) = atan2(xaz,yaz); end if az(j,i) < 0 az(j,i) = az(j,i) + pi*2; end
AZ(j,i) =az(j,i) *180/pi;%угла азимута спутников в градусах
EL(j,i) = TT(j,i) *180/pi;%угла видимости спутников в градусах
% ПЕРЕСЧЕТ ВРЕМЕНИ
A(j)=mod(t(j),86400); her(j)=floor(A(j)/3600); m(j)=floor((A(j)-her(j)*3600)/60); sek(j)=A(j)-her(j)*3600-m(j)*60;
%Построение полярной системы координат
179
if EL(j,i) < 0 elp = 180; else elp = (EL(j,i) - 90); end; azp = (AZ(j,i) + 90.0); rad = pi / 180; x0 = 0; y0 = 0; xt(j,i) = (elp * cos(azp * rad)); yt(j,i) = -(elp * sin(azp * rad));
% fprintf('i=%i j=%i \n' , i, j); end % i = ns end; % if ( alm(i).A05 > 0 ) end % j = time
%ВНИМАНИЕ. Для вывода времени визуализации спутников на график установите kt t_itle=[d2 ' ' num2str(her(kt)) ':' num2str(m(kt)) ':' num2str(sek(kt))];
%X_label=['Широта' ':' num2str(lat) ';' 'долгота' ':' num2str(lon) ';' 'высота' ':' num2str(hr)];
%num2ctr(lat)
%num2str(her(kt))
%X_label=['66' ':']; n = 6; max_n = max(nom_ns); n_end = mod(max(nom_ns),n); n_end = mod(kol, n); n2 = fix(kol / n) * n - n +1;
%Формирование таблицы вывода времени UTC (Time), GPS (Tgps в секундах), номера спутника
(nns),
% углов видимости и азимута от времени и номера спутника for i=1:n:kol fprintf(' Time Tgps '); for k=1: n nns = nom_ns(i+k-1); fprintf(' %2i ', nns); end; fprintf(' \n'); for j=1:L fprintf('%2i:%2i:%2i %i ',her(j),m(j),sek(j), t(j)); for k=1: n nns = nom_ns(i+k-1); fprintf('%6.1f *%6.1f ', EL(j,nns), AZ(j,nns) );
180
% fprintf('i=%i j=%i \n' , i, j); end % i = ns end; % if ( alm(i).A05 > 0 ) end % j = time
%ВНИМАНИЕ. Для вывода времени визуализации спутников на график установите kt t_itle=[d2 ' ' num2str(her(kt)) ':' num2str(m(kt)) ':' num2str(sek(kt))];
%X_label=['Широта' ':' num2str(lat) ';' 'долгота' ':' num2str(lon) ';' 'высота' ':' num2str(hr)];
%num2ctr(lat)
%num2str(her(kt))
%X_label=['66' ':']; n = 6; max_n = max(nom_ns); n_end = mod(max(nom_ns),n); n_end = mod(kol, n); n2 = fix(kol / n) * n - n +1;
%Формирование таблицы вывода времени UTC (Time), GPS (Tgps в секундах), номера спутника
(nns),
% углов видимости и азимута от времени и номера спутника for i=1:n:kol fprintf(' Time Tgps '); for k=1: n nns = nom_ns(i+k-1); fprintf(' %2i ', nns); end; fprintf(' \n'); for j=1:L fprintf('%2i:%2i:%2i %i ',her(j),m(j),sek(j), t(j)); for k=1: n nns = nom_ns(i+k-1); fprintf('%6.1f *%6.1f ', EL(j,nns), AZ(j,nns) );
180
end; fprintf(' \n'); end ; % J=1:L if (i) == (n2) n = n_end; end; end% i hold on
%Окружности уровней на круговой диаграмме видимости спутников k1 = 10; k2 = 30; k3 = 50; k4 = 70; k5 = 85; k6=90; n=0; for k=1:5:365 n=n+1; m1 = pi / 180; x(n)=cos(k*m1); y(n)=sin(k*m1); end;
%График круговой диаграммы plot(k1*x(:),k1*y(:),'k:', k2*x(:),k2*y(:),'k:', k3*x(:),k3*y(:),'k:',k4*x(:),k4*y(:),'k:', k5*x(:),k5*y(:),'r', k6*x(:),k6*y(:),'r:'); text(5, 10,'80','FontSize',12,'FontName','TimesNewRoman'); text(18, 23,'60','FontSize',12,'FontName','TimesNewRoman'); text(32, 37,'40','FontSize',12,'FontName','TimesNewRoman'); text(45, 50,'20','FontSize',12,'FontName','TimesNewRoman'); text(55, 60,'5','FontSize',12,'FontName','TimesNewRoman'); text(62, 67,'0','FontSize',12,'FontName','TimesNewRoman'); grid on;
%Построение изображений видимых спутников на круговой диаграмме i=1; for k=1:kol i = nom_ns(k) ; if (i < 31) plot(xt(kt,i),yt(kt,i), 'Marker' ,'o','MarkerSize',20,'MarkerFaceColor','g' ) ; else plot(xt(kt,i),yt(kt,i), 'Marker' ,'o','MarkerSize',20,'MarkerFaceColor','r' ) ; end;
181
%Окружности уровней на круговой диаграмме видимости спутников k1 = 10; k2 = 30; k3 = 50; k4 = 70; k5 = 85; k6=90; n=0; for k=1:5:365 n=n+1; m1 = pi / 180; x(n)=cos(k*m1); y(n)=sin(k*m1); end;
%График круговой диаграммы plot(k1*x(:),k1*y(:),'k:', k2*x(:),k2*y(:),'k:', k3*x(:),k3*y(:),'k:',k4*x(:),k4*y(:),'k:', k5*x(:),k5*y(:),'r', k6*x(:),k6*y(:),'r:'); text(5, 10,'80','FontSize',12,'FontName','TimesNewRoman'); text(18, 23,'60','FontSize',12,'FontName','TimesNewRoman'); text(32, 37,'40','FontSize',12,'FontName','TimesNewRoman'); text(45, 50,'20','FontSize',12,'FontName','TimesNewRoman'); text(55, 60,'5','FontSize',12,'FontName','TimesNewRoman'); text(62, 67,'0','FontSize',12,'FontName','TimesNewRoman'); grid on;
%Построение изображений видимых спутников на круговой диаграмме i=1; for k=1:kol i = nom_ns(k) ; if (i < 31) plot(xt(kt,i),yt(kt,i), 'Marker' ,'o','MarkerSize',20,'MarkerFaceColor','g' ) ; else plot(xt(kt,i),yt(kt,i), 'Marker' ,'o','MarkerSize',20,'MarkerFaceColor','r' ) ; end;
181
title(t_itle); xlabel(X_label,'FontSize',12,'FontName','TimesNewRoman') set(get(gcf,'CurrentAxes'),'FontSize',14,'FontName','TimesNewRoman') hold on if i<32 str1 = num2str( i, 2); else str1 = num2str( (i - 37), 2); end text(xt(kt,i), yt(kt,i),str1,'FontSize',14,'FontName','TimesNewRoman','HorizontalAlignment','center' ); axis( [-100 100 -100 100]);
%axis( [-90 90 -90 90]); end clear
Функция LLHECEF
function [lons,lats,hrs] = LLHECEF(Xk,Yk,Zk)
%Имя функции: LLHECEF
%Функция выполняет преобразование координат.
%Входные данные:Xk (Rx), Yk (Ry), Zk (Rz)- координаты в ECEF
%Выходные данные:lon-долгота,lat-широта,h-высота
%a,b-большая и малая полуоси эллипсоида a=6378137.0; b=6356752.314; xy = sqrt(Xk*Xk + Yk*Yk); thet = atan(Zk*a/(xy*b)); esq = 1.0-b*b/(a*a); epsq = a*a/(b*b)-1.0; lats = atan((Zk+epsq*b*(sin(thet)^3))/(xy-esq*a*(cos(thet)^3))); lons = atan2(Yk,Xk);%! if lons < 0 lons = 2*pi + lons; end ; n = a*a/sqrt(a*a*cos(lats)*cos(lats) + b*b*sin(lats)*sin(lats)); hrs = xy/cos(lats)-n; end
Функция ECEFLLH
function [Rx,Ry,Rz] = ECEFLLH(lon, lat,hr)
%Имя функции: ECEFLLH
%Функция выполняет преобразование координат
182
%axis( [-90 90 -90 90]); end clear
Функция LLHECEF
function [lons,lats,hrs] = LLHECEF(Xk,Yk,Zk)
%Имя функции: LLHECEF
%Функция выполняет преобразование координат.
%Входные данные:Xk (Rx), Yk (Ry), Zk (Rz)- координаты в ECEF
%Выходные данные:lon-долгота,lat-широта,h-высота
%a,b-большая и малая полуоси эллипсоида a=6378137.0; b=6356752.314; xy = sqrt(Xk*Xk + Yk*Yk); thet = atan(Zk*a/(xy*b)); esq = 1.0-b*b/(a*a); epsq = a*a/(b*b)-1.0; lats = atan((Zk+epsq*b*(sin(thet)^3))/(xy-esq*a*(cos(thet)^3))); lons = atan2(Yk,Xk);%! if lons < 0 lons = 2*pi + lons; end ; n = a*a/sqrt(a*a*cos(lats)*cos(lats) + b*b*sin(lats)*sin(lats)); hrs = xy/cos(lats)-n; end
Функция ECEFLLH
function [Rx,Ry,Rz] = ECEFLLH(lon, lat,hr)
%Имя функции: ECEFLLH
%Функция выполняет преобразование координат
182
%Входные данные:lon-долгота,lat-широта,h-высота;a,b-большая
%и малая полуоси эллипсоида
%Выходные данные:Rx,Ry,Rz- координаты в ECEF
%Для WGS-84 a=6378137.0; b=6356752.314; n=a*a/sqrt(a*a*cos(lat)*cos(lat)+b*b*sin(lat)*sin(lat));
Rx=(n+hr)*cos(lat)*cos(lon);
Ry=(n+hr)*cos(lat)*sin(lon);
Rz=(b*b/(a*a)*n+hr)*sin(lat);
Функция Tim
function [week,modeweek,d,dweek,weeks]=Tim(d2,h,min,s)
%Имя функции:Tim
%Функция по данным d2='месяц/день/год';h=час;min=минута;s=секунда рассчитывает
% номер недели ([week), при необходимости номер модифицированной недели (modeweek), число дней,
%прошедших с 6 января 1980 года (d), номер дня недели (dweek), время GPS в секундах от начала не- дели.
%Неделя начинается в ночь с субботы на воскресенье. Воскресенье нулевой день.
%d2='10/35/2003';h=23.0;min=59.0;s=59.0;
%week = ceil(DAYSDIF('1/6/1980',d2,3)/7); week = floor(DAYSDIF('1/6/1980',d2,3)/7);% текущая неделя modeweek=week;
%modeweek=week - 1024; d = DAYSDIF('1/6/1980',d2,3); dweek=fix(d-week*7); weeks=(dweek)*24*60*60+h*60*60+min*60+s;
Результат выполнения программы изображен на рис. 5.2.
183
-100
-50 0
50 100
-100
-80
-60
-40
-20 0
20 40 60 80 100 80 60 40 20 5
0 12/21/2006 14:52:58
Широта:0.88033;долгота:0.5311;высота:187.488 3
7 14 16 18 19 21 22 26 29 1
7 8
22 24
Рис. 5.2
. Видимость спутников GPS и ГЛОНАСС
На рис. 5.3 показаны экспериментальные данные видимых спутников, полученные приемником НАВИОР 14.
Рис. 5.3
. Видимость спутников GPS и ГЛОНАСС (данные измерений)
184
Приведенная программа позволяет также рассчитать углы азимута и места в течение интервала времени, задаваемого пользователем и прогнозировать сеансы навигационных определений при совместном применении систем GPS и ГЛОНАСС.
5.4 Модель движения спутников GPS, ГЛОНАСС, GALILEO
5.4.1 Краткие сведения из теории
Рассмотрим кратко общие сведения о системе GALILEO, которая в настоящее время находится в стадии создания. Европейская спутниковая система GALILEO будет содер- жать 27 рабочих и три резервных навигационных спутника, расположенных равномерно на трех орбитах
. 5.4
(
рис
)
Рис. 5.4. Орбитальное положение спутников GALILEO (модель
Долготы восходящих узлов орбит отстоят друг от друга на 120
°. В плоскости орбит спутники расположены через 40
°. Наклонение орбит к плоскости экватора составляет 56°.
Средние значения больших полуосей орбит и времени обращения составляют 30049415.54 м и 12 часов 24 мин. соответственно.
Система GALILEO будет предоставлять следующие виды обслуживания: открытое обслуживание, OS (Open Service)- сигналы доступные всем пользователям; служба поиска и спасения, SAR (Search and Rescue)- сигналы, доступные всем поль- зователям; служба безопасности движения, SLS (Safety of Life Service) – сигналы доступны авиационным и морским потребителям на договорной основе; коммерческая служба, CS (Commercial Service) – сигналы доступны пользователям на платной основе;
)
185
государственное регулируемое обслуживание, PRC (Public Regulated Service)- го- сударственным службам предоставляются помехозащищенные и зашифрованные навига- ционные сигналы.
Данные об орбитальном движении спутников GALILEO будут отличаться от дан- ных GPS только количественными значениями. Поскольку эта система еще не развернута, то в рассматриваемой ниже модели в интегральном альманахе GPS, ГЛОНАСС, GALILEO данные по GALILEO получены искусственно на основании сведений, имеющихся в пе- риодических публикациях.
32>
Данные об орбитальном движении спутников GALILEO будут отличаться от дан- ных GPS только количественными значениями. Поскольку эта система еще не развернута, то в рассматриваемой ниже модели в интегральном альманахе GPS, ГЛОНАСС, GALILEO данные по GALILEO получены искусственно на основании сведений, имеющихся в пе- риодических публикациях.
32>
1 ... 6 7 8 9 10 11 12 13 14
Цель лабораторной работы изучение орбитального движения навигационных спутников GPS, ГЛОНАСС, GALILEO с последующей визуализацией спутников на любой момент времени.
5.4.2 Лабораторная работа 5. 4 «Модель движения и визуализация спутников GPS,
ГЛОНАСС, GALILEO »
Комплекс программ для выполнения настоящей работы основан на пакете
Vsion_GLONASS_GPS, вкотором файл Vision_GLONASS_GPS.m заменяется файлом
Vision_GL_GPS_GAL.m, а входными данными является альманах спутников трех сис- тем- GPS, ГЛОНАСС, GALILEO приведенный в приложении.
Рекомендуется следующий порядок выполнения лабораторной работы.
1. Создайте папку Vision_GLONASS_GPS_GALILEO _My.
2. Скопируйте в папку
Vision_GLONASS_GPS_GALILEO _My из
Vsion_GLONASS_GPS
функции и файлы, из папки
Vi-
sion_GLONASS_GPS_GALILEO файл Vision_GL_GPS_GAL.m, из приложения файл альманаха AlmGGG.yum. Комплекс готов к работе. Выполните задания 1, 2.
3. Задание 1 .Откройте файл Vision_GL_GPS_GAL.m, убедитесь в правильности введен- ных входных данных ( альманах , дата и время) исполните файл и результаты визуали- зации по каждой спутниковой системе внесите в отчет.
4. Задание 2. Измените в Vision_GL_GPS_GAL.m дату на 1 сутки, выполните файл, вне- сите результаты в отчет. Объясните причины, изменения местоположения спутников по каждой из систем.
5.4.3 Задание для самоподготовки
Подготовьте сравнительную характеристику спутниковых радионавигационных систем GPS, ГЛОНАСС, GALILEO
186
5.4.4 Файл из папки Vision_GLONASS_GPS_GALILEO
Файла Vision_GL_GPS_GAL.m
clear all
%Имя m-файла:Vision_GL_GPS_GAL.m
%Программа рассчитывает углы видимости навигационных спутников GPS, ГЛОНАСС, GALLILEO
%(азимута и места) спутников на заданный момент времени
%Входные данные:
%файл альманаха в формате Yuma,имя файла альманаха присваивается
%переменной "Dat",например,Dat = 'имя файла альманаха';
%данные о начале отсчета "d2",d2='месяц/день/год';h=час;min=минута;s=секунда;
%координаты позиции приемника -lat(широта в радианах),lon (долгота в радианах,
%hr (высота в метрах);
%шаг с каким будут рассчитываться параметры (step,секунды);
%количество точек (L), в которых будут рассчитываться параметры орбит
%L=12*3600/step,L читается так: количество часов (например,12)
%число секунд в часе (3600) деленное на шаг (step)
%Постоянные:
%скорость вращения Земли
OMEGAeDOT=7.2921151467e-005;
%радиусы земного эллипсоида
A_WGS84=6378137.0;
B_WGS84=6356752.314;
%константы mu=398600500000000;
F_CONST =
4.442807633E-10; kt=1;%установка времени на титульной надписи графика, определяется параметрами d2'; h; min; s и j или L;
%Задание цветов для графики color6(1:14) = ['k' 'b' 'g' 'r' 'c' 'm' 'r' ':' 'g' ':' 'b' ':' 'k' 'h'];
%Входные данные
Dat = 'AlmGGG.yum';%альманах спутников GPS, ГЛОНАСС, GALLILEO d2='12/21/2006'; h=14; min=52.0; s=58.0;
%координаты точки, из которой наблюдаются спутники lat = 0.88032730015257;%50 градусов 26минут 20.54 секунд lon = 0.53109641675259;%30 градусов 25 минут 46.4995секунд hr=187.488;% метров
X_label=['Широта' ':' num2str(lat) ';' 'долгота' ':' num2str(lon) ';' 'высота' ':' num2str(hr)];
187
step=300;%шаг отсчета времени в секундах (300=5 минутам);шаг можно изменять step=0;
%L=(24*3600) / step;% убрать % перед L для вывода таблицы улов видимости и азимута
L=1;% установить % перед L для вывода таблицы улов видимости и азимута
%Чтение альманаха
[alm,max_kol] = Yuma_GPS_GLONAS_Alm(Dat);
%max_kol = 32; nom = 1; i = 0; k = 0; i = 0;
% for i = 1 : max_kol while ( i <91) id = alm(nom).ID;
Health = alm(nom).Health;
%fprintf('1: i=%i k=%i nom=%i id=%i Health=%i \n', i, k, nom, id, Health); if ( id > 0)
Health = alm(nom).Health; if ( Health == 0) k = k + 1; nom_ns(k) = id;
% fprintf('2: i=%i k=%i nom=%i id=%i Health=%i \n', i, k, nom, id, Health); nom = nom + 1; else nom = nom + 1; end; else nom = nom + 1; end; i = i + 1; end; % i kol = k; fprintf('kol=%i \n', kol); nom_ns % - номер навигационного спутника
[Rx,Ry,Rz] = ECEFLLH(lon, lat,hr);
%Rx=0;Ry=0;,Rz=0;%центр масс Земли
%Начало отсчета текущего времени
[week,modeweek,d,dweek,weeks]=Tim(d2,h,min,s); for j = 1% 0:L
188
% for j = 1:L % 0:L t( j )=weeks+step*(j); %-step;
%t1(j) = t(j)/60; %изменение дискретности текущего времени
%d_wn = (week - alm(i).Week);
%d_wn = 0; for k = 1 : kol i = nom_ns(k) ; % input "i" !!!
% fprintf('i=%i alm(i).Week= %i \n',i, alm(i).Week) d_wn=(modeweek - alm(i).Week);%если в альманахе не учтено 1024 tk = t(j) + d_wn * 604800 - alm(i).TOA; d_wn = abs(modeweek - alm(i).Week); dd = 302400.0 + d_wn * 604800; if ( ( alm(i).A05 > 0 ) & ( alm(i).Health == 0 ) ) while (abs(tk) > dd) if tk > dd tk = tk - 604800; else if tk < -dd tk = tk + 604800; end end % if end % while
%Справочник по альманаху- цифра в скобках обозначает порядковый номер
%параметра альманаха в формате YUMA
%alm(ID).ID(1); alm(ID).Health(2); alm(ID).e(3); alm(ID).TOA(4); alm(ID).deltai(5);
%alm(ID).OMEGADOT(6); alm(ID).A05(7); alm(ID).omega0(8); alm(ID).omega(9);
%alm(ID).M0(10); alm(ID).Af0(11); alm(ID).Af1(12); alm(ID).Week(13); n0=sqrt((mu) / (alm(i).A05^6)); j2 = 1082.68E-6; re = (A_WGS84 + B_WGS84) / 2.; sin55 = sin(55.0 * pi / 180.0); dn = 1.5 * j2 * re * re / (alm(i).A05^4 ) * (1. - 1.5 * sin55 * sin55);
%dn = 0; n=n0 * (1 + dn);
189
Mk = alm(i).M0 + n*tk; e=alm(i).e;
%решение уравнения Кеплера eps = 1.0E-15; y = e * sin(Mk); x1 = Mk; x = y; for k = 0 : 15 % количество итераций x2 = x1; x1 = x; y1 = y; y = Mk - (x - e * sin(x)); if (abs(y - y1) < eps) break end x = (x2 * y - x * y1) / (y - y1); end % kepler
Ek = x; deltr = F_CONST * alm(i).e * alm(i).A05 * sin(Ek); dt1 = alm(i).Af0 + alm(i).Af1 * tk + deltr; tk = tk - dt1; vd = 1. - alm(i).e * cos(Ek); nuk =atan2(sqrt(1-alm(i).e^2)*sin(Ek) / vd,(cos(Ek)-alm(i).e) / vd);
Ek = acos((alm(i).e+cos(nuk))/(1+alm(i).e*cos(nuk)));
Fk =nuk + alm(i).omega; uk =Fk; ik=alm(i).deltai;
% alm(i) rk =(alm(i).A05^2)*(1.0-alm(i).e*cos(Ek)); xkk =rk*cos(uk); ykk =rk*sin(uk);
OMEGAk =alm(i).omega0+(alm(i).OMEGADOT-OMEGAeDOT)*tk-OMEGAeDOT*alm(i).TOA;
% fprintf('i=%i j=%i \n ',i, j);
Xk(j,i) = xkk*cos(OMEGAk)-ykk*cos(ik)*sin(OMEGAk);
Yk(j,i) = xkk*sin(OMEGAk)+ykk*cos(ik)*cos(OMEGAk);
Zk(j,i) = ykk*sin(ik);
%Дальности до спутников
PR(j,i) = sqrt((Xk(j,i) - Rx)^2 + (Yk(j,i) - Ry)^2 + (Zk(j,i) - Rz)^2);
190
%Перевод в географическую систему если требуется
%[lons,lats,hrs] = LLHECEF(Xk,Yk,Zk);
%(Llon(j),Llat(j),Hhr(j)) = [lons,lats,hrs];
%расчет угла видимости спутника xls = Xk(j,i) - Rx; yls = Yk(j,i) - Ry; zls = Zk(j,i) - Rz; range1 = sqrt(xls*xls+yls*yls+zls*zls); if j>1 doppler(j-1) = (range1 - range2) * 5.2514 / step; end range2 = range1;
P = sqrt(Rx * Rx + Ry * Ry + Rz * Rz); tdot = ( Rx*xls+Ry*yls+Rz*zls)/range1/P; xll = xls/range1; yll = yls/range1; zll = zls/range1; if tdot >= 1.00 b = 0.0; elseif tdot <= -1.00 b = pi; else b = acos( tdot); end satang = pi/2.0 - b;
TT =satang;
TT(j,i) =TT;%угол видимости спутников
%расчет угла азимута спутников xn =-cos(lon)*sin(lat); yn =-sin(lon)*sin(lat); zn = cos(lat); xe =-sin(lon); ye = cos(lon); xaz = xe*xll + ye*yll; yaz = xn*xll + yn*yll + zn*zll; if (xaz == 0) or (yaz == 0) az(j)= 0; else az(j,i) = atan2(xaz,yaz); end
191
if az(j,i) < 0 az(j,i) = az(j,i) + pi*2; end
AZ(j,i) =az(j,i) *180/pi;%угла азимута спутников в градусах
EL(j,i) = TT(j,i) *180/pi;%угла видимости спутников в градусах
% ПЕРЕСЧЕТ ВРЕМЕНИ
A(j)=mod(t(j),86400); her(j)=floor(A(j)/3600); m(j)=floor((A(j)-her(j)*3600)/60); sek(j)=A(j)-her(j)*3600-m(j)*60;
%Построение полярной системы координат if EL(j,i) < 0 elp = 180; else elp = (EL(j,i) - 90); end; azp = (AZ(j,i) + 90.0); rad = pi / 180; x0 = 0; y0 = 0; xt(j,i) = (elp * cos(azp * rad)); yt(j,i) = -(elp * sin(azp * rad));
% fprintf('i=%i j=%i \n' , i, j); end % i = ns end; % if ( alm(i).A05 > 0 ) end % j = time
%ВНИМАНИЕ. Для вывода времени визуализации спутников на график установите kt t_itle=[d2 ' ' num2str(her(kt)) ':' num2str(m(kt)) ':' num2str(sek(kt))];
%X_label=['Широта' ':' num2str(lat) ';' 'долгота' ':' num2str(lon) ';' 'высота' ':' num2str(hr)];
%num2ctr(lat)
%num2str(her(kt))
%X_label=['66' ':']; n = 6; max_n = max(nom_ns); n_end = mod(max(nom_ns),n); n_end = mod(kol, n); n2 = fix(kol / n) * n - n +1;
192
%Формирование таблицы вывода времени UTC (Time), GPS (Tgps в секундах), номера спутника
(nns),
% углов видимости и азимута от времени и номера спутника for i=1:n:kol fprintf(' Time Tgps '); for k=1: n nns = nom_ns(i+k-1); fprintf(' %2i ', nns); end; fprintf(' \n'); for j=1:L fprintf('%2i:%2i:%2i %i ',her(j),m(j),sek(j), t(j)); for k=1: n nns = nom_ns(i+k-1); fprintf('%6.1f *%6.1f ', EL(j,nns), AZ(j,nns) ); end; fprintf(' \n'); end ; % J=1:L if (i) == (n2) n = n_end; end; end% i hold on
%Окружности уровней на круговой диаграмме видимости спутников k1 = 10; k2 = 30; k3 = 50; k4 = 70; k5 = 85; k6=90; n=0; for k=1:5:365 n=n+1; m1 = pi / 180; x(n)=cos(k*m1); y(n)=sin(k*m1); end;
%График круговой диаграммы plot(k1*x(:),k1*y(:),'k:', k2*x(:),k2*y(:),'k:', k3*x(:),k3*y(:),'k:',k4*x(:),k4*y(:),'k:', k5*x(:),k5*y(:),'r', k6*x(:),k6*y(:),'r:'); text(5, 10,'80','FontSize',12,'FontName','TimesNewRoman');
193
text(18, 23,'60','FontSize',12,'FontName','TimesNewRoman'); text(32, 37,'40','FontSize',12,'FontName','TimesNewRoman'); text(45, 50,'20','FontSize',12,'FontName','TimesNewRoman'); text(55, 60,'5','FontSize',12,'FontName','TimesNewRoman'); text(62, 67,'0','FontSize',12,'FontName','TimesNewRoman'); grid on;
%Построение изображений видимых спутников на круговой диаграмме i=1; for k=1:kol i = nom_ns(k) ; if (i < 31) plot(xt(kt,i),yt(kt,i), 'Marker' ,'o','MarkerSize',20,'MarkerFaceColor','g' ) ; end; if ((i > 31) & ( i < 62)) plot(xt(kt,i),yt(kt,i), 'Marker' ,'o','MarkerSize',20,'MarkerFaceColor','r' ) ; end; if (i > 61) plot(xt(kt,i),yt(kt,i), 'Marker' ,'o','MarkerSize',20,'MarkerFaceColor','y' ) ; end; title(t_itle); xlabel(X_label,'FontSize',12,'FontName','TimesNewRoman') set(get(gcf,'CurrentAxes'),'FontSize',14,'FontName','TimesNewRoman') hold on str1 = num2str( i, 2);
%{ if i<32 str1 = num2str( i, 2); else str1 = num2str( (i), 2); end
%} text(xt(kt,i), yt(kt,i),str1,'FontSize',14,'FontName','TimesNewRoman','HorizontalAlignment','center' ); axis( [-100 100 -100 100]);
%axis( [-90 90 -90 90]); end clear
Результат выполнения программы изображен на рис. 5.5.
194
-100
-50 0
50 100
-100
-80
-60
-40
-20 0
20 40 60 80 100 80 60 40 20 5
0 12/21/2006 14:52:58
Широта:0.88033;долгота:0.5311;высота:187.488 3
7 14 16 18 19 21 22 26 29 38 44 45 59 61 64 65 66 72 73 74 75 80 81 82 83 91
Рис. 5.5. Видимость спутников GPS, ГЛОНАСС, GALILEO
5.4.5 Лабораторная работа 5. 5 «Орбиты спутников GPS, ГЛОНАСС, GALILEO »
Цель лабораторной работы моделирование орбит спутников GPS, ГЛОНАСС,
GALILEO
Для одновременного расчета орбит спутников трех систем GPS, ГЛОНАСС, GALI-
LEO пакет программ, сформированный в лабораторной работе 5. 4 может быть дополнен файлами ORBITA_GGG.m и map. m из папки ORBIT_GGG.
Рекомендуется следующий порядок выполнения лабораторной работы.
1. Создайте папку ORBIT_GGG _My.
2. Из папки Vision_GLONASS_GPS_GALILEO скопируйте в папку ORBIT_GGG _My
функции ECEFLLH, LLHECEF, Tim; файлы Yuma_GPS_GLONAS_Alm.m,
AlmGGG.yum; из папки ORBIT_GGG файл ORBITA_GGG.m.
3. Запустите MatLab [7, 8].
4. Обратитесь к папке ORBIT_GGG _My , откройте ее, изучите функции, файлы и про- граммные процедуры по комментариям и выполните задания 1, 2.
5. Задание 1. Откройте файл ORBITA_GGG.m. Сформируйте желаемую конфигурацию спутников, орбиты которых требуется рассчитать (см. комментарий к файлу). Устано- вите скорость вращения Земли, равную 0 (OMEGAeDOT=0). Выполните файл. Дайте описание, полученного графического изображения орбит. Результаты внесите в отчет.
6. Задание 2. В файле ORBITA_GGG.m сформируйте конфигурацию спутников: 1 спут- ник GPS, 1 спутник
ГЛОНАСС, 1 спутник GALILEO. Установите
195
OMEGAeDOT=7.2921151467e-005. Выполните файл. Дайте описание, полученного графического изображения орбит. Результаты внесите в отчет.
5.4.6 Задания и вопросы для самоподготовки
1. Чем различаются орбиты спутников GPS, ГЛОНАСС, GALILEO?
2. По каким параметрам можно определить принадлежность спутника той или иной ор- бите?
3. Сформулируйте алгоритм определения дальности до спутника из точки наблюдения.
4. В какой системе координат рассчитываются углы видимости спутника?
5.4.7 Листинг файла ORBITA_GGG.m
Файл ORBITA_GGG.m
clear all
%Имя m-файла:ORBITA_GGG.m
%Программа рассчитывает орбиты спутников GPS, ГЛОНАСС, GALLILEO
%Входные данные:
%файл альманаха в формате Yuma,имя файла альманаха присваивается
%переменной "Dat",например,Dat = 'имя файла альманаха';
%данные о начале отсчета "d2",d2='месяц/день/год';h=час;min=минута;s=секунда;
%координаты позиции приемника -lat(широта в радианах),lon (долгота в радианах,
%hr (высота в метрах);
%шаг с каким будут рассчитываться параметры (step,секунды);
%количество точек (L), в которых будут рассчитываться параметры орбит
%L=12*3600/step,L читается так: количество часов (например,12)
%число секунд в часе (3600) деленное на шаг (step)
%Выходные данные:
%Xk(j,i) - координата X спутника с номером i на момент времени j;
%Yk(j,i) - координата Y спутника с номером i на момент времени j;
%Zk(j,i) - координата Z спутника с номером i на момент времени j;
%Примечание: входные и выходные данные могут быть дополнены / изменены закомментированны- ми
%параметрами, помеченными строкой %%%%%%%%%%%%%%%%%%%%%%%;
%Постоянные:
%скорость вращения Земли
%OMEGAeDOT=7.2921151467e-005;
OMEGAeDOT=0;%%%%%%%%%%%%%%для орбитальных плоскостей
%радиусы земного эллипсоида
A_WGS84=6378137.0;
B_WGS84=6356752.314;
%константы mu=398600500000000;
196
F_CONST =
4.442807633E-10;
%Задание цветов для графики j_color = 0; color6(1:11) = ['B' 'B' 'B' 'B' 'B' 'B' 'o' 'o' '+' '+' '+'];%%%%%%%%%%%%%%%%%%%%%%%
%Входные данные
Dat = 'AlmGGG.yum';%альманах спутников GPS, ГЛОНАСС, GALLILEO
N=6378136;% радиус Земли (используется, как нормирующий коэффициент map(N);%функция выводит на графики Землю d2='12/21/2006'; %%%%%%%%%%%%%%%%%%%%%%% h=14; min=52.0; s=58.0;%%%%%%%%%%%%%%%%%%%%%%%
%координаты точки, из которой наблюдаются спутники lat = 0.88032730015257;%50 градусов 26минут 20.54 секунд
%%%%%%%%%%%%%%%%%%%%%% lon = 0.53109641675259;%30 градусов 25 минут 46.4995секунд
%%%%%%%%%%%%%%%%%%%%% hr=187.488;% метров %%%%%%%%%%%%%%%%%%%%%%% step=600;%шаг отсчета времени в секундах (300=5 минутам);шаг можно изменять
%step=0;
L=(12*3600) / step;% убрать перед L для вывода таблицы улов видимости и азимута
%%%%%%%%%%
%L=1;% установить % перед L для вывода таблицы улов видимости и азимута
%Чтение альманаха
[alm,max_kol] = Yuma_GPS_GLONAS_Alm(Dat);%%%%%%%%%%%%%%%%%%%%%%% nom = 1; i = 0; k = 0; i = 0; while ( i <91) id = alm(nom).ID;
Health = alm(nom).Health; if ( id > 0)
Health = alm(nom).Health; if ( Health == 0) k = k + 1; nom_ns(k) = id; nom = nom + 1; else nom = nom + 1; end; else
197
nom = nom + 1; end; i = i + 1; end; % i kol = k; nom_ns ; % - номер навигационного спутника
[Rx,Ry,Rz] = ECEFLLH(lon, lat,hr);%%%%%%%%%%%%%%%%%%%%%%%
[week,modeweek,d,dweek,weeks]=Tim(d2,h,min,s); for j = 1:L
% for j = 1:L % 0:L t( j )=weeks+step*(j); %-step;%%%%%%%%%%%%%%%%%%%%%%%
%t1(j) = t(j)/60; %изменение дискретности текущего времени
%d_wn = (week - alm(i).Week);
%d_wn = 0; kol=11;%%%%%%%%%%%%%%%%%%%%%%% nom_ns(1:kol) =[1 3 4 5 9 10 38 58 62 72 82 ];%%%%%%%%%%%%%%%%%%%%%%% for k = 1 : kol i = nom_ns(k) ; % input "i" !!! d_wn=(modeweek - alm(i).Week);%если в альманахе не учтено 1024 tk = t(j) + d_wn * 604800 - alm(i).TOA; d_wn = abs(modeweek - alm(i).Week); dd = 302400.0 + d_wn * 604800; if ( ( alm(i).A05 > 0 ) & ( alm(i).Health == 0 ) ) while (abs(tk) > dd) if tk > dd tk = tk - 604800; else if tk < -dd tk = tk + 604800; end end % if end % while
%Справочник по альманаху- цифра в скобках обозначает порядковый номер
%параметра альманаха в формате YUMA
%alm(ID).ID(1); alm(ID).Health(2); alm(ID).e(3); alm(ID).TOA(4); alm(ID).deltai(5);
%alm(ID).OMEGADOT(6); alm(ID).A05(7); alm(ID).omega0(8); alm(ID).omega(9);
%alm(ID).M0(10); alm(ID).Af0(11); alm(ID).Af1(12); alm(ID).Week(13); n0=sqrt((mu) / (alm(i).A05^6)); j2 = 1082.68E-6; re = (A_WGS84 + B_WGS84) / 2.; sin55 = sin(55.0 * pi / 180.0); dn = 1.5 * j2 * re * re / (alm(i).A05^4 ) * (1. - 1.5 * sin55 * sin55);
198
%dn = 0; n=n0 * (1 + dn);
Mk = alm(i).M0 + n*tk; e=alm(i).e;
%решение уравнения Кеплера eps = 1.0E-15; y = e * sin(Mk); x1 = Mk; x = y; for k = 0 : 15 % количество итераций x2 = x1; x1 = x; y1 = y; y = Mk - (x - e * sin(x)); if (abs(y - y1) < eps) break end x = (x2 * y - x * y1) / (y - y1); end % kepler
Ek = x; deltr = F_CONST * alm(i).e * alm(i).A05 * sin(Ek); dt1 = alm(i).Af0 + alm(i).Af1 * tk + deltr; tk = tk - dt1; vd = 1. - alm(i).e * cos(Ek); nuk =atan2(sqrt(1-alm(i).e^2)*sin(Ek) / vd,(cos(Ek)-alm(i).e) / vd);
Ek = acos((alm(i).e+cos(nuk))/(1+alm(i).e*cos(nuk)));
Fk =nuk + alm(i).omega; uk =Fk; ik=alm(i).deltai; rk =(alm(i).A05^2)*(1.0-alm(i).e*cos(Ek)); xkk =rk*cos(uk); ykk =rk*sin(uk);
OMEGAk =alm(i).omega0+(alm(i).OMEGADOT-OMEGAeDOT)*tk-OMEGAeDOT*alm(i).TOA;
Xk(j,i) = xkk*cos(OMEGAk)-ykk*cos(ik)*sin(OMEGAk);
Yk(j,i) = xkk*sin(OMEGAk)+ykk*cos(ik)*cos(OMEGAk);
Zk(j,i) = ykk*sin(ik);
%%%%%%%%%%%%%%%%%%%%%%%
%{
%Дальности до спутников
PR(j,i) = sqrt((Xk(j,i) - Rx)^2 + (Yk(j,i) - Ry)^2 + (Zk(j,i) - Rz)^2);
%Перевод в географическую систему если требуется
%[lons,lats,hrs] = LLHECEF(Xk,Yk,Zk);
199
%(Llon(j),Llat(j),Hhr(j)) = [lons,lats,hrs];
%расчет угла видимости спутника xls = Xk(j,i) - Rx; yls = Yk(j,i) - Ry; zls = Zk(j,i) - Rz; range1 = sqrt(xls*xls+yls*yls+zls*zls); if j>1 doppler(j-1) = (range1 - range2) * 5.2514 / step; end range2 = range1;
P = sqrt(Rx * Rx + Ry * Ry + Rz * Rz); tdot = ( Rx*xls+Ry*yls+Rz*zls)/range1/P; xll = xls/range1; yll = yls/range1; zll = zls/range1; if tdot >= 1.00 b = 0.0; elseif tdot <= -1.00 b = pi; else b = acos( tdot); end satang = pi/2.0 - b;
TT =satang;
TT(j,i) =TT;%угол видимости спутников
%расчет угла азимута спутников xn =-cos(lon)*sin(lat); yn =-sin(lon)*sin(lat); zn = cos(lat); xe =-sin(lon); ye = cos(lon); xaz = xe*xll + ye*yll; yaz = xn*xll + yn*yll + zn*zll; if (xaz == 0) or (yaz == 0) az(j)= 0; else az(j,i) = atan2(xaz,yaz); end if az(j,i) < 0 az(j,i) = az(j,i) + pi*2;
200
end
AZ(j,i) =az(j,i) *180/pi;%угла азимута спутников в градусах
EL(j,i) = TT(j,i) *180/pi;%угла видимости спутников в градусах
% ПЕРЕСЧЕТ ВРЕМЕНИ
A(j)=mod(t(j),86400); her(j)=floor(A(j)/3600); m(j)=floor((A(j)-her(j)*3600)/60); sek(j)=A(j)-her(j)*3600-m(j)*60;
%Построение полярной системы координат if EL(j,i) < 0 elp = 180; else elp = (EL(j,i) - 90); end; azp = (AZ(j,i) + 90.0); rad = pi / 180; x0 = 0; y0 = 0; xt(j,i) = (elp * cos(azp * rad)); yt(j,i) = -(elp * sin(azp * rad));
%}
%%%%%%%%%%%%%%%%%%%%%%%% end % i = ns end; % if ( alm(i).A05 > 0 ) end % j = time for (i=1:kol) j_color = j_color + 1; if (j_color > 11 ) j_color = 1; end
S = color6(j_color); prn = nom_ns(i);
%%%%%%%%%%%%%%%%%%%%%%% hold on h_F1 = gca; plot3(Xk(:,prn),Yk(:,prn),Zk(:,prn),S,'LineWidth',0.5); axis([ -2.552*10^(7) 2.552*10^(7) -2.552*10^(7) 2.552*10^(7) -2.552*10^(7) 2.552*10^(7)]); set(get(gcf,'CurrentAxes'),'FontSize',14,'FontName','TimesNewRoman'); set(h_F1,'Position',[0.1 0.1 0.85 0.9]) ; xlabel('Координата X')
201
ylabel('Координата Y'), zlabel('Координата Z'),grid on str1 = num2str( prn); text(Xk(j,prn),
Yk(j,prn),Zk(j,prn),str1,'FontSize',14,'FontName','TimesNewRoman','HorizontalAlignment','center' ); hold on
%%%%%%%%%%%%%%%%%%%%%%% end clear
5.4.8 Пример выполнения файла:ORBITA_GGG.m
Результат выполнения программы изображен на рис. 5.6.
Рис. 5.6. Орбиты спутников GPS, ГЛОНАСС, GALILEO
На рис. 5.6 сплошными линиями показаны 6 орбит спутников GPS, маркером «о» 2 орбиты ГЛОНАСС, маркером «+» 3 орбиты GALILEO; цифрами обозначены номера спутников соответствующих систем.
5.5 Декодирование и расшифровка данных спутников ГЛОНАСС
5.5.1 Краткие сведения из теории
В данном подразделе приводится программа декодирования данных спутников
ГЛОНАСС. Данные, которые декодируются получены экспериментально с реального на-
202
вигационного приемника после корреляционной обработки в виде последовательности символов «0» и «1». Поскольку объем данных относительной большой около 60000 сим- волов, то приводятся два вспомогательных m-файла. Эти вспомогательные программы по- зволяют сформировать данные на бумажном носителе в виде последовательности шестна- дцатеричных чисел, из которых можно восстановить m-файл для декодирования. Экспе- риментальные данные рассматриваемые далее представляют собой символы длительно- стью 10 миллисекунд и являются составляющими информационных символов сложенных по модулю 2 с меандром имеющим частоту 100 Гц.
Примененный алгоритм декодирования основан на строгом соответствии данных, передаваемых с навигационного спутника ГЛОНАСС, которые соответствуют формату сообщений. Более подробно формат сообщений и данные, передаваемые в кадрах сообще- ний приводятся в интерфейсном контрольном документе ГЛОНАСС
и в книге [1] под- раздел 2. 2, стр. 77- 87).
Комплекс программ декодирования и расшифровки находится в папке
Decod_GLONASS.
Цель лабораторной работы освоение и применение методики декодирования и расшифровки данных спутниковой системы ГЛОНАСС.
5.5.2 Лабораторная работа 5. 6 «Декодирование данных спутников ГЛОНАСС в на- вигационном приемнике»
Рекомендуется следующий порядок выполнения лабораторной работы.
1. Создайте папку Decod_GLONASS _My и скопируете в ее файлы и функции из папки
Decod_GLONASS.
2. Запустите MatLab.
3. Обратитесь к папке Decod_GLONASS _My , откройте ее, изучите функции, файлы и программные процедуры по комментариям и выполните задания 1, 2.
4. Задание 1. Откройте файл Hex_GLONASS.m. Изучите программные процедуры фай- ла, используя его текст и расширенный комментарий.
Файл преобразования экспериментальных данных в шестнадцатеричные симво-
лы Hex_GLONASS.m
%Имя m- файла: Hex_GLONASS.m
%Файл Hex_GLONASS.m предназначен для преобразования экспериментальных данных, записанных
%в фйле с именем raw_bits_SV18J.dat в файл SV1.dat, записанный в шестнадцатеричных символах name_in = 'raw_bits_SV18J.dat'; % имя экспериментального файла fw = fopen('SV1.dat','Wt');%имя файла в шестнадцатеричных символах
M=dlmread(name_in);%чтение экспериментального файла в матрицу M
%чтение двоичных символов в 1875 строк по 16 символов в строке
[ ]
(
203
for i=1:1875 str_danD(i,:)=sprintf('%d',M(i+15*(i-1):(15+i+15*(i-1)))); end bin_dec=bin2dec(str_danD);%преобразование строк символов в десятичные числа dec_hex=dec2base(bin_dec,16)';%преобразование десятичных чисел в шестнадцатеричные fprintf(fw,'%c',dec_hex);%запись файла в шестнадцатеричном представлении fclose(fw);%закрытие записанного файла
Расширенный комментарий к файлу Hex_GLONASS.m.
При условии, что имеется файл данных спутника с именем raw_bits_SV18J.dat ре- зультат выполнения m- файла: Hex_GLONASS.m, записанный под именем
SV1.dat и про- читанный клавишей F3 файла в Total Commander в шестнадцатеричном представлении имеет вид
AAD34B52CAAB3534B52CAB5332ACD4AD3F1BA84B2D4AB4D4B54ACD54AAD555555555555555555552
B2BF1BA84B2D34ACB4D5555555554B54AAAAAAAAAAAAAAAAACB33F1BA84B2CB52D3555334ACAA
D4B55552B32CACAAB4AB2B34D3F1BA84B2CCB4B54D52AAAB2B2CAACB535554AB4ACD54B52CB3F1
BA84B354AD3554ACCB2D2AAAACAAAD4CB2D35554ACAD4D2BF1BA84B352CCCCD4CD52D534D534C
B535554D53532AD2AB34BF1BA84B34B52CD52B4CD52AD54B52AAD4CB34CAAD4B352D2B3F1BA84B34
D32AAACCD4B5532CB5334ACAAAAD2D532AD34AACBF1BA84B32B5354AAB4CD2B2CAB552AAD534B
35555532CD2D4BF1BA84B32CAAB2B2AAB32B55554CCB535554D535352ACAB4ABF1BA84B33555555555 5555555555555555555555555554D2ABF1BA84B332AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAABF1BA84B2AD2B534B54B4B34CB5334CAB54D2CB2AD32D2D2B33F1BA84B2B554ACB554AB3 534B4D4D4AAACAB4ACAD4B54D32D3F1BA84B2B32AAAB55552CB4AD3554CACB4AD354ACCD532CB
4BF1BA84B2D4AB4D4B54ACD54AAD555555555555555555552B2BF1BA84B2D34ACB4D5555555554B54A
AAAAAAAAAAAAAAAACB33F1BA84B2CAAAAD55555555555555555555555555555554D4B3F1BA84B2C
D555555555555555555555555555555555554D2B3F1BA84B355554AAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAB534BF1BA84B352AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3F1BA84B3 4B554CACAAB4D2D4B4AD3552D4D32D54AD4B54B4ABF1BA84B34CCB34CD33552B2AAACD34AD3333 552D4CACAACCCBF1BA84B32AAAD555555555555555555555555555555554D4B3F1BA84B32D5555555555 555555555555555555555555552D53F1BA84B334AAD34B2AAB52D4CCB32AAD2B2D55554D2D2D54D3F1B
A84B332CACB534AAB2CCACAAD34AD3333552D4D2AD4ACD3F1BA84B2AD2B534B534B4CB34ACCB35 4AB2D34D52CD2D332ABF1BA84B2B554ACB554AB3534B4D4D4AAACAB4ACAD4B54D32D3F1BA84B2B
32AAAB55552CB4AD3554CACB4AD354ACCD532CB4BF1BA84B2D4AB4D4B54ACD54AAD555555555555 555555552B2BF1BA84B2D34ACB4D5555555554B54AAAAAAAAAAAAAAAAACB33F1BA84B2CAAACA
AAD32AD3554D2CCAAD2B2ACAAAD4D2B33333F1BA84B2CD4CCAD32D4AACCAB4B2CB52CCCD334
D4D2D4AB4CBF1BA84B355553354B4D552CCB54ACAACAAD333554B4CB4CAD3F1BA84B352D4B4B32D
4D34B532D4CB52CCCD4B52B2D4CAB54BF1BA84B34AAB554B55354ACAD3553553554CACAACAACAC
D2ABF1BA84B34D4B2B32B52B4D55354D34AD3332AAD2B2D2AACD4BF1BA84B32AAB52AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAB554BF1BA84B32D5555555555555555555555555555555555552D53F1
BA84B33554B5555555555555555555555555555555552D4BF1BA84B332AAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAABF1BA84B2AD2B534B4B4B4CB34ACCB354AB2D34D52CD2D354CBF1BA84B
2B554ACB554AB3534B4D4D4AAACAB4ACAD4B54D32D3F1BA84B2B32AAAB55552CB4AD3554CACB4A
D354ACCD532CB4BF1BA84B2D4AB4D4B54ACD54AAD555555555555555555552B2BF1BA84B2D34ACB4
D5555555554B54AAAAAAAAAAAAAAAAACB33F1BA84B2CAAB4D55555555555555555555555555555555 2B53F1BA84B2CD555555555555555555555555555555555554D2B3F1BA84B35554D555555555555555555555 5555555555552D4BF1BA84B352AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3F1BA84B
34AAB2D55555555555555555555555555555554D4B3F1BA84B34D555555555555555555555555555555555555 2D4BF1BA84B32AAB35555555555555555555555555555555552B53F1BA84B32D555555555555555555555555 5555555555552D53F1BA84B33554CD55555555555555555555555555555554D2ABF1BA84B332AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABF1BA84B2AD2B534B4CB4B34CB5334CAB54D2CB2A
D32D2D4D53F1BA84B2B554ACB554AB3534B4D4D4AAACAB4ACAD4B54D32D3F1BA84B2B32AAAB555 52CB4AD3554CACB4AD354ACCD532CB4BF1BA84B2D4AB4D4B54ACD54AAD555555555555555555552B
204
2BF1BA84B2D34ACB4D5555555554B54AAAAAAAAAAAAAAAAACB33F1BA84B2CAAD55555555555555 555555555555555555552B33F1BA84B2CD555555555555555555555555555555555554D2B3F1BA84B354AD52
AAAD4CAB54CD54AAAD534AB4AAACB2B2B533F1BA84B352ACD2B52D2D5554AAACCB535554B2D53 52B4B4B53F1BA84B34B52B4AB4D332D54CAD34AAD52CD4D52AAD34D4CB3F1BA84B34CCAAD554AC
ACCACCD3334AD3334ACCAAB2D2AAD4BF1BA84B32AAD4D555555555555555555555555555555552B2B
F1BA84B32D5555555555555555555555555555555555552D53F1BA84B33552D55555555555555555555555555 5555554D2CBF1BA84B332AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABF1BA84B2AD
2B534B2B4B4CB34ACCB354AB2D34D52CD2D354D3F1BA84B2B554ACB554AB3534B4D4D4AAACAB4A
CAD4B54D32D3F1BA84B2B2D5554AAAAD34B52CAAB3534B52CAB5332ACD4AD3F1BA84B2D4AB4D4B
54ACD54AAD555555555555555555552B2BF1BA84B2D34ACB4D5555555554B54AAAAAAAAAAAAAAAA
ACB33F1BA84B2CB52D3555334ACAAD4B55552B32CACAAB4AB2B34D3F1BA84B2CCB4B54D52AAAB2
B2CAACB535554AB4ACD54B52CB3F1BA84B354AD3554ACCB2D2AAAACAAAD4CB2D35554ACAD4D2
BF1BA84B352CCCCD4CD52D534D534CB535554D53532AD2AB34BF1BA84B34B52CD52B4CD52AD54B52
AAD4CB34CAAD4B352D2B3F1BA84B34D32AAACCD4B5532CB5334ACAAAAD2D532AD34AACBF1BA8 4B32B5354AAB4CD2B2CAB552AAD534B35555532CD2D4BF1BA84B32CAAB2B2AAB32B55554CCB53555 4D535352ACAB4ABF1BA84B335555555555555555555555555555555555554D2ABF1BA84B332AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABF1BA84B2AD2B534B2CB4B34CB5334CAB54D2CB2A
D32D2D4D4BF1BA84B2B554ACB554AB3534B4D4D4AAACAB4ACAD4B54D32D3F1BA84B2B32AAAB555 52CB4AD3554CACB4AD354ACCD532CB4BF1BA84B2D4AB4D4B54ACD54AAD555555555555555555552B
2BF1BA84B2D34ACB4D5555555554B54AAAAAAAAAAAAAAAAACB33F1BA84B2CAAAAD55555555555 555555555555555555554D4B3F1BA84B2CD555555555555555555555555555555555554D2B3F1BA84B355554
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB534BF1BA84B352AAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAB3F1BA84B34B554CACAAB4D2D4B4AD3552D4D32D54AD4B54B4ABF1BA84
B34CCB34CD33552B2AAACD34AD3333552D4CACAACCCBF1BA84B32AAAD555555555555555555555555 555555554D4B3F1BA84B32D5555555555555555555555555555555555552D53F1BA84B334AAD34B2AAB52D
4CCB32AAD2B2D55554D2D2D54D3F1BA84B332CACB534AAB2CCACAAD34AD3333552D4D2AD4ACD3
F1BA84B2AD2B534B34B4B34CB5334CAB54D2CB2AD32D2D2B2BF1BA84B2B554ACB554AB3534B4D4D4
AAACAB4ACAD4B54D32D3F1BA84B2B32AAAB55552CB4AD3554CACB4AD354ACCD532CB4BF1BA84B
2D4AB4D4B54ACD54AAD555555555555555555552B2BF1BA84B2D34ACB4D5555555554B54AAAAAAAA
AAAAAAAAACB33F1BA84B2CAAACAAAD32AD3554D2CCAAD2B2ACAAAD4D2B33333F1BA84B2CD4
CCAD32D4AACCAB4B2CB52CCCD334D4D2D4AB4CBF1BA84B355553354B4D552CCB54ACAACAAD333 554B4CB4CAD3F1BA84B352D4B4B32D4D34B532D4CB52CCCD4B52B2D4CAB54BF1BA84B34AAB554B5 5354ACAD3553553554CACAACAACACD2ABF1BA84B34D4B2B32B52B4D55354D34AD3332AAD2B2D2A
ACD4BF1BA84B32AAB52AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB554BF1BA84B32D55555555 55555555555555555555555555552D53F1BA84B33554B5555555555555555555555555555555552D4BF1BA84B
332AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABF1BA84B2AD2B534B334B4CB34AC
CB354AB2D34D52CD2D332B3F1BA84B2B554ACB554AB3534B4D4D4AAACAB4ACAD4B54D32D3F1BA8 4B2B32AAAB55552CB4AD3554CACB4AD354ACCD532CB4BF1BA84B2D4AB4D4B54ACD54AAD5555555 55555555555552B2BF1BA84B2D34ACB4D5555555554B54AAAAAAAAAAAAAAAAACB33F1BA84B2CAA
B4D555555555555555555555555555555552B53F1BA84B2CD555555555555555555555555555555555554D2B3
F1BA84B35554D5555555555555555555555555555555552D4BF1BA84B352AAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAB3F1BA84B34AAB2D55555555555555555555555555555554D4B3F1BA84B34
D5555555555555555555555555555555555552D4BF1BA84B32AAB35555555555555555555555555555555552B
53F1BA84B32D5555555555555555555555555555555555552D53F1BA84B33554CD55555555555555555555555 555555554D2ABF1BA84B332AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABF1BA84B2
AD2B534D54B4B34CB5334CAB54D2CB2AD32D2CD4ABF1BA84B2B554ACB554AB3534B4D4D4AAACAB
4ACAD4B54D32D3F1BA84B2B32AAAB55552CB4AD3554CACB4AD354ACCD532CB4BF1BA84B2D4AB4D
4B54ACD54AAD555555555555555555552B2BF1BA84B2D34ACB4D5555555554B54AAAAAAAAAAAAAA
AAACB33F1BA84B2CAAD55555555555555555555555555555555552B33F1BA84B2CD5555555555555555555 55555555555555554D2B3F1BA84B354AD52AAAD4CAB54CD54AAAD534AB4AAACB2B2B533F1BA84B35 2ACD2B52D2D5554AAACCB535554B2D5352B4B4B53F1BA84B34B52B4AB4D332D54CAD34AAD52CD4D
52AAD34D4CB3F1BA84B34CCAAD554ACACCACCD3334AD3334ACCAAB2D2AAD4BF1BA84B32AAD4D
555555555555555555555555555555552B2BF1BA84B32D5555555555555555555555555555555555552D53F1B
A84B33552D555555555555555555555555555555554D2CBF1BA84B332AAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAABF1BA84B2AD2B534D534B4CB34ACCB354AB2D34D52CD2D2CD33F1BA84B
2B554ACB4000000000000000000000000000000000000000000000000000
Этот результат можно было получить при условии, что имеется эксперименталь- ный файл raw_bits_SV18J.dat. Если экспериментального файла нет, то из его шестнадцате- ричного представления, приведенного выше можно сформировать файл для последующе-
205
го декодирования. Для этого скопируем приведенное шестнадцатеричное представление файла и запишем его в виде файла с именем FilGL1.txt с помощью текстового редактора.
В форму для декодирования (эта форма в точности соответствует файлу raw_bits_SV18J.dat файл FilGL1.txt преобразуется с помощью программы
HexBin_GLONASS.m.
Файл HexBin_GLONASS.m
%Имя m- файла: HexBin_GLONASS.m
%Файл HexBin_GLONASS предназначен для преобразования файла FilGL1.txt
%в шестнадцатеричных символах в файл FilGL1_bin.txt в символах "0" и "1" name_in1='FilGL1.txt';%имя файла в шестнадцатеричном представлении fid = fopen(name_in1,'rt'); %открытие файла fw_bin=fopen('FilGL1_bin.txt','wb');%запись преобразованного файла
%чтение и переформатирование файла
MAS = fscanf(fid,'%s'); for i=1:1875 str_MAS(1:4,i)=sprintf('%s',MAS(i+3*(i-1):(3+i+3*(i-1)))); end
MATR=reshape(MAS,4,1875)'; hex_dec= base2dec(MATR,16);%преобразование шестнадцатеричных чисел в десятичные dec_bin= dec2bin(hex_dec)';%преобразование десятичных чисел в двоичные
MATR_Char = reshape(dec_bin,1,1875*16);%преобразование в строку
%fprintf(fw_bin,'%c ',MATR_Char);%запись файла в символах "0" и "1"(вариант, пробел после с имеет значение) fprintf(fw_bin,'%c\n',MATR_Char);%запись файла в символах "0" и "1" (вариант) fclose(fw_bin);% закрытие файла
Файлы FilGL1.txt (восстановленный из шестнадцетиричного) и raw_bits_SV18J.dat
(экспериментальный) одинаковы и применяя любой из них можно проводить декодирова- ние данных спутников ГЛОНАСС.
Прежде чем приступить к обработке данных файла FilGL1.txt рассмотрим процесс формирования и декодирования в навигационном приемнике информационного навигаци- онного сигнала. Этот процесс может быть представлен в виде следующей блок – схемы
(рис. 5.7).
Информация, передаваемая с каждого навигационного спутника представляет собой непрерывный поток информационных символов. Начала отсчетов передачи данных нуль часов Московского времени (начало передачи первого суперкадра каждые сутки).
Структурно поток цифровой информации (ЦИ) формируется в виде непрерывно по- вторяющихся суперкадров (рис. 5.8).
206
207
Рис. 5.7. Формирование и декодирование радионавигационного сигнала
1. Формирование навигационной информации
2. Форматирование навигационной информации
3. Преобразование навигационной информации в двоичный код
4. Формирование информационных сигналов, соот- ветствующих двоичному коду методом двухпози- ционной фазовой манипуляции с частотой 50 Гц
5. Преобразование информационных сигналов в сигналы с относительной фазовой манипуляцией
6. Сложение по модулю 2 информационных сигналов с меандровым колебанием частоты 100 Гц и выделе- ние 170 символов длительностью 10 миллисекунд
7. Дополнение 170 символов тридцатью символами кода метки времени (символ кода метки времени име- ет длитальность 10 миллисеконд).
Окончание формирования одной строки навигацион- ногокадра
Итог: 200 символов по 10 миллисекунд (2 секунды- время передачи 1 строки)
А
208
Рис. 5.7. Формирование и декодирование радионавигационного сигнала (продолжение)
А
9. Модуляция несущих частот спутника полученным сигналом
10. Демодуляция радионавигационного сигнала
11.Корреляционная обработка демодулированного сигнала.
Итог: поток символов длительностью
10 миллисекунд
12. Определение границ строк
Выделяются строки длиной по 170 бит
13. Выделение информационных символов каждой строки
Выделяются 77 символов информации и 8 провероч- ных символов (код Хемминга)
14. Проверка правильности считанной информации и исправление ошибок
15. Дешифровка двоичных символом
15. Декодирование двоичных символом
16. Перевод декодированных сигналов в десятичный эквивалент
17. Конец декодирования
8. Сложение по модулю 2 информационных сигналов с псевдослучайным кодом стандартной точности с частотой 0.511 МГц
209
Рис. 5.8. Изображение потока данных навигационного спутника
В приведенной далее программе декодирования навигационных данных спутников
ГЛОНАСС выполняются процедуры п. п. 12… 17 (рис. 5.7) по данным п. 11 в соответст- вии с ИКД ГЛОНАСС.
5. Задание 2. Откройте файл Decod_GL3.m. Изучите программные процедуры файла, ис- пользуя его текст и расширенный комментарий. Выполните файл и в командном окне
MatLab прочитайте результат декодирования и занесите его в отчет.
5.5.3 Задания и вопросы для самоподготовки
1. Изучите форматы сообщений спутников ГЛОНАСС?
2. Что понимается под суперкадром, кадром, строкой и словом в сообщениях спутников
ГЛОНАСС?
3. Что понимается под оперативной и неоперативной информацией, передаваемой со спутников ГЛОНАСС?
4. Как контролируется достоверность информации, передаваемой со спутников ГЛО-
НАСС?
5. Как выполняется преобразование между системами счисления: переход из двоичной системы счисления в десятичную и наоборот; переход из шестнадцатеричной системы счисления в десятичную и наоборот; переход из двоичной системы счисления в шест- надцатеричную и наоборот?
6. Что такой бит, байт, младший разряд, старший разряд?
…
Метеки времени
Информационные символы строк
(строка передается в течение 1.7 секунды)
Начало суток
Окончание суток
5.5.4 Листинг файла
:
Decod_GL3.m
%Имя m- файла:Decod_GL3.m
%Программа декодирования данных спутников ГЛОНАСС
%Символы метки времени
Met=[1 1 1 1 1 0 0 0 1 1 0 1 1 1 0 1 0 1 0 0 0 0 1 0 0 1 0 1 1 0];
%Открытие файла для считывания данных
%fid = fopen('raw_bits_SV18J.dat','rb')
%fid = fopen( 'SV18fw_bin.txt','rb') fid = fopen('FilGL1_bin.txt','rb') if fid=-1 kol = 0;%Порядковый номер считываемых данных while (kol < 24)
%Поиск и обнаружение меток времени в массиве данных for i = 1:30
MAS(i) = fscanf(fid,'%d',1); end
C = xor(MAS, Met);
D = any(C); kk = 0; while ( (feof(fid)==0) & (D == 1) )
MAS(1:29) = MAS(2:30); ch = fscanf(fid,'%d',1);
MAS(30) = ch;
C = xor(MAS, Met);
D = any(C); %0 - all 0 kk = kk + 1; end % while
%Считывание данных строк kol = kol + 1 for i = 1:170 danDDD(i)= (fscanf(fid,'%d',1)); end; str_danDDD=sprintf('%d',danDDD(1:170));
%Сложение данных по модулю 2 с меандром for i = 1:170 meandr = rem((i-1), 2); %остаток от деления на 2 ((i-1)/2) danDD(i) = xor(danDDD(i), meandr); end; % for i = 1:170 210
% DD = danDD
%Выделение информационных символов dd1 = danDD(1:2:169); dd2 = danDD(2:2:170); ddxor = xor(dd1, dd2);
Dany = any(ddxor); str1(1) = dd1(1);
%Перевод данных из относительного кода for i = 2:85 str1(i) = xor(dd1(i-1), dd1(i)); end;
% Контроля четности (правильности) принятых данных
Skod(1,1:85)=[0 0 0 0 0 0 0 0 1 1 0 1 1 0 1 0 1 0 1 1 0 1 0 1 0 1 ...
0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ...
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 ...
0 1 0 1 0 1 0 1 0 1 0 1 0];
Skod(2,1:85)=[0 0 0 0 0 0 0 0 1 0 1 1 0 1 1 0 0 1 1 0 1 1 0 0 1 1 ...
0 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 ...
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 0 0 1 1 ...
0 0 1 1 0 0 1 1 0 0 1 1 0];
Skod(3,1:85)=[0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 0 0 0 1 1 1 1 ...
0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 ...
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 ...
0 0 0 0 1 1 1 1 0 0 0 0 1];
Skod(4,1:85)=[0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 ...
1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 ...
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 ...
1 1 1 1 1 1 1 1 0 0 0 0 0];
Skod(5,1:85)=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 ...
0 0 0 0 0 0 0 0 1 1 1 1 0];
Skod(6,1:85)=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 ...
0 0 0 0 0 0 0 0 0 0 0 0 0];
211
Skod(7,1:85)=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 1 1 1 1 1];
Skod(8,1:85)=[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 1 1 1 1 1];
E = rot90(eye(85)); for k=1:8
Vi1 = Skod(k,1:85) * E;
STR1Vi = and(str1,Vi1); a1 = sum(STR1Vi); n = floor(a1 / 2); c1 = a1 - n * 2; if (k <8) cc_all(kol,k)=xor(c1,str1(86 - k)); else cc_all(kol,k)=c1; end; end;
%Декодирование номеров строк num4 = str1(2:5);
NN1 = sprintf('%d',num4); num(kol)=bin2dec(NN1);
%Вывод данных строк str_danDDD1=sprintf('%d',num(kol),danDDD(1:85)); str_danDDD2=sprintf('%d',num(kol),danDDD(86:170)); s_danDDD=[str_danDDD1;str_danDDD2];
%++++++++++++++++++++++++++++++++++++++++++
%Вывод номера считываемых данных (kol), номера строки
%[num(kol)] и коэффициентов четности cc_all(kol,1:8)=
%C8 C7 C6 C5 C4 C3 C2 C1 out1 = [kol num(kol) cc_all(kol,8:-1:1)]
%Вывод считываемых данных строки
SS1=sprintf('%d',str1);
%Декодирование данных строк согласно их номеров
212
% в кадре [например, num(kol) == 1- cтрока номер 1] if num(kol) == 1 zx=1; zxdot=1; zx2dot=1;
Nstr=sprintf('%d',str1(2:5));
R1= sprintf('%d',str1(6:7));
P1=sprintf('%d',str1(8:9)); tk5=sprintf('%d',str1(10:14)); tk6=sprintf('%d',str1(15:20)); tk1=sprintf('%d',str1(21)); if sprintf('%d',str1(22))=='1' zxdot = -1; end;
Xdot=sprintf('%d',str1(23:45)); if sprintf('%d',str1(46))=='1' zx2dot = -1; end;
X2dot=sprintf('%d',str1(47:50)); if sprintf('%d',str1(51))=='1' zx = -1; end;
X=sprintf('%d',str1(52:77));
St1=bin2dec({Nstr tk5 tk6 tk1 X Xdot X2dot});
Mng=[1 1 1 30 zx*2^(-11) zxdot*2^(-20) zx2dot*2^(-30)];
Str1=(St1'.*Mng)'%вывод декодированных данных end; if num(kol) == 2 zy=1; zydot=1; zy2dot=1;
Nstr=sprintf('%d',str1(2:5));
Bn= sprintf('%d',str1(6:8));
P2=sprintf('%d',str1(9)); tb=sprintf('%d',str1(10:16));
R2=sprintf('%d',str1(17:21)); if sprintf('%d',str1(22))=='1' zydot = -1; end;
Ydot=sprintf('%d',str1(23:45)); if sprintf('%d',str1(46))=='1' zy2dot = -1; end;
213
Y2dot=sprintf('%d',str1(47:50)); if sprintf('%d',str1(51))=='1' zy = -1; end;
Y=sprintf('%d',str1(52:77));
St2=bin2dec({Nstr Bn P2 tb Y Ydot Y2dot});
Mng=[1 1 1 15*60 zy*2^(-11) zydot*2^(-20) zy2dot*2^(-30)];
Str2=(St2'.*Mng)'%вывод декодированных данных end; if num(kol) == 3 zz=1; zzdot=1; zz2dot=1; zgamma=1;
Nstr=sprintf('%d',str1(2:5));
P3= sprintf('%d',str1(6)); if sprintf('%d',str1(7))=='1' zgamma = -1; end;
Gamma=sprintf('%d',str1(8:17));
R3=sprintf('%d',str1(18:19));
P=sprintf('%d',str1(20)); ln=sprintf('%d',str1(21)); if sprintf('%d',str1(22))=='1' zzdot = -1; end;
Zdot=sprintf('%d',str1(23:45)); if sprintf('%d',str1(46))=='1' zz2dot = -1; end;
Z2dot=sprintf('%d',str1(47:50)); if sprintf('%d',str1(51))=='1' zz = -1; end;
Z=sprintf('%d',str1(52:77));
St3=bin2dec({Nstr P3 ln Gamma Z Zdot Z2dot});
Mng=[1 1 1 zgamma*2^(-40) zz*2^(-11) zzdot*2^(-20) zz2dot*2^(-30)];
Str3=(St3'.*Mng)'%вывод декодированных данных end;
214
if num(kol) == 4 ztaun=1; zdtaun=1;
Nstr=sprintf('%d',str1(2:5)); if sprintf('%d',str1(6))=='1' ztaun = -1; end; taun= sprintf('%d',str1(7:27)); if sprintf('%d',str1(28))=='1' zdtaun = -1; end; deltatau=sprintf('%d',str1(29:32));
En=sprintf('%d',str1(33:37));
R4=sprintf('%d',str1(38:51));
P4=sprintf('%d',str1(52));
FT=sprintf('%d',str1(53:56));
R4i4=sprintf('%d',str1(57:59));
NT=sprintf('%d',str1(60:70)); nSV=sprintf('%d',str1(71:75)); modifSV=sprintf('%d',str1(76:77));
St4=bin2dec({Nstr taun deltatau En FT NT nSV modifSV});
Mng=[1 ztaun*2^(-30) zdtaun*2^(-30) 1 1 1 1 1];
Str4=(St4'.*Mng)'%вывод декодированных данных end; if num(kol) == 5 ztauc=1; ztauGPS=1;
Nstr=sprintf('%d',str1(2:5));
NA= sprintf('%d',str1(6:16)); if sprintf('%d',str1(17))=='1' ztauc = -1; end; tauc=sprintf('%d',str1(18:48));
R5=sprintf('%d',str1(49));
N4=sprintf('%d',str1(50:54)); if sprintf('%d',str1(55))=='1' ztauGPS = -1; end; tauGPS=sprintf('%d',str1(56:76)); ln=sprintf('%d',str1(77));
St5=bin2dec({Nstr NA tauc N4 tauGPS ln Nstr Nstr});
Mng=[1 1 ztauc*2^(-27) 1 ztauGPS*2^(-30) 1 0 0];
215
Str5=(St5'.*Mng)'%вывод декодированных данных end; if num(kol) == 6 ztaun=1; zlambda=1;zdeltai=1;
Nstr=sprintf('%d',str1(2:5));
CNA= sprintf('%d',str1(6));
Mn=sprintf('%d',str1(7:8)); nSV=sprintf('%d',str1(9:13)); if sprintf('%d',str1(14))=='1' ztaun = -1; end; taun=sprintf('%d',str1(15:23)); if sprintf('%d',str1(24))=='1' zlambda = -1; end; lambda=sprintf('%d',str1(25:44)); if sprintf('%d',str1(45))=='1' zdeltai= -1; end; deltai=sprintf('%d',str1(46:62)); ecs=sprintf('%d',str1(63:77));
St6=bin2dec({Nstr Mn nSV taun lambda deltai ecs});
Mng=[1 1 1 ztaun*2^(-18) zlambda*2^(-20) zdeltai*2^(-20) 2^(-20)];
Str6=(St6'.*Mng)'%вывод декодированных данных end; if num(kol) == 7 zomegan=1;zdeltaT=1; zdeltaTdot=1;
Nstr=sprintf('%d',str1(2:5)); if sprintf('%d',str1(6))=='1' zomegan = -1; end; omegan= sprintf('%d',str1(7:21)); tlambda=sprintf('%d',str1(22:44)); if sprintf('%d',str1(43))=='1' zdeltaT = -1; end; deltaT=sprintf('%d',str1(44:64)); if sprintf('%d',str1(65))=='1' zdeltaTdot= -1; end;
216
deltaTdot=sprintf('%d',str1(66:71));
Hn=sprintf('%d',str1(72:76)); ln=sprintf('%d',str1(77));
St7=bin2dec({Nstr omegan tlambda deltaT deltaTdot Hn ln});
Mng=[1 zomegan*2^(-15) 2^(-5) zdeltaT*2^(-9) zdeltaTdot*2^(-14) 1 1];
Str7=(St7'.*Mng)'%вывод декодированных данных end; if num(kol) == 8 ztaun=1; zlambda=1;zdeltai=1;
Nstr=sprintf('%d',str1(2:5));
CNA= sprintf('%d',str1(6));
Mn=sprintf('%d',str1(7:8)); nSV=sprintf('%d',str1(9:13)); if sprintf('%d',str1(14))=='1' ztaun = -1; end; taun=sprintf('%d',str1(15:23)); if sprintf('%d',str1(24))=='1' zlambda = -1; end; lambda=sprintf('%d',str1(25:44)); if sprintf('%d',str1(45))=='1' zdeltai= -1; end; deltai=sprintf('%d',str1(46:62)); ecs=sprintf('%d',str1(63:77));
St8=bin2dec({Nstr Mn nSV taun lambda deltai ecs});
Mng=[1 1 1 ztaun*2^(-18) zlambda*2^(-20) zdeltai*2^(-20) 2^(-20)];
Str8=(St8'.*Mng)' %вывод декодированных данных end; if num(kol) == 9 zomegan=1;zdeltaT=1; zdeltaTdot=1;
Nstr=sprintf('%d',str1(2:5)); if sprintf('%d',str1(6))=='1' zomegan = -1; end; omegan= sprintf('%d',str1(7:21)); tlambda=sprintf('%d',str1(22:44)); if sprintf('%d',str1(43))=='1' zdeltaT = -1;
217
end; deltaT=sprintf('%d',str1(44:64)); if sprintf('%d',str1(65))=='1' zdeltaTdot= -1; end; deltaTdot=sprintf('%d',str1(66:71));
Hn=sprintf('%d',str1(72:76)); ln=sprintf('%d',str1(77));
St9=bin2dec({Nstr omegan tlambda deltaT deltaTdot Hn ln});
Mng=[1 zomegan*2^(-15) 2^(-5) zdeltaT*2^(-9) zdeltaTdot*2^(-14) 1 1];
Str9=(St9'.*Mng)'%вывод декодированных данных end; if num(kol) == 10 ztaun=1; zlambda=1;zdeltai=1;
Nstr=sprintf('%d',str1(2:5));
CNA= sprintf('%d',str1(6));
Mn=sprintf('%d',str1(7:8)); nSV=sprintf('%d',str1(9:13)); if sprintf('%d',str1(14))=='1' ztaun = -1; end; taun=sprintf('%d',str1(15:23)); if sprintf('%d',str1(24))=='1' zlambda = -1; end; lambda=sprintf('%d',str1(25:44)); if sprintf('%d',str1(45))=='1' zdeltai= -1; end; deltai=sprintf('%d',str1(46:62)); ecs=sprintf('%d',str1(63:77));
St10=bin2dec({Nstr Mn nSV taun lambda deltai ecs});
Mng=[1 1 1 ztaun*2^(-18) zlambda*2^(-20) zdeltai*2^(-20) 2^(-20)];
Str10=(St10'.*Mng)'%вывод декодированных данных end; if num(kol) == 11 zomegan=1;zdeltaT=1; zdeltaTdot=1;
Nstr=sprintf('%d',str1(2:5)); if sprintf('%d',str1(6))=='1' zomegan = -1;
218
end; omegan= sprintf('%d',str1(7:21)); tlambda=sprintf('%d',str1(22:44)); if sprintf('%d',str1(43))=='1' zdeltaT = -1; end; deltaT=sprintf('%d',str1(44:64)); if sprintf('%d',str1(65))=='1' zdeltaTdot= -1; end; deltaTdot=sprintf('%d',str1(66:71));
Hn=sprintf('%d',str1(72:76)); ln=sprintf('%d',str1(77));
St11=bin2dec({Nstr omegan tlambda deltaT deltaTdot Hn ln});
Mng=[1 zomegan*2^(-15) 2^(-5) zdeltaT*2^(-9) zdeltaTdot*2^(-14) 1 1];
Str11=(St11'.*Mng)'%вывод декодированных данных end; if num(kol) == 12 ztaun=1; zlambda=1;zdeltai=1;
Nstr=sprintf('%d',str1(2:5));
CNA= sprintf('%d',str1(6));
Mn=sprintf('%d',str1(7:8)); nSV=sprintf('%d',str1(9:13)); if sprintf('%d',str1(14))=='1' ztaun = -1; end; taun=sprintf('%d',str1(15:23)); if sprintf('%d',str1(24))=='1' zlambda = -1; end; lambda=sprintf('%d',str1(25:44)); if sprintf('%d',str1(45))=='1' zdeltai= -1; end; deltai=sprintf('%d',str1(46:62)); ecs=sprintf('%d',str1(63:77));
St12=bin2dec({Nstr Mn nSV taun lambda deltai ecs});
Mng=[1 1 1 ztaun*2^(-18) zlambda*2^(-20) zdeltai*2^(-20) 2^(-20)];
Str12=(St12'.*Mng)'%вывод декодированных данных end;
219
if num(kol) == 13 zomegan=1;zdeltaT=1; zdeltaTdot=1;
Nstr=sprintf('%d',str1(2:5)); if sprintf('%d',str1(6))=='1' zomegan = -1; end; omegan= sprintf('%d',str1(7:21)); tlambda=sprintf('%d',str1(22:44)); if sprintf('%d',str1(43))=='1' zdeltaT = -1; end; deltaT=sprintf('%d',str1(44:64)); if sprintf('%d',str1(65))=='1' zdeltaTdot= -1; end; deltaTdot=sprintf('%d',str1(66:71));
Hn=sprintf('%d',str1(72:76)); ln=sprintf('%d',str1(77));
St13=bin2dec({Nstr omegan tlambda deltaT deltaTdot Hn ln});
Mng=[1 zomegan*2^(-15) 2^(-5) zdeltaT*2^(-9) zdeltaTdot*2^(-14) 1 1];
Str13=(St13'.*Mng)'%вывод декодированных данных end; if num(kol) == 14 ztaun=1; zlambda=1;zdeltai=1;
Nstr=sprintf('%d',str1(2:5));
CNA= sprintf('%d',str1(6));
Mn=sprintf('%d',str1(7:8)); nSV=sprintf('%d',str1(9:13)); if sprintf('%d',str1(14))=='1' ztaun = -1; end; taun=sprintf('%d',str1(15:23)); if sprintf('%d',str1(24))=='1' zlambda = -1; end; lambda=sprintf('%d',str1(25:44)); if sprintf('%d',str1(45))=='1' zdeltai= -1; end; deltai=sprintf('%d',str1(46:62)); ecs=sprintf('%d',str1(63:77));
220
St14=bin2dec({Nstr Mn nSV taun lambda deltai ecs});
Mng=[1 1 1 ztaun*2^(-18) zlambda*2^(-20) zdeltai*2^(-20) 2^(-20)];
Str14=(St14'.*Mng)'%вывод декодированных данных end;
%Строка 14 для 5 кадра if num(kol) == 14 zB1=1; zB2=1;
Nstr=sprintf('%d',str1(2:5)); if sprintf('%d',str1(6))=='1' zB1 = -1; end;
B1=sprintf('%d',str1(7:16)); if sprintf('%d',str1(17))=='1' zB2 = -1; end;
B2=sprintf('%d',str1(18:26));
Kp=sprintf('%d',str1(27:28));
St14_5=bin2dec({Nstr B1 B2 Kp});
Mng=[1 zB1*2^(-10) zB2*2^(-16) 1];
Str14_5=(St14_5'.*Mng)'%вывод декодированных данных end; if num(kol) == 15 zomegan=1;zdeltaT=1; zdeltaTdot=1;
Nstr=sprintf('%d',str1(2:5)); if sprintf('%d',str1(6))=='1' zomegan = -1; end; omegan= sprintf('%d',str1(7:21)); tlambda=sprintf('%d',str1(22:44)); if sprintf('%d',str1(43))=='1' zdeltaT = -1; end; deltaT=sprintf('%d',str1(44:64)); if sprintf('%d',str1(65))=='1' zdeltaTdot= -1; end; deltaTdot=sprintf('%d',str1(66:71));
Hn=sprintf('%d',str1(72:76)); ln=sprintf('%d',str1(77));
221
St15=bin2dec({Nstr omegan tlambda deltaT deltaTdot Hn ln});
Mng=[1 zomegan*2^(-15) 2^(-5) zdeltaT*2^(-9) zdeltaTdot*2^(-14) 1 1];
Str15=(St15'.*Mng)'%вывод декодированных данных end; str1; end; %while (feof(fid)==0) | % while (kol < 14) end % if fid=-1 fclose(fid);
%Технологические данные
Qout=[num' cc_all] %Номер строки и проверка на четность
%Qoutnum1=Qout(1,2:9);
%SS1=sprintf('%d',str1);
%Qout123=[Str1 Str2 Str3]
%Qout45=[Str4 Str5]
%Qout6789=[Str6 Str7 Str8 Str9]
%Qout10_11_12=[Str10 Str11 Str12]
%Qout13_14_15=[Str13 Str14 Str15] clear;
5.5.5 Пример выполнения файла
:
Decod_GL3.m
В результате выполнения программы в командном окне Command Window MatLab отображаются декодированные данные по каждой из строк в последовательности и соответствии ИКД ГЛОНАСС. Так, например, структура строки 1согласно ИКД
ГЛОНАСС имеет вид
1 2 - 5 6 - 7 8 - 9 10 - 21 22 - 45 85 84 -81 80 - 79 78 - 77 76 - 65 64 - 41
0
m
P1
t
k
)
t
(
n
X
b
.
Номер строки в навигацион- ном кадре
Резерв
Признак смены оператив- ной инфо- рмации
Время начала кадра внутри текущих суток, исчисляемое в шкале бортового времени.
Начало суток по бортовому времени спут- ника совпадает с началом очередного су- перкадра.
Составляющие вектора скорости n-го спутника в системе коорди- нат ПЗ-90 на момент времени t
b
46 - 50 51 - 77 1 - 8 1 - 30 40 - 36 35 - 9 8 - 1 1 - 30
)
t
(
n
X
b
..
)
t
(
n
X
b
Составляющие ускорения n-го спутника на момент времени t
b
,
Координаты n-го спутника в системе координат ПЗ-90 на момент времени t
b
;
Код
Хемминга
Метка времени
Рис. 5.9. - Структура 1 строки для (1- 4) кадров суперкадра
222
Декодированная информация из командного окна MatLab приведена на рис. 5.10.
Рис. 5.10 Декодированные данные спутника ГЛОНАСС
Данные, изображенные на рис. 5.10 соответствуют рис. 5.9, но записаны в столбец.
223
32>
1 ... 6 7 8 9 10 11 12 13 14
5.4.2 Лабораторная работа 5. 4 «Модель движения и визуализация спутников GPS,
ГЛОНАСС, GALILEO »
Комплекс программ для выполнения настоящей работы основан на пакете
Vsion_GLONASS_GPS, вкотором файл Vision_GLONASS_GPS.m заменяется файлом
Vision_GL_GPS_GAL.m, а входными данными является альманах спутников трех сис- тем- GPS, ГЛОНАСС, GALILEO приведенный в приложении.
Рекомендуется следующий порядок выполнения лабораторной работы.
1. Создайте папку Vision_GLONASS_GPS_GALILEO _My.
2. Скопируйте в папку
Vision_GLONASS_GPS_GALILEO _My из
Vsion_GLONASS_GPS
функции и файлы, из папки
Vi-
sion_GLONASS_GPS_GALILEO файл Vision_GL_GPS_GAL.m, из приложения файл альманаха AlmGGG.yum. Комплекс готов к работе. Выполните задания 1, 2.
3. Задание 1 .Откройте файл Vision_GL_GPS_GAL.m, убедитесь в правильности введен- ных входных данных ( альманах , дата и время) исполните файл и результаты визуали- зации по каждой спутниковой системе внесите в отчет.
4. Задание 2. Измените в Vision_GL_GPS_GAL.m дату на 1 сутки, выполните файл, вне- сите результаты в отчет. Объясните причины, изменения местоположения спутников по каждой из систем.
5.4.3 Задание для самоподготовки
Подготовьте сравнительную характеристику спутниковых радионавигационных систем GPS, ГЛОНАСС, GALILEO
186
5.4.4 Файл из папки Vision_GLONASS_GPS_GALILEO
Файла Vision_GL_GPS_GAL.m
clear all
%Имя m-файла:Vision_GL_GPS_GAL.m
%Программа рассчитывает углы видимости навигационных спутников GPS, ГЛОНАСС, GALLILEO
%(азимута и места) спутников на заданный момент времени
%Входные данные:
%файл альманаха в формате Yuma,имя файла альманаха присваивается
%переменной "Dat",например,Dat = 'имя файла альманаха';
%данные о начале отсчета "d2",d2='месяц/день/год';h=час;min=минута;s=секунда;
%координаты позиции приемника -lat(широта в радианах),lon (долгота в радианах,
%hr (высота в метрах);
%шаг с каким будут рассчитываться параметры (step,секунды);
%количество точек (L), в которых будут рассчитываться параметры орбит
%L=12*3600/step,L читается так: количество часов (например,12)
%число секунд в часе (3600) деленное на шаг (step)
%Постоянные:
%скорость вращения Земли
OMEGAeDOT=7.2921151467e-005;
%радиусы земного эллипсоида
A_WGS84=6378137.0;
B_WGS84=6356752.314;
%константы mu=398600500000000;
F_CONST =
4.442807633E-10; kt=1;%установка времени на титульной надписи графика, определяется параметрами d2'; h; min; s и j или L;
%Задание цветов для графики color6(1:14) = ['k' 'b' 'g' 'r' 'c' 'm' 'r' ':' 'g' ':' 'b' ':' 'k' 'h'];
%Входные данные
Dat = 'AlmGGG.yum';%альманах спутников GPS, ГЛОНАСС, GALLILEO d2='12/21/2006'; h=14; min=52.0; s=58.0;
%координаты точки, из которой наблюдаются спутники lat = 0.88032730015257;%50 градусов 26минут 20.54 секунд lon = 0.53109641675259;%30 градусов 25 минут 46.4995секунд hr=187.488;% метров
X_label=['Широта' ':' num2str(lat) ';' 'долгота' ':' num2str(lon) ';' 'высота' ':' num2str(hr)];
187
step=300;%шаг отсчета времени в секундах (300=5 минутам);шаг можно изменять step=0;
%L=(24*3600) / step;% убрать % перед L для вывода таблицы улов видимости и азимута
L=1;% установить % перед L для вывода таблицы улов видимости и азимута
%Чтение альманаха
[alm,max_kol] = Yuma_GPS_GLONAS_Alm(Dat);
%max_kol = 32; nom = 1; i = 0; k = 0; i = 0;
% for i = 1 : max_kol while ( i <91) id = alm(nom).ID;
Health = alm(nom).Health;
%fprintf('1: i=%i k=%i nom=%i id=%i Health=%i \n', i, k, nom, id, Health); if ( id > 0)
Health = alm(nom).Health; if ( Health == 0) k = k + 1; nom_ns(k) = id;
% fprintf('2: i=%i k=%i nom=%i id=%i Health=%i \n', i, k, nom, id, Health); nom = nom + 1; else nom = nom + 1; end; else nom = nom + 1; end; i = i + 1; end; % i kol = k; fprintf('kol=%i \n', kol); nom_ns % - номер навигационного спутника
[Rx,Ry,Rz] = ECEFLLH(lon, lat,hr);
%Rx=0;Ry=0;,Rz=0;%центр масс Земли
%Начало отсчета текущего времени
[week,modeweek,d,dweek,weeks]=Tim(d2,h,min,s); for j = 1% 0:L
188
%L=(24*3600) / step;% убрать % перед L для вывода таблицы улов видимости и азимута
L=1;% установить % перед L для вывода таблицы улов видимости и азимута
%Чтение альманаха
[alm,max_kol] = Yuma_GPS_GLONAS_Alm(Dat);
%max_kol = 32; nom = 1; i = 0; k = 0; i = 0;
% for i = 1 : max_kol while ( i <91) id = alm(nom).ID;
Health = alm(nom).Health;
%fprintf('1: i=%i k=%i nom=%i id=%i Health=%i \n', i, k, nom, id, Health); if ( id > 0)
Health = alm(nom).Health; if ( Health == 0) k = k + 1; nom_ns(k) = id;
% fprintf('2: i=%i k=%i nom=%i id=%i Health=%i \n', i, k, nom, id, Health); nom = nom + 1; else nom = nom + 1; end; else nom = nom + 1; end; i = i + 1; end; % i kol = k; fprintf('kol=%i \n', kol); nom_ns % - номер навигационного спутника
[Rx,Ry,Rz] = ECEFLLH(lon, lat,hr);
%Rx=0;Ry=0;,Rz=0;%центр масс Земли
%Начало отсчета текущего времени
[week,modeweek,d,dweek,weeks]=Tim(d2,h,min,s); for j = 1% 0:L
188
% for j = 1:L % 0:L t( j )=weeks+step*(j); %-step;
%t1(j) = t(j)/60; %изменение дискретности текущего времени
%d_wn = (week - alm(i).Week);
%d_wn = 0; for k = 1 : kol i = nom_ns(k) ; % input "i" !!!
% fprintf('i=%i alm(i).Week= %i \n',i, alm(i).Week) d_wn=(modeweek - alm(i).Week);%если в альманахе не учтено 1024 tk = t(j) + d_wn * 604800 - alm(i).TOA; d_wn = abs(modeweek - alm(i).Week); dd = 302400.0 + d_wn * 604800; if ( ( alm(i).A05 > 0 ) & ( alm(i).Health == 0 ) ) while (abs(tk) > dd) if tk > dd tk = tk - 604800; else if tk < -dd tk = tk + 604800; end end % if end % while
%Справочник по альманаху- цифра в скобках обозначает порядковый номер
%параметра альманаха в формате YUMA
%alm(ID).ID(1); alm(ID).Health(2); alm(ID).e(3); alm(ID).TOA(4); alm(ID).deltai(5);
%alm(ID).OMEGADOT(6); alm(ID).A05(7); alm(ID).omega0(8); alm(ID).omega(9);
%alm(ID).M0(10); alm(ID).Af0(11); alm(ID).Af1(12); alm(ID).Week(13); n0=sqrt((mu) / (alm(i).A05^6)); j2 = 1082.68E-6; re = (A_WGS84 + B_WGS84) / 2.; sin55 = sin(55.0 * pi / 180.0); dn = 1.5 * j2 * re * re / (alm(i).A05^4 ) * (1. - 1.5 * sin55 * sin55);
%dn = 0; n=n0 * (1 + dn);
189
Mk = alm(i).M0 + n*tk; e=alm(i).e;
%решение уравнения Кеплера eps = 1.0E-15; y = e * sin(Mk); x1 = Mk; x = y; for k = 0 : 15 % количество итераций x2 = x1; x1 = x; y1 = y; y = Mk - (x - e * sin(x)); if (abs(y - y1) < eps) break end x = (x2 * y - x * y1) / (y - y1); end % kepler
Ek = x; deltr = F_CONST * alm(i).e * alm(i).A05 * sin(Ek); dt1 = alm(i).Af0 + alm(i).Af1 * tk + deltr; tk = tk - dt1; vd = 1. - alm(i).e * cos(Ek); nuk =atan2(sqrt(1-alm(i).e^2)*sin(Ek) / vd,(cos(Ek)-alm(i).e) / vd);
Ek = acos((alm(i).e+cos(nuk))/(1+alm(i).e*cos(nuk)));
Fk =nuk + alm(i).omega; uk =Fk; ik=alm(i).deltai;
% alm(i) rk =(alm(i).A05^2)*(1.0-alm(i).e*cos(Ek)); xkk =rk*cos(uk); ykk =rk*sin(uk);
OMEGAk =alm(i).omega0+(alm(i).OMEGADOT-OMEGAeDOT)*tk-OMEGAeDOT*alm(i).TOA;
% fprintf('i=%i j=%i \n ',i, j);
Xk(j,i) = xkk*cos(OMEGAk)-ykk*cos(ik)*sin(OMEGAk);
Yk(j,i) = xkk*sin(OMEGAk)+ykk*cos(ik)*cos(OMEGAk);
Zk(j,i) = ykk*sin(ik);
%Дальности до спутников
PR(j,i) = sqrt((Xk(j,i) - Rx)^2 + (Yk(j,i) - Ry)^2 + (Zk(j,i) - Rz)^2);
190
%Перевод в географическую систему если требуется
%[lons,lats,hrs] = LLHECEF(Xk,Yk,Zk);
%(Llon(j),Llat(j),Hhr(j)) = [lons,lats,hrs];
%расчет угла видимости спутника xls = Xk(j,i) - Rx; yls = Yk(j,i) - Ry; zls = Zk(j,i) - Rz; range1 = sqrt(xls*xls+yls*yls+zls*zls); if j>1 doppler(j-1) = (range1 - range2) * 5.2514 / step; end range2 = range1;
P = sqrt(Rx * Rx + Ry * Ry + Rz * Rz); tdot = ( Rx*xls+Ry*yls+Rz*zls)/range1/P; xll = xls/range1; yll = yls/range1; zll = zls/range1; if tdot >= 1.00 b = 0.0; elseif tdot <= -1.00 b = pi; else b = acos( tdot); end satang = pi/2.0 - b;
TT =satang;
TT(j,i) =TT;%угол видимости спутников
%расчет угла азимута спутников xn =-cos(lon)*sin(lat); yn =-sin(lon)*sin(lat); zn = cos(lat); xe =-sin(lon); ye = cos(lon); xaz = xe*xll + ye*yll; yaz = xn*xll + yn*yll + zn*zll; if (xaz == 0) or (yaz == 0) az(j)= 0; else az(j,i) = atan2(xaz,yaz); end
191
if az(j,i) < 0 az(j,i) = az(j,i) + pi*2; end
AZ(j,i) =az(j,i) *180/pi;%угла азимута спутников в градусах
EL(j,i) = TT(j,i) *180/pi;%угла видимости спутников в градусах
% ПЕРЕСЧЕТ ВРЕМЕНИ
A(j)=mod(t(j),86400); her(j)=floor(A(j)/3600); m(j)=floor((A(j)-her(j)*3600)/60); sek(j)=A(j)-her(j)*3600-m(j)*60;
%Построение полярной системы координат if EL(j,i) < 0 elp = 180; else elp = (EL(j,i) - 90); end; azp = (AZ(j,i) + 90.0); rad = pi / 180; x0 = 0; y0 = 0; xt(j,i) = (elp * cos(azp * rad)); yt(j,i) = -(elp * sin(azp * rad));
% fprintf('i=%i j=%i \n' , i, j); end % i = ns end; % if ( alm(i).A05 > 0 ) end % j = time
%ВНИМАНИЕ. Для вывода времени визуализации спутников на график установите kt t_itle=[d2 ' ' num2str(her(kt)) ':' num2str(m(kt)) ':' num2str(sek(kt))];
%X_label=['Широта' ':' num2str(lat) ';' 'долгота' ':' num2str(lon) ';' 'высота' ':' num2str(hr)];
%num2ctr(lat)
%num2str(her(kt))
%X_label=['66' ':']; n = 6; max_n = max(nom_ns); n_end = mod(max(nom_ns),n); n_end = mod(kol, n); n2 = fix(kol / n) * n - n +1;
192
AZ(j,i) =az(j,i) *180/pi;%угла азимута спутников в градусах
EL(j,i) = TT(j,i) *180/pi;%угла видимости спутников в градусах
% ПЕРЕСЧЕТ ВРЕМЕНИ
A(j)=mod(t(j),86400); her(j)=floor(A(j)/3600); m(j)=floor((A(j)-her(j)*3600)/60); sek(j)=A(j)-her(j)*3600-m(j)*60;
%Построение полярной системы координат if EL(j,i) < 0 elp = 180; else elp = (EL(j,i) - 90); end; azp = (AZ(j,i) + 90.0); rad = pi / 180; x0 = 0; y0 = 0; xt(j,i) = (elp * cos(azp * rad)); yt(j,i) = -(elp * sin(azp * rad));
% fprintf('i=%i j=%i \n' , i, j); end % i = ns end; % if ( alm(i).A05 > 0 ) end % j = time
%ВНИМАНИЕ. Для вывода времени визуализации спутников на график установите kt t_itle=[d2 ' ' num2str(her(kt)) ':' num2str(m(kt)) ':' num2str(sek(kt))];
%X_label=['Широта' ':' num2str(lat) ';' 'долгота' ':' num2str(lon) ';' 'высота' ':' num2str(hr)];
%num2ctr(lat)
%num2str(her(kt))
%X_label=['66' ':']; n = 6; max_n = max(nom_ns); n_end = mod(max(nom_ns),n); n_end = mod(kol, n); n2 = fix(kol / n) * n - n +1;
192
%Формирование таблицы вывода времени UTC (Time), GPS (Tgps в секундах), номера спутника
(nns),
% углов видимости и азимута от времени и номера спутника for i=1:n:kol fprintf(' Time Tgps '); for k=1: n nns = nom_ns(i+k-1); fprintf(' %2i ', nns); end; fprintf(' \n'); for j=1:L fprintf('%2i:%2i:%2i %i ',her(j),m(j),sek(j), t(j)); for k=1: n nns = nom_ns(i+k-1); fprintf('%6.1f *%6.1f ', EL(j,nns), AZ(j,nns) ); end; fprintf(' \n'); end ; % J=1:L if (i) == (n2) n = n_end; end; end% i hold on
%Окружности уровней на круговой диаграмме видимости спутников k1 = 10; k2 = 30; k3 = 50; k4 = 70; k5 = 85; k6=90; n=0; for k=1:5:365 n=n+1; m1 = pi / 180; x(n)=cos(k*m1); y(n)=sin(k*m1); end;
%График круговой диаграммы plot(k1*x(:),k1*y(:),'k:', k2*x(:),k2*y(:),'k:', k3*x(:),k3*y(:),'k:',k4*x(:),k4*y(:),'k:', k5*x(:),k5*y(:),'r', k6*x(:),k6*y(:),'r:'); text(5, 10,'80','FontSize',12,'FontName','TimesNewRoman');
193
text(18, 23,'60','FontSize',12,'FontName','TimesNewRoman'); text(32, 37,'40','FontSize',12,'FontName','TimesNewRoman'); text(45, 50,'20','FontSize',12,'FontName','TimesNewRoman'); text(55, 60,'5','FontSize',12,'FontName','TimesNewRoman'); text(62, 67,'0','FontSize',12,'FontName','TimesNewRoman'); grid on;
%Построение изображений видимых спутников на круговой диаграмме i=1; for k=1:kol i = nom_ns(k) ; if (i < 31) plot(xt(kt,i),yt(kt,i), 'Marker' ,'o','MarkerSize',20,'MarkerFaceColor','g' ) ; end; if ((i > 31) & ( i < 62)) plot(xt(kt,i),yt(kt,i), 'Marker' ,'o','MarkerSize',20,'MarkerFaceColor','r' ) ; end; if (i > 61) plot(xt(kt,i),yt(kt,i), 'Marker' ,'o','MarkerSize',20,'MarkerFaceColor','y' ) ; end; title(t_itle); xlabel(X_label,'FontSize',12,'FontName','TimesNewRoman') set(get(gcf,'CurrentAxes'),'FontSize',14,'FontName','TimesNewRoman') hold on str1 = num2str( i, 2);
%{ if i<32 str1 = num2str( i, 2); else str1 = num2str( (i), 2); end
%} text(xt(kt,i), yt(kt,i),str1,'FontSize',14,'FontName','TimesNewRoman','HorizontalAlignment','center' ); axis( [-100 100 -100 100]);
%axis( [-90 90 -90 90]); end clear
Результат выполнения программы изображен на рис. 5.5.
194
%Построение изображений видимых спутников на круговой диаграмме i=1; for k=1:kol i = nom_ns(k) ; if (i < 31) plot(xt(kt,i),yt(kt,i), 'Marker' ,'o','MarkerSize',20,'MarkerFaceColor','g' ) ; end; if ((i > 31) & ( i < 62)) plot(xt(kt,i),yt(kt,i), 'Marker' ,'o','MarkerSize',20,'MarkerFaceColor','r' ) ; end; if (i > 61) plot(xt(kt,i),yt(kt,i), 'Marker' ,'o','MarkerSize',20,'MarkerFaceColor','y' ) ; end; title(t_itle); xlabel(X_label,'FontSize',12,'FontName','TimesNewRoman') set(get(gcf,'CurrentAxes'),'FontSize',14,'FontName','TimesNewRoman') hold on str1 = num2str( i, 2);
%{ if i<32 str1 = num2str( i, 2); else str1 = num2str( (i), 2); end
%} text(xt(kt,i), yt(kt,i),str1,'FontSize',14,'FontName','TimesNewRoman','HorizontalAlignment','center' ); axis( [-100 100 -100 100]);
%axis( [-90 90 -90 90]); end clear
Результат выполнения программы изображен на рис. 5.5.
194
-100
-50 0
50 100
-100
-80
-60
-40
-20 0
20 40 60 80 100 80 60 40 20 5
0 12/21/2006 14:52:58
Широта:0.88033;долгота:0.5311;высота:187.488 3
7 14 16 18 19 21 22 26 29 38 44 45 59 61 64 65 66 72 73 74 75 80 81 82 83 91
Рис. 5.5. Видимость спутников GPS, ГЛОНАСС, GALILEO
5.4.5 Лабораторная работа 5. 5 «Орбиты спутников GPS, ГЛОНАСС, GALILEO »
Цель лабораторной работы моделирование орбит спутников GPS, ГЛОНАСС,
GALILEO
Для одновременного расчета орбит спутников трех систем GPS, ГЛОНАСС, GALI-
LEO пакет программ, сформированный в лабораторной работе 5. 4 может быть дополнен файлами ORBITA_GGG.m и map. m из папки ORBIT_GGG.
Рекомендуется следующий порядок выполнения лабораторной работы.
1. Создайте папку ORBIT_GGG _My.
2. Из папки Vision_GLONASS_GPS_GALILEO скопируйте в папку ORBIT_GGG _My
функции ECEFLLH, LLHECEF, Tim; файлы Yuma_GPS_GLONAS_Alm.m,
AlmGGG.yum; из папки ORBIT_GGG файл ORBITA_GGG.m.
3. Запустите MatLab [7, 8].
4. Обратитесь к папке ORBIT_GGG _My , откройте ее, изучите функции, файлы и про- граммные процедуры по комментариям и выполните задания 1, 2.
5. Задание 1. Откройте файл ORBITA_GGG.m. Сформируйте желаемую конфигурацию спутников, орбиты которых требуется рассчитать (см. комментарий к файлу). Устано- вите скорость вращения Земли, равную 0 (OMEGAeDOT=0). Выполните файл. Дайте описание, полученного графического изображения орбит. Результаты внесите в отчет.
6. Задание 2. В файле ORBITA_GGG.m сформируйте конфигурацию спутников: 1 спут- ник GPS, 1 спутник
ГЛОНАСС, 1 спутник GALILEO. Установите
195
OMEGAeDOT=7.2921151467e-005. Выполните файл. Дайте описание, полученного графического изображения орбит. Результаты внесите в отчет.
5.4.6 Задания и вопросы для самоподготовки
1. Чем различаются орбиты спутников GPS, ГЛОНАСС, GALILEO?
2. По каким параметрам можно определить принадлежность спутника той или иной ор- бите?
3. Сформулируйте алгоритм определения дальности до спутника из точки наблюдения.
4. В какой системе координат рассчитываются углы видимости спутника?
5.4.7 Листинг файла ORBITA_GGG.m
Файл ORBITA_GGG.m
clear all
%Имя m-файла:ORBITA_GGG.m
%Программа рассчитывает орбиты спутников GPS, ГЛОНАСС, GALLILEO
%Входные данные:
%файл альманаха в формате Yuma,имя файла альманаха присваивается
%переменной "Dat",например,Dat = 'имя файла альманаха';
%данные о начале отсчета "d2",d2='месяц/день/год';h=час;min=минута;s=секунда;
%координаты позиции приемника -lat(широта в радианах),lon (долгота в радианах,
%hr (высота в метрах);
%шаг с каким будут рассчитываться параметры (step,секунды);
%количество точек (L), в которых будут рассчитываться параметры орбит
%L=12*3600/step,L читается так: количество часов (например,12)
%число секунд в часе (3600) деленное на шаг (step)
%Выходные данные:
%Xk(j,i) - координата X спутника с номером i на момент времени j;
%Yk(j,i) - координата Y спутника с номером i на момент времени j;
%Zk(j,i) - координата Z спутника с номером i на момент времени j;
%Примечание: входные и выходные данные могут быть дополнены / изменены закомментированны- ми
%параметрами, помеченными строкой %%%%%%%%%%%%%%%%%%%%%%%;
%Постоянные:
%скорость вращения Земли
%OMEGAeDOT=7.2921151467e-005;
OMEGAeDOT=0;%%%%%%%%%%%%%%для орбитальных плоскостей
%радиусы земного эллипсоида
A_WGS84=6378137.0;
B_WGS84=6356752.314;
%константы mu=398600500000000;
196
F_CONST =
4.442807633E-10;
%Задание цветов для графики j_color = 0; color6(1:11) = ['B' 'B' 'B' 'B' 'B' 'B' 'o' 'o' '+' '+' '+'];%%%%%%%%%%%%%%%%%%%%%%%
%Входные данные
Dat = 'AlmGGG.yum';%альманах спутников GPS, ГЛОНАСС, GALLILEO
N=6378136;% радиус Земли (используется, как нормирующий коэффициент map(N);%функция выводит на графики Землю d2='12/21/2006'; %%%%%%%%%%%%%%%%%%%%%%% h=14; min=52.0; s=58.0;%%%%%%%%%%%%%%%%%%%%%%%
%координаты точки, из которой наблюдаются спутники lat = 0.88032730015257;%50 градусов 26минут 20.54 секунд
%%%%%%%%%%%%%%%%%%%%%% lon = 0.53109641675259;%30 градусов 25 минут 46.4995секунд
%%%%%%%%%%%%%%%%%%%%% hr=187.488;% метров %%%%%%%%%%%%%%%%%%%%%%% step=600;%шаг отсчета времени в секундах (300=5 минутам);шаг можно изменять
%step=0;
L=(12*3600) / step;% убрать перед L для вывода таблицы улов видимости и азимута
%%%%%%%%%%
%L=1;% установить % перед L для вывода таблицы улов видимости и азимута
%Чтение альманаха
[alm,max_kol] = Yuma_GPS_GLONAS_Alm(Dat);%%%%%%%%%%%%%%%%%%%%%%% nom = 1; i = 0; k = 0; i = 0; while ( i <91) id = alm(nom).ID;
Health = alm(nom).Health; if ( id > 0)
Health = alm(nom).Health; if ( Health == 0) k = k + 1; nom_ns(k) = id; nom = nom + 1; else nom = nom + 1; end; else
197
nom = nom + 1; end; i = i + 1; end; % i kol = k; nom_ns ; % - номер навигационного спутника
[Rx,Ry,Rz] = ECEFLLH(lon, lat,hr);%%%%%%%%%%%%%%%%%%%%%%%
[week,modeweek,d,dweek,weeks]=Tim(d2,h,min,s); for j = 1:L
% for j = 1:L % 0:L t( j )=weeks+step*(j); %-step;%%%%%%%%%%%%%%%%%%%%%%%
%t1(j) = t(j)/60; %изменение дискретности текущего времени
%d_wn = (week - alm(i).Week);
%d_wn = 0; kol=11;%%%%%%%%%%%%%%%%%%%%%%% nom_ns(1:kol) =[1 3 4 5 9 10 38 58 62 72 82 ];%%%%%%%%%%%%%%%%%%%%%%% for k = 1 : kol i = nom_ns(k) ; % input "i" !!! d_wn=(modeweek - alm(i).Week);%если в альманахе не учтено 1024 tk = t(j) + d_wn * 604800 - alm(i).TOA; d_wn = abs(modeweek - alm(i).Week); dd = 302400.0 + d_wn * 604800; if ( ( alm(i).A05 > 0 ) & ( alm(i).Health == 0 ) ) while (abs(tk) > dd) if tk > dd tk = tk - 604800; else if tk < -dd tk = tk + 604800; end end % if end % while
%Справочник по альманаху- цифра в скобках обозначает порядковый номер
%параметра альманаха в формате YUMA
%alm(ID).ID(1); alm(ID).Health(2); alm(ID).e(3); alm(ID).TOA(4); alm(ID).deltai(5);
%alm(ID).OMEGADOT(6); alm(ID).A05(7); alm(ID).omega0(8); alm(ID).omega(9);
%alm(ID).M0(10); alm(ID).Af0(11); alm(ID).Af1(12); alm(ID).Week(13); n0=sqrt((mu) / (alm(i).A05^6)); j2 = 1082.68E-6; re = (A_WGS84 + B_WGS84) / 2.; sin55 = sin(55.0 * pi / 180.0); dn = 1.5 * j2 * re * re / (alm(i).A05^4 ) * (1. - 1.5 * sin55 * sin55);
198
[Rx,Ry,Rz] = ECEFLLH(lon, lat,hr);%%%%%%%%%%%%%%%%%%%%%%%
[week,modeweek,d,dweek,weeks]=Tim(d2,h,min,s); for j = 1:L
% for j = 1:L % 0:L t( j )=weeks+step*(j); %-step;%%%%%%%%%%%%%%%%%%%%%%%
%t1(j) = t(j)/60; %изменение дискретности текущего времени
%d_wn = (week - alm(i).Week);
%d_wn = 0; kol=11;%%%%%%%%%%%%%%%%%%%%%%% nom_ns(1:kol) =[1 3 4 5 9 10 38 58 62 72 82 ];%%%%%%%%%%%%%%%%%%%%%%% for k = 1 : kol i = nom_ns(k) ; % input "i" !!! d_wn=(modeweek - alm(i).Week);%если в альманахе не учтено 1024 tk = t(j) + d_wn * 604800 - alm(i).TOA; d_wn = abs(modeweek - alm(i).Week); dd = 302400.0 + d_wn * 604800; if ( ( alm(i).A05 > 0 ) & ( alm(i).Health == 0 ) ) while (abs(tk) > dd) if tk > dd tk = tk - 604800; else if tk < -dd tk = tk + 604800; end end % if end % while
%Справочник по альманаху- цифра в скобках обозначает порядковый номер
%параметра альманаха в формате YUMA
%alm(ID).ID(1); alm(ID).Health(2); alm(ID).e(3); alm(ID).TOA(4); alm(ID).deltai(5);
%alm(ID).OMEGADOT(6); alm(ID).A05(7); alm(ID).omega0(8); alm(ID).omega(9);
%alm(ID).M0(10); alm(ID).Af0(11); alm(ID).Af1(12); alm(ID).Week(13); n0=sqrt((mu) / (alm(i).A05^6)); j2 = 1082.68E-6; re = (A_WGS84 + B_WGS84) / 2.; sin55 = sin(55.0 * pi / 180.0); dn = 1.5 * j2 * re * re / (alm(i).A05^4 ) * (1. - 1.5 * sin55 * sin55);
198
%dn = 0; n=n0 * (1 + dn);
Mk = alm(i).M0 + n*tk; e=alm(i).e;
%решение уравнения Кеплера eps = 1.0E-15; y = e * sin(Mk); x1 = Mk; x = y; for k = 0 : 15 % количество итераций x2 = x1; x1 = x; y1 = y; y = Mk - (x - e * sin(x)); if (abs(y - y1) < eps) break end x = (x2 * y - x * y1) / (y - y1); end % kepler
Ek = x; deltr = F_CONST * alm(i).e * alm(i).A05 * sin(Ek); dt1 = alm(i).Af0 + alm(i).Af1 * tk + deltr; tk = tk - dt1; vd = 1. - alm(i).e * cos(Ek); nuk =atan2(sqrt(1-alm(i).e^2)*sin(Ek) / vd,(cos(Ek)-alm(i).e) / vd);
Ek = acos((alm(i).e+cos(nuk))/(1+alm(i).e*cos(nuk)));
Fk =nuk + alm(i).omega; uk =Fk; ik=alm(i).deltai; rk =(alm(i).A05^2)*(1.0-alm(i).e*cos(Ek)); xkk =rk*cos(uk); ykk =rk*sin(uk);
OMEGAk =alm(i).omega0+(alm(i).OMEGADOT-OMEGAeDOT)*tk-OMEGAeDOT*alm(i).TOA;
Xk(j,i) = xkk*cos(OMEGAk)-ykk*cos(ik)*sin(OMEGAk);
Yk(j,i) = xkk*sin(OMEGAk)+ykk*cos(ik)*cos(OMEGAk);
Zk(j,i) = ykk*sin(ik);
%%%%%%%%%%%%%%%%%%%%%%%
%{
%Дальности до спутников
PR(j,i) = sqrt((Xk(j,i) - Rx)^2 + (Yk(j,i) - Ry)^2 + (Zk(j,i) - Rz)^2);
%Перевод в географическую систему если требуется
%[lons,lats,hrs] = LLHECEF(Xk,Yk,Zk);
199
%(Llon(j),Llat(j),Hhr(j)) = [lons,lats,hrs];
%расчет угла видимости спутника xls = Xk(j,i) - Rx; yls = Yk(j,i) - Ry; zls = Zk(j,i) - Rz; range1 = sqrt(xls*xls+yls*yls+zls*zls); if j>1 doppler(j-1) = (range1 - range2) * 5.2514 / step; end range2 = range1;
P = sqrt(Rx * Rx + Ry * Ry + Rz * Rz); tdot = ( Rx*xls+Ry*yls+Rz*zls)/range1/P; xll = xls/range1; yll = yls/range1; zll = zls/range1; if tdot >= 1.00 b = 0.0; elseif tdot <= -1.00 b = pi; else b = acos( tdot); end satang = pi/2.0 - b;
TT =satang;
TT(j,i) =TT;%угол видимости спутников
%расчет угла азимута спутников xn =-cos(lon)*sin(lat); yn =-sin(lon)*sin(lat); zn = cos(lat); xe =-sin(lon); ye = cos(lon); xaz = xe*xll + ye*yll; yaz = xn*xll + yn*yll + zn*zll; if (xaz == 0) or (yaz == 0) az(j)= 0; else az(j,i) = atan2(xaz,yaz); end if az(j,i) < 0 az(j,i) = az(j,i) + pi*2;
200
end
AZ(j,i) =az(j,i) *180/pi;%угла азимута спутников в градусах
EL(j,i) = TT(j,i) *180/pi;%угла видимости спутников в градусах
% ПЕРЕСЧЕТ ВРЕМЕНИ
A(j)=mod(t(j),86400); her(j)=floor(A(j)/3600); m(j)=floor((A(j)-her(j)*3600)/60); sek(j)=A(j)-her(j)*3600-m(j)*60;
%Построение полярной системы координат if EL(j,i) < 0 elp = 180; else elp = (EL(j,i) - 90); end; azp = (AZ(j,i) + 90.0); rad = pi / 180; x0 = 0; y0 = 0; xt(j,i) = (elp * cos(azp * rad)); yt(j,i) = -(elp * sin(azp * rad));
%}
%%%%%%%%%%%%%%%%%%%%%%%% end % i = ns end; % if ( alm(i).A05 > 0 ) end % j = time for (i=1:kol) j_color = j_color + 1; if (j_color > 11 ) j_color = 1; end
S = color6(j_color); prn = nom_ns(i);
%%%%%%%%%%%%%%%%%%%%%%% hold on h_F1 = gca; plot3(Xk(:,prn),Yk(:,prn),Zk(:,prn),S,'LineWidth',0.5); axis([ -2.552*10^(7) 2.552*10^(7) -2.552*10^(7) 2.552*10^(7) -2.552*10^(7) 2.552*10^(7)]); set(get(gcf,'CurrentAxes'),'FontSize',14,'FontName','TimesNewRoman'); set(h_F1,'Position',[0.1 0.1 0.85 0.9]) ; xlabel('Координата X')
201
AZ(j,i) =az(j,i) *180/pi;%угла азимута спутников в градусах
EL(j,i) = TT(j,i) *180/pi;%угла видимости спутников в градусах
% ПЕРЕСЧЕТ ВРЕМЕНИ
A(j)=mod(t(j),86400); her(j)=floor(A(j)/3600); m(j)=floor((A(j)-her(j)*3600)/60); sek(j)=A(j)-her(j)*3600-m(j)*60;
%Построение полярной системы координат if EL(j,i) < 0 elp = 180; else elp = (EL(j,i) - 90); end; azp = (AZ(j,i) + 90.0); rad = pi / 180; x0 = 0; y0 = 0; xt(j,i) = (elp * cos(azp * rad)); yt(j,i) = -(elp * sin(azp * rad));
%}
%%%%%%%%%%%%%%%%%%%%%%%% end % i = ns end; % if ( alm(i).A05 > 0 ) end % j = time for (i=1:kol) j_color = j_color + 1; if (j_color > 11 ) j_color = 1; end
S = color6(j_color); prn = nom_ns(i);
%%%%%%%%%%%%%%%%%%%%%%% hold on h_F1 = gca; plot3(Xk(:,prn),Yk(:,prn),Zk(:,prn),S,'LineWidth',0.5); axis([ -2.552*10^(7) 2.552*10^(7) -2.552*10^(7) 2.552*10^(7) -2.552*10^(7) 2.552*10^(7)]); set(get(gcf,'CurrentAxes'),'FontSize',14,'FontName','TimesNewRoman'); set(h_F1,'Position',[0.1 0.1 0.85 0.9]) ; xlabel('Координата X')
201
ylabel('Координата Y'), zlabel('Координата Z'),grid on str1 = num2str( prn); text(Xk(j,prn),
Yk(j,prn),Zk(j,prn),str1,'FontSize',14,'FontName','TimesNewRoman','HorizontalAlignment','center' ); hold on
%%%%%%%%%%%%%%%%%%%%%%% end clear
5.4.8 Пример выполнения файла:ORBITA_GGG.m
Результат выполнения программы изображен на рис. 5.6.
Рис. 5.6. Орбиты спутников GPS, ГЛОНАСС, GALILEO
На рис. 5.6 сплошными линиями показаны 6 орбит спутников GPS, маркером «о» 2 орбиты ГЛОНАСС, маркером «+» 3 орбиты GALILEO; цифрами обозначены номера спутников соответствующих систем.
5.5 Декодирование и расшифровка данных спутников ГЛОНАСС
5.5.1 Краткие сведения из теории
В данном подразделе приводится программа декодирования данных спутников
ГЛОНАСС. Данные, которые декодируются получены экспериментально с реального на-
202
Yk(j,prn),Zk(j,prn),str1,'FontSize',14,'FontName','TimesNewRoman','HorizontalAlignment','center' ); hold on
%%%%%%%%%%%%%%%%%%%%%%% end clear
5.4.8 Пример выполнения файла:ORBITA_GGG.m
Результат выполнения программы изображен на рис. 5.6.
Рис. 5.6. Орбиты спутников GPS, ГЛОНАСС, GALILEO
На рис. 5.6 сплошными линиями показаны 6 орбит спутников GPS, маркером «о» 2 орбиты ГЛОНАСС, маркером «+» 3 орбиты GALILEO; цифрами обозначены номера спутников соответствующих систем.
5.5 Декодирование и расшифровка данных спутников ГЛОНАСС
5.5.1 Краткие сведения из теории
В данном подразделе приводится программа декодирования данных спутников
ГЛОНАСС. Данные, которые декодируются получены экспериментально с реального на-
202
вигационного приемника после корреляционной обработки в виде последовательности символов «0» и «1». Поскольку объем данных относительной большой около 60000 сим- волов, то приводятся два вспомогательных m-файла. Эти вспомогательные программы по- зволяют сформировать данные на бумажном носителе в виде последовательности шестна- дцатеричных чисел, из которых можно восстановить m-файл для декодирования. Экспе- риментальные данные рассматриваемые далее представляют собой символы длительно- стью 10 миллисекунд и являются составляющими информационных символов сложенных по модулю 2 с меандром имеющим частоту 100 Гц.
Примененный алгоритм декодирования основан на строгом соответствии данных, передаваемых с навигационного спутника ГЛОНАСС, которые соответствуют формату сообщений. Более подробно формат сообщений и данные, передаваемые в кадрах сообще- ний приводятся в интерфейсном контрольном документе ГЛОНАСС
и в книге [1] под- раздел 2. 2, стр. 77- 87).
Комплекс программ декодирования и расшифровки находится в папке
Decod_GLONASS.
Цель лабораторной работы освоение и применение методики декодирования и расшифровки данных спутниковой системы ГЛОНАСС.
5.5.2 Лабораторная работа 5. 6 «Декодирование данных спутников ГЛОНАСС в на- вигационном приемнике»
Рекомендуется следующий порядок выполнения лабораторной работы.
1. Создайте папку Decod_GLONASS _My и скопируете в ее файлы и функции из папки
Decod_GLONASS.
2. Запустите MatLab.
3. Обратитесь к папке Decod_GLONASS _My , откройте ее, изучите функции, файлы и программные процедуры по комментариям и выполните задания 1, 2.
4. Задание 1. Откройте файл Hex_GLONASS.m. Изучите программные процедуры фай- ла, используя его текст и расширенный комментарий.
Файл преобразования экспериментальных данных в шестнадцатеричные симво-
лы Hex_GLONASS.m
%Имя m- файла: Hex_GLONASS.m
%Файл Hex_GLONASS.m предназначен для преобразования экспериментальных данных, записанных
%в фйле с именем raw_bits_SV18J.dat в файл SV1.dat, записанный в шестнадцатеричных символах name_in = 'raw_bits_SV18J.dat'; % имя экспериментального файла fw = fopen('SV1.dat','Wt');%имя файла в шестнадцатеричных символах
M=dlmread(name_in);%чтение экспериментального файла в матрицу M
%чтение двоичных символов в 1875 строк по 16 символов в строке
[ ]
(
203
Примененный алгоритм декодирования основан на строгом соответствии данных, передаваемых с навигационного спутника ГЛОНАСС, которые соответствуют формату сообщений. Более подробно формат сообщений и данные, передаваемые в кадрах сообще- ний приводятся в интерфейсном контрольном документе ГЛОНАСС
и в книге [1] под- раздел 2. 2, стр. 77- 87).
Комплекс программ декодирования и расшифровки находится в папке
Decod_GLONASS.
Цель лабораторной работы освоение и применение методики декодирования и расшифровки данных спутниковой системы ГЛОНАСС.
5.5.2 Лабораторная работа 5. 6 «Декодирование данных спутников ГЛОНАСС в на- вигационном приемнике»
Рекомендуется следующий порядок выполнения лабораторной работы.
1. Создайте папку Decod_GLONASS _My и скопируете в ее файлы и функции из папки
Decod_GLONASS.
2. Запустите MatLab.
3. Обратитесь к папке Decod_GLONASS _My , откройте ее, изучите функции, файлы и программные процедуры по комментариям и выполните задания 1, 2.
4. Задание 1. Откройте файл Hex_GLONASS.m. Изучите программные процедуры фай- ла, используя его текст и расширенный комментарий.
Файл преобразования экспериментальных данных в шестнадцатеричные симво-
лы Hex_GLONASS.m
%Имя m- файла: Hex_GLONASS.m
%Файл Hex_GLONASS.m предназначен для преобразования экспериментальных данных, записанных
%в фйле с именем raw_bits_SV18J.dat в файл SV1.dat, записанный в шестнадцатеричных символах name_in = 'raw_bits_SV18J.dat'; % имя экспериментального файла fw = fopen('SV1.dat','Wt');%имя файла в шестнадцатеричных символах
M=dlmread(name_in);%чтение экспериментального файла в матрицу M
%чтение двоичных символов в 1875 строк по 16 символов в строке
[ ]
(
203
for i=1:1875 str_danD(i,:)=sprintf('%d',M(i+15*(i-1):(15+i+15*(i-1)))); end bin_dec=bin2dec(str_danD);%преобразование строк символов в десятичные числа dec_hex=dec2base(bin_dec,16)';%преобразование десятичных чисел в шестнадцатеричные fprintf(fw,'%c',dec_hex);%запись файла в шестнадцатеричном представлении fclose(fw);%закрытие записанного файла
Расширенный комментарий к файлу Hex_GLONASS.m.
При условии, что имеется файл данных спутника с именем raw_bits_SV18J.dat ре- зультат выполнения m- файла: Hex_GLONASS.m, записанный под именем
SV1.dat и про- читанный клавишей F3 файла в Total Commander в шестнадцатеричном представлении имеет вид
AAD34B52CAAB3534B52CAB5332ACD4AD3F1BA84B2D4AB4D4B54ACD54AAD555555555555555555552
B2BF1BA84B2D34ACB4D5555555554B54AAAAAAAAAAAAAAAAACB33F1BA84B2CB52D3555334ACAA
D4B55552B32CACAAB4AB2B34D3F1BA84B2CCB4B54D52AAAB2B2CAACB535554AB4ACD54B52CB3F1
BA84B354AD3554ACCB2D2AAAACAAAD4CB2D35554ACAD4D2BF1BA84B352CCCCD4CD52D534D534C
B535554D53532AD2AB34BF1BA84B34B52CD52B4CD52AD54B52AAD4CB34CAAD4B352D2B3F1BA84B34
D32AAACCD4B5532CB5334ACAAAAD2D532AD34AACBF1BA84B32B5354AAB4CD2B2CAB552AAD534B
35555532CD2D4BF1BA84B32CAAB2B2AAB32B55554CCB535554D535352ACAB4ABF1BA84B33555555555 5555555555555555555555555554D2ABF1BA84B332AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAABF1BA84B2AD2B534B54B4B34CB5334CAB54D2CB2AD32D2D2B33F1BA84B2B554ACB554AB3 534B4D4D4AAACAB4ACAD4B54D32D3F1BA84B2B32AAAB55552CB4AD3554CACB4AD354ACCD532CB
4BF1BA84B2D4AB4D4B54ACD54AAD555555555555555555552B2BF1BA84B2D34ACB4D5555555554B54A
AAAAAAAAAAAAAAAACB33F1BA84B2CAAAAD55555555555555555555555555555554D4B3F1BA84B2C
D555555555555555555555555555555555554D2B3F1BA84B355554AAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAB534BF1BA84B352AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3F1BA84B3 4B554CACAAB4D2D4B4AD3552D4D32D54AD4B54B4ABF1BA84B34CCB34CD33552B2AAACD34AD3333 552D4CACAACCCBF1BA84B32AAAD555555555555555555555555555555554D4B3F1BA84B32D5555555555 555555555555555555555555552D53F1BA84B334AAD34B2AAB52D4CCB32AAD2B2D55554D2D2D54D3F1B
A84B332CACB534AAB2CCACAAD34AD3333552D4D2AD4ACD3F1BA84B2AD2B534B534B4CB34ACCB35 4AB2D34D52CD2D332ABF1BA84B2B554ACB554AB3534B4D4D4AAACAB4ACAD4B54D32D3F1BA84B2B
32AAAB55552CB4AD3554CACB4AD354ACCD532CB4BF1BA84B2D4AB4D4B54ACD54AAD555555555555 555555552B2BF1BA84B2D34ACB4D5555555554B54AAAAAAAAAAAAAAAAACB33F1BA84B2CAAACA
AAD32AD3554D2CCAAD2B2ACAAAD4D2B33333F1BA84B2CD4CCAD32D4AACCAB4B2CB52CCCD334
D4D2D4AB4CBF1BA84B355553354B4D552CCB54ACAACAAD333554B4CB4CAD3F1BA84B352D4B4B32D
4D34B532D4CB52CCCD4B52B2D4CAB54BF1BA84B34AAB554B55354ACAD3553553554CACAACAACAC
D2ABF1BA84B34D4B2B32B52B4D55354D34AD3332AAD2B2D2AACD4BF1BA84B32AAB52AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAB554BF1BA84B32D5555555555555555555555555555555555552D53F1
BA84B33554B5555555555555555555555555555555552D4BF1BA84B332AAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAABF1BA84B2AD2B534B4B4B4CB34ACCB354AB2D34D52CD2D354CBF1BA84B
2B554ACB554AB3534B4D4D4AAACAB4ACAD4B54D32D3F1BA84B2B32AAAB55552CB4AD3554CACB4A
D354ACCD532CB4BF1BA84B2D4AB4D4B54ACD54AAD555555555555555555552B2BF1BA84B2D34ACB4
D5555555554B54AAAAAAAAAAAAAAAAACB33F1BA84B2CAAB4D55555555555555555555555555555555 2B53F1BA84B2CD555555555555555555555555555555555554D2B3F1BA84B35554D555555555555555555555 5555555555552D4BF1BA84B352AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3F1BA84B
34AAB2D55555555555555555555555555555554D4B3F1BA84B34D555555555555555555555555555555555555 2D4BF1BA84B32AAB35555555555555555555555555555555552B53F1BA84B32D555555555555555555555555 5555555555552D53F1BA84B33554CD55555555555555555555555555555554D2ABF1BA84B332AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABF1BA84B2AD2B534B4CB4B34CB5334CAB54D2CB2A
D32D2D4D53F1BA84B2B554ACB554AB3534B4D4D4AAACAB4ACAD4B54D32D3F1BA84B2B32AAAB555 52CB4AD3554CACB4AD354ACCD532CB4BF1BA84B2D4AB4D4B54ACD54AAD555555555555555555552B
204
Расширенный комментарий к файлу Hex_GLONASS.m.
При условии, что имеется файл данных спутника с именем raw_bits_SV18J.dat ре- зультат выполнения m- файла: Hex_GLONASS.m, записанный под именем
SV1.dat и про- читанный клавишей F3 файла в Total Commander в шестнадцатеричном представлении имеет вид
AAD34B52CAAB3534B52CAB5332ACD4AD3F1BA84B2D4AB4D4B54ACD54AAD555555555555555555552
B2BF1BA84B2D34ACB4D5555555554B54AAAAAAAAAAAAAAAAACB33F1BA84B2CB52D3555334ACAA
D4B55552B32CACAAB4AB2B34D3F1BA84B2CCB4B54D52AAAB2B2CAACB535554AB4ACD54B52CB3F1
BA84B354AD3554ACCB2D2AAAACAAAD4CB2D35554ACAD4D2BF1BA84B352CCCCD4CD52D534D534C
B535554D53532AD2AB34BF1BA84B34B52CD52B4CD52AD54B52AAD4CB34CAAD4B352D2B3F1BA84B34
D32AAACCD4B5532CB5334ACAAAAD2D532AD34AACBF1BA84B32B5354AAB4CD2B2CAB552AAD534B
35555532CD2D4BF1BA84B32CAAB2B2AAB32B55554CCB535554D535352ACAB4ABF1BA84B33555555555 5555555555555555555555555554D2ABF1BA84B332AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAABF1BA84B2AD2B534B54B4B34CB5334CAB54D2CB2AD32D2D2B33F1BA84B2B554ACB554AB3 534B4D4D4AAACAB4ACAD4B54D32D3F1BA84B2B32AAAB55552CB4AD3554CACB4AD354ACCD532CB
4BF1BA84B2D4AB4D4B54ACD54AAD555555555555555555552B2BF1BA84B2D34ACB4D5555555554B54A
AAAAAAAAAAAAAAAACB33F1BA84B2CAAAAD55555555555555555555555555555554D4B3F1BA84B2C
D555555555555555555555555555555555554D2B3F1BA84B355554AAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAB534BF1BA84B352AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3F1BA84B3 4B554CACAAB4D2D4B4AD3552D4D32D54AD4B54B4ABF1BA84B34CCB34CD33552B2AAACD34AD3333 552D4CACAACCCBF1BA84B32AAAD555555555555555555555555555555554D4B3F1BA84B32D5555555555 555555555555555555555555552D53F1BA84B334AAD34B2AAB52D4CCB32AAD2B2D55554D2D2D54D3F1B
A84B332CACB534AAB2CCACAAD34AD3333552D4D2AD4ACD3F1BA84B2AD2B534B534B4CB34ACCB35 4AB2D34D52CD2D332ABF1BA84B2B554ACB554AB3534B4D4D4AAACAB4ACAD4B54D32D3F1BA84B2B
32AAAB55552CB4AD3554CACB4AD354ACCD532CB4BF1BA84B2D4AB4D4B54ACD54AAD555555555555 555555552B2BF1BA84B2D34ACB4D5555555554B54AAAAAAAAAAAAAAAAACB33F1BA84B2CAAACA
AAD32AD3554D2CCAAD2B2ACAAAD4D2B33333F1BA84B2CD4CCAD32D4AACCAB4B2CB52CCCD334
D4D2D4AB4CBF1BA84B355553354B4D552CCB54ACAACAAD333554B4CB4CAD3F1BA84B352D4B4B32D
4D34B532D4CB52CCCD4B52B2D4CAB54BF1BA84B34AAB554B55354ACAD3553553554CACAACAACAC
D2ABF1BA84B34D4B2B32B52B4D55354D34AD3332AAD2B2D2AACD4BF1BA84B32AAB52AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAB554BF1BA84B32D5555555555555555555555555555555555552D53F1
BA84B33554B5555555555555555555555555555555552D4BF1BA84B332AAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAABF1BA84B2AD2B534B4B4B4CB34ACCB354AB2D34D52CD2D354CBF1BA84B
2B554ACB554AB3534B4D4D4AAACAB4ACAD4B54D32D3F1BA84B2B32AAAB55552CB4AD3554CACB4A
D354ACCD532CB4BF1BA84B2D4AB4D4B54ACD54AAD555555555555555555552B2BF1BA84B2D34ACB4
D5555555554B54AAAAAAAAAAAAAAAAACB33F1BA84B2CAAB4D55555555555555555555555555555555 2B53F1BA84B2CD555555555555555555555555555555555554D2B3F1BA84B35554D555555555555555555555 5555555555552D4BF1BA84B352AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3F1BA84B
34AAB2D55555555555555555555555555555554D4B3F1BA84B34D555555555555555555555555555555555555 2D4BF1BA84B32AAB35555555555555555555555555555555552B53F1BA84B32D555555555555555555555555 5555555555552D53F1BA84B33554CD55555555555555555555555555555554D2ABF1BA84B332AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABF1BA84B2AD2B534B4CB4B34CB5334CAB54D2CB2A
D32D2D4D53F1BA84B2B554ACB554AB3534B4D4D4AAACAB4ACAD4B54D32D3F1BA84B2B32AAAB555 52CB4AD3554CACB4AD354ACCD532CB4BF1BA84B2D4AB4D4B54ACD54AAD555555555555555555552B
204
2BF1BA84B2D34ACB4D5555555554B54AAAAAAAAAAAAAAAAACB33F1BA84B2CAAD55555555555555 555555555555555555552B33F1BA84B2CD555555555555555555555555555555555554D2B3F1BA84B354AD52
AAAD4CAB54CD54AAAD534AB4AAACB2B2B533F1BA84B352ACD2B52D2D5554AAACCB535554B2D53 52B4B4B53F1BA84B34B52B4AB4D332D54CAD34AAD52CD4D52AAD34D4CB3F1BA84B34CCAAD554AC
ACCACCD3334AD3334ACCAAB2D2AAD4BF1BA84B32AAD4D555555555555555555555555555555552B2B
F1BA84B32D5555555555555555555555555555555555552D53F1BA84B33552D55555555555555555555555555 5555554D2CBF1BA84B332AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABF1BA84B2AD
2B534B2B4B4CB34ACCB354AB2D34D52CD2D354D3F1BA84B2B554ACB554AB3534B4D4D4AAACAB4A
CAD4B54D32D3F1BA84B2B2D5554AAAAD34B52CAAB3534B52CAB5332ACD4AD3F1BA84B2D4AB4D4B
54ACD54AAD555555555555555555552B2BF1BA84B2D34ACB4D5555555554B54AAAAAAAAAAAAAAAA
ACB33F1BA84B2CB52D3555334ACAAD4B55552B32CACAAB4AB2B34D3F1BA84B2CCB4B54D52AAAB2
B2CAACB535554AB4ACD54B52CB3F1BA84B354AD3554ACCB2D2AAAACAAAD4CB2D35554ACAD4D2
BF1BA84B352CCCCD4CD52D534D534CB535554D53532AD2AB34BF1BA84B34B52CD52B4CD52AD54B52
AAD4CB34CAAD4B352D2B3F1BA84B34D32AAACCD4B5532CB5334ACAAAAD2D532AD34AACBF1BA8 4B32B5354AAB4CD2B2CAB552AAD534B35555532CD2D4BF1BA84B32CAAB2B2AAB32B55554CCB53555 4D535352ACAB4ABF1BA84B335555555555555555555555555555555555554D2ABF1BA84B332AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABF1BA84B2AD2B534B2CB4B34CB5334CAB54D2CB2A
D32D2D4D4BF1BA84B2B554ACB554AB3534B4D4D4AAACAB4ACAD4B54D32D3F1BA84B2B32AAAB555 52CB4AD3554CACB4AD354ACCD532CB4BF1BA84B2D4AB4D4B54ACD54AAD555555555555555555552B
2BF1BA84B2D34ACB4D5555555554B54AAAAAAAAAAAAAAAAACB33F1BA84B2CAAAAD55555555555 555555555555555555554D4B3F1BA84B2CD555555555555555555555555555555555554D2B3F1BA84B355554
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB534BF1BA84B352AAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAB3F1BA84B34B554CACAAB4D2D4B4AD3552D4D32D54AD4B54B4ABF1BA84
B34CCB34CD33552B2AAACD34AD3333552D4CACAACCCBF1BA84B32AAAD555555555555555555555555 555555554D4B3F1BA84B32D5555555555555555555555555555555555552D53F1BA84B334AAD34B2AAB52D
4CCB32AAD2B2D55554D2D2D54D3F1BA84B332CACB534AAB2CCACAAD34AD3333552D4D2AD4ACD3
F1BA84B2AD2B534B34B4B34CB5334CAB54D2CB2AD32D2D2B2BF1BA84B2B554ACB554AB3534B4D4D4
AAACAB4ACAD4B54D32D3F1BA84B2B32AAAB55552CB4AD3554CACB4AD354ACCD532CB4BF1BA84B
2D4AB4D4B54ACD54AAD555555555555555555552B2BF1BA84B2D34ACB4D5555555554B54AAAAAAAA
AAAAAAAAACB33F1BA84B2CAAACAAAD32AD3554D2CCAAD2B2ACAAAD4D2B33333F1BA84B2CD4
CCAD32D4AACCAB4B2CB52CCCD334D4D2D4AB4CBF1BA84B355553354B4D552CCB54ACAACAAD333 554B4CB4CAD3F1BA84B352D4B4B32D4D34B532D4CB52CCCD4B52B2D4CAB54BF1BA84B34AAB554B5 5354ACAD3553553554CACAACAACACD2ABF1BA84B34D4B2B32B52B4D55354D34AD3332AAD2B2D2A
ACD4BF1BA84B32AAB52AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB554BF1BA84B32D55555555 55555555555555555555555555552D53F1BA84B33554B5555555555555555555555555555555552D4BF1BA84B
332AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABF1BA84B2AD2B534B334B4CB34AC
CB354AB2D34D52CD2D332B3F1BA84B2B554ACB554AB3534B4D4D4AAACAB4ACAD4B54D32D3F1BA8 4B2B32AAAB55552CB4AD3554CACB4AD354ACCD532CB4BF1BA84B2D4AB4D4B54ACD54AAD5555555 55555555555552B2BF1BA84B2D34ACB4D5555555554B54AAAAAAAAAAAAAAAAACB33F1BA84B2CAA
B4D555555555555555555555555555555552B53F1BA84B2CD555555555555555555555555555555555554D2B3
F1BA84B35554D5555555555555555555555555555555552D4BF1BA84B352AAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAB3F1BA84B34AAB2D55555555555555555555555555555554D4B3F1BA84B34
D5555555555555555555555555555555555552D4BF1BA84B32AAB35555555555555555555555555555555552B
53F1BA84B32D5555555555555555555555555555555555552D53F1BA84B33554CD55555555555555555555555 555555554D2ABF1BA84B332AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABF1BA84B2
AD2B534D54B4B34CB5334CAB54D2CB2AD32D2CD4ABF1BA84B2B554ACB554AB3534B4D4D4AAACAB
4ACAD4B54D32D3F1BA84B2B32AAAB55552CB4AD3554CACB4AD354ACCD532CB4BF1BA84B2D4AB4D
4B54ACD54AAD555555555555555555552B2BF1BA84B2D34ACB4D5555555554B54AAAAAAAAAAAAAA
AAACB33F1BA84B2CAAD55555555555555555555555555555555552B33F1BA84B2CD5555555555555555555 55555555555555554D2B3F1BA84B354AD52AAAD4CAB54CD54AAAD534AB4AAACB2B2B533F1BA84B35 2ACD2B52D2D5554AAACCB535554B2D5352B4B4B53F1BA84B34B52B4AB4D332D54CAD34AAD52CD4D
52AAD34D4CB3F1BA84B34CCAAD554ACACCACCD3334AD3334ACCAAB2D2AAD4BF1BA84B32AAD4D
555555555555555555555555555555552B2BF1BA84B32D5555555555555555555555555555555555552D53F1B
A84B33552D555555555555555555555555555555554D2CBF1BA84B332AAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAABF1BA84B2AD2B534D534B4CB34ACCB354AB2D34D52CD2D2CD33F1BA84B
2B554ACB4000000000000000000000000000000000000000000000000000
Этот результат можно было получить при условии, что имеется эксперименталь- ный файл raw_bits_SV18J.dat. Если экспериментального файла нет, то из его шестнадцате- ричного представления, приведенного выше можно сформировать файл для последующе-
205
го декодирования. Для этого скопируем приведенное шестнадцатеричное представление файла и запишем его в виде файла с именем FilGL1.txt с помощью текстового редактора.
В форму для декодирования (эта форма в точности соответствует файлу raw_bits_SV18J.dat файл FilGL1.txt преобразуется с помощью программы
HexBin_GLONASS.m.
Файл HexBin_GLONASS.m
%Имя m- файла: HexBin_GLONASS.m
%Файл HexBin_GLONASS предназначен для преобразования файла FilGL1.txt
%в шестнадцатеричных символах в файл FilGL1_bin.txt в символах "0" и "1" name_in1='FilGL1.txt';%имя файла в шестнадцатеричном представлении fid = fopen(name_in1,'rt'); %открытие файла fw_bin=fopen('FilGL1_bin.txt','wb');%запись преобразованного файла
%чтение и переформатирование файла
MAS = fscanf(fid,'%s'); for i=1:1875 str_MAS(1:4,i)=sprintf('%s',MAS(i+3*(i-1):(3+i+3*(i-1)))); end
MATR=reshape(MAS,4,1875)'; hex_dec= base2dec(MATR,16);%преобразование шестнадцатеричных чисел в десятичные dec_bin= dec2bin(hex_dec)';%преобразование десятичных чисел в двоичные
MATR_Char = reshape(dec_bin,1,1875*16);%преобразование в строку
%fprintf(fw_bin,'%c ',MATR_Char);%запись файла в символах "0" и "1"(вариант, пробел после с имеет значение) fprintf(fw_bin,'%c\n',MATR_Char);%запись файла в символах "0" и "1" (вариант) fclose(fw_bin);% закрытие файла
Файлы FilGL1.txt (восстановленный из шестнадцетиричного) и raw_bits_SV18J.dat
(экспериментальный) одинаковы и применяя любой из них можно проводить декодирова- ние данных спутников ГЛОНАСС.
Прежде чем приступить к обработке данных файла FilGL1.txt рассмотрим процесс формирования и декодирования в навигационном приемнике информационного навигаци- онного сигнала. Этот процесс может быть представлен в виде следующей блок – схемы
(рис. 5.7).
Информация, передаваемая с каждого навигационного спутника представляет собой непрерывный поток информационных символов. Начала отсчетов передачи данных нуль часов Московского времени (начало передачи первого суперкадра каждые сутки).
Структурно поток цифровой информации (ЦИ) формируется в виде непрерывно по- вторяющихся суперкадров (рис. 5.8).
206
В форму для декодирования (эта форма в точности соответствует файлу raw_bits_SV18J.dat файл FilGL1.txt преобразуется с помощью программы
HexBin_GLONASS.m.
Файл HexBin_GLONASS.m
%Имя m- файла: HexBin_GLONASS.m
%Файл HexBin_GLONASS предназначен для преобразования файла FilGL1.txt
%в шестнадцатеричных символах в файл FilGL1_bin.txt в символах "0" и "1" name_in1='FilGL1.txt';%имя файла в шестнадцатеричном представлении fid = fopen(name_in1,'rt'); %открытие файла fw_bin=fopen('FilGL1_bin.txt','wb');%запись преобразованного файла
%чтение и переформатирование файла
MAS = fscanf(fid,'%s'); for i=1:1875 str_MAS(1:4,i)=sprintf('%s',MAS(i+3*(i-1):(3+i+3*(i-1)))); end
MATR=reshape(MAS,4,1875)'; hex_dec= base2dec(MATR,16);%преобразование шестнадцатеричных чисел в десятичные dec_bin= dec2bin(hex_dec)';%преобразование десятичных чисел в двоичные
MATR_Char = reshape(dec_bin,1,1875*16);%преобразование в строку
%fprintf(fw_bin,'%c ',MATR_Char);%запись файла в символах "0" и "1"(вариант, пробел после с имеет значение) fprintf(fw_bin,'%c\n',MATR_Char);%запись файла в символах "0" и "1" (вариант) fclose(fw_bin);% закрытие файла
Файлы FilGL1.txt (восстановленный из шестнадцетиричного) и raw_bits_SV18J.dat
(экспериментальный) одинаковы и применяя любой из них можно проводить декодирова- ние данных спутников ГЛОНАСС.
Прежде чем приступить к обработке данных файла FilGL1.txt рассмотрим процесс формирования и декодирования в навигационном приемнике информационного навигаци- онного сигнала. Этот процесс может быть представлен в виде следующей блок – схемы
(рис. 5.7).
Информация, передаваемая с каждого навигационного спутника представляет собой непрерывный поток информационных символов. Начала отсчетов передачи данных нуль часов Московского времени (начало передачи первого суперкадра каждые сутки).
Структурно поток цифровой информации (ЦИ) формируется в виде непрерывно по- вторяющихся суперкадров (рис. 5.8).
206
207
Рис. 5.7. Формирование и декодирование радионавигационного сигнала
1. Формирование навигационной информации
2. Форматирование навигационной информации
3. Преобразование навигационной информации в двоичный код
4. Формирование информационных сигналов, соот- ветствующих двоичному коду методом двухпози- ционной фазовой манипуляции с частотой 50 Гц
5. Преобразование информационных сигналов в сигналы с относительной фазовой манипуляцией
6. Сложение по модулю 2 информационных сигналов с меандровым колебанием частоты 100 Гц и выделе- ние 170 символов длительностью 10 миллисекунд
7. Дополнение 170 символов тридцатью символами кода метки времени (символ кода метки времени име- ет длитальность 10 миллисеконд).
Окончание формирования одной строки навигацион- ногокадра
Итог: 200 символов по 10 миллисекунд (2 секунды- время передачи 1 строки)
А
208
Рис. 5.7. Формирование и декодирование радионавигационного сигнала (продолжение)
А
9. Модуляция несущих частот спутника полученным сигналом
10. Демодуляция радионавигационного сигнала
11.Корреляционная обработка демодулированного сигнала.
Итог: поток символов длительностью
10 миллисекунд
12. Определение границ строк
Выделяются строки длиной по 170 бит
13. Выделение информационных символов каждой строки
Выделяются 77 символов информации и 8 провероч- ных символов (код Хемминга)
14. Проверка правильности считанной информации и исправление ошибок
15. Дешифровка двоичных символом
15. Декодирование двоичных символом
16. Перевод декодированных сигналов в десятичный эквивалент
17. Конец декодирования
8. Сложение по модулю 2 информационных сигналов с псевдослучайным кодом стандартной точности с частотой 0.511 МГц
209
Рис. 5.8. Изображение потока данных навигационного спутника
В приведенной далее программе декодирования навигационных данных спутников
ГЛОНАСС выполняются процедуры п. п. 12… 17 (рис. 5.7) по данным п. 11 в соответст- вии с ИКД ГЛОНАСС.
5. Задание 2. Откройте файл Decod_GL3.m. Изучите программные процедуры файла, ис- пользуя его текст и расширенный комментарий. Выполните файл и в командном окне
MatLab прочитайте результат декодирования и занесите его в отчет.
5.5.3 Задания и вопросы для самоподготовки
1. Изучите форматы сообщений спутников ГЛОНАСС?
2. Что понимается под суперкадром, кадром, строкой и словом в сообщениях спутников
ГЛОНАСС?
3. Что понимается под оперативной и неоперативной информацией, передаваемой со спутников ГЛОНАСС?
4. Как контролируется достоверность информации, передаваемой со спутников ГЛО-
НАСС?
5. Как выполняется преобразование между системами счисления: переход из двоичной системы счисления в десятичную и наоборот; переход из шестнадцатеричной системы счисления в десятичную и наоборот; переход из двоичной системы счисления в шест- надцатеричную и наоборот?
6. Что такой бит, байт, младший разряд, старший разряд?
…
Метеки времени
Информационные символы строк
(строка передается в течение 1.7 секунды)
Начало суток
Окончание суток
5.5.4 Листинг файла
:
Decod_GL3.m
%Имя m- файла:Decod_GL3.m
%Программа декодирования данных спутников ГЛОНАСС
%Символы метки времени
Met=[1 1 1 1 1 0 0 0 1 1 0 1 1 1 0 1 0 1 0 0 0 0 1 0 0 1 0 1 1 0];
%Открытие файла для считывания данных
%fid = fopen('raw_bits_SV18J.dat','rb')
%fid = fopen( 'SV18fw_bin.txt','rb') fid = fopen('FilGL1_bin.txt','rb') if fid=-1 kol = 0;%Порядковый номер считываемых данных while (kol < 24)
%Поиск и обнаружение меток времени в массиве данных for i = 1:30
MAS(i) = fscanf(fid,'%d',1); end
C = xor(MAS, Met);
D = any(C); kk = 0; while ( (feof(fid)==0) & (D == 1) )
MAS(1:29) = MAS(2:30); ch = fscanf(fid,'%d',1);
MAS(30) = ch;
C = xor(MAS, Met);
D = any(C); %0 - all 0 kk = kk + 1; end % while
%Считывание данных строк kol = kol + 1 for i = 1:170 danDDD(i)= (fscanf(fid,'%d',1)); end; str_danDDD=sprintf('%d',danDDD(1:170));
%Сложение данных по модулю 2 с меандром for i = 1:170 meandr = rem((i-1), 2); %остаток от деления на 2 ((i-1)/2) danDD(i) = xor(danDDD(i), meandr); end; % for i = 1:170 210
% DD = danDD
%Выделение информационных символов dd1 = danDD(1:2:169); dd2 = danDD(2:2:170); ddxor = xor(dd1, dd2);
Dany = any(ddxor); str1(1) = dd1(1);
%Перевод данных из относительного кода for i = 2:85 str1(i) = xor(dd1(i-1), dd1(i)); end;
% Контроля четности (правильности) принятых данных
Skod(1,1:85)=[0 0 0 0 0 0 0 0 1 1 0 1 1 0 1 0 1 0 1 1 0 1 0 1 0 1 ...
0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 ...
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 ...
0 1 0 1 0 1 0 1 0 1 0 1 0];
Skod(2,1:85)=[0 0 0 0 0 0 0 0 1 0 1 1 0 1 1 0 0 1 1 0 1 1 0 0 1 1 ...
0 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 ...
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 0 0 1 1 ...
0 0 1 1 0 0 1 1 0 0 1 1 0];
Skod(3,1:85)=[0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 0 0 0 1 1 1 1 ...
0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 ...
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 ...
0 0 0 0 1 1 1 1 0 0 0 0 1];
Skod(4,1:85)=[0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 ...
1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 ...
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 ...
1 1 1 1 1 1 1 1 0 0 0 0 0];
Skod(5,1:85)=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 ...
0 0 0 0 0 0 0 0 1 1 1 1 0];
Skod(6,1:85)=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 ...
0 0 0 0 0 0 0 0 0 0 0 0 0];
211
Skod(7,1:85)=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 1 1 1 1 1];
Skod(8,1:85)=[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...
1 1 1 1 1 1 1 1 1 1 1 1 1];
E = rot90(eye(85)); for k=1:8
Vi1 = Skod(k,1:85) * E;
STR1Vi = and(str1,Vi1); a1 = sum(STR1Vi); n = floor(a1 / 2); c1 = a1 - n * 2; if (k <8) cc_all(kol,k)=xor(c1,str1(86 - k)); else cc_all(kol,k)=c1; end; end;
%Декодирование номеров строк num4 = str1(2:5);
NN1 = sprintf('%d',num4); num(kol)=bin2dec(NN1);
%Вывод данных строк str_danDDD1=sprintf('%d',num(kol),danDDD(1:85)); str_danDDD2=sprintf('%d',num(kol),danDDD(86:170)); s_danDDD=[str_danDDD1;str_danDDD2];
%++++++++++++++++++++++++++++++++++++++++++
%Вывод номера считываемых данных (kol), номера строки
%[num(kol)] и коэффициентов четности cc_all(kol,1:8)=
%C8 C7 C6 C5 C4 C3 C2 C1 out1 = [kol num(kol) cc_all(kol,8:-1:1)]
%Вывод считываемых данных строки
SS1=sprintf('%d',str1);
%Декодирование данных строк согласно их номеров
212
% в кадре [например, num(kol) == 1- cтрока номер 1] if num(kol) == 1 zx=1; zxdot=1; zx2dot=1;
Nstr=sprintf('%d',str1(2:5));
R1= sprintf('%d',str1(6:7));
P1=sprintf('%d',str1(8:9)); tk5=sprintf('%d',str1(10:14)); tk6=sprintf('%d',str1(15:20)); tk1=sprintf('%d',str1(21)); if sprintf('%d',str1(22))=='1' zxdot = -1; end;
Xdot=sprintf('%d',str1(23:45)); if sprintf('%d',str1(46))=='1' zx2dot = -1; end;
X2dot=sprintf('%d',str1(47:50)); if sprintf('%d',str1(51))=='1' zx = -1; end;
X=sprintf('%d',str1(52:77));
St1=bin2dec({Nstr tk5 tk6 tk1 X Xdot X2dot});
Mng=[1 1 1 30 zx*2^(-11) zxdot*2^(-20) zx2dot*2^(-30)];
Str1=(St1'.*Mng)'%вывод декодированных данных end; if num(kol) == 2 zy=1; zydot=1; zy2dot=1;
Nstr=sprintf('%d',str1(2:5));
Bn= sprintf('%d',str1(6:8));
P2=sprintf('%d',str1(9)); tb=sprintf('%d',str1(10:16));
R2=sprintf('%d',str1(17:21)); if sprintf('%d',str1(22))=='1' zydot = -1; end;
Ydot=sprintf('%d',str1(23:45)); if sprintf('%d',str1(46))=='1' zy2dot = -1; end;
213
Y2dot=sprintf('%d',str1(47:50)); if sprintf('%d',str1(51))=='1' zy = -1; end;
Y=sprintf('%d',str1(52:77));
St2=bin2dec({Nstr Bn P2 tb Y Ydot Y2dot});
Mng=[1 1 1 15*60 zy*2^(-11) zydot*2^(-20) zy2dot*2^(-30)];
Str2=(St2'.*Mng)'%вывод декодированных данных end; if num(kol) == 3 zz=1; zzdot=1; zz2dot=1; zgamma=1;
Nstr=sprintf('%d',str1(2:5));
P3= sprintf('%d',str1(6)); if sprintf('%d',str1(7))=='1' zgamma = -1; end;
Gamma=sprintf('%d',str1(8:17));
R3=sprintf('%d',str1(18:19));
P=sprintf('%d',str1(20)); ln=sprintf('%d',str1(21)); if sprintf('%d',str1(22))=='1' zzdot = -1; end;
Zdot=sprintf('%d',str1(23:45)); if sprintf('%d',str1(46))=='1' zz2dot = -1; end;
Z2dot=sprintf('%d',str1(47:50)); if sprintf('%d',str1(51))=='1' zz = -1; end;
Z=sprintf('%d',str1(52:77));
St3=bin2dec({Nstr P3 ln Gamma Z Zdot Z2dot});
Mng=[1 1 1 zgamma*2^(-40) zz*2^(-11) zzdot*2^(-20) zz2dot*2^(-30)];
Str3=(St3'.*Mng)'%вывод декодированных данных end;
214
if num(kol) == 4 ztaun=1; zdtaun=1;
Nstr=sprintf('%d',str1(2:5)); if sprintf('%d',str1(6))=='1' ztaun = -1; end; taun= sprintf('%d',str1(7:27)); if sprintf('%d',str1(28))=='1' zdtaun = -1; end; deltatau=sprintf('%d',str1(29:32));
En=sprintf('%d',str1(33:37));
R4=sprintf('%d',str1(38:51));
P4=sprintf('%d',str1(52));
FT=sprintf('%d',str1(53:56));
R4i4=sprintf('%d',str1(57:59));
NT=sprintf('%d',str1(60:70)); nSV=sprintf('%d',str1(71:75)); modifSV=sprintf('%d',str1(76:77));
St4=bin2dec({Nstr taun deltatau En FT NT nSV modifSV});
Mng=[1 ztaun*2^(-30) zdtaun*2^(-30) 1 1 1 1 1];
Str4=(St4'.*Mng)'%вывод декодированных данных end; if num(kol) == 5 ztauc=1; ztauGPS=1;
Nstr=sprintf('%d',str1(2:5));
NA= sprintf('%d',str1(6:16)); if sprintf('%d',str1(17))=='1' ztauc = -1; end; tauc=sprintf('%d',str1(18:48));
R5=sprintf('%d',str1(49));
N4=sprintf('%d',str1(50:54)); if sprintf('%d',str1(55))=='1' ztauGPS = -1; end; tauGPS=sprintf('%d',str1(56:76)); ln=sprintf('%d',str1(77));
St5=bin2dec({Nstr NA tauc N4 tauGPS ln Nstr Nstr});
Mng=[1 1 ztauc*2^(-27) 1 ztauGPS*2^(-30) 1 0 0];
215
Nstr=sprintf('%d',str1(2:5)); if sprintf('%d',str1(6))=='1' ztaun = -1; end; taun= sprintf('%d',str1(7:27)); if sprintf('%d',str1(28))=='1' zdtaun = -1; end; deltatau=sprintf('%d',str1(29:32));
En=sprintf('%d',str1(33:37));
R4=sprintf('%d',str1(38:51));
P4=sprintf('%d',str1(52));
FT=sprintf('%d',str1(53:56));
R4i4=sprintf('%d',str1(57:59));
NT=sprintf('%d',str1(60:70)); nSV=sprintf('%d',str1(71:75)); modifSV=sprintf('%d',str1(76:77));
St4=bin2dec({Nstr taun deltatau En FT NT nSV modifSV});
Mng=[1 ztaun*2^(-30) zdtaun*2^(-30) 1 1 1 1 1];
Str4=(St4'.*Mng)'%вывод декодированных данных end; if num(kol) == 5 ztauc=1; ztauGPS=1;
Nstr=sprintf('%d',str1(2:5));
NA= sprintf('%d',str1(6:16)); if sprintf('%d',str1(17))=='1' ztauc = -1; end; tauc=sprintf('%d',str1(18:48));
R5=sprintf('%d',str1(49));
N4=sprintf('%d',str1(50:54)); if sprintf('%d',str1(55))=='1' ztauGPS = -1; end; tauGPS=sprintf('%d',str1(56:76)); ln=sprintf('%d',str1(77));
St5=bin2dec({Nstr NA tauc N4 tauGPS ln Nstr Nstr});
Mng=[1 1 ztauc*2^(-27) 1 ztauGPS*2^(-30) 1 0 0];
215
Str5=(St5'.*Mng)'%вывод декодированных данных end; if num(kol) == 6 ztaun=1; zlambda=1;zdeltai=1;
Nstr=sprintf('%d',str1(2:5));
CNA= sprintf('%d',str1(6));
Mn=sprintf('%d',str1(7:8)); nSV=sprintf('%d',str1(9:13)); if sprintf('%d',str1(14))=='1' ztaun = -1; end; taun=sprintf('%d',str1(15:23)); if sprintf('%d',str1(24))=='1' zlambda = -1; end; lambda=sprintf('%d',str1(25:44)); if sprintf('%d',str1(45))=='1' zdeltai= -1; end; deltai=sprintf('%d',str1(46:62)); ecs=sprintf('%d',str1(63:77));
St6=bin2dec({Nstr Mn nSV taun lambda deltai ecs});
Mng=[1 1 1 ztaun*2^(-18) zlambda*2^(-20) zdeltai*2^(-20) 2^(-20)];
Str6=(St6'.*Mng)'%вывод декодированных данных end; if num(kol) == 7 zomegan=1;zdeltaT=1; zdeltaTdot=1;
Nstr=sprintf('%d',str1(2:5)); if sprintf('%d',str1(6))=='1' zomegan = -1; end; omegan= sprintf('%d',str1(7:21)); tlambda=sprintf('%d',str1(22:44)); if sprintf('%d',str1(43))=='1' zdeltaT = -1; end; deltaT=sprintf('%d',str1(44:64)); if sprintf('%d',str1(65))=='1' zdeltaTdot= -1; end;
216
deltaTdot=sprintf('%d',str1(66:71));
Hn=sprintf('%d',str1(72:76)); ln=sprintf('%d',str1(77));
St7=bin2dec({Nstr omegan tlambda deltaT deltaTdot Hn ln});
Mng=[1 zomegan*2^(-15) 2^(-5) zdeltaT*2^(-9) zdeltaTdot*2^(-14) 1 1];
Str7=(St7'.*Mng)'%вывод декодированных данных end; if num(kol) == 8 ztaun=1; zlambda=1;zdeltai=1;
Nstr=sprintf('%d',str1(2:5));
CNA= sprintf('%d',str1(6));
Mn=sprintf('%d',str1(7:8)); nSV=sprintf('%d',str1(9:13)); if sprintf('%d',str1(14))=='1' ztaun = -1; end; taun=sprintf('%d',str1(15:23)); if sprintf('%d',str1(24))=='1' zlambda = -1; end; lambda=sprintf('%d',str1(25:44)); if sprintf('%d',str1(45))=='1' zdeltai= -1; end; deltai=sprintf('%d',str1(46:62)); ecs=sprintf('%d',str1(63:77));
St8=bin2dec({Nstr Mn nSV taun lambda deltai ecs});
Mng=[1 1 1 ztaun*2^(-18) zlambda*2^(-20) zdeltai*2^(-20) 2^(-20)];
Str8=(St8'.*Mng)' %вывод декодированных данных end; if num(kol) == 9 zomegan=1;zdeltaT=1; zdeltaTdot=1;
Nstr=sprintf('%d',str1(2:5)); if sprintf('%d',str1(6))=='1' zomegan = -1; end; omegan= sprintf('%d',str1(7:21)); tlambda=sprintf('%d',str1(22:44)); if sprintf('%d',str1(43))=='1' zdeltaT = -1;
217
Hn=sprintf('%d',str1(72:76)); ln=sprintf('%d',str1(77));
St7=bin2dec({Nstr omegan tlambda deltaT deltaTdot Hn ln});
Mng=[1 zomegan*2^(-15) 2^(-5) zdeltaT*2^(-9) zdeltaTdot*2^(-14) 1 1];
Str7=(St7'.*Mng)'%вывод декодированных данных end; if num(kol) == 8 ztaun=1; zlambda=1;zdeltai=1;
Nstr=sprintf('%d',str1(2:5));
CNA= sprintf('%d',str1(6));
Mn=sprintf('%d',str1(7:8)); nSV=sprintf('%d',str1(9:13)); if sprintf('%d',str1(14))=='1' ztaun = -1; end; taun=sprintf('%d',str1(15:23)); if sprintf('%d',str1(24))=='1' zlambda = -1; end; lambda=sprintf('%d',str1(25:44)); if sprintf('%d',str1(45))=='1' zdeltai= -1; end; deltai=sprintf('%d',str1(46:62)); ecs=sprintf('%d',str1(63:77));
St8=bin2dec({Nstr Mn nSV taun lambda deltai ecs});
Mng=[1 1 1 ztaun*2^(-18) zlambda*2^(-20) zdeltai*2^(-20) 2^(-20)];
Str8=(St8'.*Mng)' %вывод декодированных данных end; if num(kol) == 9 zomegan=1;zdeltaT=1; zdeltaTdot=1;
Nstr=sprintf('%d',str1(2:5)); if sprintf('%d',str1(6))=='1' zomegan = -1; end; omegan= sprintf('%d',str1(7:21)); tlambda=sprintf('%d',str1(22:44)); if sprintf('%d',str1(43))=='1' zdeltaT = -1;
217
end; deltaT=sprintf('%d',str1(44:64)); if sprintf('%d',str1(65))=='1' zdeltaTdot= -1; end; deltaTdot=sprintf('%d',str1(66:71));
Hn=sprintf('%d',str1(72:76)); ln=sprintf('%d',str1(77));
St9=bin2dec({Nstr omegan tlambda deltaT deltaTdot Hn ln});
Mng=[1 zomegan*2^(-15) 2^(-5) zdeltaT*2^(-9) zdeltaTdot*2^(-14) 1 1];
Str9=(St9'.*Mng)'%вывод декодированных данных end; if num(kol) == 10 ztaun=1; zlambda=1;zdeltai=1;
Nstr=sprintf('%d',str1(2:5));
CNA= sprintf('%d',str1(6));
Mn=sprintf('%d',str1(7:8)); nSV=sprintf('%d',str1(9:13)); if sprintf('%d',str1(14))=='1' ztaun = -1; end; taun=sprintf('%d',str1(15:23)); if sprintf('%d',str1(24))=='1' zlambda = -1; end; lambda=sprintf('%d',str1(25:44)); if sprintf('%d',str1(45))=='1' zdeltai= -1; end; deltai=sprintf('%d',str1(46:62)); ecs=sprintf('%d',str1(63:77));
St10=bin2dec({Nstr Mn nSV taun lambda deltai ecs});
Mng=[1 1 1 ztaun*2^(-18) zlambda*2^(-20) zdeltai*2^(-20) 2^(-20)];
Str10=(St10'.*Mng)'%вывод декодированных данных end; if num(kol) == 11 zomegan=1;zdeltaT=1; zdeltaTdot=1;
Nstr=sprintf('%d',str1(2:5)); if sprintf('%d',str1(6))=='1' zomegan = -1;
218
Hn=sprintf('%d',str1(72:76)); ln=sprintf('%d',str1(77));
St9=bin2dec({Nstr omegan tlambda deltaT deltaTdot Hn ln});
Mng=[1 zomegan*2^(-15) 2^(-5) zdeltaT*2^(-9) zdeltaTdot*2^(-14) 1 1];
Str9=(St9'.*Mng)'%вывод декодированных данных end; if num(kol) == 10 ztaun=1; zlambda=1;zdeltai=1;
Nstr=sprintf('%d',str1(2:5));
CNA= sprintf('%d',str1(6));
Mn=sprintf('%d',str1(7:8)); nSV=sprintf('%d',str1(9:13)); if sprintf('%d',str1(14))=='1' ztaun = -1; end; taun=sprintf('%d',str1(15:23)); if sprintf('%d',str1(24))=='1' zlambda = -1; end; lambda=sprintf('%d',str1(25:44)); if sprintf('%d',str1(45))=='1' zdeltai= -1; end; deltai=sprintf('%d',str1(46:62)); ecs=sprintf('%d',str1(63:77));
St10=bin2dec({Nstr Mn nSV taun lambda deltai ecs});
Mng=[1 1 1 ztaun*2^(-18) zlambda*2^(-20) zdeltai*2^(-20) 2^(-20)];
Str10=(St10'.*Mng)'%вывод декодированных данных end; if num(kol) == 11 zomegan=1;zdeltaT=1; zdeltaTdot=1;
Nstr=sprintf('%d',str1(2:5)); if sprintf('%d',str1(6))=='1' zomegan = -1;
218
end; omegan= sprintf('%d',str1(7:21)); tlambda=sprintf('%d',str1(22:44)); if sprintf('%d',str1(43))=='1' zdeltaT = -1; end; deltaT=sprintf('%d',str1(44:64)); if sprintf('%d',str1(65))=='1' zdeltaTdot= -1; end; deltaTdot=sprintf('%d',str1(66:71));
Hn=sprintf('%d',str1(72:76)); ln=sprintf('%d',str1(77));
St11=bin2dec({Nstr omegan tlambda deltaT deltaTdot Hn ln});
Mng=[1 zomegan*2^(-15) 2^(-5) zdeltaT*2^(-9) zdeltaTdot*2^(-14) 1 1];
Str11=(St11'.*Mng)'%вывод декодированных данных end; if num(kol) == 12 ztaun=1; zlambda=1;zdeltai=1;
Nstr=sprintf('%d',str1(2:5));
CNA= sprintf('%d',str1(6));
Mn=sprintf('%d',str1(7:8)); nSV=sprintf('%d',str1(9:13)); if sprintf('%d',str1(14))=='1' ztaun = -1; end; taun=sprintf('%d',str1(15:23)); if sprintf('%d',str1(24))=='1' zlambda = -1; end; lambda=sprintf('%d',str1(25:44)); if sprintf('%d',str1(45))=='1' zdeltai= -1; end; deltai=sprintf('%d',str1(46:62)); ecs=sprintf('%d',str1(63:77));
St12=bin2dec({Nstr Mn nSV taun lambda deltai ecs});
Mng=[1 1 1 ztaun*2^(-18) zlambda*2^(-20) zdeltai*2^(-20) 2^(-20)];
Str12=(St12'.*Mng)'%вывод декодированных данных end;
219
Hn=sprintf('%d',str1(72:76)); ln=sprintf('%d',str1(77));
St11=bin2dec({Nstr omegan tlambda deltaT deltaTdot Hn ln});
Mng=[1 zomegan*2^(-15) 2^(-5) zdeltaT*2^(-9) zdeltaTdot*2^(-14) 1 1];
Str11=(St11'.*Mng)'%вывод декодированных данных end; if num(kol) == 12 ztaun=1; zlambda=1;zdeltai=1;
Nstr=sprintf('%d',str1(2:5));
CNA= sprintf('%d',str1(6));
Mn=sprintf('%d',str1(7:8)); nSV=sprintf('%d',str1(9:13)); if sprintf('%d',str1(14))=='1' ztaun = -1; end; taun=sprintf('%d',str1(15:23)); if sprintf('%d',str1(24))=='1' zlambda = -1; end; lambda=sprintf('%d',str1(25:44)); if sprintf('%d',str1(45))=='1' zdeltai= -1; end; deltai=sprintf('%d',str1(46:62)); ecs=sprintf('%d',str1(63:77));
St12=bin2dec({Nstr Mn nSV taun lambda deltai ecs});
Mng=[1 1 1 ztaun*2^(-18) zlambda*2^(-20) zdeltai*2^(-20) 2^(-20)];
Str12=(St12'.*Mng)'%вывод декодированных данных end;
219
if num(kol) == 13 zomegan=1;zdeltaT=1; zdeltaTdot=1;
Nstr=sprintf('%d',str1(2:5)); if sprintf('%d',str1(6))=='1' zomegan = -1; end; omegan= sprintf('%d',str1(7:21)); tlambda=sprintf('%d',str1(22:44)); if sprintf('%d',str1(43))=='1' zdeltaT = -1; end; deltaT=sprintf('%d',str1(44:64)); if sprintf('%d',str1(65))=='1' zdeltaTdot= -1; end; deltaTdot=sprintf('%d',str1(66:71));
Hn=sprintf('%d',str1(72:76)); ln=sprintf('%d',str1(77));
St13=bin2dec({Nstr omegan tlambda deltaT deltaTdot Hn ln});
Mng=[1 zomegan*2^(-15) 2^(-5) zdeltaT*2^(-9) zdeltaTdot*2^(-14) 1 1];
Str13=(St13'.*Mng)'%вывод декодированных данных end; if num(kol) == 14 ztaun=1; zlambda=1;zdeltai=1;
Nstr=sprintf('%d',str1(2:5));
CNA= sprintf('%d',str1(6));
Mn=sprintf('%d',str1(7:8)); nSV=sprintf('%d',str1(9:13)); if sprintf('%d',str1(14))=='1' ztaun = -1; end; taun=sprintf('%d',str1(15:23)); if sprintf('%d',str1(24))=='1' zlambda = -1; end; lambda=sprintf('%d',str1(25:44)); if sprintf('%d',str1(45))=='1' zdeltai= -1; end; deltai=sprintf('%d',str1(46:62)); ecs=sprintf('%d',str1(63:77));
220
Nstr=sprintf('%d',str1(2:5)); if sprintf('%d',str1(6))=='1' zomegan = -1; end; omegan= sprintf('%d',str1(7:21)); tlambda=sprintf('%d',str1(22:44)); if sprintf('%d',str1(43))=='1' zdeltaT = -1; end; deltaT=sprintf('%d',str1(44:64)); if sprintf('%d',str1(65))=='1' zdeltaTdot= -1; end; deltaTdot=sprintf('%d',str1(66:71));
Hn=sprintf('%d',str1(72:76)); ln=sprintf('%d',str1(77));
St13=bin2dec({Nstr omegan tlambda deltaT deltaTdot Hn ln});
Mng=[1 zomegan*2^(-15) 2^(-5) zdeltaT*2^(-9) zdeltaTdot*2^(-14) 1 1];
Str13=(St13'.*Mng)'%вывод декодированных данных end; if num(kol) == 14 ztaun=1; zlambda=1;zdeltai=1;
Nstr=sprintf('%d',str1(2:5));
CNA= sprintf('%d',str1(6));
Mn=sprintf('%d',str1(7:8)); nSV=sprintf('%d',str1(9:13)); if sprintf('%d',str1(14))=='1' ztaun = -1; end; taun=sprintf('%d',str1(15:23)); if sprintf('%d',str1(24))=='1' zlambda = -1; end; lambda=sprintf('%d',str1(25:44)); if sprintf('%d',str1(45))=='1' zdeltai= -1; end; deltai=sprintf('%d',str1(46:62)); ecs=sprintf('%d',str1(63:77));
220
St14=bin2dec({Nstr Mn nSV taun lambda deltai ecs});
Mng=[1 1 1 ztaun*2^(-18) zlambda*2^(-20) zdeltai*2^(-20) 2^(-20)];
Str14=(St14'.*Mng)'%вывод декодированных данных end;
%Строка 14 для 5 кадра if num(kol) == 14 zB1=1; zB2=1;
Nstr=sprintf('%d',str1(2:5)); if sprintf('%d',str1(6))=='1' zB1 = -1; end;
B1=sprintf('%d',str1(7:16)); if sprintf('%d',str1(17))=='1' zB2 = -1; end;
B2=sprintf('%d',str1(18:26));
Kp=sprintf('%d',str1(27:28));
St14_5=bin2dec({Nstr B1 B2 Kp});
Mng=[1 zB1*2^(-10) zB2*2^(-16) 1];
Str14_5=(St14_5'.*Mng)'%вывод декодированных данных end; if num(kol) == 15 zomegan=1;zdeltaT=1; zdeltaTdot=1;
Nstr=sprintf('%d',str1(2:5)); if sprintf('%d',str1(6))=='1' zomegan = -1; end; omegan= sprintf('%d',str1(7:21)); tlambda=sprintf('%d',str1(22:44)); if sprintf('%d',str1(43))=='1' zdeltaT = -1; end; deltaT=sprintf('%d',str1(44:64)); if sprintf('%d',str1(65))=='1' zdeltaTdot= -1; end; deltaTdot=sprintf('%d',str1(66:71));
Hn=sprintf('%d',str1(72:76)); ln=sprintf('%d',str1(77));
221
St15=bin2dec({Nstr omegan tlambda deltaT deltaTdot Hn ln});
Mng=[1 zomegan*2^(-15) 2^(-5) zdeltaT*2^(-9) zdeltaTdot*2^(-14) 1 1];
Str15=(St15'.*Mng)'%вывод декодированных данных end; str1; end; %while (feof(fid)==0) | % while (kol < 14) end % if fid=-1 fclose(fid);
%Технологические данные
Qout=[num' cc_all] %Номер строки и проверка на четность
%Qoutnum1=Qout(1,2:9);
%SS1=sprintf('%d',str1);
%Qout123=[Str1 Str2 Str3]
%Qout45=[Str4 Str5]
%Qout6789=[Str6 Str7 Str8 Str9]
%Qout10_11_12=[Str10 Str11 Str12]
%Qout13_14_15=[Str13 Str14 Str15] clear;
5.5.5 Пример выполнения файла
:
Decod_GL3.m
В результате выполнения программы в командном окне Command Window MatLab отображаются декодированные данные по каждой из строк в последовательности и соответствии ИКД ГЛОНАСС. Так, например, структура строки 1согласно ИКД
ГЛОНАСС имеет вид
1 2 - 5 6 - 7 8 - 9 10 - 21 22 - 45 85 84 -81 80 - 79 78 - 77 76 - 65 64 - 41
0
m
P1
t
k
)
t
(
n
X
b
.
Номер строки в навигацион- ном кадре
Резерв
Признак смены оператив- ной инфо- рмации
Время начала кадра внутри текущих суток, исчисляемое в шкале бортового времени.
Начало суток по бортовому времени спут- ника совпадает с началом очередного су- перкадра.
Составляющие вектора скорости n-го спутника в системе коорди- нат ПЗ-90 на момент времени t
b
46 - 50 51 - 77 1 - 8 1 - 30 40 - 36 35 - 9 8 - 1 1 - 30
)
t
(
n
X
b
..
)
t
(
n
X
b
Составляющие ускорения n-го спутника на момент времени t
b
,
Координаты n-го спутника в системе координат ПЗ-90 на момент времени t
b
;
Код
Хемминга
Метка времени
Рис. 5.9. - Структура 1 строки для (1- 4) кадров суперкадра
222
Декодированная информация из командного окна MatLab приведена на рис. 5.10.
Рис. 5.10 Декодированные данные спутника ГЛОНАСС
Данные, изображенные на рис. 5.10 соответствуют рис. 5.9, но записаны в столбец.
223
32>
1 ... 6 7 8 9 10 11 12 13 14