Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

rainflow

Recuentos de flujo de lluvia para análisis de fatiga

Descripción

c = rainflow(x) devuelve los recuentos de ciclos para el historial de tiempo de carga, x, según la norma ASTM E 1049. Para obtener más información, consulte Algoritmos.

ejemplo

c = rainflow(x,fs) devuelve los recuentos de ciclos para x muestreados a una tasa fs.

ejemplo

c = rainflow(x,t) devuelve los recuentos de ciclos para x muestreados en los valores de tiempo almacenados en t.

ejemplo

c = rainflow(xt) devuelve los recuentos de ciclos para el historial de tiempo almacenado en el horario de MATLAB® xt.

ejemplo

c = rainflow(___,'ext') especifica el historial de tiempo como un vector de inversiones identificadas (picos y valles). 'ext' puede utilizarse con cualquiera de las sintaxis anteriores.

[c,rm,rmr,rmm] = rainflow(___) genera una matriz de flujo de lluvia, rm, y dos vectores, rmr y rmm, que contienen los bordes de los bins del histograma para las filas y columnas de rm, respectivamente.

[c,rm,rmr,rmm,idx] = rainflow(___) también devuelve los índices lineales de las inversiones identificadas en la entrada.

rainflow(___) sin argumentos de salida representa inversiones de carga y un histograma de matriz de flujo de lluvia en la figura actual.

Ejemplos

contraer todo

Genere una señal que se asemeje a un historial de carga, compuesta por semiperíodos sinusoidales que conectan inversiones conocidas y equiespaciadas. La señal se muestrea a 512 Hz durante 8 segundos. Represente los extremos y la señal.

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

Calcule el recuento de ciclos de los datos. Muestre la matriz de recuentos de ciclos.

[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 

Muestre un histograma de los recuentos de ciclos como una función del intervalo de tensión.

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.

Para mostrar un histograma de ciclos como una función del promedio de ciclos y del intervalo de ciclos, utilice rainflow sin argumentos de salida.

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.

Genere una señal que se asemeje a un historial de carga, compuesta por semiperiodos sinusoidales que conecten inversiones conocidas y poco espaciadas. La señal se muestrea a 10 Hz durante 15 segundos. Represente los extremos y la señal.

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

Calcule el recuento de ciclos de los datos. Muestre la matriz de recuentos de ciclos.

[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 

Para mostrar un histograma de ciclos como una función del promedio de ciclos y del intervalo de ciclos, utilice rainflow sin argumentos de salida.

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.

Genere una señal aleatoria muestreada a 100 Hz durante 100 segundos. Almacene la señal y su información de tiempo en un horario.

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

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

Muestre las inversiones y la matriz de flujo de lluvia de la señal.

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.

Genere un conjunto de extremos que se asemejen a las inversiones de carga. Represente los datos.

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.

Calcule el recuento de ciclos de los datos. Especifique que la entrada está compuesta por extremos ya identificados.

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

Muestre un histograma de los recuentos de ciclos como una función del intervalo de tensión.

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.

Para mostrar un histograma de ciclos como una función del promedio de ciclos y del intervalo de ciclos, utilice rainflow sin argumentos de salida.

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.

Argumentos de entrada

contraer todo

Historial de tiempo de carga, especificado como un vector. x debe tener valores finitos.

Tipos de datos: single | double

Tasa de muestreo, especificada como un escalar real positivo.

Tipos de datos: single | double

Valores de tiempo, especificados como un vector, un arreglo duration o un escalar duration que representan el intervalo de tiempo entre las muestras.

Ejemplo: seconds(0:1/100:1) es un arreglo duration que representa 1 segundo de muestreo a 100 Hz.

Tipos de datos: single | double | duration

Historial de tiempo de carga, especificado como un horario. xt debe contener tiempos de fila crecientes y finitos. El horario debe contener un solo vector de datos numéricos con valores de carga finitos.

Si en un horario faltan puntos de tiempo o están duplicados, puede solucionarlo con los consejos de Clean Timetable with Missing, Duplicate, or Nonuniform Times.

Ejemplo: timetable(seconds(0:4)',rand(5,1)) especifica una variable aleatoria muestreada a 1 Hz durante 4 segundos.

Tipos de datos: single | double

Argumentos de salida

contraer todo

Recuentos de ciclos, devueltos como una matriz. c contiene información sobre el ciclo en sus columnas en este orden: recuentos, intervalos, valores medios, índices de muestras iniciales e índices de muestras finales. Para ver un ejemplo, consulte Algoritmos. Si se especifica una tasa de muestreo, un intervalo de tiempo o un vector de valores de tiempo, las dos últimas columnas de c contendrán los tiempos de ciclo inicial y final. Si llama a rainflow con un horario como entrada, las dos últimas columnas expresarán los tiempos de ciclo inicial y final en segundos.

Matriz de flujos de lluvia. Las filas de rm se corresponden con el intervalo de ciclo y las columnas, con la media del ciclo.

Bordes del bin del histograma, devueltos como vectores. rmr y rmm contienen los bordes del bin de las filas y columnas de rm, respectivamente.

Índices lineales de inversiones, devueltos como vector.

Algoritmos

El análisis de la fatiga estudia cómo se acumulan los daños en un objeto sometido a cambios cíclicos de tensión. El número de ciclos necesarios para romper el objeto depende de la amplitud del ciclo. La excitación de entrada de banda ancha contiene ciclos de diversa amplitud, y la presencia de histéresis en el objeto tiene el efecto de anidar unos ciclos dentro de otros, total o parcialmente. El recuento del flujo de lluvia estima el número de ciclos de cambio de carga como una función de la amplitud del ciclo.

Inicialmente, rainflow convierte el historial de carga en una secuencia de inversiones. Las inversiones son los mínimos y máximos locales en los que la carga cambia de signo. La función cuenta los ciclos considerando un punto de referencia móvil de la secuencia, Z, y un subconjunto móvil ordenado de tres puntos con estas características:

  1. El primer y el segundo punto se denominan colectivamente Y.

  2. El segundo y el tercer punto se denominan colectivamente X.

  3. Tanto en X como en Y, los puntos se ordenan de anterior a posterior en el tiempo, pero no son necesariamente consecutivos en la secuencia de inversión.

  4. El intervalo de X, denotado por r(X), es el valor absoluto de la diferencia entre la amplitud del primer punto y la amplitud del segundo punto. La definición de r(Y) es análoga.

El algoritmo rainflow es el siguiente:

Rainflow counting algorithm

Al final, la función recoge los diferentes ciclos y semiciclos y tabula sus intervalos, sus medias y los puntos en los que empiezan y terminan. Esta información puede utilizarse para elaborar un histograma de ciclos.

Considere esta secuencia de inversión:

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.

PasoZInversiones¿Tres inversiones?Yr(Y)Xr(X)¿r(X) < r(Y)?¿Z en Y?Acciones
1AA, B, CAB3BC4No
  1. Cuente AB como ½ ciclo.

  2. Descarte A.

  3. Establezca Z como B.

2BB, CNoLea D.
3BB, C, DBC4CD8No
  1. Cuente BC como ½ ciclo.

  2. Descarte B.

  3. Establezca Z como C.

4CC, DNoLea E.
5CC, D, ECD8DE6Lea F.
6CC, D, E, FDE6EF4Lea G.
7CC, D, E, F, GEF4FG7NoNo
  1. Cuente EF como 1 ciclo.

  2. Descarte E y F.

8CC, D, GCD8DG9No
  1. Cuente CD como ½ ciclo.

  2. Descarte C.

  3. Establezca Z como D.

9DD, GNoLea H.
10DD, G, HDG9GH8Lea J.
11DD, G, H, JGH8HJ7Lea K.
12DD, G, H, J, KHJ7JK4Lea .
13DD, G, H, J, K, LJK4KL3Lea M.
14DD, G, H, J, K, L, MKL3LM5NoNo
  1. Cuente KL como 1 ciclo.

  2. Descarte K y L.

15DD, G, H, J, MHJ7JM5Lea N.
16DD, G, H, J, M, NJM5MN1Lea P.
17DD, G, H, J, M, N, PMN1NP4NoNo
  1. Cuente MN como 1 ciclo.

  2. Descarte M y N.

18DD, G, H, J, PHJ7JP9NoNo
  1. Cuente HJ como 1 ciclo.

  2. Descarte H y J.

19DD, G, PDG9GP10No
  1. Cuente DG como ½ ciclo.

  2. Descarte D.

  3. Establezca Z como G.

20GG, PSin datos

Cuente GP como ½ ciclo.

Ahora recoja los resultados.

Recuento de ciclosIntervaloMediaInicioFinal
½3–0.5AB
½4–1BC
141EF
½81CD
13–0.5KL
112.5MN
170.5HJ
½90.5DG
½101GP

Compare esto con el resultado de ejecutar rainflow en la secuencia:

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

Referencias

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

Capacidades ampliadas

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Historial de versiones

Introducido en R2017b