Matlab測位プログラミングの 基礎とGT

MATLAB測位プログラミングの
基礎とGT (1)
東京海洋大学産学官連携研究員
高須 知二
内容
• 主にMATLABで書かれた測位解析プログ
ラムGT(GpsTools)を例題にして、
MATLABプログラミングの基礎及び測位
計算への応用について解説する。
• GTの応用についても簡単な例を基に解説
する。
目的
• MATLABを有用な研究開発ツールとして
使いこなすことにより
– 本当にやりたい研究内容に早くたどり着く
– 退屈で(無駄な)プログラミング作業を減らす
• 最小限の手間で最大限の研究成果を出す。
予定 (1)
•
•
•
•
•
•
4月 MatlabとGTの紹介
5月 Matlabプログラミング基礎
6月 Matlab行列演算プログラミング
7月 Matlab 2D/3Dグラフィックス
8月 Matlabプログラム開発・デバッグ手法
9月 Matlab性能向上とMEX他言語I/F
内容 (2)
•
•
•
•
•
•
10月 GTの仕様と測位アルゴリズム
11月 GTの内部構造と実装
12月 GTライブラリ・ツールの応用
1月 GTの応用:測位演算プログラム (1)
2月 GTの応用:測位演算プログラム (2)
3月 まとめと今後の課題
MATLAB (1)
•
•
•
•
MATrix LABoratory
Mathworks社 (米)
数値解析ソフトウェア
科学技術計算、信号処理、データ解析、シ
ミュレーション、可視化(Visualization)...
• Toolbox、Simlink etc
• 類似処理系: Octave,Scilab,...
MATLAB (2)
• プログラム言語としての特徴
–
–
–
–
–
–
Cに似た制御構文 (if, while, for, switch...)
インタプリタ型言語
弱い型付
行列計算に特化した構文規則
m-file単位でのプログラム管理
バージョンアップで機能拡張 (互換性問題)
(セル配列、構造体、オブジェクト指向、etc ...)
MATLAB (3)
• 数値解析システムとしての特徴
– 数値解析ライブラリ
線形代数、特殊関数、統計解析、信号処理、
積分、微分方程式、補間 etc...
– グラフィックスライブラリ
– 拡張ライブラリ集(Toolbox)
– デバッガ、プロファイラ、GUIツール
– コンパイラ
MATLAB (3)
• 長所
– プログラム開発効率
– 結果の可視化が容易
• 短所
– 処理系が高価/プロプライエタリSW
– 可搬性 (プログラム実行にMatlabが必要)
– プログラム実行効率
MATLABの利用
• 研究開発 ○
–
–
–
–
最終目的物はプログラムそのものではない
仕様が曖昧、仕様がどんどん変わる
早く成果すなわち解析結果が出ればよい
プロトタイプ開発
• 実製品 △
– 最終目的物はプログラムそのもの
– 実行効率、低コスト、可搬性、品質保証
C vs MATLAB (1)
九九演算表を出力する :
C:
void kuku(void) {
int i,j;
for (i=1;i<=9;i++) {
for (j=1;j<=9;j++) {
printf("%2d ",i*j);
if (j==9) printf("\n");
}
}
}
MATLAB :
function kuku
(1:9)'*(1:9)
C vs MATLAB (2)
線形方程式(Y=AX)の解を求める :
C+LAPACK :
int solve(const double *A, const double *Y, int n, int m, double *X) {
int info,*ipiv=(int *)malloc(sizeof(int)*n);
double *B=(double *)malloc(sizeof(double)*n*n);
memcpy(B,A,sizeof(double)*n*n);
memcpy(X,Y,sizeof(double)*n*m);
dgetrf_(&n,&n,B,&n,ipiv,&info);
if (!info) dgetrs_("N",&n,&m,B,&n,ipiv,X,&n,&info);
free(B); free(ipiv);
return info;
}
MATLAB :
function X=solve(A,Y)
X=A\Y;
GT (1)
• MATLABをベースに書かれた測位解析プ
ログラム
• 最新: ver.0.6.3 (2006/7)
• ライバル: Bernese、GIPSY/OASIS-II
• 主な応用:
精密測位(PPP)、衛星軌道決定、対流圏遅
延推定、etc ...
GT (2)
• プログラム規模:
m-file 22.1K, C-MEX 5.9K (ver.0.6.1)
• プログラム開発戦略
–
–
–
–
(1) MATLABプログラム開発
(2) 性能ボトルネックの識別
(3) ライブラリのm-file→C-MEXへの書き換え
(4) 解析エンジンの全Cプログラム化(未)
GT (3)
• MATLAB用共通ライブラリ:
–
–
–
–
–
–
–
入出力:RINEX , SP3, IONEX, PCV etc
測位演算
精密補正モデル
大気圏モデル
衛星運動モデル
座標系、時刻系変換
地図描画、特殊グラフ描画、GUI etc
GTライブラリ利用例
RINEX読み込み/単独測位計算/結果グラフ化 :
td=caltomjd([2007,1,1]); t=0:30:86370;
sats={}; for i=1:31,sats={sats{:},sprintf('GPS%02d',i)}; end
[nav,inav]=readnav(td,t,sats,'0053');
[obs,iobs]=readobs(td,t,sats,'0053');
[tt,j]=unique(iobs(:,1)); j=[0,j'];
for i=1:length(j)-1
k=j(i)+1:j(i+1);
p=pointpos(td,tt(i),obs(k,3),iobs(k,2:3),nav,inav);
pos(i,:)=eceftogeod(p);
end
figure, hold on, grid on, box on
plot3(pos(:,1),pos(:,2),pos(:,3),'.');