Main Content

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

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)

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

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

[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')

Figure contains an axes object. The axes object with xlabel Stress Range, ylabel Cycle Counts contains an object of type histogram.

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

rainflow(Y,fs)

Figure contains 2 axes objects. Axes object 1 with title Load Reversals, xlabel Time (secs), ylabel Amplitude contains an object of type line. Axes object 2 with title Rainflow Matrix Histogram, xlabel Cycle Range, ylabel Cycle Average contains an object of type histogram2.

既知の不定間隔の反転をつなぎ、半周期の正弦波で構成される、負荷履歴に似た信号を生成します。信号は、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)

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

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

[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)

Figure contains 2 axes objects. Axes object 1 with title Load Reversals, xlabel Time (secs), ylabel Amplitude contains an object of type line. Axes object 2 with title Rainflow Matrix Histogram, xlabel Cycle Range, ylabel Cycle Average contains an object of type histogram2.

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

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

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

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

rainflow(TT)

Figure contains 2 axes objects. Axes object 1 with title Load Reversals, xlabel Time, ylabel Amplitude contains an object of type line. Axes object 2 with title Rainflow Matrix Histogram, xlabel Cycle Range, ylabel Cycle Average contains an object of type histogram2.

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

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

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

Figure contains an axes object. The axes object with xlabel Sample Index, ylabel Stress contains an object of type line.

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

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

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

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

Figure contains an axes object. The axes object with xlabel Stress Range, ylabel Cycle Counts contains an object of type histogram.

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

rainflow(X,'ext')

Figure contains 2 axes objects. Axes object 1 with title Load Reversals, xlabel Samples, ylabel Amplitude contains an object of type line. Axes object 2 with title Rainflow Matrix Histogram, xlabel Cycle Range, ylabel Cycle Average contains an object of type histogram2.

入力引数

すべて折りたたむ

負荷の時間履歴。ベクトルとして指定します。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 の整理のヒントを使用して修正できます。

例: 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 番目の点を、まとめて Y とします。

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

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

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

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

Rainflow counting algorithm

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

次の反転シーケンスについて考えます。

Sequence of 14 reversals. A has a value of minus 2, B 1, C minus 3, D 5, E minus 1, F 3, G minus 4, H 4 J minus 3, K 1, L minus 2, M 3, N 2, P 6. The range of DE is 6 and the range of LP is 8.

手順Z反転3 つの反転の有無Yr(Y)Xr(X)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 E1049-85(2017), "Standard Practices for Cycle Counting in Fatigue Analysis." West Conshohocken, PA: ASTM International, 2017, https://www.astm.org/e1049-85r17.html.

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2017b で導入