Main Content

Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

envspectrum

Espectro de envolventes para el diagnóstico de maquinaria

Descripción

ejemplo

es = envspectrum(x,fs) devuelve el espectro de envolvente de una señal muestreada a una velocidad.xfs Si es una matriz, la función calcula el espectro de envolvente de forma independiente para cada columna y devuelve el resultado en la columna correspondiente de .xes

ejemplo

es = envspectrum(xt) devuelve el espectro de envolvente de una señal almacenada en el calendario.MATLAB®xt

ejemplo

es = envspectrum(___,Name,Value) especifica opciones adicionales para cualquiera de las sintaxis anteriores mediante argumentos de par nombre-valor. Las opciones incluyen el algoritmo utilizado para calcular la señal de envolvente y la banda de frecuencia sobre la que estimar el espectro.

[es,f,env,t] = envspectrum(___) devuelve , un vector de frecuencias en el que se calcula; , la señal del sobre; y , los tiempos en los que se calcula.fesenvtenv

envspectrum(___) sin argumentos de salida traza la señal de envolvente y el espectro de envolvente en la figura actual.

Ejemplos

contraer todo

Simular dos señales de vibración, una de un rodamiento sano y otra de un rodamiento dañado. Calcular y comparar sus espectros de envolvente.

Un rodamiento con un diámetro de paso de 12 cm tiene ocho elementos rodantes. Cada elemento rodante tiene un diámetro de 2 cm. La carrera exterior permanece estacionaria ya que la carrera interna se conduce a 25 ciclos por segundo. Un acelerómetro toma muestras de las vibraciones del rodamiento a 10 kHz.

fs = 10000; f0 = 25; n = 8; d = 0.02; p = 0.12;

La señal de vibración del rodamiento sano incluye varias órdenes de la frecuencia de conducción. Trazar 0,1 segundos de datos.

t = 0:1/fs:1-1/fs; z = [1 0.5 0.2 0.1 0.05]*sin(2*pi*f0*[1 2 3 4 5]'.*t)/5;  plot(t,z) xlim([0.4 0.5])

Un defecto en la carrera exterior del rodamiento causa una serie de impactos de 5 milisegundos en el rodamiento. Eventualmente, esos impactos resultan en desgaste del rodamiento. Los impactos se producen en la carrera exterior de frecuencia de paso de bola (BPFO) del rodamiento,

<math display="block">
<mrow>
<mrow>
<mstyle mathvariant="normal">
<mrow>
<mi>B</mi>
<mi>P</mi>
<mi>F</mi>
<mi>O</mi>
</mrow>
</mstyle>
</mrow>
<mo>=</mo>
<mrow>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</mfrac>
</mrow>
<mi>n</mi>
<msub>
<mrow>
<mi>f</mi>
</mrow>
<mrow>
<mn>0</mn>
</mrow>
</msub>
<mrow>
<mo>[</mo>
<mn>1</mn>
<mo>-</mo>
<mrow>
<mfrac>
<mrow>
<mi>d</mi>
</mrow>
<mrow>
<mi>p</mi>
</mrow>
</mfrac>
</mrow>
<mi mathvariant="normal">cos</mi>
<mi>θ</mi>
<mo>]</mo>
</mrow>
<mo>,</mo>
</mrow>
</math>

Dónde

<math display="block">
<mrow>
<msub>
<mrow>
<mi>f</mi>
</mrow>
<mrow>
<mn>0</mn>
</mrow>
</msub>
</mrow>
</math>
es la velocidad de conducción, es el número de elementos rodantes, es el diámetro de los elementos rodantes, es el diámetro de paso del rodamiento, y es el ángulo de contacto del rodamiento.ndpθ Asuma un ángulo de contacto de cero y calcule el BPFO.

ca = 0; bpfo = n*f0/2*(1-d/p*cos(ca))
bpfo = 83.3333 

Modele cada impacto como un sinusoides de 3 kHz ventanado por una ventana superior plana. Haga que el impacto sea periódico convolviéndolo con una función de peine. Trazar 0,1 segundos de datos.

fImpact = 3000; tImpact = 0:1/fs:5e-3-1/fs; xImpact = sin(2*pi*fImpact*tImpact).*flattopwin(length(tImpact))'/10;  xComb = zeros(size(t)); xComb(1:fs/bpfo:end) = 1;  x = conv(xComb,xImpact,'same')/3;  plot(t,x+z) xlim([0.4 0.5])

Agregue ruido gaussiano blanco a las señales. Especifique una varianza de ruido de 1/302. Trazar 0,1 segundos de datos.

yGood = z + randn(size(z))/30; yBad = x+z + randn(size(z))/30; plot(t,yGood,t,yBad) xlim([0.4 0.5]) legend('Healthy','Damaged')

Calcular y trazar las señales de envolvente y espectros.

envspectrum([yGood' yBad'],fs) xlim([0 10*bpfo]/1000)

Compare las ubicaciones de los picos con las frecuencias de armónicos del BPFO. Los armónicos BPFO en el espectro de envolventes son un signo de desgaste del rodamiento.

harmImpact = (1:10)*bpfo; [X,Y] = meshgrid(harmImpact,ylim);  hold on plot(X/1000,Y,':k') legend('Healthy','Damaged','BPFO harmonics') hold off

Calcular los espectros Welch de las señales. Especifique una resolución de frecuencia de 5 Hz.

figure pspectrum([yGood' yBad'],fs,'FrequencyResolution',5) legend('Healthy','Damaged')

En el extremo bajo del espectro, la frecuencia de conducción y sus órdenes oscurecen otras características. El espectro del rodamiento sano y el espectro del rodamiento dañado son indistinguibles.

xlim([0 10*bpfo]/1000)

El espectro del rodamiento defectuoso muestra armónicos BPFO modulados por la frecuencia de impacto.

xlim((bpfo*[-10 10]+fImpact)/1000)

Genere una señal de dos canales que se asemeje a las señales de vibración de un rodamiento que completa una rotación cada 10 milisegundos. La señal se muestrea a 10 kHz durante 0,2 segundos, lo que corresponde a 20 rotaciones de rodamientos.

fs = 10000; tmax = 20; mlt = 0.01; t = 0:1/fs:mlt-1/fs;

Durante cada intervalo de 10 milisegundos:

  • El primer canal es un sinusoides amortiguado con constante de amortiguación 700 y frecuencia sinusoides 600 Hz.

  • El segundo canal es otro sinusoides amortiguado con constante de amortiguación 800 y frecuencia sinusoides a 500 Hz. El segundo canal retiene el primer canal en 5 milisegundos.

Traza la señal.

y1 = sin(2*pi*600*t).*exp(-700*t); y2 = sin(2*pi*500*t).*exp(-800*t); y2 = [y2(51:100) y2(1:50)];  T = (0:1/fs:mlt*tmax-1/fs)'; Y = repmat([y1;y2],1,tmax)';  plot(T,Y)

Cree una matriz de duración utilizando el intervalo de tiempo .T Construya un calendario con la matriz de duración y la señal de dos canales.

dt = seconds(T); ttb = timetable(dt,Y);

Utilice sin argumentos de salida para mostrar la señal de envolvente y el espectro de envolvente de los dos canales.envspectrum Calcular el espectro en todo el intervalo Nyquist, excluyendo intervalos de 100 Hz en los extremos.

envspectrum(ttb,'Band',[100 4900])

Los espectros de envolvente de las señales tienen picos en múltiplos enteros de la tasa de repetición de 1/0.01 a 0.1 kHz. Esto es como se esperaba. elimina los componentes sinusoidales de alta frecuencia y se centra en el comportamiento de repetición de menor frecuencia.envspectrum Es por ello que el espectro de envolventes es una herramienta útil para el análisis de maquinaria rotacional.

Calcular la señal de envolvente y las horas en las que se calcula. Compruebe los tipos de las variables de salida.

[~,~,ttbenv,ttbt] = envspectrum(ttb,'Band',[100 4900]); whos ttb*
  Name           Size            Bytes  Class        Attributes    ttb         2000x1             49034  timetable                 ttbenv      2000x1             49042  timetable                 ttbt        2000x1             16002  duration                

El vector de tiempo es de tipo, como los valores de tiempo del horario de entrada.duration El horario de salida tiene el mismo tamaño que el calendario de entrada.

Almacene cada canal del horario de entrada como una variable independiente. Calcular la señal de envolvente y el vector de tiempo. Compruebe los tipos de salida.

btb = timetable(dt,Y(:,1),Y(:,2));  [~,~,btbenv,btbt] = envspectrum(btb,'Band',[100 4900]); whos btb*
  Name           Size            Bytes  Class        Attributes    btb         2000x2             49272  timetable                 btbenv      2000x2             49292  timetable                 btbt        2000x1             16002  duration                

El horario de salida tiene el mismo tamaño que el calendario de entrada.

Genere una señal muestreada a 1 kHz durante 5 segundos. La señal consta de pulsos rectangulares de 0,01 segundos que se repiten cada 0,25 segundos.T La amplitud modula la señal en un sinusoides de la frecuencia portadora 150 Hz.

fs = 1e3; tmax = 5;  t = 0:1/fs:tmax; y = pulstran(t,0:0.25:tmax,'rectpuls',0.01);  fc = 150; z = modulate(y,fc,fs);

Trazar las señales originales y moduladas. Mostrar sólo los primeros ciclos.

plot(t,y,t,z,'-') grid on axis([0 1 -1.1 1.1])

Calcular el espectro de envolvente y envolvente de la señal. Determine la envolvente de la señal utilizando una demodulación compleja. Calcular el espectro de envolvente en un intervalo de 20 Hz centrado en la frecuencia portadora.

[q,f,e,te] = envspectrum(z,fs,'Method','demod','Band',[fc-10 fc+10]);

Trazar la señal de envolvente y el espectro de envolvente. Amplíe el intervalo de 0 a 50 Hz.

subplot(2,1,1) plot(te,e) xlabel('Time') title('Envelope')  subplot(2,1,2) plot(f,q) xlim([0 50]) xlabel('Frequency') title('Envelope Spectrum')

La señal de envolvente tiene el mismo período en el tiempo, 0,25 segundos, que la señal original.T El espectro de envolventes tiene pulsos a 1 / a 4 Hz.T

Repita el cálculo, pero ahora use la función para calcular el sobre.hilbert Filtro de paso de banda de la señal utilizando un filtro de respuesta de impulso finito (FIR) de décimo orden. Trazar la señal de envolvente y el espectro de envolvente utilizando la funcionalidad incorporada de .envspectrum

envspectrum(z,fs,'Method','hilbert','FilterOrder',10)

Incruste la señal en ruido gaussiano blanco de varianza 1/3. Trazar el resultado.

zn = z + randn(size(z))/3;  plot(t,zn,'-') grid on axis([0 1 -1.1 1.1])

Calcular y mostrar la señal de envolvente y el espectro de envolvente. Calcular el espectro de envolvente utilizando una demodulación compleja en un intervalo de 10 Hz centrado en la frecuencia portadora. Amplíe el intervalo de 0 a 50 Hz.

envspectrum(zn,fs,'Band',[fc-5 fc+5]) xlim([0 50])

Argumentos de entrada

contraer todo

Señal de entrada, especificada como un vector o una matriz. Si es un vector, se trata como un solo canal.x Si es una matriz, calcula el espectro de envolvente de forma independiente para cada columna y devuelve el resultado en la columna correspondiente de .xenvspectrumes

Ejemplo: es una señal de vector de fila de un solo canal.cos(pi/4*(0:159))+randn(1,160)

Ejemplo: es una señal de dos canales.cos(pi./[4;2]*(0:159))'+randn(160,2)

Tipos de datos: single | double
Soporte de números complejos:

Frecuencia de muestreo, especificada como un escalar real positivo.

Tipos de datos: single | double

Horario de entrada. debe contener tiempos de fila finitos cada vez mayores.xt Si representa una señal multicanal, debe tener una sola variable que contenga una matriz o varias variables que consistan en vectores.xt

Si falta un horario o se duplican los puntos de tiempo, puede corregirlo con las sugerencias de .Clean Timetable with Missing, Duplicate, or Nonuniform Times

Ejemplo: especifica una variable aleatoria de dos canales muestreada a 1 Hz durante 4 segundos.timetable(seconds(0:4)',randn(5,2))

Tipos de datos: single | double

Argumentos de par nombre-valor

Especifique pares opcionales separados por comas de argumentos. es el nombre del argumento y es el valor correspondiente. deben aparecer entre comillas.Name,ValueNameValueName Puede especificar varios argumentos de par de nombre y valor en cualquier orden como .Name1,Value1,...,NameN,ValueN

Ejemplo: 'Method','hilbert','FilterOrder',30,'Band',[0 fs/4] calcula el espectro de envolvente entre 0 y la mitad de la frecuencia Nyquist usando un filtro de paso de banda de orden 30 y calculando la envolvente de la señal analítica.

Algoritmo para calcular la señal de envolvente, especificado como el par separado por comas que consta de y uno o .'Method''hilbert''demod' Consulte para obtener más información.Algoritmos

Banda de frecuencia al espectro de envolvente de proceso, especificado como el par separado por comas que consta de y un vector de dos elementos de valores estrictamente crecientes entre 0 y la frecuencia Nyquist.'Band'

Tipos de datos: single | double
Soporte de números complejos:

Orden de filtro FIR, especificado como el par separado por comas que consta de un escalar entero positivo.'FilterOrder'

  • Si es , este argumento especifica el orden de un filtro de paso de banda FIR.'Method''hilbert'

  • Si es , este argumento especifica el orden de un filtro de paso bajo FIR.'Method''demod'

Tipos de datos: single | double

Argumentos de salida

contraer todo

Espectro envolvente, devuelto como vector o matriz.

Frecuencias en las que se calcula el espectro de envolventes, devueltas como vector.

Señal de envolvente, devuelta como vector, matriz o calendario.

Si la entrada a es un calendario, entonces también es un calendario.envspectrumenv Los valores de tiempo de tienen el mismo formato que los valores de tiempo del calendario de entrada.env

  • Si la entrada es un calendario con una sola variable que contiene una matriz, tiene una sola variable que contiene una matriz.env

  • Si la entrada es un calendario con varias variables que consisten en vectores, tiene varias variables que consisten en vectores.env

Valores de tiempo en los que se calcula la señal de envolvente, devueltos como vector.

Si la entrada es un calendario, tiene el mismo formato que los valores de tiempo del horario de entrada.envspectrumt

Algoritmos

inicialmente elimina el sesgo de CC de la señal de entrada, y luego calcula la señal de envolvente.envspectrumx

  • Si se establece en'Method' 'hilbert', la función:

    1. Bandpass-filtra la señal. El filtro FIR tiene un orden especificado por y frecuencias de corte en y , donde se especifica una banda de frecuencia utilizando .'FilterOrder'ba(1)ba(2)ba'Band'

    2. Calcula la señal analítica utilizando la función.hilbert

    3. Calcula la señal de envolvente como el valor absoluto de la señal analítica.

  • Si se establece en'Method' 'demod', la función:

    1. Realiza una demodulación compleja de la señal. La señal se multiplica por exp(j2πf0t)Dónde f0 = (ba(1) + ba(2))/2.

    2. Lowpass-filtra la señal demodulada para calcular la señal analítica. El filtro FIR tiene un orden especificado y una frecuencia de corte de'FilterOrder' (ba(2)ba(1))/2.

    3. Calcula la señal de envolvente como el doble del valor absoluto de la señal analítica.

Después de calcular la señal de envolvente, la función elimina el sesgo de CC del sobre y calcula el espectro de envolvente utilizando el FFT.

Referencias

[1] Randall, Robert Bond. Vibration-Based Condition Monitoring. Chichester, UK: John Wiley & Sons, 2011.

Capacidades ampliadas

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

Introducido en R2017b