La detección de anomalías por audio te permite oír los problemas de motores, bombas, ventiladores y reductoras antes de que se conviertan en averías. Esta guía de caso de uso explica cómo funciona la monitorización acústica, qué modelos se ejecutan con holgura en hardware de borde y cómo publicar puntuaciones de anomalía por MQTT para que los dashboards y los equipos de mantenimiento reciban una señal clara sin que nadie transmita audio en bruto.
Por qué escuchar a las máquinas
Los técnicos experimentados diagnostican las máquinas de oído: el chirrido de un rodamiento seco, un golpeteo rítmico de un soporte suelto, el silbido de una válvula con fugas. La monitorización acústica automatiza esa habilidad y la aplica las 24 horas del día.
El sonido tiene ventajas prácticas frente a otros sensores:
- Sin contacto. Un micrófono no necesita montarse sobre un eje giratorio ni cablearse a un controlador, lo que facilita la instalación en equipos existentes.
- Amplia cobertura. Un micrófono puede vigilar un pequeño grupo de máquinas o todo un tramo de cinta transportadora.
- Información rica. Las frecuencias revelan velocidades de giro, fricción, cavitación, fugas de aire e impactos.
- Hardware barato. Los micrófonos MEMS cuestan poco y los digitales se conectan directamente a microcontroladores y ordenadores de placa única.
El inconveniente es el ruido. Las fábricas son ruidosas, los sonidos de fondo cambian constantemente y las máquinas vecinas se cuelan en cada grabación. Un sistema útil debe distinguir entre "distinto de lo habitual" y "ha pasado la carretilla".
Cómo funciona la detección de anomalías por audio
Casi todos los sistemas prácticos siguen la misma cadena de procesamiento.
1. Captura
Graba clips cortos (normalmente de uno a diez segundos) a 16 kHz o más. Muchos fallos de máquinas aparecen por debajo de 8 kHz, pero las fugas de aire y algunos fallos de rodamientos producen contenido ultrasónico o de alta frecuencia, así que adapta la frecuencia de muestreo y el micrófono al fallo que te interesa.
2. Extracción de características
Las formas de onda en bruto son difíciles de comparar. Convierte cada clip en un espectrograma log-mel: una imagen tiempo-frecuencia en la que las bandas de frecuencia se espacian según la forma en que el oído humano percibe el tono, con la energía en escala logarítmica. Alternativas más sencillas son las energías por banda, el centroide espectral y el nivel RMS.
3. Aprender lo normal
Como los fallos son escasos, los modelos se entrenan solo con grabaciones normales. El objetivo no es reconocer un fallo concreto, sino medir lo lejos que está un clip nuevo de todo lo que el modelo ha oído durante el funcionamiento normal.
4. Puntuar y decidir
Cada clip recibe una puntuación de anomalía. Un umbral, fijado a partir de la distribución de puntuaciones de grabaciones normales reservadas, decide si el clip es inusual. Las reglas de persistencia (varios clips inusuales seguidos) suprimen los ruidos aislados.
Opciones de modelo para el borde
| Enfoque | Cómo puntúa | Hardware | Fortalezas | Debilidades |
|---|---|---|---|---|
| Línea base de energía por banda | Distancia a la media y varianza de cada banda | Microcontrolador o Pi | Diminuto, explicable | No capta cambios sutiles de patrón |
| Mezcla gaussiana sobre características | Log-verosimilitud negativa | Clase Raspberry Pi | Gestiona varios modos de funcionamiento | Requiere elegir bien las características |
| Isolation Forest sobre características | Longitud del camino | Clase Raspberry Pi | Multivariante, rápido de entrenar | Requiere ingeniería de características |
| Autoencoder convolucional | Error de reconstrucción en espectrogramas | Pi con acelerador, Jetson | Aprende patrones complejos | Más datos, más difícil de explicar |
| Embedding preentrenado más distancia | Distancia a los embeddings normales | Jetson o equipo de borde con GPU | Bueno con pocos datos de entrenamiento | Modelo más grande |
Un camino sensato es empezar con la línea base de energía por banda, demostrar que el sonido aporta información sobre tu máquina y, si hace falta, pasar después a un autoencoder. El tutorial de Isolation Forest para datos de sensores muestra en detalle el enfoque basado en características, y el mismo patrón se aplica a las características de audio.
Un escuchador mínimo de borde con salida MQTT
El siguiente script se ejecuta en una Raspberry Pi o en cualquier equipo Linux con micrófono. Graba clips de dos segundos, calcula las energías logarítmicas en bandas espaciadas según la escala mel, aprende una línea base durante los primeros minutos y después publica una puntuación de anomalía por cada clip.
pip install "paho-mqtt>=2.0" numpy sounddevice
# En Raspberry Pi OS puede que también necesites: sudo apt install libportaudio2
import json
import time
import uuid
import numpy as np
import paho.mqtt.client as mqtt
import sounddevice as sd
PREFIX = "connectmq/demo/snd-4be0/plant1/line2/fan3"
RATE, CLIP_S, BANDS = 16_000, 2.0, 32
LEARN_CLIPS = 60 # unos dos minutos de sonido normal
THRESHOLD = 4.0 # z absoluto medio en todas las bandas
def mel_edges(n_bands, fmin=50, fmax=7_800):
mel = lambda f: 2595 * np.log10(1 + f / 700)
inv = lambda m: 700 * (10 ** (m / 2595) - 1)
return inv(np.linspace(mel(fmin), mel(fmax), n_bands + 1))
EDGES = mel_edges(BANDS)
def band_features(clip):
spec = np.abs(np.fft.rfft(clip * np.hanning(len(clip)))) ** 2
freqs = np.fft.rfftfreq(len(clip), 1 / RATE)
feats = [spec[(freqs >= lo) & (freqs < hi)].sum() for lo, hi in zip(EDGES[:-1], EDGES[1:])]
return np.log10(np.array(feats) + 1e-10)
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2,
client_id=f"listener-{uuid.uuid4().hex[:8]}")
client.connect("broker.connectmq.com", 1883, keepalive=60)
client.loop_start()
history, mean, std, streak = [], None, None, 0
while True:
clip = sd.rec(int(RATE * CLIP_S), samplerate=RATE, channels=1, dtype="float32")
sd.wait()
feats = band_features(clip[:, 0])
rms_db = float(20 * np.log10(np.sqrt(np.mean(clip ** 2)) + 1e-9))
if len(history) < LEARN_CLIPS:
history.append(feats)
if len(history) == LEARN_CLIPS:
mean = np.mean(history, axis=0)
std = np.std(history, axis=0) + 1e-3
client.publish(f"{PREFIX}/audio/status",
json.dumps({"state": "monitoring", "bands": BANDS}),
qos=1, retain=True)
continue
z = np.abs((feats - mean) / std)
score = float(np.mean(z))
top_band = int(np.argmax(z))
streak = streak + 1 if score > THRESHOLD else 0
msg = {"ts": time.time(), "score": round(score, 2), "threshold": THRESHOLD,
"rmsDb": round(rms_db, 1),
"topBandHz": [round(EDGES[top_band]), round(EDGES[top_band + 1])],
"isAnomaly": streak >= 3, "model": "band-baseline-v1"}
client.publish(f"{PREFIX}/audio/score", json.dumps(msg), qos=0)
El mensaje incluye a propósito la banda de frecuencia que más se ha desviado. Un técnico que ve "anomalía, mayor cambio entre 2,1 y 2,4 kHz" tiene un punto de partida mucho mejor que otro que solo ve una luz roja.
Ejecútalo en una habitación tranquila, deja que aprenda durante dos minutos y luego reproduce un tono o da golpecitos en la mesa cerca del micrófono para ver cómo sube la puntuación:
mosquitto_sub -h broker.connectmq.com -p 1883 -i snd-watch-4be0 -t "connectmq/demo/snd-4be0/#" -v
Por qué publicar puntuaciones y no audio
Transmitir audio en bruto de cada máquina es caro, delicado para la privacidad (los micrófonos pueden captar conversaciones) e innecesario. Puntuar en el borde y publicar un mensaje JSON compacto cada pocos segundos mantiene mínimo el ancho de banda y deja el sonido en la planta.
Cuando se marca un clip, puede que aún quieras pruebas. Un buen término medio es almacenar localmente el clip marcado y publicar solo sus metadatos, o subir fragmentos cortos bajo petición mediante un topic de comandos, sin superar el límite de tamaño de mensaje del broker.
Pasar de la línea base al autoencoder
Si la línea base de energía por banda demuestra que el sonido aporta información pero no capta fallos más sutiles, el siguiente paso habitual es un pequeño autoencoder convolucional entrenado con espectrogramas log-mel de clips normales. Entrénalo en una estación de trabajo, conviértelo a TensorFlow Lite u ONNX y ejecútalo en el dispositivo de borde en lugar de la línea base. La parte MQTT no cambia en absoluto: el escuchador sigue publicando una puntuación, un umbral y la versión del modelo en el mismo topic. Los dashboards y las reglas de alerta siguen funcionando, y puedes comparar los dos modelos ejecutándolos en paralelo durante una semana, cada uno publicando en su propio topic de puntuación.
Lista de comprobación para el despliegue
- Monta el micrófono siempre igual. Mover el micrófono cambia la línea base; fíjalo y documenta su posición.
- Graba todos los modos normales. El ralentí, la media carga, la plena carga y el arranque suenan distinto; apréndelos todos o condiciona según el estado de la máquina.
- Usa el estado de la máquina como contexto. Suscríbete al topic de estado de la máquina y no puntúes durante los cambios de formato o la limpieza.
- Fija los umbrales a partir de datos normales reservados, no de los propios clips de entrenamiento.
- Exige persistencia antes de alertar.
- Protege la privacidad. Procesa el audio localmente y nunca publiques clips en bruto en topics compartidos o públicos.
- Vuelve a aprender tras el mantenimiento. Una correa o un rodamiento nuevos cambian legítimamente el sonido.
De la puntuación a la acción de mantenimiento
Las puntuaciones de anomalía cobran valor cuando se unen a otras señales. Una puntuación acústica en aumento junto con vibración y temperatura en aumento es una prueba sólida; un pico acústico aislado al pasar una carretilla no lo es. Esa fusión y el paso a estimar los tiempos de fallo se tratan en mantenimiento predictivo con machine learning, mientras que métodos de detección de anomalías IoT explica dónde debe ejecutarse cada detector. La guía de IA e IoT sitúa la monitorización acústica en el contexto más amplio de la IA en el borde.
Conectar los escuchadores a la planta
Cada escuchador es simplemente un cliente MQTT, así que añadir una máquina más significa desplegar un dispositivo más con su propio topic. Para experimentar con sonidos sintéticos, basta con el servidor MQTT público gratuito, pensado para pruebas y prototipos, no para datos de producción. Para máquinas reales, usa un broker MQTT en la nube privado con TLS en el puerto 8883 y credenciales por escuchador. ConnectMQ, como broker MQTT gestionado, muestra cada escuchador en la vista de dispositivos organizada por niveles ISA-95, te permite ver las puntuaciones en el explorador de topics en directo y puede generar alertas por umbral sobre el campo score sin código adicional.
Empieza a escuchar con ConnectMQ
Crea un broker de ConnectMQ en el plan gratuito Serverless en app.connectmq.com, sin tarjeta de crédito, introduce el host y las credenciales en el script del escuchador y observa cómo aparece en tiempo real la puntuación acústica de tu primera máquina.
Preguntas frecuentes
¿Qué micrófono debo usar para la detección de anomalías por audio?
Un micrófono MEMS digital o un micrófono USB decente basta para la mayoría de los fallos audibles. Para fugas de aire y daños incipientes en rodamientos, considera micrófonos y frecuencias de muestreo que capten frecuencias más altas.
¿Puede la detección de anomalías por audio ejecutarse en un microcontrolador?
Las líneas base sencillas de energía por banda y los modelos TinyML pequeños se ejecutan en microcontroladores capaces como el ESP32-S3. Los autoencoders sobre espectrogramas completos suelen necesitar una Raspberry Pi con acelerador o un dispositivo de clase Jetson.
¿Cómo gestiono un ruido de fondo intenso?
Coloca el micrófono cerca de la máquina, aprende la línea base en condiciones de fondo realistas y exige varios clips anómalos consecutivos antes de alertar. Los micrófonos direccionales también ayudan.
¿Es seguro enviar audio por MQTT?
Es preferible enviar puntuaciones y metadatos en lugar de audio. Si tienes que enviar clips, usa un broker privado con TLS y credenciales, nunca un área pública de pruebas.



