Автор: Пользователь скрыл имя, 18 Февраля 2013 в 23:54, курсовая работа
GPS спутники передают два вида данных - альманах и эфимерис. Альманах содержит параметры орбит всех спутников. Каждый спутник передаёт альманах для всех спутников. Данные альманаха не отличаются большой точностью и действительны несколько месяцев.
В свою очередь, данные эфимериса содержат очень точные корректировки параметров орбит и часов для каждого спутника, что требуется для точного определения координат. Каждый GPS спутник передаёт только данные своего собственного эфимериса. Эти данные действительны только 30 минут. Спутники передают свой эфимерис каждые 30 секунд.
Реферат:
GPS спутники
передают два вида данных - альманах
и эфимерис. Альманах содержит
параметры орбит всех
В свою очередь, данные эфимериса содержат очень точные корректировки параметров орбит и часов для каждого спутника, что требуется для точного определения координат. Каждый GPS спутник передаёт только данные своего собственного эфимериса. Эти данные действительны только 30 минут. Спутники передают свой эфимерис каждые 30 секунд.
Если GPS был отключён более 30 минут, а потом включён, он начинает искать спутники, основываясь на известном ему альманахе. По нему GPS выбирает спутники для инициации поиска.
Когда GPS приёмник фиксирует спутник, он показывает на экране "пустой" столбик силы сигнала. В этот момент ещё идёт процесс сбора данных эфимериса. Когда эфимерис каждого спутника принят, соответствующий ему столбик силы сигнала закрашивается чёрным цветом и данные, принятые от спутника считаются подходящими для навигации.
Если питание приёмника отключить, а потом снова включить в течении 30 минут, он "поймает" спутники очень быстро, т.к. не надо будет снова собирать данные эфимериса. Это называется "горячий" старт.
Если после отключения прошло более 30 минут, будет произведён "тёплый" старт и GPS приёмник снова начнёт собирать данные эфимериса.
Если GPS приёмник был перевезён (в выключенном состоянии) на несколько сотен километров или внутренние часы стали показывать неточное время, то данные имеющегося альманаха являются неверными. В таком случае навигатору требуется выполнить новый "поиск неба" (переинициализация) для загрузки нового альманаха и эфимериса. Это уже будет "холодный" старт.
Иногда бывает такая ситуация, что GPS приёмник долго не может "поймать" спутники. При этом на экране "Спутники" отображается пустое небо без номеров спутников. Оживить GPS поможет программка GPS Utility. Кроме неё, Вам потребуется рабочий GPS приёмник. С помощью программы Вы можете выкачать альманах из рабочего приёмника в ПК, а потом, подключив "мёртвый" GPS, закачать в него.
Задание на курсовую работу по курсу
«Cпутниковые навигационные системы»
Космический сегмент спутниковой системы GPS.
Экспериментально-
теоретическое исследование данных
альманаха навигационных
5. 1 Обосновать
и выбрать блок-схему
5. 2 Разработать алгоритм приема, записи и хранения альманаха спутников GPS.
5. 3 Разработать
алгоритм преобразования
5. 4. Записать данные альманаха GPS, декодировать их и записать в формате YUMA.
5. 5 Получить
данные альманаха от
5. 6 Получить данные альманаха YUMA и SEM соответствующие дню Вашего рождения в 2010 или в 2011 году.
5. 7 Преобразовать данные YUMA в SEM и наоборот.
5. 8 Загрузить данные YUMA, преобразованные из формата SEM в программный комплекс GeoMot и сделать вывод об их работоспособности.
5. 9 Загрузить данные YUMA в программу пакета MatLab и сопоставить их с результатами комплекса GeoMot.
5. 10 Загрузить данные SEM, преобразованные из формата YUMA в программный комплекс WSEM3.6, выполнить оценку геометрических факторов относительно координат НАУ и сопоставить их с результатами, полученными экспериментально на измерительном стенде.
Введение:
Программа OziExplorer позволяет экспортировать считанный из приёмника альманах в текстовый файл. Ниже приведён отрывок такого файла для первых трёх спутников.
**** Week 121 almanac for PRN-1 ************
ID: 1
Health: 0
Eccentricity: 5.
Time of Applicability(s): 2.
Orbital Inclination(rad): 9.
Rate of Right Ascen(r/s): -7.
SQRT(A) (m^1/2): 5.15366992187500E+
Right Ascen at TOA(rad): 7.78944641351700E-
Argument of Perigee(rad): -1.73652994632721E+0000
Mean Anom(rad): -2.07132005691528E+
Af0(s): 2.07901000976562E-0004
Af1(s/s): 0.00000000000000E+
week: 121
При наличии последней позиции, приёмник может определить какие спутники находятся в данном полушарии, а какие нет. За счёт этого не искать отсутствующие спутники. Естественно, что если приёмник перевезти на тысячи километров, то ОГ изменится достаточно сильно, и от наличия последней позиции толку будет мало.
Информация со спутников передаётся в виде кадров со скоростью 50 бит/с. Один кадр это 1500 бит. Состоит он из 5 под кадров по 300 бит каждый. Что передаётся в первых 3 подкадрах сейчас значения не имеет. В 4 и 5 подкадрах передаётся, в основном, альманах. В 4 под кадре для спутников в 25 по 32, в 5 - с 1 по 24. В ИКД на GPS написано, что полный набор информации - это 25 кадров. Значит, чтобы собрать полностью весь альманах на все спутники нужно: (1500 бит * 25)/50 (бит/с) = 750 секунд = 12,5 минут
Антена принимает сигнал который с помощью сплитера предается на приемник V1.C приемника мы записываем сигнал. Открываем програму NovAtel .В открытом окне выбираем Device потом open.Потом открываем Logging control нажимаем + и записываем даные.Затем выбивает окно в котором shot меняем на complete,в окне log выбираем RAWALM,в соседнем поле выбираем binary b onchange.Создали файл GPS ,потом сохраняем.
Открываем mathlab и в name_in прописываем место и названия файла который сохраняем в формате gps ignar.gps'; а в name0 в формате yum ignar.yum';
Содержательная часть работы:
Преоброзования в стандартный формат с помощью mathlab.
%Имя:Raw_Alm.m
%Программа преобразует
данные бинарного файла
%формат YUMA
%начало цикла для 63 спутников (в том числе и спутников-нагрузок)
% kol = 66
% for i=1: 64
% %структура согласно формата альманаха YUMA и ICD GPS-200 C
% alm(i)= struct('SV_ID',0, 'week',0, 'health_0',0, 'health',0,'ecc',0,...
% 't0a',0, 'incl_angle',0, 'omega_dot',0,...
% 'sqrtA',0, 'omega0',0, 'omega', 0, 'M0',0,'af0',0, 'af1',0);
% end;
%диск и последовательность папок, из которых считывается файл с записью альманаха
%name_in =
'D:\ПОВОЗНЮК\Raw_Alm\RAW_
name_in = 'D:\POVOZNUYK\RAW_ALMANAC_FIN_
kol_zap = 0;
%name0 = 'D:\ПОВОЗНЮК\Raw_Alm\RAW_
name0 =
D:\POVOZNUYK\RAW_ALMANAC_FIN_
%формирование CRC-кода
для проверки считываемых
fid_crc = fopen(name_in,'rb');
fseek(fid_crc, 0, 'eof');
size1 = ftell(fid_crc)- 4;
fseek(fid_crc, size1, 'bof');
CRC = fread(fid_crc,1,'uint32');
fprintf('CRC_hex = %X \n',CRC);
fseek(fid_crc, 0, 'bof');
CRC_own = CalculateBlockCRC32(fid_crc, size1);
fprintf('CRC_own_hex= %X \n',CRC_own);
fclose(fid_crc);
%Чтение данных альманаха
fid = fopen(name_in,'rb');
%kol_zap = 0;
while (~feof(fid))
kol_zap = kol_zap + 1;
%for (kk = 1: 2)
max_num = 0;
%%%%% Заголовок данных- Header Structure (Binary Message)
Syn_c = fread(fid,3,'uchar'); %В OEM-4 'uchar'
if (~feof(fid))
Hear_d= fread(fid,1,'uchar');%В OEM-4 'Uchar'
Message_ID = fread(fid,1,'uint16');%В OEM-4 'Long'
Message_Type=fread(fid,1,'
Port_Address = fread(fid,1,'uchar'); %В OEM-4 'uchar'
Message_Length = fread(fid,1,'uint16'); %В OEM-4 'Ushort'
Sequenc_e = fread(fid,1,'uint16'); %В OEM-4 'Ushort'
Idle_Time = fread(fid,1,'uchar'); %В OEM-4 'uchar'
Time_Status = fread(fid,1,'uchar'); %В OEM-4 'Enum'
week_1 = fread(fid,1,'uint16'); %В OEM-4 'Ushort'
Time = fread(fid,1,'ulong'); %В OEM-4 'Double'
N_ul = fread(fid,1,'uint');
d_fcc=fread(fid,1,'uint16');
d_fcc = dec2hex(d_fcc);
e1 = fread(fid,1,'uint16');
week =fread(fid,1,'uint');%
T0a= fread(fid,1,'ulong');% время привязки альманаха
kol_str= fread(fid,1,'ulong'); %количество строк
%Чтение данных по каждому спутнику
%max_num = 0;
for i=1: 64
%структура согласно формата альманаха YUMA и ICD GPS-200 C
alm(i)= struct('SV_ID',0, 'week',0, 'health_0',0, 'health',0,'ecc',0,...
't0a',0, 'incl_angle',0, 'omega_dot',0,...
'sqrtA',0, 'omega0',0, 'omega', 0, 'M0',0,'af0',0, 'af1',0);
end;
for i = 1 : kol_str
Nsv= fread(fid,1,'ushort'); % номер спутника согласно табл.20-V ICD GPS-200 C
TLM= fread(fid,3,'uchar');
TL_M = dec2hex(TLM,2);
HOW= fread(fid,3,'uchar');
HO_W = dec2hex(HOW,2);
e6= fread(fid,1,'uchar');
maska = bin2dec('11000000');
ID_dop = bitand(e6, maska);
data_ID = bitshift(ID_dop, -6);
maska = bin2dec('00111111');
SV_ID = bitand(e6, maska);
if (SV_ID > max_num)
max_num = SV_ID;
end;
ecc1 = fread(fid,1,'uchar');
ecc2 = fread(fid,1,'uchar');
ecc = (bitshift(ecc1, 8) + ecc2)*2^(-21);
t0a= fread(fid,1,'uchar')*2^12 ;% время привязки альманаха
d1= fread(fid,1,'bit8');
d2=fread(fid,1,'uchar');
incl_angle= ((bitshift(d1, 8) + d2)*2^(-19) + 0.3) * pi;
d1= fread(fid,1,'bit8');
d2=fread(fid,1,'uchar');
omega_dot= (bitshift(d1, 8) + d2)*2^(-38) * pi;
%-----------------------------
maska = bin2dec('00111111');
health_1 = fread(fid,1,'uchar');
if health_1 > 255
health_1 = health_1;
end;
health = bitand(health_1,maska);
% if health > 63
% health = health;
% end;
maska = bin2dec('11000000');
health_0 = bitand(health_1,maska);
health_0 = bitshift(health_0, -6);
% if health_0 > 3
% health_0 = health_0;
% end;
%-----------------------------
d1 = fread(fid,1,'uchar');
d2 = fread(fid,1,'uchar');
d3 = fread(fid,1,'uchar');
sqrtA=(bitshift(d1, 16) + bitshift(d2, 8) + d3)*2^(-11);
d1 = fread(fid,1,'bit8');
sign2 = sign(d1);
d2 = fread(fid,1,'uchar');
d3 = fread(fid,1,'uchar');
omega0 =((bitshift(d1, 16) + bitshift(d2, 8) + d3)*2^(-23)) * pi;
d1 = fread(fid,1,'bit8');
sign1 = sign(d1);
d2 = fread(fid,1,'uchar');
d3 = fread(fid,1,'uchar');
omega =((bitshift(d1, 16) + bitshift(d2, 8) + d3)*2^(-23)) * pi;
d1 = fread(fid,1,'bit8');
d2 = fread(fid,1,'uchar');
d3 = fread(fid,1,'uchar');
M0 =((bitshift(d1, 16) + bitshift(d2, 8) + d3)*2^(-23)) * pi;
af0_1 = fread(fid,1,'uchar');
af0_1_bin = dec2bin(af0_1);
d2 = fread(fid,1,'uchar');
d2bin = dec2bin(d2);
d3 = fread(fid,1,'uchar');
d3bin = dec2bin(d3);
maska = bin2dec('00011100');
d4 = bitand(d3,maska);
af0_2 = bitshift(d4, -2);
af0_dop = bitshift(af0_1, 3) + af0_2;
koef = 2^(-20);
af0 = var_sign(af0_dop,11,koef);
% af1:
maska = bin2dec('11100000');
d4 = bitand(d3,maska);
af1_2 = bitshift(d2, 3);
af1_1 = bitshift(d4, -5);
af1_dop = bitor(af1_2, af1_1);
koef = 2^(-38);
af1 = var_sign(af1_dop,11,koef);
%-----------------------------
% fprintf(' i = %i SV_ID = %i \n', i, SV_ID);
if SV_ID > 0
alm(SV_ID)= struct('SV_ID',SV_ID, 'week',week, 'health_0', health_0, 'health',health, 'ecc',ecc,...
't0a',t0a, 'incl_angle',incl_angle, 'omega_dot',omega_dot,...
'sqrtA',sqrtA, 'omega0',omega0, 'omega', omega, 'M0',M0,...
'af0',af0, 'af1',af1);
% if (SV_ID > max_num)
% max_num = SV_ID;
% end;
% else
% fprintf('SV_ID = %i \n', SV_ID);
end;
end; % for i = 1 : kol_str
%Формирование вывода данных альманаха в формате YUMA
nameW = strcat( name0 , num2str(kol_zap) , '.alm');
fw = fopen(nameW, 'Wt');
for i=1: 64 % max_num
if alm(i).SV_ID > 0
if alm(i).SV_ID < 10
fprintf(fw,'**** Week %i almaNAU for PRN-0%i **********\n',alm(i).week, alm(i).SV_ID);
fprintf(fw,'ID:
fprintf(fw,'Health:
else
fprintf(fw,'**** Week %i almaNAU for PRN-%i **********\n',alm(i).week, alm(i).SV_ID);
fprintf(fw,'ID:
fprintf(fw,'Health:
end; % if alm(i).SV_ID < 10
% if alm(i).health < 10
%
fprintf(fw,'Health:
% else
%
fprintf(fw,'Health:
% end;
strdop = e_norm(alm(i).ecc, 10);
fprintf(fw,'Eccentricity:
fprintf(fw,'Time of Applicability(s): %6.4f\n',alm(i).t0a);
fprintf(fw,'Orbital Incluation(rad): %0.10f \n',alm(i).incl_angle);
strdop = e_norm(alm(i).omega_dot, 10);
fprintf(fw,'Rate of Right Ascen(r/s): %s\n', strdop);
fprintf(fw,'SQRT(A) (m^1/2): %4.7f \n',alm(i).sqrtA);
strdop = e_norm(alm(i).omega0, 10);
fprintf(fw,'Right Ascen at Week(rad): %s\n', strdop);
%%%%%%%%%%%%%%%%%%%%%%%%%%
if alm(i).omega < 0
fprintf(fw,'Argument of Perigee(rad): %1.10f \n',alm(i).omega);
else
fprintf(fw,'Argument of Perigee(rad): %1.10f \n',alm(i).omega);
end;
strdop = e_norm(alm(i).M0, 10);
fprintf(fw,'Mean Anom(rad): %s\n', strdop);
strdop = e_norm(alm(i).af0, 10);
fprintf(fw,'Af0(s):
strdop = e_norm(alm(i).af1, 10);
fprintf(fw,'Af1(s/s):
fprintf(fw,'week:
fprintf(fw,' \n');
end; % if alm(i).SV_ID > 0
if (i == 32)
CRC_new = fread(fid,1,'uint32');
fprintf('kol_zap =%i CRC_new_hex = %X \n', kol_zap, CRC_new);
end;
end; % for i=1: 32 % max_num
fclose(fw);
end; % if (~feof(fid))
end; % while (~feof(fid))
%CR_C = fread(fid,1,'uint32');
%CR_C = dec2hex(CR_C);
fclose(fid);
%fclose(fw);
**** Week 1577 almaNAU for PRN-01 **********
ID: 1
Health: 255
Eccentricity: 0.4471302032E-002
Time of Applicability(s): 147456.0000
Orbital Incluation(rad): 0.9636719227
Rate of Right Ascen(r/s): -0.8263201755E-008
SQRT(A) (m^1/2): 5154.7133789
Right Ascen at Week(rad): -0.1727199435E+001
Argument of Perigee(rad): 0.8652640581E+000
Mean Anom(rad): -0.3039453268E+001
Af0(s): -0.1029968262E-003
Af1(s/s): -0.3637978807E-011
week: 1577
В програме planning открываем ignar.yum. В окне station editor выбираем координаты местонахождения и дату отсчета.
Всего имеем 32 спутника,1 и 9 больные. На этом рисунке мы видим полученные данные высоты спутников GPS
На этом рисунке мы видим полученные данные гистограмы видимости спутников GPS.