Main Content

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

振動信号の次数分析

この例では、次数分析を使用して振動信号を解析する方法を示します。次数分析は、時間と共に回転速度が変化する回転機のノイズまたは振動の定量化に使用されます。次数は、基準回転速度の特定の倍数である周波数を表します。たとえば、モーターの回転周波数の 2 倍に等しい周波数をもつ振動信号は次数 2 に対応し、同様に、モーターの回転周波数の 0.5 倍に等しい周波数をもつ振動信号は次数 0.5 に対応します。この例では、大きな振幅の次数を特定してヘリコプターのキャビン内の望ましくない振動の発生源を調べます。

はじめに

この例では、メイン モーターのランナップおよびコーストダウン時に、ヘリコプターのキャビンにある加速度計から得られる振動データをシミュレートしたものを解析します。ヘリコプターには、エンジン、ギアボックス、メインおよびテール ローターなど複数の回転部があります。各回転部は、メイン モーターを基準にした既知の固定レートで回転しており、それぞれが望ましくない振動に寄与している可能性があります。高振幅振動の発生源を調査するため、支配的な振動成分の周波数はモーターの回転速度と関連付けられる可能性があります。この例のヘリコプターには、メイン ローターとテール ローターの両方にブレードが 4 枚ずつあります。振動がローターのブレードによって発生している場合、ヘリコプターのローターからの振動の主要成分は、ローターの回転周波数の整数倍値において検出される可能性があります。

この例の信号は、500 Hz に等しいレート fs でサンプリングされた時間依存電圧 vib です。データには、タービン エンジンの角速度 rpm と時点のベクトル t が含まれます。各ローターのローター速度とエンジン速度との比率は、変数 mainRotorEngineRatio および tailRotorEngineRatio に格納されます。

モーターの速度信号は、一般的にタコメーターのパルスのシーケンスで構成されます。tachorpm を使用して、タコメーターのパルス信号から RPM 信号を抽出できます。tachorpm は自動的にタコメーターの 2 値波形のパルス位置を特定し、パルスの間隔を計算して回転速度を推定します。この例では、モーターの速度信号に回転速度 rpm が含まれているため、変換は必要ありません。

モーターの速度と振動データを時間の関数としてプロットします。

load helidata
vib = vib - mean(vib);  % Remove the DC component 

subplot(2,1,1) 
plot(t,rpm)             % Plot the engine rotational speed
xlabel('Time (s)') 
ylabel('Engine Speed (RPM)')
title('Engine speed')

subplot(2,1,2) 
plot(t,vib)             % Plot the vibration signal 
xlabel('Time (s)') 
ylabel('Voltage (mV)')
title('Accelerometer Vibration Data')

Figure contains 2 axes objects. Axes object 1 with title Engine speed, xlabel Time (s), ylabel Engine Speed (RPM) contains an object of type line. Axes object 2 with title Accelerometer Vibration Data, xlabel Time (s), ylabel Voltage (mV) contains an object of type line.

エンジン速度はランナップ中には上がり、コーストダウン中は下がります。振動振幅は回転速度の関数として変化します。この型の RPM プロファイルは、回転機械の振動解析ではごく一般的です。

RPM-周波数マップを使用したデータの可視化

振動信号は、関数 rpmfreqmap を使用して、周波数領域内で可視化できます。この関数は、信号の短時間フーリエ変換を計算して RPM-周波数マップを生成します。出力引数が省略された場合、rpmfreqmap は、対話型のプロット ウィンドウにマップを表示します。

振動データに対する RPM-周波数マップを生成して可視化します。

rpmfreqmap(vib,fs,rpm)

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

rpmfreqmap で生成された対話型の Figure ウィンドウには、RPM-周波数マップ、マップに対応する RPM 対時間曲線および振動成分の定量化に使用可能な複数の数値インジケーターが含まれています。マップの振幅は、既定では平方根平均二乗 (RMS) 振幅を表します。ピーク振幅やパワーなどの他の振幅の選択は、オプション引数で指定できます。[ウォーターフォール プロット] メニュー ボタンで 3 次元表示が生成されます。

RPM-周波数マップのトラックの多くには、モーター速度にともなって増減する周波数が示されています。これは、トラックがモーターの回転周波数の次数であることを示します。周波数が 20 Hz と 30 Hz の間の RPM ピークの近くに高振幅成分があります。マップのこの位置に十字カーソルを合わせると、RPM 曲線の下のインジケーター ボックスで周波数、RPM 値、時間およびマップ振幅を確認できます。

既定の設定では、rpmfreqmap は、サンプル レートを 128 で除算して分解能を計算します。分解能は、図の右下隅に表示され、この例では 3.906 Hz になっています。既定ではハン ウィンドウが使用されますが、他のいくつかのウィンドウも使用可能です。

より小さい値の分解能を rpmfreqmap に渡して、一定の周波数成分をさらに分解します。たとえば、ピーク RPM 時の低周波数成分は分解されていません。高振幅のトラックは、RPM の値が低い部分では 1 つに混ざっているように見えます。

1 Hz の分解能で RPM-周波数マップを生成し、これらの成分を分解します。

rpmfreqmap(vib,fs,rpm,1)

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

これで、ピーク RPM 時の低周波数成分を分解できるようになりましたが、回転速度の変化が速いときの表示が著しく不鮮明になっています。振動次数は、モーター速度の増減に合わせて各時間枠内における周波数を変化させ、より幅広いスペクトル トラックを生成します。分解能が高いほど長い時間枠が必要なため、この不鮮明化の影響が顕著になります。この例では、スペクトル分解能を上げたことで、ランナップおよびコーストダウン期において、鮮明さを損ねるアーティファクトが増加する結果となっています。次数マップを生成することで、このトレードオフを回避できます。

RPM-次数マップを使用したデータの可視化

関数 rpmordermap は、次数分析用の次数対 RPM のスペクトル マップを生成します。このアプローチは、定位相増分で信号をリサンプリングすることにより鮮明さを損ねるアーティファクトを除去し、各次数に対する定常正弦波を生成します。リサンプリングされた信号は、短時間フーリエ変換を使用して解析されます。各次数は基準回転速度の固定倍数であるため、次数マップには、各次数に対する RPM の関数として、直線的な次数のトラックが表示されます。

関数 rpmordermap は、rpmfreqmap と同じ引数を受け入れ、出力引数なしで呼び出された場合には、同様に対話型のプロット ウィンドウを生成します。今度は、分解能パラメーターは Hz ではなく次数で指定され、マップのスペクトル軸は周波数ではなく次数になります。この関数は、既定ではフラットトップ ウィンドウを使用します。

rpmordermap を使用してヘリコプターのデータの次数マップを可視化します。0.005 次の次数分解能を指定します。

rpmordermap(vib,fs,rpm,0.005)

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

マップには各次数の直線のトラックが含まれ、モーターの回転速度の固定倍数で振動が発生していることがわかります。次数マップによって、各スペクトル成分のモーター速度への関連付けが容易になります。鮮明さを損ねるアーティファクトが、RPM-周波数マップと比較して大幅に減少しています。

平均次数スペクトルを使用したピーク次数の決定

次に、次数マップのピークの位置を判別します。メインおよびテール ローターの次数の整数倍である次数を探します。これらのローターによる振動は、ここで発生していることが予測されます。関数 rpmordermap は、マップおよび対応する次数と RPM の値を出力として返します。このデータを解析して、ヘリコプターのキャビンの高振幅振動の次数を特定します。

データの次数マップを計算して返します。

[map,mapOrder,mapRPM,mapTime] = rpmordermap(vib,fs,rpm,0.005);

次に、orderspectrum を使用して、map の平均スペクトルを計算してプロットします。この関数は rpmordermap で生成された次数マップを入力として受け取り、それを時間の経過にそって平均化します。

figure
orderspectrum(map,mapOrder)

Figure contains an axes object. The axes object with title Average Order Spectrum, xlabel Order Number, ylabel Order RMS Amplitude contains an object of type line.

平均スペクトルを返し、findpeaks を呼び出して最も高い 2 つのピークの位置を返します。

[spec,specOrder] = orderspectrum(map,mapOrder);          
[~,peakOrders] = findpeaks(spec,specOrder,'SortStr','descend','NPeaks',2);
peakOrders = round(peakOrders,3)
peakOrders = 2×1

    0.0520
    0.0660

プロットの次数 0.05 付近に、最も大きい 2 つのピークが近接していることが分かります。振動の周波数がモーターの回転速度より低いため、これらの次数は 1 未満です。

時間の経過に沿ったピーク次数の解析

次に、ordertrack を使用して時間の関数としてのピーク次数の振幅を見つけます。map を入力として使用し、ordertrack を出力引数なしで呼び出して、2 つのピーク次数の振幅をプロットします。

ordertrack(map,mapOrder,mapRPM,mapTime,peakOrders)

Figure contains 2 axes objects. Axes object 1 with xlabel Time (s), ylabel RPMs (\times 1e3) contains an object of type line. Axes object 2 with title Order Tracking, ylabel Order RMS Amplitude contains 2 objects of type line. These objects represent Order: 0.052, Order: 0.066.

モーターの回転速度が上がると、どちらの次数の振幅も増加します。この場合、次数は簡単に分割できますが、複数の RPM 信号が存在する場合は、ordertrack を使用してクロッシングの次数を分離することもできます。

次に、orderwaveform を使用して、各ピーク次数の時間領域の次数波形を抽出します。次数波形は、元の振動信号と直接比較して、オーディオとして再生することができます。orderwaveform はボルド・カルマン フィルターを使用して、特定の次数の次数波形を抽出します。2 つのピーク次数波形の和を元の信号と比較します。

orderWaveforms = orderwaveform(vib,fs,rpm,peakOrders);
helperPlotOrderWaveforms(t,orderWaveforms,vib)

Figure contains 2 axes objects. Axes object 1 with title Order Waveforms for Peak Orders, xlabel Time (s), ylabel Amplitude contains 2 objects of type line. These objects represent Order 0.052, Order 0.066. Axes object 2 with xlabel Time (s), ylabel Amplitude contains 2 objects of type line. These objects represent Vibration signal, Sum of 2 waveforms.

キャビンの振動の低減

キャビンの振動の発生源を特定するため、各ピークの次数をヘリコプターの各ローターの次数と比較します。各ローターの次数は、ローター速度のエンジン速度に対する固定比に等しくなります。

mainRotorOrder = mainRotorEngineRatio; 
tailRotorOrder = tailRotorEngineRatio;

ratioMain = peakOrders/mainRotorOrder
ratioMain = 2×1

    4.0310
    5.1163

ratioTail = peakOrders/tailRotorOrder
ratioTail = 2×1

    0.7904
    1.0032

最も高いピークは、メイン ローター速度の次数 4 の位置にあるため、最大振幅成分の周波数はメイン ローターの周波数の 4 倍です。ローターあたりのブレードが N 枚のヘリコプターでは通常、振動がローター回転速度の N 倍となることから、4 枚のブレードをもつメイン ローターがこの振動の発生源である可能性が高くなります。同様に、2 番目に大きい成分がテール ローター速度の次数 1 の位置にあることから、テール ローターが振動の発生元である可能性が示唆されています。ローターの速度は整数比の関係ではないため、2 番目に大きいピークの次数はメイン ローター速度の整数倍ではありません。

メイン ローターとテール ローターに対してトラック調整とバランス調整を行った後で、新しいデータ セットを収集します。それを読み込んで、調整の前と後で次数スペクトルを比較します。

load helidataAfter
vib = vib - mean(vib);             % Remove the DC component 
[mapAfter,mapOrderAfter] = rpmordermap(vib,fs,rpm,0.005);
figure
hold on  
orderspectrum(map,mapOrder)
orderspectrum(mapAfter,mapOrderAfter)
legend('Before Adjustment','After Adjustment')

Figure contains an axes object. The axes object with title Average Order Spectrum, xlabel Order Number, ylabel Order RMS Amplitude contains 2 objects of type line. These objects represent Before Adjustment, After Adjustment.

最も大きいピークの振幅がかなり低くなっています。

まとめ

この例では、次数分析を使用して、キャビン内の高振幅振動の発生源の候補としてヘリコプターのメイン ローターおよびテール ローターを特定しました。最初に、rpmfreqmaprpmordermap を使用して次数を可視化しました。RPM-次数マップにより、RPM の範囲全体にわたって RPM-周波数マップに見られるような鮮明さを阻害するアーティファクトをともなわずに、このデータが次数分割されました。エンジンのランナップ中およびコーストダウン中の低い RPM で振動成分を可視化するには、rpmordermap が最適な選択でした。

次に、この例では、orderspectrum を使用してピーク次数を特定し、ordertrack を使用して時間の経過に沿ったピーク次数の振幅を可視化し、orderwaveform を使用してピーク次数の時間領域の波形を抽出しました。最大振幅振動成分の次数は、メイン ローターの回転周波数の 4 倍で検出され、メイン ローターのブレード間の不均衡が示されました。2 番目に大きな成分は、テール ローターの回転周波数で検出されました。ローターを調整した結果、振動レベルが低下しました。

参考文献

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

参考

| | | |