160 likes | 678 Views
MATLAB 測位プログラミングの 基礎と GT (1). 東京海洋大学産学官連携研究員 高須 知二. 内容. 主に MATLAB で書かれた測位解析プログラム GT(GpsTools) を例題にして、 MATLAB プログラミングの基礎及び測位計算への応用について解説する。 GT の応用についても簡単な例を基に解説する。. 目的. MATLAB を有用な研究開発ツールとして使いこなすことにより 本当にやりたい研究内容に早くたどり着く 退屈で ( 無駄な ) プログラミング作業を減らす 最小限の手間で最大限の研究成果を出す。. 予定 (1).
E N D
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),'.');