ドキュメンテーション

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

rainflow

疲労解析のためのレインフロー カウント

構文

c = rainflow(x)
c = rainflow(x,fs)
c = rainflow(x,t)
c = rainflow(xt)
c = rainflow(___,'ext')
[c,rm,rmr,rmm] = rainflow(___)
[c,rm,rmr,rmm,idx] = rainflow(___)
rainflow(___)

説明

c = rainflow(x) は、ASTM E 1049 標準に従って、負荷時間履歴のサイクル カウント x を返します。詳細は、アルゴリズムを参照してください。

c = rainflow(x,fs) は、レート fs でサンプリングした x のサイクル カウントを返します。

c = rainflow(x,t) は、t に格納されている時間値でサンプリングした x のサイクル カウントを返します。

c = rainflow(xt) は、MATLAB® timetable xt に格納されている時間履歴のサイクル カウントを返します。

c = rainflow(___,'ext') では、指定された "反転" (ピークと谷) のベクトルとして時間履歴を指定します。'ext' は、前の構文のいずれかで使用できます。

[c,rm,rmr,rmm] = rainflow(___) はレインフロー行列 rm、2 つのベクトル rmrrmm を出力します。これらのベクトルには、それぞれに rm の行と列のヒストグラム ビン エッジが含まれます。

[c,rm,rmr,rmm,idx] = rainflow(___) は、入力で識別された反転の線形インデックスも返します。

出力引数を設定せずに rainflow(___) を使用すると、現在の Figure に負荷の反転とレインフロー行列ヒストグラムがプロットされます。

すべて折りたたむ

既知の等間隔の反転をつなぎ、半周期の正弦波で構成される、負荷履歴に似た信号を生成します。信号は、512 Hz で 8 秒間サンプリングされます。極値と信号をプロットします。

fs = 512;

X = [-2 1 -3 5 -1 3 -4 4 -2];
lX = length(X)-1;

Y = -diff(X)/2.*cos(pi*(0:1/fs:1-1/fs)') + (X(1:lX)+X(2:lX+1))/2;
Y = [Y(:);X(end)];

plot(0:lX,X,'o',0:1/fs:lX,Y)

データのサイクル カウントを計算します。サイクル カウントの行列を表示します。

[c,hist,edges,rmm,idx] = rainflow(Y,fs);

T = array2table(c,'VariableNames',{'Count','Range','Mean','Start','End'})
T=7×5 table
    Count    Range    Mean    Start    End
    _____    _____    ____    _____    ___

     0.5       3      -0.5      0       1 
     0.5       4        -1      1       2 
       1       4         1      4       5 
     0.5       8         1      2       3 
     0.5       9       0.5      3       6 
     0.5       8         0      6       7 
     0.5       6         1      7       8 

サイクル カウントのヒストグラムをストレス範囲の関数として表示します。

histogram('BinEdges',edges','BinCounts',sum(hist,2))
xlabel('Stress Range')
ylabel('Cycle Counts')

出力引数なしで rainflow を使用して、サイクルのヒストグラムをサイクル平均とサイクル範囲の関数としてプロットします。

rainflow(Y,fs)

既知の不定間隔の反転をつなぎ、半周期の正弦波で構成される、負荷履歴に似た信号を生成します。信号は、10 Hz で 15 秒間サンプリングされます。極値と信号をプロットします。

fs = 10;

X = [0 1 3 4 5 6 8 10 13 15];
Y = [-2 1 -3 5 -1 3 -4 4 -2 6];

Z = [];
for k = 1:length(Y)-1
    x = X(k+1)-X(k);
    z = -(Y(k+1)-Y(k))*cos(pi*(0:1/fs:x-1/fs)/x)+Y(k+1)+Y(k);
    Z = [Z z/2];
end
Z = [Z Y(end)];

t = linspace(X(1),X(end),length(Z));
plot(X,Y,'o',t,Z)

データのサイクル カウントを計算します。サイクル カウントの行列を表示します。

[c,hist,edges,rmm,idx] = rainflow(Z,t);

TT = array2table(c,'VariableNames',{'Count','Range','Mean','Start','End'})
TT=7×5 table
    Count    Range    Mean    Start    End
    _____    _____    ____    _____    ___

     0.5       3      -0.5      0       1 
     0.5       4        -1      1       3 
       1       4         1      5       6 
     0.5       8         1      3       4 
       1       6         1     10      13 
     0.5       9       0.5      4       8 
     0.5      10         1      8      15 

出力引数なしで rainflow を使用して、サイクルのヒストグラムをサイクル平均とサイクル範囲の関数としてプロットします。

rainflow(Z,t)

100 Hz で 100 秒間サンプリングされたランダムな信号を生成します。信号とその時間情報を timetable に格納します。

fs = 100;
t = seconds(0:1/fs:100-1/fs)';

x = randn(size(t));
TT = timetable(t,x);

反転と信号のレインフロー行列を表示します。

rainflow(TT)

負荷の反転に似た一連の極値を生成します。データをプロットします。

X = [-2 1 -3 5 -1 3 -4 4 -2]';

plot(X)
xlabel('Sample Index')  
ylabel('Stress')

データのサイクル カウントを計算します。入力が既に識別済みの極値で構成されるように指定します。

[C,hist,edges] = rainflow(X,'ext');

サイクル カウントのヒストグラムをストレス範囲の関数として表示します。

histogram('BinEdges',edges','BinCounts',sum(hist,2))
xlabel('Stress Range')  
ylabel('Cycle Counts')

出力引数なしで rainflow を使用して、サイクルのヒストグラムをサイクル平均とサイクル範囲の関数としてプロットします。

rainflow(X,'ext')

入力引数

すべて折りたたむ

負荷の時間履歴。ベクトルとして指定します。x は有限の値をもたなければなりません。

データ型: single | double

サンプルレート。正の実数スカラーとして指定します。

データ型: single | double

時間値。ベクトル、duration 配列、またはサンプル間の時間間隔を表す duration スカラーとして指定します。

例: seconds(0:1/100:1) は 100 Hz でサンプリングされた 1 秒間を表す duration 配列です。

データ型: single | double | duration

負荷の時間履歴。timetable として指定します。xt には、増加する有限の行時間を含めなければなりません。timetable には、有限の負荷値をもつ数値データ ベクトルを 1 つのみ含めなければなりません。

timetable が欠損している場合や時間点が重複している場合、欠損または重複する時間および非等間隔の時間をもつ timetable の整理 (MATLAB)のヒントを使用して修正できます。

例: timetable(seconds(0:4)',rand(5,1)) は 1 Hz で 4 秒間サンプリングされた確率変数を指定します。

データ型: single | double

出力引数

すべて折りたたむ

サイクル カウント。行列として返されます。c の列には、カウント、範囲、平均値、最初のサンプル インデックス、最後のサンプル インデックスの順でサイクル情報が含まれます。例は、アルゴリズムを参照してください。サンプルレート、時間間隔、または時間値のベクトルを指定した場合、c の最後の 2 列に最初と最後のサイクル時間が含まれます。入力として timetable を設定して rainflow を呼び出した場合、最後の 2 列は、最初と最後のサイクル時間を秒単位で表します。

レインフロー行列。rm の行はサイクル範囲に対応し、列はサイクル平均に対応します。

ヒストグラム ビン エッジ。ベクトルとして返されます。rmrrmm には、それぞれに rm の行と列のビン エッジが含まれます。

反転の線形インデックス。ベクトルとして返されます。

アルゴリズム

疲労解析では、ストレスのかかる状態での周期的な変化の対象となるオブジェクトの損傷が累積する様子を調べます。オブジェクトの破損に必要なサイクル数は、サイクルの振幅によって異なります。広帯域入力励起にはさまざまな振幅のサイクルが含まれ、オブジェクトにヒステリシスがあるとその影響で一部のサイクルが他のサイクルに完全または部分的にネストされます。"レインフロー計数" は、負荷の変化サイクルの数をサイクル振幅の関数として推定します。

rainflow は、はじめに負荷履歴を "反転" のシーケンスにします。反転は、負荷が符号を変化させる局所的最小値と局所的最大値です。関数は、シーケンスの基準点 Z の移動と、これらの特性をもつ順序付けられた 3 点のサブセットの移動を考慮してサイクルをカウントします。

  1. 最初の点と 2 番目の点を、まとめて X とします。

  2. 2 番目の点と 3 番目の点を、まとめて Y とします。

  3. XY の両方で、点は早いものから遅いものへと時間順に並べ替えられますが、必ずしも反転シーケンス内で連続しているわけではありません。

  4. r(X) によって表される X の "範囲" は、最初の点の振幅と 2 番目の点の振幅の間の差の絶対値です。r(Y) の定義も同様です。

rainflow アルゴリズムは、以下のように実行されます。

最後に、関数はさまざまなサイクルと半サイクルを収集し、その範囲、平均、開始点、終了点を集計します。これらの情報は、後で、サイクルのヒストグラムの作成に使用できます。

次の反転シーケンスを考えましょう。

手順Z反転3 つの反転の有無Yr(Y)Xr(Y)r(X) < r(Y)?Z in Y?アクション
1AA, B, CありAB3BC4なしあり
  1. AB を ½ サイクルとしてカウント

  2. A を破棄

  3. ZB に設定

2BB, CなしD を読み取る
3BB, C, DありBC4CD8なしあり
  1. BC を ½ サイクルとしてカウント

  2. B を破棄

  3. ZC に設定

4CC, DなしE を読み取る
5CC, D, EありCD8DE6ありF を読み取る
6CC, D, E, FありDE6EF4ありG を読み取る
7CC, D, E, F, GありEF4FG7なしなし
  1. EF を 1 サイクルとしてカウント

  2. EF を破棄

8CC, D, GありCD8DG9なしあり
  1. CD を ½ サイクルとしてカウント

  2. C を破棄

  3. ZD に設定

9DD, GなしH を読み取る
10DD, G, HありDG9GH8ありJ を読み取る
11DD, G, H, JありGH8HJ7ありK を読み取る
12DD, G, H, J, KありHJ7JK4ありL を読み取る
13DD, G, H, J, K, LありJK4KL3ありM を読み取る
14DD, G, H, J, K, L, MありKL3LM5なしなし
  1. KL を 1 サイクルとしてカウント

  2. KL を破棄

15DD, G, H, J, MありHJ7JM5ありN を読み取る
16DD, G, H, J, M, NありJM5MN1ありP を読み取る
17DD, G, H, J, M, N, PありMN1NP4なしなし
  1. MN を 1 サイクルとしてカウント

  2. MN を破棄

18DD, G, H, J, PありHJ7JP9なしなし
  1. HJ を 1 サイクルとしてカウント

  2. HJ を破棄

19DD, G, PありDG9GP10なしあり
  1. DG を ½ サイクルとしてカウント

  2. D を破棄

  3. ZG に設定

20GG, Pデータ範囲外

GP を ½ サイクルとしてカウント

ここで結果を収集します。

サイクル カウント範囲平均開始終了
½3–0.5AB
½4–1BC
141EF
½81CD
13–0.5KL
112.5MN
170.5HJ
½90.5DG
½101GP

これをシーケンスで rainflow を実行した結果と比較します。

q = rainflow([-2 1 -3 5 -1 3 -4 4 -3 1 -2 3 2 6])
q =

    0.5000    3.0000   -0.5000    1.0000    2.0000
    0.5000    4.0000   -1.0000    2.0000    3.0000
    1.0000    4.0000    1.0000    5.0000    6.0000
    0.5000    8.0000    1.0000    3.0000    4.0000
    1.0000    3.0000   -0.5000   10.0000   11.0000
    1.0000    1.0000    2.5000   12.0000   13.0000
    1.0000    7.0000    0.5000    8.0000    9.0000
    0.5000    9.0000    0.5000    4.0000    7.0000
    0.5000   10.0000    1.0000    7.0000   14.0000

参照

[1] ASTM Standard E 1049, 1985 (2011). "Standard Practices for Cycle Counting in Fatigue Analysis." West Conshohocken, PA: ASTM International, 2011.

R2017b で導入