登录论坛

查看完整版本 : [求助]Index exceeds matrix dimensions.的问题


jorad
2008-05-27, 15:46
本人编写了一个GPS星历导航文件的读取程序,可是在运行的时候出现了Index exceeds matrix dimensions.的问题,检查了半天也没发现错在哪儿,求高手帮忙。
程序如下:

function loadrinexn(filename)
%LOADRINEXN Satellite ephemeris (Navigation message) data
% in RINEX2 format. Load the data from a user-specified
% ASCII text file in RINEX2 format. The data are
% maintained as global variables.
%
% loadrinexn(filename)
%
% INPUTS
% filename = Name of the ASCII text file containing the
% RINEX2-formatted Navigation message data
% (NOTE: make sure to put the name in single
% quotation marks (e.g., loadrinexn('stkr2581.02n')

%
% Copyright (c) 2002-2003 Michael S. Braasch / GPSoft LLC
%
global ALPHA BETA UTC_A0 UTC_A1 UTC_TOT UTC_WN LEAP_SEC
global SV_ID_VEC TOC_YEAR TOC_MONTH TOC_DAY TOC_HOUR
global TOC_MINUTE TOC_SEC AF0 AF1 AF2
global IODE CRS DELTAN MZERO CUC ECCEN CUS SQRTSMA
global TOE CIC OMEGAZERO CIS IZERO CRC ARGPERI OMEGADOT
global IDOT CODES_ON_L2 TOE_WN L2_P_FLAG
global URA SV_HEALTH TGD IODC TRANS_TIME_OF_MESSAGE
global FIT_INTERVAL SPARE1 SPARE2
%
fid = fopen(filename);
if fid==-1
error('RINEX Navigation message data file not found or permission denied');
end
%
% Pre-load iono model and UTC parameters in case files omit them
ALPHA(1:4) = NaN; BETA(1:4) = NaN;
UTC_A0 = NaN; UTC_A1 = NaN; UTC_TOT = NaN; UTC_WN = NaN;
LEAP_SEC = NaN; TOE(1:32) = -9e99;
%
disp('Loading RINEX2 Navigation Data File - Please Be Patient')
% Parse header
while 1 % this is the numeral '1'
line = fgetl(fid);
if line(61:73) == 'END OF HEADER',
break
end
if line(61:69) == 'ION ALPHA',
ALPHA(1) = str2num(line(3:14));
ALPHA(2) = str2num(line(15:26));
ALPHA(3) = str2num(line(27:38));
ALPHA(4) = str2num(line(39:50));
end
if line(61:68) == 'ION BETA',
BETA(1) = str2num(line(3:14));
BETA(2) = str2num(line(15:26));
BETA(3) = str2num(line(27:38));
BETA(4) = str2num(line(39:50));
end
if line(61:69) == 'DELTA-UTC',
UTC_A0 = str2num(line(4:23));
UTC_A1 = str2num(line(24:42));
UTC_TOT = str2num(line(43:51));
UTC_WN = str2num(line(52:60));
end
if line(61:72) == 'LEAP SECONDS',
LEAP_SEC = str2num(line(1:6));
end
end
%
% Initialize vector of Satellite ID's
SV_ID_VEC(1:32) = 0;
% Loop through the file
while 1 % this is the numeral '1'
%
line = fgetl(fid);
if ~ischar(line), break, end
%
svnum = str2num(line(1:2));
SV_ID_VEC(svnum) = 1;
TOC_YEAR(svnum) = str2num(line(4:5));
TOC_MONTH(svnum) = str2num(line(7:8));
TOC_DAY(svnum) = str2num(line(10:11));
TOC_HOUR(svnum) = str2num(line(13:14));
TOC_MINUTE(svnum) = str2num(line(16:17));
TOC_SEC(svnum) = str2num(line(18:22));
AF0(svnum) = str2num(line(23:41));
AF1(svnum) = str2num(line(42:60));
AF2(svnum) = str2num(line(61:79));

line = fgetl(fid);
IODE(svnum) = str2num(line(4:22));
CRS(svnum) = str2num(line(23:41));
DELTAN(svnum) = str2num(line(42:60));
MZERO(svnum) = str2num(line(61:79));

line = fgetl(fid);
CUC(svnum) = str2num(line(4:22));
ECCEN(svnum) = str2num(line(23:41));
CUS(svnum) = str2num(line(42:60));
SQRTSMA(svnum) = str2num(line(61:79));

line = fgetl(fid);
TOE(svnum) = str2num(line(4:22));
CIC(svnum) = str2num(line(23:41));
OMEGAZERO(svnum) = str2num(line(42:60));
CIS(svnum) = str2num(line(61:79));

line = fgetl(fid);
IZERO(svnum) = str2num(line(4:22));
CRC(svnum) = str2num(line(23:41));
ARGPERI(svnum) = str2num(line(42:60));
OMEGADOT(svnum) = str2num(line(61:79));

line = fgetl(fid);
IDOT(svnum) = str2num(line(4:22));
CODES_ON_L2(svnum) = str2num(line(23:41));
TOE_WN(svnum) = str2num(line(42:60));
L2_P_FLAG(svnum) = str2num(line(61:79));

line = fgetl(fid);
URA(svnum) = str2num(line(4:22));
SV_HEALTH(svnum) = str2num(line(23:41));
TGD(svnum) = str2num(line(42:60));
IODC(svnum) = str2num(line(61:79));

line = fgetl(fid);
TRANS_TIME_OF_MESSAGE(svnum) = str2num(line(4:22));
FIT_INTERVAL(svnum) = str2num(line(23:41));
SPARE1(svnum) = str2num(line(42:60));
SPARE2(svnum) = str2num(line(61:79));
end

运行后的反应是:

>> loadrinexn('base322a.05N')
Loading RINEX2 Navigation Data File - Please Be Patient
??? Index exceeds matrix dimensions.

Error in ==> loadrinexn at 41
if line(61:73) == 'END OF HEADER',

green0921
2008-05-27, 16:09
你所用的参数超出了数组或是矩阵的维数

jorad
2008-05-27, 16:24
2楼的,你说的我也知道,问题是我并没发现它超过矩阵的维数,希望你们好好看看我的程序给我指正下。

nanboforever
2008-06-06, 14:35
建议楼主调试一下,可以单独运行line(61:73)看看显示什么内容.很可能里面有回车之类的换行符
可以把73改为72或71试试