【理化学計測】オウンドメディア:電気化学測定(02)

【理化学計測】オウンドメディア:電気化学測定(02)に関するFAQ

Q波形の立ち上がりをそろえて表示するサンプルパネル

A
波形の立ち上がり位置をそろえて表示するサンプルパネルを用意しました。
FAMOSでサンプルパネルを読み込んで実行してください。
変数リストの[標準]タブで波形を選択してください。選択した複数の波形の立ち上がり位置をX=0として合わせて表示します。


 

製品詳細はこちら

回答を閉じる

Qファイルパスを分解したい。

A

TxSplit()関数を使用して下さい。FAMOS 7.2以降が必要です。
Ver. 7.1まではシーケンスで切り出して下さい。

例)
; Ver. 7.1まで
_path = "C:¥imc¥DatSINTEST1.DAT"
_delimiter = "¥"
_temp = _path
GrPath = GrNew()
GrPath:Path = _path
for _iii = 1 to 100 step 1
  _name = "_" + TForm( _iii, "" )
  _pos = TxWhere(_temp, _delimiter)
  if 0 _pos
    _leng = TLeng(_temp)
    _part = TPart(_temp, 1, _pos-1)
    _temp = TPart(_temp, _pos+1, _leng)
    GrPath: = _part
  else
    GrPath: = _temp
    break
  end
end

製品詳細はこちら

回答を閉じる

Q三角波を作りたい。

A

アークサイン関数ASin()を使用して作成できます。

例)
_dt = 0.001 ; サンプリング時間
_pt = 5000 ; サンプリング点数
_Freq = 2 ; 三角波の周波数
_Mag = 2 ; 三角波の高さ(最大値)
_sin = Sin(ramp(0, _dt, _pt) * PI2 * _Freq - PI/2)
Triangle = (ASin(_sin) / PI + 0.5) * _Mag

製品詳細はこちら

回答を閉じる

Q階乗を計算したい。

A

!演算子はありません。ループ文で計算して下さい。

例)
_n = 5
_factorial = 1
for _iii = 2 to _n step 1
  _factorial = _factorial * _iii
end

製品詳細はこちら

回答を閉じる

QX軸を1/3オクターブラベル表示すると[目盛]の設定に「1月3日」と表示される。

A

「1/3」を誤翻訳したものです。ご迷惑をお掛け致しますが「1/3オクターブ」と読み替えてください。
本不具合は最新版で修正されています。

製品詳細はこちら

回答を閉じる

QAscii Importで作成したインポートフィルターをシーケンスで使用したい。

A

下記の例のようにして下さい。(インポートフィルターをCSV_1とします)

例)
_id = FileOpenFAS("C:¥imc¥Datex1.csv", "#ImportAscii1|CSV_1", 0)
; ... 読み込み処理
FileClose(_id)

製品詳細はこちら

回答を閉じる

Q加速度波形から変位を計算するサンプルパネル

A
加速度波形から変位を計算するサンプルパネルを用意しました。
FAMOSでサンプルパネルを読み込んで実行してください。
変数リストの[測定]タブで波形を選択してください。 選択した波形に[フィルターでDC成分を除去]をONにしてフィルターを適用して、加速度→変位変換を行うことをお勧めします。


 

製品詳細はこちら

回答を閉じる

Qエディットボックスの内容を動的に設定したい

A

関数”DlgSetText”関数を使用してください。

sDlgSetText("Edit1","エディット1")

製品詳細はこちら

回答を閉じる

QピンクノイズのRMSレベルと周波数バンドの関係は?

FAQ ID:x185

Q

アナライザ設定ブラウザにはピンクノイズの設定パラメータとして、以下のパラメータがあります。

RMSレベルと下側・上側周波数と出力レベルの関係はどのようになりますか?

A

各パラメータを以下のように定義します。 下側周波数:Fmax = 50 [Hz] 上側周波数:Fmin = 20000[Hz] RMSレベル :RMS = 2[V]

各レベルは以下のようになります。

rms = RMS * SQRT(Ln(f2/f1)/Ln(Fmax/Fmin))

ここで、f1,f2は対象周波数バンドです。


【オクターブバンドに対して】

1/3オクターブの場合、f1とf2の関係は一定で、1.26です。

rms = 2 * SQTR(LN(1.26)/Ln(20000/50)) => 392 [mV]

【ナローバンドに対して】

以下のようになります。

f1 = fc + ENBW*dFreq/2

f2 = fc - ENBW*dFreq/2

ここで、

fc:中心周波数
dFreq:周波数分解能

具体的に中心周波数=10kHz、周波数分解能=50Hz、ENBW(ハニング)=1.5では、
rms(10KHz) = 2 * SQRT(Ln(10037.5/9962,5) /Ln(20000/50)) => 70.8 [mV]

製品詳細はこちら

回答を閉じる

QFFTアナライザの平均方法であるエクスポネンシャル平均とは?

FAQ ID:x118

Q

FFTアナライザの平均方法として”エクスポネンシャル平均”という項目がありますが、これに設定すると指定回数を超えても停止しません。どのような方法なのか教えてください。

A

【リニア平均】

指定回数を設定してFFT解析を開始すると、毎回の解析結果の平均を求めます。また、指定回数に達すると解析は終了します。

【エクスポネンシャル平均】

指定回数分の解析結果に対して指数重みを掛けて平均を求めます。指定回数に達しても解析を終了せずに終了が指示されるまで解析を繰り返します。

指定回数に達成してもFFT解析を終了しないので、ランニング平均と呼ばれることもあります。


各々の算出方法は以下の通りです。

【リニア平均】

リニア平均の場合、以下のように計算を行います。

Yn=( X1 + X2 + X3 + ...... Xn)/N

ただし、
   N : 平均回数
   Yn : N回の平均結果
 Xn : 毎回の解析結果

上式からも明らかなように各解析結果に対して等しい重みで平均を求めます。また、指定回数に達した場合に解析を終了します。

ここで、計算式を以下のように変形します。

Yn =( X1 + X2 + X3 + ...... Xn-1 + Xn)/N ------(1)
Yn-1=(X1 + X2 + X3 + ...... Xn-1)/(N-1) -------(2)

式(1)から式(2)を引くと以下のように変形できます。

Yn =(1/N)Xn + (N-1)/N ・ Yn-1 ------(3)

【エクスポネンシャル平均】

式(3)に対して、ここでは式を簡単にするために1/N=Aとします。

Yn =A・Xn + (1-A) ・ Yn-1

指定回数で解析を終了させず、常に計測を続けると考え、指定回数分の平均を行った場合には、式を展開して以下のようになります。

Yn =A・Xn + (1-A)・Yn-1

 =A・Xn + (1-A)・{A・Xn-1 + (1-A)・Yn-2}
 =A・Xn + (1-A)・A・Xn-1 + (1-A)2・n-2

 =A・Xn + (1-A)・A・Xn-1 + (1-A)2・{A・Xn-2 + (1-A)・Yn-3}
=A・Xn + (1-A)・A・Xn-1 + (1-A)2・A・Xn-2 + (1-A)3・Yn-3}

上式では3回分しか計算しませんでしたが、各解析結果に対する重みが指数で掛ります。
 例えば、A=0.1とした場合には、以下のようになります。

Yn =0.1・Xn + 0.9・0.1・Xn-1 + 0.92・0.1・Xn-2 + ......
 =0.1・Xn + 0.09・Xn-1 + 0.081・Xn-2 + ......

このときの重みをグラフで示します。このように重みが指数関数となります。

製品詳細はこちら

回答を閉じる

Q文字列の一部を取得

FAQ ID:s050

A

文字列"This is a pen"から"is"取得します。

Result = TPart( "This is a pen", 6, 2)

結果は"is"となります。

例えば、"is"以降の文字列を取得したい場合、TxWhereやTLeng関数を使用すると取得できます。

  Str1 = "This is a pen" ;検索される文字列
  Str2 = "is" ;検索したい文字列
  Leng1 = TLeng( Str1) ;検索する文字の長さ=13
  Leng2 = TLeng( Str2) ;検索する文字の長さ=2
  Position = TxWhere( Str1, Str2) ;検索する文字の位置=6
  Result = TPart( Str1, Position, Leng1-Leng2+1) ;"is a pen"

製品詳細はこちら

回答を閉じる

Q縦軸の値をdBからLogに変更したい

FAQ ID:o006

A

OROSファイル(AE2)に記述されている値がdBとなっています。

従ってLogで表示するためには以下の手順に従ってください。

(1)リニアスケールに変更します。

result = idB( DATA)

ここで、デシベルに変換する際に参照値が設定されている場合があります。

【OROSでの確認】

参照値はOROSの画面に以下のように表示されています。

【FAMOSでの確認】

参照値は変数のプロパティ内のコメント欄に以下のように記述されます。

参照値を考慮して変換する場合には以下の式に従って下さい。

result = idB( DATA) * Yref0dB

(2)軸の表示方法をLogに変更します。

  • カーブウィンドウのY軸をダブルクリック。以下のダイアログが表示されます。
  • "リニア/ログ"メニューのログを選択します。

注意:
リニアスケールに一度変換すると、(2)のスケールを変更することにより、リニア・dB・ログスケールを自由に切り替えることができます。

製品詳細はこちら

回答を閉じる

Qのこぎり波を作りたい。

A

剰余関数Mod()を使用して作成できます。

例)
_dt = 0.001 ; サンプリング時間
_pt = 5000 ; サンプリング点数
_slope = 2 ; のこぎり波の傾き
_Mag = 2 ; のこぎり波の高さ(最大値)
_ramp = ramp(0, 1, _pt) * _slope
Sawtooth = XDel(Mod(_ramp, _Mag / _dt), _dt) * _dt

製品詳細はこちら

回答を閉じる

Q音圧(Pa)をdBに変換したい。dBを音圧(Pa)に変換したい。

A

音圧の0dB参照値は20μPaのため、音圧(Pa)を20μPaで除算した後、dB()関数へ入力して下さい。単位がMPaやGPaなどの場合は、先にPaへ直しておいて下さい。 dBから音圧(Pa)への変換は、idB()関数の結果に20μPaを掛けて下さい。

例)
; 音圧→dB
_Pa = 1 ; 1 Pa
_dB = dB( _Pa / 2e-5 ) ; 94 dB

; dB→音圧
_dB2 = 114 ; 114 dB
_Pa2 = idB( _dB2 ) * 2e-5 'Pa' ; 10 Pa

製品詳細はこちら

回答を閉じる

Qデータ間が不等間隔のXY波形を等間隔データに変換するには?

FAQ ID:s010

A

下図はデータ間隔が不等間隔の例です。このようになるデータはエンジンなどの回転物の計測データで多く見られます。

関数”XYdt”を使用してください。

cutdata2 = XYdt ( ch1_Ord1.X, ch1_Ord1.Y, 50)

下段が等間隔に変換したデータです。
50回転毎にデータを取得します。

製品詳細はこちら

回答を閉じる

Qパワースペクトル密度関数(PSD)の計算

FAQ ID:p008

A

計算結果を比較するために1ブロックを256点として、1番目の区間と2番目の区間、1&2をまとめた区間を考えます。

振幅スペクトラムの結果

1ブロック  0.63282

2ブロック  0.010443

トータル      0.321632

パワースペクトラム密度関数の結果

1ブロック  0.200231

2ブロック  0.000054502

   トータル   0.100143

振幅スペクトラムの平均された値について

平均化されて算出された値は以下のように算出されます。

       平均値 = (1ブロック+2ブロック) / 2

       【計算例】

               0.321632 = ( 0.63282 + 0.010443 )/2

パワースペクトラム密度関数の平均化された値について

パワースペクトル密度の算出は以下のようになります。

     1ブロックのPSD = 1ブロックの振幅スペクトラム^2/周波数分解能(2Hz)

       【計算例】

               0.0200231 = ( 0.63282^2 )/2

平均化されて算出された値は以下のように算出されます。

     平均値 = (1ブロック^2 + 2ブロック^2) / 2 /周波数分解能(2Hz)

       【計算例】

               0.100143 = ( 0.63282^2 + 0.010443^2 )/2

FFTアナライザーで計算される値との相違

FFTアナライザーなどでは以下のように算出されます。

     平均値 = 平均化された振幅スペクトラム^2 /周波数分解能(2Hz)

       【計算例】

               0.0517236 = ( 0.0321632^2 )/2

また、等価ノイズバンド幅を考慮し 

PSD = 平均化された振幅スペクトラム^2 /周波数分解能(2Hz) /等価ノイズバンド幅

等価ノイズバンド幅

Ver6.0までのFAMOS関数は等価ノイズバンド幅を考慮していません。

パワースペクトル密度関数を算出後に各ウィンドウに対応した等価ノイズバンド幅で除算してください。

> 等価ノイズバンド幅についてはこちら

Ver6.1以降のPowerDS*(), CrossPowerDS*()関数は等価ノイズバンド幅を考慮しているため除算は不要です。

サンプルシーケンス

;*************************************************
;PSD計算について
;  データ長が256×2のデータを例にします。

;*************************************************
;1ブロック目のデータ
  Base1 = CutIndex(         ch__1,     1, 256)
  PDS1  = 
PowerDS_1(        Base1,   256, 2, 0, 1)
  AMP1  = AmpSpectrumRMS_1( Base1,   256, 2, 0, 1)

;2ブロック目のデータ
  Base2 = 
CutIndex(         ch__1,  1+256, 256+256)
  PDS2  = PowerDS_1(        Base2,  256, 2, 0, 1)
  AMP2  = AmpSpectrumRMS_1( Base2,  256, 2, 0, 1)


;1&2ブロックのデータ
  Base3 = CutIndex(        ch__1,      1, 256+256)
  PDS3 = PowerDS_1(        Base3,    256, 2, 0, 1)
 
 AMP3 = AmpSpectrumRMS_1( Base3,   256, 2, 0, 1)

;-----------------------------------------
;1ブロックのピークに相当する各関数の振幅値について考察します。
 
;周波数データの分解能は2Hzです。
;-----------------------------------------
  A1 = Max(AMP1)
  Freq = Pos( AMP1, A1)

  A2 = Value( AMP2, Freq)
 
  A3 = Value( AMP3, Freq)

  ;平均化された値は次式と等価になります

  CompareA3 = (A1+A2)/2
  P1 = Value( PDS1, Freq)
  P2 = Value( PDS2, Freq)
  P3 = Value( PDS3, Freq)

  
  ;パワースペクトル密度は次式で算出されます。
  CompareP1 = A1^2/xDel?(AMP1)

 ;平均化されたパワースペクトル密度は次式で算出されます。
  
  CompareP3 = (A1^2+A2^2)/2/xDel?(AMP1)

 ;FFTアナライザーなどで計算される値は次式となります。
 CompareFFT = Sqrt(A3^2/xDel?(AMP3)/ENBW)

製品詳細はこちら

回答を閉じる

Qリストで選択された項目をインデックスを取得したい

A

関数”DlgGetSelectedItem”関数を使用してください。

index = DlgGetSelectedItem("List1")
BoxMessage("","No."+ TForm(index,"F00"),"!1")

製品詳細はこちら

回答を閉じる

Qマクロレッスン:外部アプリケーションとの連携

FAQ ID:x013

A

外部アプリケーションとやり取りする簡単なマクロを紹介します。

最初にNVGateツールタブ内のマクロ項目の”新規"を選択してください。

下記ダイアログが表示されます。

リストの先頭にあるマクロ名を選択して、プロパティボタンをクリックしてください。

以下に示すように3つの変数を作成してください。

名前 形式  
bFlg 論理型 成功(True) デフォルト値は何でも構いません
intPara 整数型 0 デフォルト値は何でも構いません
MyStr 文字列型 まだ設定されていません  

後で取り扱いやすくするために最初にマクロ名を変更しましょう。

保存ボタンをクリックしてください。"マクロ4"という名前で保存されます。
一度マクロエディターを閉じ、ツールタブ内のマクロ項目の”管理"を選択してください。

リストに"マクロ4"がありますので、これを選択し、"プロパティ"ボタンをクリックしてください。

名前を"testExecMacro"に変更します。

"OK"ボタンを押してください。

再度、マクロを編集しますので、"testExecMacro"を選択して、"編集"ボタンをクリックしてください。

マクロの作成

intParaの値に応じて処理を分岐させ、分岐後にメッセージボックスを表示させます。そのために、下図のようにifとメッセージボックスを組み合わせます。

メッセージボックスは以下のように表示する文字列を変数"MyStr"に設定してください。

マクロの実行

このままマクロを実行させると以下のようにintPara=0の分岐のメッセージボックスが表示され、文字列として最初に設定した"まだ表示されていません"が表示されます。

外部コマンドから実行

外部からNVGateにコマンドを送ります。NVGateにコマンドを送る場合は、ハイパーターミナルやTera Termのような端末エミュレータを使用するか、NVDriveを利用してコマンド送信プログラムを作成してください。今回は、Tera Termを使用します。Tera Term(TCP/IP ポート3000)を起動させて、以下のコマンドを実行させてください。

この結果、オプションパラメータにより分岐は"intPara=1"を実行して、文字列の内容を"abc"に変更します。

製品詳細はこちら

回答を閉じる

Qレポートジェネレータにカーブウィンドウの波形を貼り付ける

FAQ ID:r004

A

カーブウィンドウをレポートジェネレータ上にドラッグ&ドロップしてください。

以上の操作より、以下のように波形を表示させることができます。

製品詳細はこちら

回答を閉じる

Qエディター上で現在編集している行番号を知ることはできますか?

FAQ ID:s031

A

エディター部分にカーソルを移動させると、ステータスバーの右下に表示されます。

製品詳細はこちら

回答を閉じる