Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

orderwaveform

振動信号から時間領域の次数波形を抽出

説明

xrec = orderwaveform(x,fs,rpm,orderlist) は入力信号 x に存在する指定された一連の次数に対応する時間領域の波形を返します。x は、1 分あたりの回転数で表される回転速度 rpm で測定されます。fs は測定サンプル レート (Hz) です。ベクトル orderlist は目的の次数を指定します。その波形は xrec の対応する列で返されます。この関数は計算にボルド・カルマン フィルターを使用します。

xrec = orderwaveform(x,fs,rpm,orderlist,rpmrefidx) は、rpm の列に格納される複数の基準 RPM 信号をもつ時間領域の波形を返します。rpmrefidx は、orderlist の各次数を RPM 信号に関連付けるベクトルです。

xrec = orderwaveform(x,fs,rpm,orderlist,rpmrefidx,Name,Value) は、Name,Value ペアを使用して、ボルド・カルマン追跡手続きのオプションをさらに指定します。

すべて折りたたむ

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

ord = [1 0.5 sqrt(2) 2];
amp = [1 0.5 sqrt(2) 2];

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

x(1,:) = amp(1)*cos(ord(1)*ph);
x(2,:) = amp(2)*cos(ord(2)*ph);
x(3,:) = amp(3)*cos(ord(3)*ph);
x(4,:) = amp(4)*cos(ord(4)*ph);

xsum = sum(x);

信号を構成する時間領域の波形を再構成します。

xrec = orderwaveform(xsum,fs,rpm,ord);

結果を可視化します。過渡状態が減衰した後に発生する時間間隔を拡大します。

for kj = 1:4
    subplot(2,2,kj)
    plot(t,x(kj,:),t,xrec(:,kj))
    title(['Order = ' num2str(ord(kj))])
    xlim([2 3])
end

Figure contains 4 axes objects. Axes object 1 with title Order = 1 contains 2 objects of type line. Axes object 2 with title Order = 0.5 contains 2 objects of type line. Axes object 3 with title Order = 1.4142 contains 2 objects of type line. Axes object 4 with title Order = 2 contains 2 objects of type line.

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

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

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

x = sum(y,2);

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

rpmfreqmap(x,fs,rpm1)

Figure Frequency Map contains objects of type uimenu, uitoolbar, uiflowcontainer.

信号を構成する時間領域の波形を再構成します。ボルド・カルマン アルゴリズムを使用して、クロッシング次数を分離できます。

xrec = orderwaveform(x,fs,[rpm1 rpm2],[1.2 0.8],[1 2],'Decouple',true);

元の波形と再構成した波形をプロットします。

for kj = 1:2
    figure(kj)
    subplot(2,1,1)
    plot((0:nsamp-1)/fs,y(:,kj))
    legend('Original')
    title(['Motor ' int2str(kj)])
    subplot(2,1,2)
    plot((0:nsamp-1)/fs,xrec(:,kj))
    legend('Reconstructed')
end

Figure contains 2 axes objects. Axes object 1 with title Motor 2 contains an object of type line. This object represents Original. Axes object 2 contains an object of type line. This object represents Reconstructed.

入力引数

すべて折りたたむ

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

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

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

回転速度。1 分あたりの回転数で表される正の値のベクトルとして指定します。rpm は、x と同じ長さをもっていなければなりません。

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

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

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

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

データ型: double | single

RPM 列インデックス。orderlist と同じサイズのベクトルとして指定します。

データ型: double | single

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: 'Decouple',true,'FilterOrder',2 は指定された次数波形を同時に抽出し、2 次ボルド・カルマン フィルターを使用します。

ボルド・カルマン フィルターの次数。'FilterOrder'1 または 2 のいずれかで構成されるコンマ区切りのペアとして指定します。

データ型: double | single

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

データ型: double | single

モード デカップリング オプション。'Decouple' と logical で構成されるコンマ区切りのペアとして指定します。このオプションを true に設定すると、orderwaveform は次数波形を同時に抽出し、隣接する次数またはクロッシング次数の分離が可能になります。

データ型: logical

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

データ型: double | single

出力引数

すべて折りたたむ

再構成された時間領域の次数波形。各列に 1 つの波形が含まれる行列として返されます。

参照

[1] 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.

[2] 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 で導入