Главная страница
Навигация по странице:

  • Vsion_GLONASS_GPS

  • Vision_GLONASS_GPS_GALILEO _My. 2. Скопируйте в папку Vision_GLONASS_GPS_GALILEO _My изVsion_GLONASS_GPS функции и файлы, из папки Vi

  • Файла Vision_GL_GPS_GAL.m

  • Цель лабораторной работы

  • ORBIT_GGG . Рекомендуется следующий порядок выполнения лабораторной работы. 1. Создайте папку ORBIT_GGG _My. 2. Из папки Vision_GLONASS_GPS_GALILEO

  • ORBIT_GGG _My

  • ORBITA_GGG.m Файл ORBITA_GGG.m

  • 5.5 Декодирование и расшифровка данных спутников ГЛОНАСС

  • Decod_GLONASS. Цель лабораторной работы

  • Decod_GLONASS _My

  • Расширенный комментарий к файлу Hex_GLONASS.m.

  • Задание 2.

  • Спутниковые системы навигации. Учебное пособие. Учебное пособие ( Лабораторный практикум на компьютере ) Київ 2008 1


    Скачать 4.49 Mb.
    НазваниеУчебное пособие ( Лабораторный практикум на компьютере ) Київ 2008 1
    Дата12.04.2023
    Размер4.49 Mb.
    Формат файлаpdf
    Имя файлаСпутниковые системы навигации. Учебное пособие.pdf
    ТипУчебное пособие
    #1057965
    страница12 из 14
    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

    1   ...   6   7   8   9   10   11   12   13   14


    написать администратору сайта