<!-- canonical: https://jmrplens.github.io/phonometry/es/vibration/machinery/machine-diagnostics/ -->
Source: https://jmrplens.github.io/phonometry/es/vibration/machinery/machine-diagnostics/

El mantenimiento predictivo empieza por la aritmética, no por el tratamiento de
señal. Todo rodamiento de contacto rodante, todo engranaje, todo motor de
inducción y todo rotor con palas excita una familia de **frecuencias discretas
fijadas por su geometría y por su velocidad de giro**, y saber dónde caen esas
líneas es lo que convierte un espectro sin rasgos en un diagnóstico: un pico
solo es una prueba cuando se asienta sobre una línea con nombre. Esta página
cubre la cinemática de M. P. Norton y D. G. Karczub, *Fundamentals of Noise and
Vibration Analysis for Engineers* (2.ª ed., Cambridge University Press, 2003),
sección 8.4, y cómo se combina con la cadena de señal que la biblioteca ya
ofrece: el [espectro de envolvente y el
cepstrum](/phonometry/es/signals/spectra/cepstrum-echoes/)
y el [promediado síncrono en el
tiempo](/phonometry/es/signals/spectra/synchronous-averaging/).

La vista de trabajo es la unión de ambas cosas: el espectro de envolvente de un
registro de vibración filtrado en banda con las líneas previstas dibujadas
encima y con su nombre.

*Las cuatro líneas altas caen sobre la BPFO y sus armónicos; no aparece nada en
la BPFI, ni en la BSF, la frecuencia de rotación del elemento rodante, ni en la
BDF de 183 Hz, donde golpearía un elemento rodante dañado. Ese es el
diagnóstico: un descascarillado en la pista exterior.*

<details>
<summary>Ver el código de esta figura</summary>

```python

from phonometry import bearing_fault_frequencies, envelope_spectrum, noise_signal

# El rodamiento: 15 rodillos sobre un diámetro primitivo de 34 mm, rodillos
# de 6 mm, ángulo de contacto de 12,96 grados, eje a 2000 r/min.
faults = bearing_fault_frequencies(2000.0, 15, 6.0, 34.0,
                                   contact_angle_deg=12.96)
bpfo, shaft = faults["BPFO"], faults.shaft_rate    # 207,0 Hz, 33,33 Hz

# Una pista exterior descascarillada: un impacto por periodo de BPFO, cada uno
# excitando una resonancia del soporte a 3 kHz, modulado una vez por vuelta por
# la carga y enterrado en ruido.
fs, seconds = 20000.0, 2.0
t = np.arange(int(fs * seconds)) / fs
impacts = np.zeros_like(t)
for k in range(int(seconds * bpfo)):
    impacts[round(k / bpfo * fs)] = 1.0 + 0.35 * np.cos(
        2.0 * np.pi * shaft * k / bpfo)
tau = np.arange(int(0.004 * fs)) / fs
ring = np.exp(-tau / 6.0e-4) * np.sin(2.0 * np.pi * 3000.0 * tau)
x = np.convolve(impacts, ring)[: t.size] * 0.6
x += 0.35 * np.sin(2.0 * np.pi * shaft * t)          # desequilibrio residual
x += noise_signal(fs, seconds, color="white", rms=0.25, seed=17)

# Se filtra en banda la resonancia que excitan los impactos, se detecta su
# envolvente, se transforma, y el resultado dibuja sus propias líneas encima.
spectrum = envelope_spectrum(x, fs, band=(2000.0, 4000.0))
faults.within(1.0, 5.0 * bpfo).plot(spectrum=spectrum, language="es")
plt.show()
```

</details>

## Símbolos de esta página

Norton conserva la notación de sus fuentes, y una misma letra carga con cuatro
significados distintos a lo largo de las cuatro secciones. La tabla de abajo es
la clave; la que hay que vigilar es $N$, que es una *velocidad* en la sección 1
y un *recuento* en las secciones 2 y 4.

| Símbolo | Significado | Unidad | Sección |
|---|---|---|---|
| $N$ | velocidad del eje (el primer argumento posicional de la API) | r/min | 1 |
| $f_\mathrm{s}$ | frecuencia de giro del eje, $f_\mathrm{s} = N/60$ | Hz | todas |
| $Z$ | número de elementos rodantes del rodamiento | — | 1 |
| $d$, $D$ | diámetro del elemento rodante, diámetro primitivo | la misma para ambos | 1 |
| $\phi$ | ángulo de contacto, desde el plano radial | grados | 1 |
| $g$ | el factor común $g = (d/D)\cos\phi$ | — | 1 |
| $N$ | número de dientes de la rueda (Ec. 8.3 de Norton) | — | 2 |
| $R$, $p$ | barras de rotor, polos magnéticos (no pares de polos) | — | 3 |
| $s$, $f_\mathrm{e}$ | deslizamiento (una fracción, no un porcentaje), frecuencia de alimentación | —, Hz | 3 |
| $N$, $V$ | número de palas del rotor, número de álabes del estátor | — | 4 |
| $N$ | número de eventos de bombeo por vuelta | — | 4 |
| $n$ | índice de armónico (de ranura de rotor en la sección 3, de pala en la 4) | — | 3, 4 |
| $m_\mathrm{L}$ | número de lóbulos de un patrón rotativo de interacción | — | 4 |

Nada en la biblioteca reutiliza el nombre: `bearing_fault_frequencies`,
`gear_mesh_frequencies` y `blade_pass_frequencies` toman todas la velocidad del
eje en r/min primero y el recuento después, así que la colisión vive solo en las
fórmulas impresas. Aun así merece la pena comprobarlo, porque un recuento puesto
donde va una velocidad es un error de factor 60 que no levanta ninguna
excepción.

## 1. Rodamientos de contacto rodante

Norton reproduce las once ecuaciones recopiladas por Shahan y
Kamperman (Ecs. 8.4 a 8.14). Se reducen a **siete frecuencias distintas**,
porque cuatro de las once son las contrapartes con pista interior giratoria de
filas que ya están en la tabla: o idénticas a ellas dos a dos, o alcanzables
mediante el argumento `rotating_race`. Con la velocidad del eje $N$ en r/min, $Z$
elementos rodantes de diámetro $d$ sobre un diámetro primitivo $D$, un
ángulo de contacto $\phi$, y escribiendo $g = (d/D)\cos\phi$ y
$f_\mathrm{s} = N/60$:

| Nombre | Significado | Expresión | Ec. de Norton |
|---|---|---|---|
| `shaft` | frecuencia de giro del eje | $f_\mathrm{s} = N/60$ | (8.4) |
| `FTF` | frecuencia de la jaula (tren fundamental) | $(f_\mathrm{s}/2)(1 - g)$ | (8.5) |
| `FTF_rel` | jaula relativa a la pista que gira | $f_\mathrm{s} - \text{FTF}$ | (8.11) |
| `BSF` | frecuencia de rotación del elemento rodante | $(f_\mathrm{s}/2)(D/d)(1 - g^2)$ | (8.7) |
| `BDF` | frecuencia de giro del elemento rodante | $2\,\text{BSF}$ | (8.10) |
| `BPFO` | frecuencia de paso por la pista exterior | $Z(f_\mathrm{s}/2)(1 - g)$ | (8.8) |
| `BPFI` | frecuencia de paso por la pista interior | $Z(f_\mathrm{s}/2)(1 + g)$ | (8.9) |

Esas tres magnitudes geométricas cargan con toda la familia, y dos de ellas se
confunden a menudo. El diámetro **primitivo** se mide entre los centros de los
elementos rodantes, ni en el agujero ni en el diámetro exterior. El **ángulo de
contacto** se mide desde el plano radial, así que no aparece en una vista
frontal: vale cero en un rodamiento rígido de bolas y no vale cero en los de
contacto angular y los de rodillos cónicos, que es la única razón de que
$g = (d/D)\cos\phi$ lleve un coseno.

Las dos identidades exactas en las que se apoya la sección son afirmaciones
geométricas que esta figura hace evidentes: todo elemento rodante pasa o por el
defecto de la pista exterior o por el de la interior, así que
$\text{BPFO} + \text{BPFI} = Z f_\mathrm{s}$; y con la pista exterior quieta la jaula
lleva los $Z$ elementos por delante del defecto una vez por vuelta de jaula, así
que $\text{BPFO} = Z \times \text{FTF}$.

Tres de ellas llevan el diagnóstico: `BPFO` para un defecto en la pista
exterior, `BPFI` para un defecto en la pista interior y `BDF` para un elemento
rodante o una jaula dañados. Las dos filas del elemento rodante se diferencian
en un factor dos porque responden a preguntas distintas: `BSF` es a qué
velocidad gira un elemento rodante, y `BDF` con qué frecuencia un defecto suyo
golpea una pista — dos veces por vuelta del elemento, una contra cada pista. La
evidencia de un elemento rodante dañado se espera, por tanto, en la `BDF`
(183,3 Hz para el rodamiento de arriba), normalmente modulada a la frecuencia
de la jaula `FTF`, mientras que la línea que la figura dibuja en 91,7 Hz es la
frecuencia de rotación del elemento rodante, la `BSF`. Conviene recordar dos
identidades, porque son
exactas y detectan al instante los errores de introducción de datos:
$\text{BPFO} + \text{BPFI} = Z f_\mathrm{s}$ siempre, y
$\text{BPFO} = Z \times \text{FTF}$ siempre que la pista exterior esté
quieta.

La presencia y la ausencia son la forma débil del diagnóstico, y aquí funciona
solo porque la BPFO (207 Hz) y la BPFI (293 Hz) de este rodamiento quedan muy
separadas y el registro está limpio. La forma fuerte es la **modulación**, y se
deduce de la misma geometría:

- un defecto en la **pista exterior** ocupa una posición angular fija dentro de
  la zona de carga, así que todos los elementos rodantes lo golpean con la misma
  carga. El tren de impactos no está modulado, y la BPFO aparece como una serie
  armónica limpia, con poca o ninguna estructura de bandas laterales;
- un defecto en la **pista interior** gira con el eje, así que entra y sale de
  la zona de carga una vez por vuelta. El tren de impactos está modulado en
  amplitud a la frecuencia del eje, y la BPFI lleva bandas laterales a
  $\pm f_\mathrm{s}$ alrededor de la línea y de cada armónico, a menudo más visibles que
  la propia portadora;
- un defecto en un **elemento rodante** golpea las dos pistas alternativamente
  mientras viaja con la jaula, así que está modulado a la frecuencia de la
  jaula: la BDF lleva bandas laterales a $\pm\text{FTF}$. Para eso están en la
  tabla `FTF` y `FTF_rel`.

El *espaciado* de las bandas laterales es por tanto el criterio de desempate
siempre que dos familias previstas caigan cerca, y es el mismo argumento que
hace el párrafo de bandas laterales de engrane de la sección 2 para otro
componente. Resolver una banda lateral a $\pm f_\mathrm{s}$ cuesta longitud de registro,
que es la razón de que la adquisición de la sección 5 importe aquí, y no solo
en principio.

```python
from phonometry import bearing_fault_frequencies

res = bearing_fault_frequencies(2000.0, 15, 6.0, 34.0, contact_angle_deg=12.96)
print(round(res["BPFO"], 1), round(res["BPFI"], 1))   # 207.0 293.0
print(round(res["BPFO"] + res["BPFI"], 1))            # 500.0 = 15 x 33,33
print(res.as_dict())
```

Solo interviene la relación $d/D$, así que los dos diámetros pueden darse en
milímetros, en pulgadas o en metros mientras ambos usen la misma unidad.
`rotating_race="outer"` desplaza la jaula a la Ec. (8.6); `BPFO` y `BPFI` no se
mueven, porque las Ecs. (8.8) y (8.14), y (8.9) y (8.13) de Norton son
idénticas dos a dos.

Esta es la cinemática de un **contacto de rodadura pura**. Un rodamiento real
bajo carga desliza un poco, así que las líneas medidas se desvían de la
previsión en un uno o un dos por ciento; eso es normal y es la razón por la que
la superposición se lee como «el pico está sobre la línea» y no como «el pico
está en la línea».

### La velocidad es toda la previsión

Todas las frecuencias de esta página son estrictamente proporcionales a
$f_\mathrm{s} = N/60$: las siete líneas del rodamiento, el engrane y sus bandas
laterales, el `1x`, el `2x` y la familia de ranura de rotor del motor, las
líneas de paso de pala. Un error de velocidad se propaga por tanto uno a uno a
todas las líneas previstas, y la velocidad del eje es el único dato de entrada
que la aritmética no puede comprobar.

- **De dónde sale.** De la placa de características no: esa es la velocidad
  síncrona o a plena carga, y una máquina de inducción cargada gira por debajo.
  Lo que hace falta aquí es la velocidad de giro en el momento del registro:
  de un tacómetro, de un encóder de eje, de un captador óptico o magnético de
  una marca por vuelta, o del propio pico `1x` medido en el espectro. Lo último
  es lo habitual en campo y es circular si no se hace a propósito: primero se
  localiza el pico `1x` y desde él se sitúa todo lo demás.
- **Qué hace la deriva.** Si la velocidad se mueve durante el registro, todas
  las líneas previstas se emborronan en proporción a su orden. Una variación del
  1 % emborrona $4\times\text{BPFO}$, 828 Hz en el rodamiento anterior, en unos
  8 Hz, que basta para fundir un armónico con sus vecinos y destruir la
  evidencia que busca la superposición. La figura que abre esta página depende
  de que cuatro armónicos de BPFO se sostengan separados, así que depende de
  una velocidad estable.
- **Qué hacer al respecto.** El seguimiento de órdenes, o un
  [promediado síncrono en el tiempo](/phonometry/es/signals/spectra/synchronous-averaging/)
  remuestreado con el tacómetro, remuestrea el registro sobre el ángulo del eje
  y devuelve los órdenes emborronados a líneas únicas.

El error de tacómetro y el deslizamiento del rodamiento son fallos distintos y
se comportan de forma distinta. Una velocidad equivocada desplaza *todas* las
líneas de forma coherente y en la misma fracción; el deslizamiento desplaza solo
las líneas del rodamiento, un uno o un dos por ciento, y no de forma
determinista, que es además la razón de que la evidencia de rodamiento
sobreviva al promediado síncrono y la de engranaje no.

## 2. Engranajes

La frecuencia de engrane (paso de dientes) de una rueda de $N$ dientes es
$\text{GMF} = N f_\mathrm{s}$ (Ec. 8.3), con armónicos enteros. Lo que distingue los tipos de
fallo es la familia de **bandas laterales** en torno a cada armónico: un solo
diente astillado o una rueda excéntrica modula el engrane una vez por vuelta y
produce bandas laterales bajas y planas espaciadas la frecuencia de giro del
eje, mientras que un desgaste distribuido levanta grupos altos de bandas
laterales y eleva los armónicos superiores del engrane.

```python
from phonometry import gear_mesh_frequencies

# Un piñón de 28 dientes en un eje a 1500 r/min, con dos órdenes de bandas.
res = gear_mesh_frequencies(1500.0, 28, harmonics=3, sidebands=2)
print(round(res["GMF"], 1))            # 700.0
print(round(res["GMF+1x"], 1))         # 725.0  (GMF + un orden de eje)
print(res.harmonics("GMF", 3))         # [ 700. 1400. 2100.]
```

Con `sideband_rate` se modula a la velocidad de giro de la rueda *conjugada*,
que es lo que produce un fallo en la otra rueda del par. Los dos primeros
paneles de la figura del final de la sección 4 dibujan las dos firmas una al
lado de la otra, así que lo anterior es algo que se comprueba mirando en vez de
creerlo sin más.

## 3. Motores de inducción

En la señal de vibración de un motor medida en el soporte del rodamiento siempre
hay tres líneas: `1x` (desequilibrio mecánico), `2x` (desalineación con la carga
accionada) y `2fe` (entrehierro no uniforme, pulsos de par y los fallos
eléctricos de devanado y de barras del rotor). Son propiedades de la máquina, no
del rodamiento. Los defectos de rotor que producen excentricidad
estática o dinámica del entrehierro se leen sobre los **armónicos de ranura del
rotor** de la Ec. (8.20),

$$
f_\mathrm{sh} = f_\mathrm{e} \left[(2R/p)(1 - s) \pm 2(n - 1)\right]
$$

con $R$ barras de rotor, $p$ polos magnéticos (no pares de polos),
deslizamiento $s$ (una fracción adimensional, cercana a cero en una máquina poco
cargada) y $n = 1, 2, \ldots$. La excentricidad dinámica
viste el armónico de ranura dominante con bandas laterales a $\pm$ la
frecuencia de giro del eje y a $\pm$ la frecuencia de deslizamiento.

```python
from phonometry import induction_motor_frequencies

# Sesenta barras de rotor, seis polos magnéticos, 3600 r/min, sin deslizamiento:
# una máquina de seis polos a esa velocidad va con un variador a 180 Hz, no con
# la red.
res = induction_motor_frequencies(3600.0, 6, 60, slip=0.0)
print(round(res["fe"]))                         # 180  la alimentación que implica
print(round(res["1x"]), round(res["2x"]),
      round(res["2fe"]), round(res["fsh"]))     # 60 120 360 3600
```

Lee la frecuencia de alimentación antes que las líneas de fallo. `2fe` sigue a
la *alimentación*, no a la red, así que con un variador de frecuencia se mueve
con el ajuste del variador: los 360 Hz de arriba son el doble de 180 Hz, y una
máquina de seis polos con red de 50 Hz giraría cerca de 1000 r/min con `2fe` en
100 Hz. El `fsh` = 3600 Hz impreso es la comprobación por la que aboga el
párrafo siguiente: con deslizamiento nulo, la Ec. (8.20) debe reducirse a la
frecuencia física de paso de barras $R f_\mathrm{s} = 60 \times 60$ Hz.

El deslizamiento se da directamente, o se da la frecuencia de red
`supply_frequency` y el deslizamiento se deduce de ella y de la velocidad medida
del eje. La frecuencia de alimentación se toma como
$f_\mathrm{e} = f_\mathrm{s}\,p / (2(1 - s))$; la Ec. (8.19) de Norton escribe
$f_\mathrm{e} = f_\mathrm{s}\,p/2$, que es la misma expresión con deslizamiento nulo pero no
reduce la Ec. (8.20) a la frecuencia física de paso de barras $R f_\mathrm{s}$
cuando la máquina está cargada. Con carga, el resultado incluye además la
frecuencia de deslizamiento y la línea de paso de polos
$\text{FP} = p \times f_\text{slip}$, el espaciado de bandas laterales que
una barra de rotor rota coloca alrededor de `1x`. El tercer panel de la figura
del final de la sección 4 dibuja esta familia en un eje de amplitud logarítmico,
que es la única forma de ver el `1x` y el armónico de ranura de rotor en la
misma imagen: están a tres décadas de distancia.

## 4. Ventiladores, soplantes y bombas

La frecuencia de paso de pala de un rodete de $N$ palas es $f_\mathrm{b} = n N f_\mathrm{s}$
(Ec. 8.15). Las pulsaciones hidráulicas de una bomba siguen la misma forma, con
el recuento de palas sustituido por el número de eventos de bombeo por vuelta
(Ec. 8.18). Y una soplante volumétrica rotativa repite cuatro veces por vuelta,
lo que se trata pasando $4 \times \text{r/min}$ con una sola «pala»:

```python
from phonometry import blade_pass_frequencies

# Una soplante volumétrica rotativa a 1200 r/min: cuatro pulsaciones por
# vuelta, así que la frecuencia de pulsación se pide como 4 x r/min con N = 1.
res = blade_pass_frequencies(4 * 1200.0, 1, harmonics=3)
print(round(res["BPF"], 1))        # 80.0 Hz, la frecuencia de pulsación
print(round(res.shaft_rate, 1))    # 80.0 Hz - NO la del eje, que es 20
```

El truco cuesta la línea del eje: `shaft_rate` vuelve valiendo $4 f_\mathrm{s}$, así que
lee la frecuencia del eje de una llamada aparte a la velocidad verdadera (o de
`bearing_fault_frequencies`) antes de combinar familias con
`combine_fault_lines`, o se dibujará un cuarto armónico del eje como si fuera
evidencia de rodamiento.

En un **ventilador axial entubado** las palas interaccionan además con los
álabes del estátor y establecen patrones de presión rotativos con
$m_\mathrm{L} = nN \pm kV$ lóbulos para $V$ álabes (Ec. 8.16), que giran a
$n N f_\mathrm{s} / m_\mathrm{L}$ (Ec. 8.17). Un patrón que gira más rápido que las propias palas
radia con mucha más fuerza, y por eso importa la elección de $N$ y $V$, y por
eso esas velocidades son las que hay que contrastar con las frecuencias de corte
del conducto. Cada línea se llama `lobe n=<n> m=<mL>`: el armónico de pala forma
parte del nombre porque la Ec. (8.17) lleva $n$, de modo que el mismo número de
lóbulos alcanzado desde otro armónico es otro patrón, que gira a otra velocidad.

```python
# Seis palas, cuatro álabes, 3500 r/min (blade_pass_frequencies importado arriba).
res = blade_pass_frequencies(3500.0, 6, harmonics=1, n_vanes=4)
print(round(res.shaft_rate, 1))   # 58.3 Hz, el eje mismo
print(round(res["BPF"]))          # 350
print(round(res["lobe n=1 m=2"]), round(res["lobe n=1 m=10"]))    # 175 35
```

Esos dos números son el principio, resuelto. Los dos patrones salen del *mismo*
armónico de pala del *mismo* ventilador; la única diferencia es el signo de $k$
en $m_\mathrm{L} = nN \pm kV$, que es la razón de que el recuento de lóbulos tenga que
formar parte del nombre de la línea. El patrón de $m_\mathrm{L} = 2$ gira a
$nNf_\mathrm{s}/m_\mathrm{L} = 6 \times 58{,}3/2 = 175$ Hz, tres veces la velocidad del eje, así
que es el que radia con fuerza y la línea que hay que contrastar con la
frecuencia de corte del conducto. El patrón de $m_\mathrm{L} = 10$ gira a 35 Hz, por
debajo de la velocidad del eje, así que radia poco. Seis palas contra cuatro
álabes es una decisión de diseño, y esto es lo que decide.

*Una familia de fallos se reconoce por su patrón, no por un solo número. Los dos
paneles de engranaje son el mismo piñón de 28 dientes a 1500 r/min con dos
fallos distintos: un diente astillado da bandas laterales bajas y planas a
$\pm f_\mathrm{s}$ y armónicos que caen; un desgaste distribuido da grupos altos de
bandas laterales y levanta los armónicos superiores. El panel del motor abarca
tres décadas de amplitud, que es la razón de que el armónico de ranura de rotor
y sus bandas laterales a $\pm f_\mathrm{s}$ necesiten un eje logarítmico para verse
siquiera al lado del `1x`. El panel del ventilador pone los dos patrones
lobulados junto a la frecuencia de pala de la que salen.*

<details>
<summary>Ver el código de esta figura</summary>

```python

# La biblioteca prevé las líneas; los espectros de debajo se sintetizan
# exactamente a esas frecuencias, así que la figura y los valores impresos
# concuerdan.
gear = gear_mesh_frequencies(1500.0, 28, harmonics=3, sidebands=2)
freq = np.linspace(0.0, 2400.0, 4800)
amp = np.full_like(freq, 0.004)
for order, height in enumerate((1.0, 0.40, 0.16), start=1):
    for centre, level in (
        (order * gear["GMF"], height),
        (order * gear["GMF"] - gear.shaft_rate, 0.13 * height),
        (order * gear["GMF"] + gear.shaft_rate, 0.13 * height),
    ):
        amp += level * np.exp(-0.5 * ((freq - centre) / 2.2) ** 2)

spectrum = type("S", (), {"frequencies": freq, "amplitude": amp})()
gear.within(1.0, 2400.0).plot(spectrum=spectrum, language="es")
plt.show()
```

</details>

## 5. Del registro bruto a una línea con nombre

La cinemática responde a *dónde mirar*; la cadena de señal responde a *qué hay*.
Antes que ninguna de las dos, algo tiene que registrar la máquina, y el análisis
de envolvente es inusualmente sensible a cómo se haga eso.

### Paso 0. Conseguir el registro

**Dónde se pone el transductor.** En el soporte del rodamiento, en la zona de
carga, tan cerca de la pista exterior como permita la geometría y con el camino
estructural más corto posible hasta ella. Una medida tomada al otro lado de una
unión atornillada, sobre un resguardo o sobre chapa pierde la energía de impacto
de alta frecuencia sobre la que se sostiene todo el método. Las posiciones
radial y axial responden a preguntas distintas: la radial (horizontal, o
vertical donde lo pida la dirección de la carga) para las familias de rodamiento
y de desequilibrio, la axial para la desalineación y para los engranes
helicoidales o cónicos.

**Cómo se fija.** La resonancia de la fijación fija la frecuencia superior
utilizable, y este método necesita kilohercios. Una fijación por espárrago sobre
una cara preparada llega a decenas de kilohercios; una unión con adhesivo o con
una capa fina de cianoacrilato, algo menos; una base magnética, típicamente unos
pocos kilohercios; una sonda de mano, apenas uno. La banda que se usa más abajo
es de 2 a 4 kHz, que para una base magnética está en el límite y para una sonda
de mano queda fuera de alcance: esta es, con diferencia, la razón más frecuente
de que un análisis de envolvente no encuentre nada en un rodamiento que sí está
descascarillado.

**Qué se adquiere.** La frecuencia de muestreo debe dejar margen por encima de
la resonancia que suena: 20 kHz para una resonancia de soporte de 3 kHz deja
sitio para que trabajen el filtro de banda y el detector. El registro debe
contener vueltas suficientes para que el espectro de envolvente resuelva la
frecuencia del eje, porque la resolución que se obtiene es $1/T$ y el espaciado
de bandas laterales que hay que resolver es el propio $f_\mathrm{s}$. Dos segundos a
2000 r/min son 67 vueltas y 0,5 Hz de resolución frente a una frecuencia de eje
de 33 Hz, que es la razón de que la línea del eje y las bandas laterales a
$\pm f_\mathrm{s}$ de la sección 1 sean separables siquiera. Registra más tiempo si la
velocidad es baja o si las bandas laterales son el diagnóstico; registra menos
solo si la velocidad no se va a mantener quieta (véase *La velocidad es toda la
previsión* más arriba).

**Qué transductor.** Un acelerómetro piezoeléctrico corriente cubre las bandas
de kilohercios que se usan aquí. Un sensor de emisión acústica o uno específico
de alta frecuencia sube la banda útil un orden de magnitud, lo que cambia la
banda que debe aislar el paso 1; si la máquina está instrumentada así, localiza
la resonancia antes de elegirla.

### Los tres pasos de tratamiento de señal

Para un rodamiento, la ruta clásica tiene tres pasos, y la biblioteca tiene una
función para cada uno:

1. **Aislar la resonancia que excitan los impactos.** Un descascarillado excita
   una resonancia estructural de alta frecuencia del soporte, muy por encima de
   los armónicos del eje y del engrane. Se pasa su banda como
   `band=(low, high)` a `envelope_spectrum`, que filtra el registro con un
   filtro de fase nula antes del detector, de modo que la fase de la modulación
   queda intacta. Elegir esa banda es el único juicio de toda la cadena: mira en
   el espectro bruto la joroba de banda ancha que excitan los impactos, golpea
   el soporte y observa qué resuena, o barre el centro y el ancho de banda
   buscando aquella cuya envolvente es más impulsiva (el kurtograma). La banda
   debe quedar **por encima** de los armónicos del eje, del engrane y sus bandas
   laterales y de cualquier línea eléctrica, o esos tonos sobreviven al filtro y
   aparecen como líneas propias en el espectro de envolvente, donde un pico de
   engrane se confunde fácilmente con un armónico de rodamiento. Debe ser lo
   bastante ancha para dejar pasar el repique del impacto sin truncarlo y lo
   bastante estrecha para que el suelo de ruido no lo entierre. Los 2 a 4 kHz
   que se usan en esta página se eligen porque estos impactos hacen sonar una
   resonancia de soporte de 3 kHz.
2. **Detectar y transformar la envolvente.** La cadencia de repetición de los
   impactos es una modulación de amplitud de esa resonancia, así que se
   convierte en una *línea* del espectro de envolvente, a la frecuencia de fallo
   y a sus armónicos. Véase la
   [guía del cepstrum y el espectro de envolvente](/phonometry/es/signals/spectra/cepstrum-echoes/).
3. **Nombrar las líneas.** Se superpone la previsión cinemática.
   `.plot(spectrum=…)` acepta cualquier resultado de `envelope_spectrum` (o
   cualquier objeto que exponga `frequencies` y `amplitude`) y dibuja encima las
   líneas previstas, coloreadas por familia para que los armónicos del eje nunca
   se lean como prueba de un fallo de rodamiento.

*Los tres pasos hechos visibles sobre un mismo registro. Los impactos son
invisibles en la señal bruta, evidentes en cuanto se aísla la banda de 2 a
4 kHz, rectificados en un tren de pulsos por el detector de envolvente y, por
fin, leídos como una línea en 207 Hz y sus armónicos: el periodo del panel 2
convertido en la frecuencia del panel 4.*

<details>
<summary>Ver el código de esta figura</summary>

```python

from scipy import signal as sp_signal

# El registro x, su frecuencia de muestreo fs, su base de tiempos t y la BPFO
# prevista son los que se construyeron para la figura que abre la página.
band = (2000.0, 4000.0)
spec = envelope_spectrum(x, fs, band=band)     # lleva .envelope y .times

# El mismo filtro paso banda Butterworth de cuarto orden y fase nula que aplica la
# llamada internamente, ejecutado aquí para poder dibujar el registro intermedio.
sos = sp_signal.butter(4, band, btype="bandpass", fs=fs, output="sos")
narrow = sp_signal.sosfiltfilt(sos, x)

fig, axes = plt.subplots(4, 1, figsize=(10, 10))
window = slice(0, int(0.05 * fs))                       # los primeros 50 ms
axes[0].plot(t[window], x[window]); axes[0].set_ylabel("a bruta")
axes[1].plot(t[window], narrow[window]); axes[1].set_ylabel("2-4 kHz")
axes[2].plot(spec.times[window], spec.envelope[window])
axes[2].set_ylabel("envolvente"); axes[2].set_xlabel("Tiempo [s]")
keep = spec.frequencies <= 4.6 * bpfo
axes[3].plot(spec.frequencies[keep], spec.amplitude[keep])
for order in range(1, 5):
    axes[3].axvline(order * bpfo, ls="--", color="C1")
axes[3].set_xlabel("Frecuencia [Hz]"); axes[3].set_ylabel("espectro de envolvente")
plt.show()
```

</details>

Hay otras dos herramientas que ayudan cuando el registro está cargado. El
[promediado síncrono en el
tiempo](/phonometry/es/signals/spectra/synchronous-averaging/)
elimina todo lo que no esté enganchado a un eje, lo que separa los dos ejes de
una caja de engranajes antes de leer las bandas laterales; y el
[cepstrum](/phonometry/es/signals/spectra/cepstrum-echoes/) colapsa toda una familia de
armónicos o de bandas laterales en una única espiga de quefrencia, que es la
forma más rápida de saber *qué* periodicidad domina cuando hay varias
superpuestas.

Junta las dos sobre una misma máquina. El registro de abajo es del que salen las
figuras de esta página: dos segundos a 20 kHz de un acelerómetro fijado con
espárrago en el soporte del rodamiento, radial y en la zona de carga, con la
velocidad del eje tomada del captador de una marca por vuelta en ese mismo
momento. El rodamiento soporta un piñón de 28 dientes, así que el soporte lleva
tres familias a la vez.

```python
from phonometry import (
    bearing_fault_frequencies,
    combine_fault_lines,
    envelope_spectrum,
    gear_mesh_frequencies,
)

record, fs = x, 20000.0          # el registro del soporte y su muestreo
shaft_rpm = 2000.0               # del tacómetro, no de la placa de características

# Las líneas propias del rodamiento, la familia de engrane del piñón que soporta
# y los armónicos del eje. Todos en unos ejes.
bearing = bearing_fault_frequencies(shaft_rpm, 15, 6.0, 34.0,
                                    contact_angle_deg=12.96)
gear = gear_mesh_frequencies(shaft_rpm, 28, harmonics=2, sidebands=1)
lines = combine_fault_lines(bearing, gear)

spectrum = envelope_spectrum(record, fs, band=(2000.0, 4000.0))
lines.within(1.0, 1600.0).plot(spectrum=spectrum, language="es")
```

`within(low, high)` recorta la familia al tramo que el análisis cubre
realmente, lo que importa porque aquí el armónico de engrane más alto
(`2xGMF+1x`, 1900 Hz) queda por encima de la parte útil de este espectro de
envolvente.

## Qué cubre y qué no

Las familias cinemáticas de la sección 8.4 de Norton: rodamientos de contacto
rodante (Ecs. 8.4 a 8.14), engrane y bandas laterales (Ec. 8.3), líneas de
alimentación, deslizamiento, paso de polos y ranura de rotor de los motores de
inducción (Ecs. 8.19 y 8.20), y frecuencias de paso de pala con los patrones
lobulados de interacción de un ventilador axial entubado (Ecs. 8.15 a 8.18),
mediante `bearing_fault_frequencies`, `gear_mesh_frequencies`,
`induction_motor_frequencies`, `blade_pass_frequencies`, `combine_fault_lines`
y `shaft_rate`.

Estas son *previsiones*, no detecciones: aquí nada decide si una línea está
presente, solo dónde estaría. Los criterios de amplitud que convierten una
línea presente en una valoración de severidad (tendencias de factor de cresta
y de curtosis, bandas de severidad en velocidad de las ISO 10816 / ISO 20816)
quedan fuera de este módulo; la propia orientación de Norton es cualitativa
(factores de cresta de 2,5 a 3,5 en un rodamiento sano, hasta unos 11 con
defectos impulsivos; curtosis en torno a 3 en un rodamiento sano y por encima
de 4 en uno dañado). La frecuencia de paso de polos
$\text{FP} = p \times f_\text{slip}$ es práctica habitual del mantenimiento
predictivo, no de Norton: él da la propia frecuencia de deslizamiento como
espaciado de las bandas laterales de una barra rota y no la multiplica por el
número de polos.

## Véase también

- [Cepstrum, ecos y espectro de la envolvente](/phonometry/es/signals/spectra/cepstrum-echoes/):
  el espectro de envolvente sobre el que se dibujan estas líneas y el colapso
  cepstral de una familia de armónicos.
- [Promediado síncrono en el tiempo](/phonometry/es/signals/spectra/synchronous-averaging/):
  separar la firma de un eje de todo lo asíncrono con él.
- [Movilidad mecánica y la familia de FRF (ISO 7626-1)](/phonometry/es/vibration/structural/mechanical-mobility/):
  encontrar las resonancias estructurales que excita el impacto de un defecto.
- [Transmisión de onda de flexión en uniones de placas](/phonometry/es/vibration/structural/junction-transmission/):
  qué le ocurre a la vibración una vez sale de la máquina.
- Referencia de la API: [`vibration.machinery.diagnostics`](/phonometry/es/reference/api/vibration/diagnostics/).
