FAMOS

数値に関するFAQ

Q文字列形式から数値以外の文字を除いて数値形式に変換したい。

A

TxRegexMatch()関数により可能です。 TxRegexMatch()関数を使用するには、imc FAMOS Ver 7.2以降が必要です。

例)
_ascii = "abc010.9870xyz"
_pattern = "[-+]?([0-9]+.?[0-9]*|.[0-9]+)([eE][-+]?[0-9]+)?" ; ヘルプ参照
_res = TxRegexMatch(_ascii, _pattern, "", 1)
_num = TtoSv(_res, "f")

製品詳細はこちら

回答を閉じる

Q決定係数を求めたい。

A

直接求める関数は用意されてないため、下記の様なシーケンスで求めて下さい。 近似波形の係数を求めるために使用しているApproNonLin()関数はimc FAMOS Ver 7.2以降のProfessional版以上が必要です。

例)
LOAD sintest1
_data = sintest1 ; サンプルデータ
_A = ApproNonLin(_data,"A1*sin(A2*PI2*x)-y") ; 近似波形の係数
_approx = _A[1] * sin(_A[2] * PI2 * ramp(0, XDel?(_data), Leng?(_data))) ; 近似波形

_numerator = Sum((_data - _approx)^2) ; ①分子: 残差の二乗和
_denominator = Sum((_data - Mean(_data))^2) ; ②分母: 標本値の平均からの差の二乗和
R2 = 1 - _numerator / _denominator ; 決定係数: ①を②で割ったものを1から引いた値

; カーブウィンドウに表示
CwNewWindow("Cv1", "show")
CwSelectWindow("Cv1")
CwAction("reset")
CwPosition(0,0,640,480)
CwDisplaySet("title", "")
CwNewChannel("append last axis", _data)
CwNewChannel("append last axis", _approx)
CwNewElement("marker.text")
CwMarkerSet("x.type", 2)
CwMarkerSet("x", 73)
CwMarkerSet("y.type", 2)
CwMarkerSet("y", 80)
CwMarkerSet("font.size", 12)
CwMarkerSet("text", "決定係数=" + TForm(R2, "F1.3"))

製品詳細はこちら

回答を閉じる

Q尖度を求めたい。

A

直接求める関数は用意されてないため、下記の様なシーケンスで求めて下さい。

例)
_data = Random(10000, 2, 0, 0, 0) ; 正規分布に従ったサンプルデータ
_Hist = Histo(_data, 0, 0) ; 分布の形状の目視確認用

_StDev = StDev(_data) ; 標準偏差σ
_Mean = Mean(_data) ; 平均
_N = Leng?(_data) ; データ点数
Kurtosis = Sum((_data - _Mean)^4) / _StDev^4 / _N
{Kurtosis-3} = Kurtosis - 3 ; 正規分布が尖度0とする定義

; Excel KURT()相当
;
https://support.office.com/ja-jp/article/kurt-%E9%96%A2%E6%95%B0-bc3a265c-5da4-4dcb-b7fd-c237789095ab
; より
_v1 = _N*(_N+1) / ((_N-1)*(_N-2)*(_N-3))
_v2 = Sum((_data - _Mean)^4) / _StDev^4
_v3 = 3*(_N-1)^2 / ((_N-2)*(_N-3))
ExcelKurt = _v1 * _v2 - _v3

製品詳細はこちら

回答を閉じる

Q等価騒音レベルを求めたい。

A

直接求める関数は用意されてないため、下記の様なシーケンスで求めて下さい。 なお、下記のシーケンスでは重み付け特性なし(Z特性)で計測された音圧(Pa)データを入力データ(変数_data)としています。

例)
_A = ABCRating(_data, 1, -1, 1, 0) ; A特性、FAST時定数。A特性適用済みデータの場合は不要。
_AdB = dB(_A / 2e-5) ; dBに変換。2e-5 = 20u
LAeq = Mean(_AdB)

製品詳細はこちら

回答を閉じる

Q異常値を除いた平均を求めたい。

A

異常値が最大値から5%、最小値から5%の範囲に収まるような、言い換えると5%から95%の値の範囲での平均を求める場合は、下記のようなシーケンスで求めることができます。

例)
Load slope
_data = slope ; サンプルデータ

_sort = Sort(_data, 1)
_pt = Leng?(_data) ; データ点数
Mean5%to95% = Mean(CutIndex(_sort, _pt * 0.05, _pt * 0.95)) ; 5%~95%区間での平均

製品詳細はこちら

回答を閉じる

Q中央値を求めたい。

A

Sort()関数で並べかえ後、50%目のインデックスでの値が中央値になります。第1四分位数、10%値等も同様に求めることができます。

例)
Load slope
_data = slope ; サンプルデータ

_sort = Sort(_data, 1)
_pt = Leng?(_data) ; データ点数
Median = _sort[_pt * 0.5] ; 中央値
FirstQuartile = _sort[_pt * 0.25] ; 第1四分位数
ThirdQuartile = _sort[_pt * 0.75] ; 第3四分位数
InterquartileRange = ThirdQuartile - FirstQuartile ; 四分位範囲
{10percentile} = _sort[_pt * 0.1] ; 10%値
{90percentile} = _sort[_pt * 0.9] ; 90%値

製品詳細はこちら

回答を閉じる

Q階乗を計算したい。

A

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

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

製品詳細はこちら

回答を閉じる

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底が2の対数を計算したい。

A

log()関数の底は10です。底の変換により計算して下さい。

例)
_log2_256 = log(256) / log(2) ; 結果は8

製品詳細はこちら

回答を閉じる

Q数値からチャンネル名などの文字列を作成したい。

A

TForm()関数を使用して下さい。

例)
_val = 10
_txt1 = "Text" + TForm(_val, "") ; 結果は文字列で Text10
_txt2 = "Text" + TForm(_val, "g5.0") ; 5桁で頭を0埋め。Ver 7.0以降が必要

製品詳細はこちら

回答を閉じる

QXY波形の各点の値をインデックスを指定して取得するには?

A

下記の例のようにして下さい。

例)
_x1 = _data[1].X ; X要素の1番目の値
_y2 = _data[2].Y ; X要素の2番目の値
_xi = _data[_i].X ; X要素の_i番目の値

製品詳細はこちら

回答を閉じる

Q行列の要素を取り出したい

FAQ ID:s038

Q

行列の1つの要素にアクセスするためにはどのようにすればよいですか?

A

以下のようにアクセスしてください。

Element = data[2,3]

製品詳細はこちら

回答を閉じる

Q四捨五入するためには?

FAQ ID:s035

Q

数値を四捨五入したいのですが、そのための関数が見つけることができません。四捨五入することはできますか?

A

直接、四捨五入する関数はありません。
しかし、関数”Floor”を使用すれば実現できます。
変換したい数値に0.5を加算して関数Floorを実行してください。

【例】
4.4を四捨五入する。

Result = Floor(4.4+0.5)
       = 4


【例】
4.5を四捨五入する。
Result = Floor(4.5+0.5)
       = 5

製品詳細はこちら

回答を閉じる

Q桁数を指定して四捨五入するためには?

FAQ ID:s061

Q

例えば、4.5637という数値を

  小数点以下1桁で4.6
  小数点以下2桁で4.56
  小数点以下3桁で4.564

のように桁数を指定して数値を四捨五入したいのですが、可能ですか?

A

直接、桁数を指定して四捨五入する関数はありません。
桁数と関数Floorを使用して実現することができます。

【例】
4.5637を小数点以下1桁で四捨五入する。

Digit  = 1
Result = Floor(4.5637*10^Digit+0.5)/10^Digit
       = 4.6

【例】
4.5637を小数点以下2桁で四捨五入する。

Digit  = 2
Result = Floor(4.5637*10^Digit+0.5)/10^Digit
       = 4.56

【例】
4.5637を小数点以下1桁で四捨五入する。

Digit  = 3
Result = Floor(4.5637*10^Digit+0.5)/10^Digit
       = 4.564

製品詳細はこちら

回答を閉じる

Q数値を切り捨てするためには?

FAQ ID:s062

Q

例えば、4.5637という数値を整数になるように切り捨てるにはどのようにすればよいですか?

A

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

【例】
4.5637を切り捨てします。

Result = Floor(4.5637)
       = 4

製品詳細はこちら

回答を閉じる

Q数値を切り上げするためには?

FAQ ID:s063

Q

例えば、4.5637という数値を整数になるように切り上げするにはどのようにすればよいですか?

A

関数”Floor”を使用してください。
この関数で処理した後で+1します。

【例】
4.5637を切り上げします。

Result = Floor(4.5637)+1
       = 5

製品詳細はこちら

回答を閉じる

Qビット演算

FAQ ID:s022

A

ビットデータを取得するためには以下の関数を使用してください

    ;DATAの3ビット目を取得します。
    Bit3 = Mod( Floor( Data / 2^3 ), 2)

Example

65535までの値を各ビット毎に取得します。

;サンプルデータの生成
Data_DEC = Ramp( 0, 1, 2^16)


i=0
While i<16
    Result = "BIT" + TForm( i, "F00")
    <Result> = Mod( Floor( Data_DEC / 2^i ), 2)

    SetDataFormat(<Result>, 8, 0, 0)

    i=i+1
End

ちなみにMicrosoft Excelでは"DEC2BIN"という関数を使用しますが、符号ビット+9bitまでしか計算できません。

製品詳細はこちら

回答を閉じる