이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

rainflow

피로 해석을 위한 레인플로 횟수

설명

c = rainflow(x)는 ASTM E 1049 표준에 따라 하중 시간 내역 x에 대한 사이클 수를 반환합니다. 자세한 내용은 알고리즘 항목을 참조하십시오.

예제

c = rainflow(x,fs)fs 레이트로 샘플링된 x의 사이클 수를 반환합니다.

예제

c = rainflow(x,t)t에 저장된 시간 값으로 샘플링된 x의 사이클 수를 반환합니다.

예제

c = rainflow(xt)는 MATLAB® 타임테이블 xt에 저장된 시간 내역의 사이클 수를 반환합니다.

예제

c = rainflow(___,'ext')는 시간 내역을 식별된 반전(피크와 밸리)으로 구성된 벡터로 지정합니다. 'ext'는 위에 열거된 구문과 함께 사용할 수 있습니다.

[c,rm,rmr,rmm] = rainflow(___)rm의 행과 열에 대한 히스토그램 Bin 경계값을 포함하여, 레인플로 행렬 rm과 두 개의 벡터 rmrrmm을 각각 출력합니다.

[c,rm,rmr,rmm,idx] = rainflow(___)는 입력값에서 식별되는 반전의 선형 인덱스도 반환합니다.

rainflow(___)에 출력 인수를 지정하지 않으면 현재 Figure에 하중 반전과 레인플로 행렬 히스토그램을 플로팅합니다.

예제

모두 축소

등간격의 알려진 반전들을 절반 주기의 정현파로 연결하는, 하중 내역을 흉내내는 신호를 생성합니다. 이 신호는 8초 동안 512Hz로 샘플링됩니다. 극값과 신호를 플로팅합니다.

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)

간격이 균일하지 않은 알려진 반전들을 절반 주기의 정현파로 연결하는, 하중 내역을 흉내내는 신호를 생성합니다. 이 신호는 15초 동안 10Hz로 샘플링됩니다. 극값과 신호를 플로팅합니다.

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초 동안 100Hz로 샘플링된 랜덤 신호를 생성합니다. 이 신호와 신호의 시간 정보를 타임테이블에 저장합니다.

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)은 1초 동안 100Hz로 샘플링되었음을 나타내는 duration형 배열입니다.

데이터형: single | double | duration

하중 시간 내역으로, timetable형으로 지정됩니다. xt는 증가하는 유한한 행 시간값을 포함해야 합니다. 타임테이블은 유한한 하중 값을 갖는 숫자형 데이터 벡터를 하나만 포함해야 합니다.

타임테이블에 누락되거나 중복된 시간 지점이 포함된 경우 누락되거나 중복되거나 불균일하게 분포된 시간값이 포함된 타임테이블 정리하기 (MATLAB)에 나와 있는 팁을 활용하여 수정할 수 있습니다.

예: timetable(seconds(0:4)',rand(5,1))은 4초 동안 1Hz로 샘플링된 확률 변수를 지정합니다.

데이터형: single | double

출력 인수

모두 축소

사이클 수로, 행렬로 반환됩니다. c의 열에는 사이클 정보가 수, 범위, 평균값, 초기 샘플 인덱스, 최종 샘플 인덱스 순으로 포함됩니다. 예제는 알고리즘 항목을 참조하십시오. 샘플 레이트, 시간 간격 또는 시간 값으로 구성된 벡터를 지정하는 경우 c의 마지막 두 열에는 초기 사이클 시간 값과 최종 사이클 시간 값이 포함됩니다. 타임테이블을 입력값으로 하여 rainflow를 호출할 경우 마지막 두 열은 초기 사이클 시간 값과 최종 사이클 시간 값(단위: 초)을 나타냅니다.

레인플로 행렬입니다. rm의 행은 사이클 범위에 해당하고, 열은 사이클 평균값에 해당합니다.

히스토그램 Bin 경계값으로, 벡터로 반환됩니다. rmrrmm에는 rm의 행과 열에 대한 Bin 경계값이 각각 포함됩니다.

반전의 선형 인덱스로, 벡터로 반환됩니다.

알고리즘

피로 해석에서는 응력의 반복되는 변화에 영향을 받는 물체에 손상이 어떻게 누적되는지를 연구합니다. 물체를 파괴시키는 사이클 수는 사이클 진폭에 따라 달라집니다. 광대역 입력 가진은 다양한 진폭의 사이클을 포함하고, 물체에 존재하는 이력(hysteresis)은 일부 사이클을 다른 사이클에 완전히 또는 부분적으로 중첩시키는 결과를 낳습니다. 레인플로 집계법은 하중 변화 사이클 수를 사이클 진폭의 함수로 추정합니다.

우선 rainflow는 하중 내역을 반전으로 구성된 시퀀스로 변환합니다. 반전은 하중의 부호가 바뀌는 국소 최솟값과 국소 최댓값입니다. 함수는 시퀀스 Z의 이동 참조 점과 함께 다음 특성을 갖는 정렬된 세 개의 이동 점 서브셋을 고려하여 사이클 수를 계산합니다.

  1. 첫 번째 점과 두 번째 점을 Y로 통칭합니다.

  2. 두 번째 점과 세 번째 점을 X로 통칭합니다.

  3. XY의 점들은 모두 시간 순으로 오래된 것부터 정렬되지만, 반전 시퀀스에서 반드시 연속적일 필요는 없습니다.

  4. r(X)로 나타내는 X범위는 첫 번째 점의 진폭과 두 번째 점의 진폭 간의 차분 절댓값입니다. r(Y)에 대한 정의도 유사합니다.

rainflow 알고리즘은 다음과 같습니다.

마지막에 함수는 서로 다른 사이클과 절반 사이클을 수집하고 해당 범위와 평균, 그리고 사이클이 시작하고 끝나는 점을 표로 만듭니다. 이러한 정보는 나중에 사이클의 히스토그램을 생성하는 데 사용할 수 있습니다.

다음 반전 시퀀스를 살펴보겠습니다.

단계Z반전반전 개수가 3개인지 여부Yr(Y)Xr(X)r(X) < r(Y)?Y에 Z가 포함되는지 여부동작
1aA, B, CAB3BC4아니요
  1. AB를 ½ 사이클로 계산합니다.

  2. A를 버립니다.

  3. ZB로 설정합니다.

2BB, C아니요D를 읽습니다.
3BB, C, DBC4CD8아니요
  1. BC를 ½ 사이클로 계산합니다.

  2. B를 버립니다.

  3. ZC로 설정합니다.

4CC, D아니요E를 읽습니다.
5CC, D, ECD8DE6F를 읽습니다.
6CC, D, E, FDE6EF4G를 읽습니다.
7CC, D, E, F, GEF4FG7아니요아니요
  1. EF를 1 사이클로 계산합니다.

  2. EF를 버립니다.

8CC, D, GCD8DG9아니요
  1. CD를 ½ 사이클로 계산합니다.

  2. C를 버립니다.

  3. ZD로 설정합니다.

9DD, G아니요H를 읽습니다.
10DD, G, HDG9GH8J를 읽습니다.
11DD, G, H, JGH8HJ7K를 읽습니다.
12DD, G, H, J, KHJ7JK4L을 읽습니다.
13DD, G, H, J, K, LJK4KL3M을 읽습니다.
14DD, G, H, J, K, L, MKL3LM5아니요아니요
  1. KL을 1 사이클로 계산합니다.

  2. KL을 버립니다.

15DD, G, H, J, MHJ7JM5N을 읽습니다.
16DD, G, H, J, M, NJM5MN1P를 읽습니다.
17DD, G, H, J, M, N, PMN1NP4아니요아니요
  1. MN을 1 사이클로 계산합니다.

  2. MN을 버립니다.

18DD, G, H, J, PHJ7JP9아니요아니요
  1. HJ를 1 사이클로 계산합니다.

  2. HJ를 버립니다.

19DD, G, PDG9GP10아니요
  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, 2011, https://www.astm.org/cgi-bin/resolver.cgi?E1049.

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

R2017b에 개발됨