ドキュメンテーション

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

rpmfreqmap

次数分析のための周波数-RPM マップ

構文

map = rpmfreqmap(x,fs,rpm)
map = rpmfreqmap(x,fs,rpm,res)
map = rpmfreqmap(___,Name,Value)
[map,freq,rpm,time,res] = rpmfreqmap(___)
rpmfreqmap(___)

説明

map = rpmfreqmap(x,fs,rpm) は、入力ベクトル x に対する周波数解析の結果、周波数-RPM マップ行列 map を返します。x は、設定された rpm (1 分あたりの回転数で表される回転速度) において測定されます。fs はサンプルレート (Hz) です。map の各列は、rpm の各値に存在するスペクトル成分の平方根平均二乗 (RMS) 振幅推定値を含みます。rpmfreqmap は、短時間フーリエ変換を使用して x のスペクトル成分を解析します。

map = rpmfreqmap(x,fs,rpm,res) は、マップの分解能帯域幅を Hz 単位で指定します。

map = rpmfreqmap(___,Name,Value) は、前の構文の入力引数に加えて Name,Value のペアを使用してオプションを指定します。

[map,freq,rpm,time,res] = rpmfreqmap(___) は、周波数、回転速度および周波数マップが計算された時点をもつベクトルを返します。また、使用される分解能帯域幅も返します。

出力引数なしの rpmfreqmap(___) は、周波数マップを、回転速度および時間の関数として対話型 Figure 上にプロットします。このプロットは "キャンベル線図" としても知られています。

すべて折りたたむ

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

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

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 つのチャープで構成されています。次数 4 のチャープの振幅は他のチャープの振幅の 2 倍です。チャープを生成するために、台形則を使用して位相を回転速度の積分で表します。

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

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

x = [1 1 2 1]*cos([o1 o2 o3 o4]'*ph);

信号の周波数-RPM マップを可視化します。

rpmfreqmap(x,fs,rpm)

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

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

load('helidata.mat')

vib = detrend(vib);

非線形 RPM プロファイルをプロットします。ローターは、最大回転速度である 1 分あたり 27,600 回転に達するまで回転数を上昇させ、その後降下させます。

plot(t,rpm)
xlabel('Time (s)')
ylabel('RPM')

周波数-RPM マップを計算します。2.5 Hz の分解能帯域幅を指定します。

[map,freq,rpmOut,time] = rpmfreqmap(vib,fs,rpm,2.5);

マップを可視化します。

imagesc(time,freq,map)
ax = gca;
ax.YDir = 'normal';
xlabel('Time (s)')
ylabel('Frequency (Hz)')

より細かい分解能帯域幅を使用して計算を繰り返します。rpmfreqmap の組み込み機能を使用してマップをプロットします。周波数分解能を向上させると、時間分解能が低下します。

rpmfreqmap(vib,fs,rpm,1.5);

2 つの線形チャープと 1 つの 2 次チャープ (すべて 600 Hz で 15 秒間サンプリング) で構成される信号を生成します。テスト期間中、信号を発生させるシステムは回転速度を 1 秒あたり 10 回転から 40 回転に上昇させます。

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

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

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

線形チャープの次数は 1 および 2.5 です。次数 1 の成分の振幅は他の成分の振幅の半分です。2 次チャープは次数 6 から始まり、測定の最後にこの次数に戻ります。振幅は 0.8 です。この情報を使用して信号を作成します。

o1 = 1;
o2 = 2.5;
o6 = 6;

x = 0.5*chirp(t,o1*f0,t1,o1*f1)+chirp(t,o2*f0,t1,o2*f1) + ...
    0.8*chirp(t,o6*f0,t1,o6*f1,'quadratic');

信号の周波数-RPM マップを計算します。各測定セルのピーク振幅を使用します。6 Hz の分解能を指定します。フラット トップ ウィンドウを使用して、データにウィンドウを適用します。

[map,fr,rp] = rpmfreqmap(x,fs,rpm,6, ...
    'Amplitude','peak','Window','flattopwin');

周波数-RPM マップをウォーターフォール プロットとして描画します。

[FR,RP] = meshgrid(fr,rp);
waterfall(FR,RP,map')

view(-6,60)
xlabel('Frequency (Hz)')
ylabel('RPM')
zlabel('Amplitude')

出力引数なしで rpmfreqmap を呼び出して、対話型の周波数-RPM マップをプロットします。

ヘリコプターのコクピットに設置された加速度計から取得したシミュレーション振動データを含むファイルを読み込みます。データは 500 Hz のレートで 10 秒間サンプリングされています。データの線形トレンドを除去します。rpmfreqmap を呼び出して、周波数-RPM マップの対話型プロットを生成します。2 Hz の周波数分解能を指定します。

load helidata.mat
rpmfreqmap(detrend(vib),fs,rpm,2)

Figure 内で十字カーソルを移動して、5 秒後の周波数 25 Hz の位置の RPM および RMS 振幅を特定します。

ツール バーの [X 軸ズーム] ボタン をクリックし、2 ~ 4 秒の時間領域を拡大します。下部のプロットにパナーが表示されます。

ツール バーの [ウォータフォール プロット] ボタン をクリックし、周波数-RPM マップをウォーターフォール プロットとして表示します。可視性を向上させるため、[左に回転] ボタン を 3 回使用してプロットを時計回りに回転させます。4 ~ 6 秒の区間にパナーを移動します。

入力引数

すべて折りたたむ

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

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

データ型: double | single

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

データ型: double | single

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

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

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

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

データ型: double | single

周波数-RPM マップの分解能帯域幅。正のスカラーで指定します。res が指定されていない場合、rpmfreqmap では 128 で除算したサンプルレートが設定されます。信号長が十分ではない場合、関数は信号全体の長さを使用して単一の周波数推定を計算します。

データ型: single | double

名前と値のペアの引数

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

例: 'Scale','dB','Window','hann' は、周波数マップの推定がデシベル単位でスケーリングされ、ハン ウィンドウを使用して決定されるように指定します。

周波数-RPM マップの振幅。'Amplitude' および 'rms''peak''power' のいずれかで構成されるコンマ区切りのペアとして指定します。

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

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

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

データ型: char

隣り合ったセグメント間のオーバーラップ率。'OverlapPercent' と、0 から 100 までのスカラー値で構成されるコンマ区切りペアとして指定します。値 0 は隣り合ったセグメントがオーバーラップしないことを意味します。値 100 は隣り合ったセグメントが 1 サンプル分シフトされることを意味します。オーバーラップ率が大きくなると、滑らかなマップが生成されますが、計算時間が長くなります。詳細は、rpmordermap を参照してください。

データ型: double | single

周波数-RPM マップのスケーリング。'Scale''linear' または 'dB' のいずれかで構成されるコンマ区切りのペアとして指定します。

  • 'linear' — 線形にスケーリングされたマップを返します。

  • 'dB' — 値をデシベル単位で表した対数マップを返します。

データ型: char

解析ウィンドウ。'Window' と次の値のいずれかで構成されるコンマ区切りペアとして指定します。

  • 'hann' はハン ウィンドウを指定します。詳細は、hann を参照してください。

  • 'chebwin' はチェビシェフ ウィンドウを指定します。cell 配列を使用して、サイドローブの減衰をデシベル単位で指定します。サイドローブの減衰量は 45 dB より大きくなければなりません。指定されていない場合、既定値の 100 dB が使用されます。詳細は、chebwin を参照してください。

  • 'flattopwin' はフラット トップ ウィンドウを指定します。詳細は、flattopwin を参照してください。

  • 'hamming' はハミング ウィンドウを指定します。詳細は、hamming を参照してください。

  • 'kaiser' はカイザー ウィンドウを指定します。cell 配列を使用して、形状パラメーター β を指定します。形状パラメーターは正のスカラーでなければなりません。指定されていない場合、既定値の 0.5 が使用されます。詳細は、kaiser を参照してください。

  • 'rectwin' は箱型ウィンドウを指定します。詳細は、rectwin を参照してください。

例: 'Window','chebwin' は、サイドローブの減衰量が 100 dB であるチェビシェフ ウィンドウを指定します。

例: 'Window',{'chebwin',60} は、サイドローブの減衰量が 60 dB であるチェビシェフ ウィンドウを指定します。

例: 'Window','kaiser' は、0.5 の形状パラメーターをもつカイザー ウィンドウを指定します。

例: 'Window',{'kaiser',1} は、1 の形状パラメーターをもつカイザー ウィンドウを指定します。

データ型: char | cell

出力引数

すべて折りたたむ

周波数-RPM マップ。行列として返されます。

ベクトルとして返される周波数。

回転速度。ベクトルとして返されます。

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

分解能帯域幅。スカラー値として返されます。

参照

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

R2015b で導入