レベル検出

レベル検出とは、データが特定の Y 値を通過または到達する X 座標を特定するプロセスです。これは「逆補間」と呼ばれることもあります。別の言い方をすれば、レベル検出は「与えられた Y レベルに対応する X 値は何か」という疑問に答えます。Igor Pro® はこの疑問に対して2種類の答えを提供します。

1つの解答は、Y データが一意の Y 値のリストであり、単調増加または単調減少すると仮定します。この場合、Y 値に対応する X 値は唯一つです。検索位置と方向は重要ではないため、二分探索が最も適切です。これは非常に高速だからです。この種のデータには、BinarySearch または BinarySearchInterp 関数を使います。

graph of data monotonically decreasing

もう1つの答えは、取得データの場合のように、Y データが不規則に変動することを前提とします。この場合、Y レベルを横切る X 値が複数存在する可能性があり、返される X 値は、検索の開始位置とデータ内の検索方向によって異なります。FindLevel、FindLevels、EdgeStatsPulseStats コマンドは、この種のデータを扱います。

graph showing fluctuating acquired data

ウェーブフォームデータにおけるレベル検出

FindLevel コマンドを使って1つのレベル交差を見つけたり、FindLevels コマンドを使ってウェーブフォームデータ内の複数のレベル交差を見つけたりすることができます。これらのコマンドはどちらも、ノイズの影響を軽減するために、検索するデータをオプションで平滑化することができます。データのサブレンジ(一部)は、操作の /R フラグに指定する startX および endX 値に応じて、X 値の昇順または降順で検索できます。

FindLevel は、startX から開始し、endX に向かってレベルの交差が見つかるまで進み、検索範囲内で最初に遭遇したレベル交差の位置を特定します。検索は順次実行されます。FindLevel の出力は、2つの特別な数値変数 V_Flag と V_LevelX です。V_Flag は検索の成功または失敗を示し(0 は成功)、V_LevelX はレベル交差の X 座標を含みます。

例えば、以下のデータが与えられた場合:

graph showing data with X location of Y=0.36 level-crossing at X=-0.200751

コマンド:

FindLevel/R=(-0.5,0.5) signal,0.36

は、このレベル交差情報を Igor Pro の履歴領域に出力します:

V_Flag= 0; V_LevelX= -0.200751;

XYデータにおけるレベル検出

XY データ内のレベル交差の位置を特定するには、Y データを検索し、その X 値が X データ内のどこに位置するかを特定します。これには X データの値が昇順または降順でソートされている必要があります。これを確実にするために、次のコマンドを実行します:

Sort xData,xData,yData

これはデータを昇順に並べ替え、xData の値が昇順になるようにし、かつ XY 対応関係が保持されるようにします。

次に yData 内で V_levelX を見つけます:

FindLevel yData, levelToFind

その後、点傾斜式を用いて少し補間を行うだけで十分です:

 // Compute point number (not X) in yData before Y crossing.
Variable p1=x2pnt(yData,V_LevelX-deltaX(yData)/2)

// Compute slope of line between the two X,Y points before and after the yData level crossing.
Variable m=(V_LevelX-pnt2x(yData,p1))/(pnt2x(yData,p1+1)-pnt2x(yData,p1))

// Use the point-slope equation of a line to interpolate the xData value at the level crossing.
Variable xAtYlevel= xData[p1] + m * (xData[p1+1] -xData[p1] ) //point-slope equation

エッジ統計

EdgeStats コマンドは、以下に示すように単一のエッジを含むと予想されるデータ領域に対して、単純な統計情報(実際には測定値)を生成します。複数のエッジが存在する場合、EdgeStats は最初に検出されたエッジに対して処理を行います。エッジ統計は、EdgeStats リファレンスで説明されている特別な変数に格納されます。統計項目はエッジレベル、検出された各種「ポイント」の X 座標(ポイント位置)、およびそれらの間の距離です。これらの検出ポイントは実際にはレベル交差の位置であり、通常は実際のウェーブフォームポイントの間に位置します(補間位置です)。

diagram indicating points 0 throug 4 on decreasing edge. Point 0 and 4 are at the start and end plateaus. Points 1-3 are at the 10%, 50%, and 90% levels

EdgeStats は FindLevel と同じ原理に基づいています。EdgeStats は XY ペアでは動作しません。補間を用いて XY データをウェーブフォームに変換できます。

パルス統計

PulseStats コマンドは、以下に示すように3つのエッジを含むと予想されるデータ領域について、単純な統計量(測定値)を生成します。3つ以上のエッジが存在する場合は、PulseStats は最初に検出された3つのエッジに対して処理を行います。PulseStats は、エッジが1つまたは2つしかない他の2つのケースも処理します。パルス統計量は、PulseStats リファレンスで説明されている特別な変数に格納されます。

diagram showing pulse cycling from high to low and again high to low. Points 1-3 are at the three 50% transition points.

PulseStats は EdgeStats と同じ原理に基づいています。PulseStats は XY ペアでは動作しません。

Forum

Support

Gallery

Igor Pro 10

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More