公開関数の利用例

公開関数を利用するサンプルプログラムとして、tips_sample.m内の内容を載せています。
 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓


%-------------------------------------------------
%   Program tips
%       各種解析プログラムの利用例
%                               Data: 2012/01/10
%                           Modified: 2012/01/11
%-------------------------------------------------
%
% このプログラムは、サンプルデータの読み込みからその先、
% 各種解析手法の適用例をまとめています。データ読み込み
% 箇所や変数など、用途に合わせて変更することができます。

% Author(s): H. Tanaka (Nagoya University)

%*************************** 解析の準備 ****************************

%%% データ読み込み
fnm='20mm_sample.txt';      % データファイル名
data=dlmread(fnm,',',1,0);  % カンマ区切り、1行0列をヘッダ行として読み飛ばし
    %% 区切り子の種類⇒',':カンマ/' ':スペース/'\t':タブ
    %% 読込関数の種類⇒dlmread,csvread,textread,load,fread,...
disp(textread(fnm,'%s',1)); % fnmの1行目のみ表示
t=data(:,1); is=data(:,2);  % dataの1列目、2列目を変数t,isに代入
ne=data(:,3); te=data(:,4); % dataの3列目、4列目を変数ne,teに代入
dt=mean(diff(t));           % t(2:end)-t(1:end-1)の平均値=サンプリング間隔dt
len=length(t);              % tの長さlen

%%% 生データプロット
figure(1);          % 図1を新規作成
plot(t,is);   % tを横軸、isatを縦軸としてプロット
    %% 1次元プロットの種類⇒plot,plotyy,semilogx,semilogy,loglog,bar,errorbar,...
    %% 2次元プロットの種類⇒contour,contourf,...
    %% 3次元プロットの種類⇒surf,mesh,...

%%% グラフィックプロパティの設定
xlabel('time [ms]');    % ラベル
ylabel('I_{sat} [A]');  % アンダーバー(_)で下付き、ハット(^)で上付き
title(fnm);             % タイトル
grid on;                % グリッドラインを表示
xlim([0,0.5]);          % 横軸範囲を指定
set(gca,'PlotBoxAspectRatio',[1,0.4,1]); % カレントの座標軸(gca)のアスペクト比を変更

%%% 生データを切り出してからプロット
lin=find(0<=t&t<=0.5);      % [0,0.5]ms範囲内の行番号を検索
figure(2);
plot(t(lin,1),is(lin,:));   % [0,0.5]ms範囲内のt、isを切り出しプロット
close(2);                   % 図2の消去

%*************************** 手軽な解析 ****************************

%%% 確率密度関数:pdffun
[py1,px1]=pdffun(is,[],'ON');   % 横軸を規格化した確率密度関数の計算
[py2,px2]=pdffun(is,[],'OFF');  % 横軸を規格化しない確率密度関数の計算
figure;                         % 図を新規作成
subplot(1,2,1); % プロットボックスを1x2に分割、その1つ目に座標軸作成
semilogy(px1,py1); xlabel('(I_{sat}-\mu)/\sigma'); 
title('pdffun');
subplot(1,2,2); 
semilogy(px2,py2); xlabel('I_{sat} [A]');
title('pdffun');

%%% Skewness,Flatness:skewfun,flatfun
disp(['skewness=' num2str(skewfun(is))]);   % skewnessの計算と文字配列化、その後表示
disp(['flatness=' num2str(flatfun(is))]);   % flatnessの計算と文字配列化、その後表示

%%% パワースペクトル:fftfun
nmax=2^10;                              % 離散フーリエ変換の点数
[pw,frq]=ensemble2(@fftfun,nmax,is,dt); % パワースペクトルの計算
figure;
loglog(frq,pw);                         % 周波数frqとパワー密度pwの両対数プロット
axis tight;                             % 座標軸の範囲を狭くする
xlabel('frequency [kHz]');              % dtの単位がmsのためfrqの単位はkHz
ylabel('power density');
title('fftfun');

%%% 数値フィルタリング:fftfil2
fran=[20,60];                   % フィルタ範囲[10,60]kHz
isf1=fftfil2(is,nmax,dt,fran);  % フィルタ範囲の抽出
isf2=fftfil2(is,nmax,dt,-fran); % フィルタ範囲の除去
figure(1);                      % 図1をカレントに変更
hold on;                        % カレントのグラフの上書き消去防止
plot(t,isf1,'r--',t,isf2,'g:'); % isf1を赤破線、isf2を緑点線でプロット
    %% 線の種類⇒'-':実線/'--':破線/':':点線/'-.':鎖線
    %% 色の種類⇒'b':青/'r':赤/'g':緑/'y':黄/'m':マジェンタ/'c':シアン
legend('raw','filter1','filter2');  % 凡例
title('fftfil');

%%% 移動平均、移動分散、移動モーメント:moment2
const=1e3;                                          % 移動平均点数
[ism1,ism2,ism3,tm]=moment2(is,t,const,[1,2,3]);    % 1-3次の移動中心モーメントを計算
figure; subplot(2,1,1); plot(tm,[is,ism1]);         % isとisの移動平均を同時プロット
ylabel('I_{sat},  [A]');
skew=ism3./ism2.^1.5;                               % 移動skewnessの計算
subplot(2,1,2); plot(tm(~isnan(skew)),skew(~isnan(skew)),'r'); ylim([0,2]); % 移動skewnessのプロット
hold on; plot([0,10],skewfun(is)*ones(1,2),'k--');  % 全時間でのskewnessのプロット
xlabel('t [ms]'); ylabel('Skewness');
title('moment2');

%%% 自己・相互相関係数:corfun
dmax=50;                                    % 時間遅れ・進みの最大点数の指定
[cor,lag]=corfun(is,dt,dmax,'COE');         % 自己相関係数の計算、'FUN'で相関関数
figure; plot(lag,cor);                      % 自己相関係数のプロット
[cor,lag]=corfun([is,te],dt,dmax,'COE');    % 相互相関係数の計算
hold on; plot(lag,cor,'r--');               % 相互相関係数のプロット
xlabel('\tau [ms]'); ylabel('correlation coefficient');
title('corfun');

%%% 条件付き平均波形:condfun
dmax=50;                                    
th=mean(is,1)+2*std(is,1,1);                % しきい値を平均値+標準偏差の2倍に設定
[cx,lag]=condfun(is,th,1,dt,dmax,'peak');   % 条件付き平均波形を計算
figure; subplot(2,1,1); plot(lag,cx);       % 条件付き平均波形をプロット
ylabel('i_{sat} [A]');
title('condfun');
[cx,lag]=condfun(normalize([is,te],1),2,1,dt,dmax,'peak'); % 無次元化後に相互条件付き平均波形を計算
subplot(2,1,2); plot(lag,cx);               % 相互条件付き平均波形をプロット
xlabel('\tau [ms]'); ylabel('(i_{sat}-\mu)/\sigma,(T_e-\mu)/\sigma');
legend('I_{sat}','T_e');

%%% 待ち・持続時間分布:wdfun
th=2;                                           % しきい値を指定
[pwd,lag]=wdfun(normalize(is),th,sign(th),dt);  % 待ち・持続時間分布を計算
figure; loglog(lag,pwd,'o','MarkerSize',6);                        % 複数の定義によりプロット
xlabel('\tau [ms]'); ylabel('count');
title('wdfun');

return

%*************************** 少し高度(?)な解析 ****************************

%%% 同時確率密度関数:pdffun
[py,px]=pdffun([ne,te],[],'OFF');   % neとteの2列を入力引数に指定
figure;
surf(px(:,1),px(:,2),py');          % 同時確率密度関数の2次元プロット
shading interp; lighting phong;     % 離散点間を補間、照明設定変更
axis tight; view([15,85]);          % 軸の範囲、視点を変更
xlabel('n_e [10^{19}m^{-3}]'); ylabel('T_e [eV]');
colorbar('vert');                   % カラーバー
axes('position',[0.1,0.6,0.3,0.3]); % 小さな座標軸を追加
plot(ne,te,'.k','MarkerSize',1);    % 散布図をプロット
title('pdffun');

%%% クロススペクトル:cfftfun
nmax=2^10;
[cpw,frq]=ensemble2(@cfftfun,nmax,[ne,te],dt);      % クロスをスペクトルを計算
figure; subplot(2,1,1); loglog(frq,abs(cpw));       % クロスパワーをプロット
ylabel('cross-power density'); xlim([1e0,1e3]);
subplot(2,1,2); semilogx(frq,angle(cpw)*180/pi);    % 位相差をプロット
xlabel('frequency [kHz]'); ylabel('phase [deg]'); xlim([1e0,1e3]);
title('cfftfun');

return

close all;  % 図を全て消去

%*************************** その他の解析 ****************************

    %% 連続ウェーブレット変換:cwtfun
    %% 連続逆ウェーブレット変換:icwtfun
    %% コヒーレンス:cohfun
    %% バイコヒーレンス:bcfun
    %% カルバックライブラーのダイバージェンス:kldfun
    %% PDF型の再構成:rpfun
    %% 経験的固有直交展開:podfun
    %% 特異値分解:svdfun
    %% 構造関数:stcfun
    %% フィッティング:fitting