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 envolvente para el diagnóstico de maquinaria

Descripción

ejemplo

es = envspectrum(x,fs) Devuelve el espectro de envolvente de una señal muestreada a un ritmo.xfs Si es una matriz, la función computa el espectro 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 computar la señal de envolvente y la banda de frecuencias sobre la cual estimar el espectro.

[es,f,env,t] = envspectrum(___) Devuelve, un vector de frecuencias en la que se calcula; , la señal de 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. Calcule y compare sus espectros de envolvente.

Un rodamiento con un diámetro de inclinación de 12 cm tiene ocho elementos rodantes. Cada elemento rodante tiene un diámetro de 2 cm. La raza exterior permanece inmóvil ya que la carrera interior se impulsa a 25 ciclos por segundo. Un acelerómetro muestrea 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 varios pedidos de la frecuencia de conducción. Parcela 0,1 segundo 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 externa del rodamiento provoca una serie de impactos de 5 milisegundos en el rodamiento. Eventualmente, esos impactos resultan en desgaste del rodamiento. Los impactos ocurren 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 cero y calcule el BPFO.

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

Modele cada impacto como un sinusoide de 3 kHz con ventanas por una ventana superior plana. Haga que el impacto sea periódico, Convolving con una función de peine. Parcela 0,1 segundo 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])

Añadir ruido Gaussiano blanco a las señales. Especifique una varianza de ruido de 1/30 ². Parcela 0,1 segundo 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')

Computa y traza las señales de envolvente y los espectros.

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

Compare las ubicaciones máximas con las frecuencias de armónicos del BPFO. Los armónicos BPFO en el espectro envolvente 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

Computa el espectro 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 más 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 milisegundo:

  • El primer canal es una sinusoide amortiguada con constante de amortiguación 700 y frecuencia sinusoide de 600 Hz.

  • El segundo canal es otra sinusoide amortiguado con constante de amortiguación 800 y frecuencia sinusoide 500 Hz. El segundo canal se retrasa el primer canal por 5 milisegundos.

Trace 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 horario con la matriz de duración y la señal de dos canales.

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

Se utiliza sin argumentos de salida para mostrar la señal de envolvente y el espectro envolvente de los dos canales.envspectrum Calcule el espectro en todo el intervalo Nyquist, excluyendo los 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 = 0,1 kHz. Esto es lo que esperábamos. elimina los componentes sinusoidales de alta frecuencia y se enfoca en el comportamiento de repetición de menor frecuencia.envspectrum Esta es la razón por la cual el espectro envolvente es una herramienta útil para el análisis de maquinaria rotacional.

Calcule 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 calendario de entrada.duration El calendario de salida tiene el mismo tamaño que el horario de entrada.

Almacene cada canal del calendario de entrada como una variable independiente. Calcule 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 calendario de salida tiene el mismo tamaño que el horario de entrada.

Genere una señal muestreada a 1 kHz durante 5 segundos. La señal consiste en pulsos rectangulares de 0,01 segundos que se repiten cada = 0,25 segundo.T Amplitud modula la señal en una sinusoide 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);

Graficar 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])

Calcule el espectro de envolvente y envolvente de la señal. Determine la envolvente de la señal utilizando una demodulación compleja. Calcule 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]);

Trace 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 sobre tiene el mismo período en el tiempo, = 0,25 segundo, como la señal original.T El espectro de envolvente tiene pulsos a 1/= 4 Hz.T

Repita el cálculo, pero ahora utilice la función para calcular el sobre.hilbert Paso de banda-filtre la señal usando un filtro de respuesta de impulso finito de orden 10º (FIR). Trace la señal de envolvente y el espectro envolvente utilizando la funcionalidad incorporada de.envspectrum

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

Inserte la señal en el ruido Gaussiano blanco de la varianza 1/3. Graficar el resultado.

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

Calcule y visualice la señal de envolvente y el espectro envolvente. Calcule 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 vector o matriz. Si es un vector, se trata como un solo canal.x Si es una matriz, a continuación, 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

Calendario de entrada. debe contener tiempos de fila finitos crecientes.xt Si representa una señal multicanal, debe tener una sola variable que contenga una matriz o varias variables compuestas por vectores.xt

Si un horario ha desaparecido o ha duplicado los puntos de tiempo, puede arreglarlo usando las sugerencias en.Limpie el horario con los tiempos perdidos, duplicados o no uniformes (MATLAB)

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 de argumentos separados por comas opcionales. es el nombre del argumento y es el valor correspondiente. deben aparecer dentro de las cotizaciones.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] computa el espectro envolvente entre 0 y la mitad de la frecuencia Nyquist utilizando un filtro de paso de banda de orden 30 y calculando el sobre 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 cualquiera o.'Method''hilbert''demod' Consulte para obtener más información.Algoritmos

Banda de frecuencias para computar el espectro envolvente, especificado como el par separado por comas que consiste en 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 así, este argumento especifica el orden de un filtro de paso de banda FIR.'Method''hilbert'

  • Si es así, 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 de envolvente, devuelto como vector o matriz.

Frecuencias a las que se calcula el espectro de envolvente, que se devuelven como vector.

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

Si la entrada es un horario, entonces también es un horario.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 horario con una sola variable que contiene una matriz, entonces tiene una sola variable que contiene una matriz.env

  • Si la entrada es un horario con múltiples variables compuestas por vectores, entonces tiene múltiples variables compuestas por vectores.env

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

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

Algoritmos

elimina inicialmente el sesgo de CC de la señal de entrada y, a continuación, calcula la señal de envolvente.envspectrumx

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

    1. Paso de banda-filtra la señal. El filtro FIR tiene una orden especificada por y las frecuencias de corte en y, donde se especifica una banda de frecuencias 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 computar la señal analítica. El filtro FIR tiene una orden especificada por 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 la polarización de CC del sobre y calcula el espectro de envolvente utilizando la 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