Igorで複数軸のグラフ作成

コメントをどうぞ


Igorで複数軸のグラフを作成する方法について記す。

2つの系列でそれぞれ左軸,右軸というグラフはよく作るが,今回は,左軸だけで分離して作成する方法を記す。

 

例として,”Time_s”,”V1″,”V2″という3つのデータ系列を用意し,それをグラフ化する。

“Windows”タブの”New Graph”を選択すると,下図の画面が現れる。”Fewer Choices”ボタンを押すと,簡易設定画面になるが,今回は下図の画面のように詳細設定できる画面ですすめる。

グラフ作成画面

XWaveとしてTime_sを選択し,YwaveとしてV1を選択し,”Add”ボタンを押す。

第2系列を追加

 

同様に,XWaveとしてTime_sを選択し,YwaveとしてV2を選択し,”Add”ボタンを押す。
V2の系列のところで,YAxisの”left”となっているところをクリックし,”New”をクリックする。

そして,Nameの欄に適当に名前をつける。ここでは”L2″とした。

新規軸を追加

 

続いて,”Do It”ボタンを押すと,下図のようなグラフが作成される。

グラフ描画

このままでは,左軸の2つが重なりあってしまい,見栄えが良くないため,修正をする。

左軸をダブルクリック(右クリックして”Axis Properties”でもよい)する。

Axisでleftを選択し,Axisタブの中の”Draw between”のところを0~70%とする。

左軸の修正

 

続いて,Axisで”L2″を選択し,Axisタブの中の”Draw between”のところを80~100%とする。

L2というのは先ほどつけた新規左軸の名前である。

そして,”Distance from Margin”のところを0とする。こうすることで,既存のleft軸と同じ直線上に新規左軸が移動する。

新規左軸の修正

複数軸のグラフはこれで完成である。

あとは,適当にグラフの見栄えを修正すると,下図のようなグラフとなる。

グラフの完成

Igorで複素数計算 ローパスフィルタの特性計算

コメントをどうぞ


Igorで複素数の計算をする方法について書く。

Igorでのコマンドは以下のリンクに詳しい。

http://www.hulinks.co.jp/support/igor/reference/functions/index_complex.html

 

例題として,図のようなローパスフィルタの特性について計算した。

R=100Ω,C=1μFである。

RとCによるローパスフィルタの回路図

RとCによるローパスフィルタの回路図

入力と出力の電圧比は,次式となる。

入出力の電圧比

入出力の電圧比

 

この絶対値が電圧利得の周波数特性になり,極座標表示における,虚部が位相のずれの周波数特性を表す。

Igorでのプログラム例を示す。

用いた関数は,cmplxr2polarである。

cmplx(実部,虚部)

という書式で,複素数を定義する。

wave1=r2polar(wave2)

という書式で,wave2を極座標変換し,wave1を作成する。wave1の実部がwave2の大きさ,wave1の虚部がwave2の位相である。

また,複素数の大きさについては,

wave3=magsqr(wave4)

というようにすればwave4(複素数)の大きさの二乗がwave3(実数)に代入される。

複素数のwave作成時には,Makeコマンドに/cというフラグを付ければよい。

 

プロシージャ画面で,関数(Lowpass)を作成。

ローパスフィルタ特性を計算する関数の定義

ローパスフィルタ特性を計算する関数の定義

実行すると,

関数実行後の特性グラフ化

関数実行後の特性グラフ化

となる。

電圧利得と位相ずれの周波数特性が計算できた。

コマンドを以下に示す。

Function Lowpass()
    Variable R=100
    Variable C=1e-6
    Make /o /N=100 wave_freq = 0.05*x    //0から0.05刻みでwaveの初期値を作成
    wave_freq = 10^(wave_freq)            //logスケールで周波数を定義
    Make /o /N=100 wave_omega = 2*pi*wave_freq
    Make /o /N=100 /c wave_BoardDiag    //入出力の電圧比(複素数)
    Make /o /N=100 mag_BoardDiag        //電圧利得の周波数特性
    Make /o /N=100 phase_BoardDiag        //位相ずれの周波数特性
    wave_BoardDiag = cmplx(1,wave_omega*C*R)    //1+jωC
    wave_BoardDiag = 1/wave_BoardDiag            //1/(1+jωC)
    mag_BoardDiag = real(r2polar(wave_BoardDiag))    //極座標の実部が電圧利得を表す。
    //mag_BoardDiag = sqrt(magsqr(wave_BoardDiag))としても電圧利得が計算できる
    phase_BoardDiag = 180/pi*imag(r2polar(wave_BoardDiag))    //極座標の虚部が位相ずれを表す。
    AppendToTable wave_freq, wave_BoardDiag, mag_BoardDiag,phase_BoardDiag    //各waveの値をテーブルに表示
    Display mag_BoardDiag vs wave_freq                    //グラフ作成
    ModifyGraph grid=1,log=1,tick=2,mirror=1   
    ModifyGraph width={Aspect,1.2}                       
    Label left “V\\Bout\\M/V\\Bin”
    Label bottom “Frequency [Hz]”
    Display phase_BoardDiag vs wave_freq     //グラフ作成
    ModifyGraph grid=1,log(bottom)=1,tick=2,mirror=1
    ModifyGraph width={Aspect,1.2}
    Label left “Phase [deg]”
    Label bottom “Frequency [Hz]”
End