ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ordertrack

振動信号の次数の大きさの追跡および抽出

構文

mag = ordertrack(x,fs,rpm,orderlist)
[mag,rpm,time] = ordertrack(x,fs,rpm,orderlist)
[___] = ordertrack(x,fs,rpm,orderlist,rpmrefidx)
[___] = ordertrack(map,order,rpm,time,orderlist)
[___] = ordertrack(___,Name,Value)
ordertrack(___)

説明

mag = ordertrack(x,fs,rpm,orderlist) は行列 mag を返します。これには、入力信号 x 内にある指定された一連の次数 orderlist の時間依存の平方根平均二乗 (RMS) 振幅推定が含まれます。x は、1 分あたりの回転数で表される回転速度 rpm で測定されます。fs は測定サンプルレート (Hz) です。

[mag,rpm,time] = ordertrack(x,fs,rpm,orderlist) は、mag の列に対応する RPM および時間値のベクトルも返します。

[___] = ordertrack(x,fs,rpm,orderlist,rpmrefidx) は、1 次ボルド・カルマン フィルターを使用して次数の大きさを抽出し、前の構文の任意の出力引数を返します。

[___] = ordertrack(map,order,rpm,time,orderlist) は、次数-RPM マップ map、次数のベクトル order、および時点のベクトル time から開始して振幅推定の行列を計算します。rpmordermap を使用して、maporder および time を計算します。返される振幅とスケーリングは map のものと同じです。

[___] = ordertrack(___,Name,Value) は、Name,Value ペアを使用してオプションをさらに指定します。一部のオプションは、ボルド・カルマン追跡手続きにのみ適用されます。

出力引数を設定せずに ordertrack(___) を使用すると、現在の Figure に時間依存次数および RPM 値がプロットされます。

すべて折りたたむ

600 Hz で 5 秒間サンプリングされたシミュレーション信号を作成します。テスト中のシステムは、観察期間中に回転速度を 1 秒あたり 10 回転から 40 回転 (つまり、1 分あたり 600 回転から 2400 回転) に上昇させます。

タコメーターの読み取り値を生成します。

fs = 600;
t1 = 5;
t = 0:1/fs:t1;

f0 = 10;
f1 = 40;
rpm = 60*linspace(f0,f1,length(t));

信号は、1、0.5、4 および 6 の次数をもつ調和的に関連した 4 つのチャープで構成されています。チャープの振幅はそれぞれ 1、1/2、√2 および 2 です。チャープを生成するために、台形則を使用して位相を回転速度の積分で表します。

o1 = 1;
o2 = 0.5;
o3 = 4;
o4 = 6;

a1 = 1;
a2 = 0.5;
a3 = sqrt(2);
a4 = 2;

ph = 2*pi*cumtrapz(rpm/60)/fs;

x = [a1 a2 a3 a4]*cos([o1 o2 o3 o4]'*ph);

次数の大きさを抽出して可視化します。

ordertrack(x,fs,rpm,[o1 o2 o3 o4])

異なる 2 つのモーターに対応する 2 つのクロッシング次数から構成されるシミュレートされた振動信号を作成します。信号は、300 Hz で 3 秒間サンプリングされます。測定中に、最初のモーターの回転速度は 1 秒あたり 10 回転から 100 回転 (つまり、1 分あたり 600 回転から 6000 回転) に上昇します。同じ期間に、2 番目のモーターの回転速度は 1 秒あたり 50 回転から 70 回転 (または、1 分あたり 3000 回転から 4200 回転) に上昇します。

fs = 300;
nsamp = 3*fs;

rpm1 = linspace(10,100,nsamp)'*60;
rpm2 = linspace(50,70,nsamp)'*60;

測定信号は最初のモーターに対する次数が 1.2、振幅が 2√2 です。2 番目のモーターに対しては、信号の次数が 0.8、振幅が 4√2 です。

x = [2 4]*sqrt(2).*cos(2*pi*cumtrapz([1.2*rpm1 0.8*rpm2]/60)/fs);

周波数範囲の中央で、最初のモーターの共振を励起させます。

rs = [1+1./(1+linspace(-10,10,nsamp).^4)'/2 ones(nsamp,1)];

x = sum(rs.*x,2);

rpmfreqmap を使用して次数を可視化します。

rpmfreqmap(x,fs,rpm1)

両方のモーターの次数の大きさを RPM の関数として計算します。ボルド・カルマン アルゴリズムを使用して、クロッシング次数を分離できます。

ordertrack(x,fs,[rpm1 rpm2],[1.2 0.8],[1 2],'Decouple',true)

ヘリコプターのコクピットに設置された加速度計から取得したシミュレーション データを解析します。

ヘリコプターのデータを読み込みます。振動測定値 vib は、500 Hz のレートで 10 秒間サンプリングされています。データの調査から、データには線形トレンドがあることがわかります。トレンドを除去して、トレンドによる次数推定の質の低下を防ぎます。

load('helidata.mat')

vib = detrend(vib);

次数-RPM マップを計算します。0.005 の次数分解能を指定します。

[map,order,rpm,time,res] = rpmordermap(vib,fs,rpm,0.005);

信号の平均次数スペクトルを計算してプロットします。スペクトルの最も高いピークを 3 つ求めます。

[spectrum,specorder] = orderspectrum(map,order);

[~,pkords] = findpeaks(spectrum,specorder,'SortStr','descend','Npeaks',3);

findpeaks(spectrum,specorder,'SortStr','descend','Npeaks',3)

最も高い 3 つのピークの振幅を追跡します。

ordertrack(map,order,rpm,time,pkords)

入力引数

すべて折りたたむ

入力信号。行ベクトルまたは列ベクトルとして指定します。

例: cos(pi/4*(0:159))+randn(1,160) は、ホワイト ガウス ノイズに含まれる正弦波を指定します。

データ型: double | single

サンプルレート。正のスカラーとして Hz 単位で指定します。

データ型: double | single

回転速度。1 分あたりの回転数で表される正の値のベクトルまたは行列として指定します。rpm がベクトルの場合は、x と同じ長さでなければなりません。rpm が行列で、rpmrefidx を指定した場合は、rpm は少なくとも 2 つの列をもち、各列が x と同数の要素をもたなければなりません。

  • タコメーター パルス信号がある場合、tachorpm を使用して rpm を直接抽出します。

  • タコメーター パルス信号がない場合、rpmtrack を使用して振動信号から rpm を抽出します。

例: 100:10:3000 は、システムが、最初は 1 分あたり 100 回転で回転し、その後 10 回転ずつ回転数を上げて 1 分あたり 3000 回転になるように指定します。

データ型: double | single

次数のリスト。ベクトルとして指定します。orderlistfs/(2 × max(rpm/60)) より大きい値をもつことはできません。

データ型: double | single

RPM 列インデックス。orderlist と同じサイズのベクトルとして指定します。この引数があることにより、ボルド・カルマン アルゴリズムの使用が指定されます。

データ型: double | single

次数-RPM マップ。行列として指定します。rpmordermap を使用して、次数-RPM マップを計算します。

データ型: double | single

次数-RPM マップ構文の次数。ベクトルとして指定します。order の長さは、map の行数と等しくなければなりません。

データ型: double | single

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: 'Decouple',true,'Amplitude','peak' は指定された次数を同時に抽出し、各次数のピーク振幅を返します。

振幅のタイプ。'Amplitude'、および 'rms''peak''power' のいずれかで構成されるコンマ区切りペアで指定します。

  • 'rms' — 各推定次数の平方根平均二乗振幅を返します。

  • 'peak' — 各推定次数のピーク振幅を返します。

  • 'power' — 各推定次数のパワー レベルを返します。

大きさのスケーリング。'Scale'、および 'linear' または 'dB' のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'linear' — スケーリングされた大きさの値を線形単位で返します。

  • 'dB' — 対数的にスケーリングされた大きさの値をデシベル単位で返します。

パワーが半分の帯域幅の近似。'Bandwidth'、および orderlist と同数の要素をもつ実数スカラーまたは実数ベクトルのいずれかで構成されるコンマ区切りのペアで指定します。'Bandwidth' の値を小さくすると、滑らかな狭帯域出力が生成されます。ただし、この出力は次数振幅の急激な変化を正確に反映しない場合があります。この引数は、ボルド・カルマン アルゴリズムにのみ適用されます。

データ型: double | single

モード デカップリング オプション。'Decouple' と logical で構成されるコンマ区切りのペアとして指定します。このオプションを true に設定すると、ordertrack は次数の大きさを同時に抽出し、隣接する次数またはクロッシング次数を分離できます。この引数は、ボルド・カルマン アルゴリズムにのみ適用されます。

データ型: logical

オーバーラップ セグメントの長さ。'SegmentLength' と整数とで構成されるコンマ区切りペアとして指定します。セグメントの長さが指定されると、ordertrack は入力信号をセグメントに分割します。次に各セグメントの次数の大きさを計算し、結果を組み合わせて出力を生成します。セグメントが短すぎる場合、クロッシング次数などの局所イベントを関数が適切に取得できない場合があります。この引数は、ボルド・カルマン アルゴリズムにのみ適用されます。

データ型: double | single

出力引数

すべて折りたたむ

次数-振幅の行列。行列として返されます。

回転速度。1 分あたりの回転数で表される正の値のベクトルとして返されます。

時点。ベクトルとして返されます。

参照

[1] Brandt, Anders. Noise and Vibration Analysis: Signal Analysis and Experimental Procedures. Chichester, UK: John Wiley & Sons, 2011.

[2] Feldbauer, Christian, and Robert Höldrich. “Realization of a Vold-Kalman Tracking Filter — A Least Squares Problem.” Proceedings of the COST G-6 Conference on Digital Audio Effects (DAFX-00). Verona, Italy, December 7–9, 2000.

[3] Vold, Håvard, and Jan Leuridan. “High Resolution Order Tracking at Extreme Slew Rates Using Kalman Tracking Filters.” Shock and Vibration. Vol. 2, 1995, pp. 507–515.

R2016b で導入