IoT ve Yapay Zekâ

Makineler için Ses Tabanlı Anomali Tespiti: Arızaları Uçta Dinlemek

Makineler çoğu zaman arızalanmadan önce farklı ses çıkarır. Akustik anomali tespitinin nasıl çalıştığını, hangi modellerin uç donanıma uyduğunu ve ham ses akışı yerine kompakt anomali skorlarını MQTT ile nasıl yayınlayacağınızı öğrenin.

Bir motorun yanındaki mikrofonu, bir spektrogramı ve MQTT üzerinden yayınlanan anomali skorlarını gösteren ses tabanlı anomali tespiti çizimi
Bunu kendi MQTT broker’ınızda çalıştırınFree planla özel, yönetilen bir MQTT broker alın ve hazır kod örnekleriyle başlayın.
Ücretsiz deneyin Kod örnekleri Kart gerekmez

Ses tabanlı anomali tespiti; motorlardaki, pompalardaki, fanlardaki ve dişli kutularındaki sorunları arızaya dönüşmeden önce duymanızı sağlar. Bu kullanım senaryosu rehberi, akustik izlemenin nasıl çalıştığını, hangi modellerin uç donanımda rahatça çalıştığını ve kimsenin ham ses aktarmasına gerek kalmadan dashboard'ların ve bakım ekiplerinin net bir sinyal alması için anomali skorlarının MQTT ile nasıl yayınlanacağını açıklıyor.

Makineleri Neden Dinlemeli

Deneyimli teknisyenler makineleri kulakla teşhis eder: kuru bir rulmandan gelen ıslık, gevşek bir bağlantıdan gelen ritmik vuruntu, sızdıran bir vanadan gelen tıslama. Akustik izleme bu beceriyi otomatikleştirir ve günün her saatinde uygular.

Sesin diğer sensörlere göre pratik avantajları vardır:

  • Temassızdır. Bir mikrofonun dönen bir mile monte edilmesi veya bir kontrolöre kablolanması gerekmez; bu da mevcut tesislere uyarlamayı kolaylaştırır.
  • Geniş kapsama sağlar. Tek bir mikrofon küçük bir makine grubunu veya bütün bir konveyör bölümünü izleyebilir.
  • Zengin bilgi taşır. Frekanslar dönüş hızlarını, sürtünmeyi, kavitasyonu, hava kaçaklarını ve darbeleri ortaya çıkarır.
  • Donanımı ucuzdur. MEMS mikrofonlar ucuzdur ve dijital olanlar doğrudan mikrodenetleyicilere ve tek kartlı bilgisayarlara bağlanır.

Dezavantajı ise gürültüdür. Fabrikalar gürültülüdür, arka plan sesleri sürekli değişir ve komşu makineler her kayda karışır. Faydalı bir sistem "olağandan farklı" ile "forklift geçti"yi birbirinden ayırabilmelidir.

Ses Tabanlı Anomali Tespiti Nasıl Çalışır

Neredeyse tüm pratik sistemler aynı işlem hattını izler.

1. Kayıt

16 kHz veya daha yüksek örnekleme hızında kısa klipler (genellikle bir ila on saniye) kaydedin. Birçok makine arızası 8 kHz'in altında kendini gösterir; ancak hava kaçakları ve bazı rulman arızaları ultrasonik veya yüksek frekanslı içerik üretir, bu yüzden örnekleme hızını ve mikrofonu ilgilendiğiniz arızaya göre seçin.

2. Özellik Çıkarımı

Ham dalga formlarını karşılaştırmak zordur. Her klibi bir log-mel spektrogramına dönüştürün: frekans bantlarının insan kulağının perdeyi algıladığı şekilde aralıklandırıldığı ve enerjinin logaritmik ölçekte gösterildiği bir zaman-frekans görüntüsü. Daha basit alternatifler arasında bant enerjileri, spektral merkez ve RMS seviyesi bulunur.

3. Normali Öğrenme

Arızalar nadir olduğundan modeller yalnızca normal kayıtlarla eğitilir. Amaç belirli bir arızayı tanımak değil, yeni bir klibin modelin normal çalışma sırasında duyduğu her şeye ne kadar uzak olduğunu ölçmektir.

4. Puanlama ve Karar

Her klip bir anomali skoru alır. Ayrılmış normal kayıtların skor dağılımından belirlenen bir eşik, klibin olağandışı olup olmadığına karar verir. Süreklilik kuralları (art arda birkaç olağandışı klip) tek seferlik sesleri bastırır.

Uç İçin Model Seçenekleri

Yaklaşım Nasıl puanlar Donanım Güçlü yönleri Zayıf yönleri
Bant enerjisi referansı Bant başına ortalama ve varyanstan uzaklık Mikrodenetleyici veya Pi Çok küçük, açıklanabilir İnce örüntü değişimlerini kaçırır
Özellikler üzerinde Gauss karışımı Negatif log-olabilirlik Raspberry Pi sınıfı Birden fazla çalışma modunu ele alır Özelliklerin dikkatli seçilmesini gerektirir
Özellikler üzerinde Isolation Forest Yol uzunluğu Raspberry Pi sınıfı Çok değişkenli, hızlı eğitilir Özellik mühendisliği gerektirir
Evrişimli autoencoder Spektrogramlarda yeniden oluşturma hatası Hızlandırıcılı Pi, Jetson Karmaşık örüntüleri öğrenir Daha fazla veri, açıklaması daha zor
Önceden eğitilmiş gömme artı uzaklık Normal gömmelere uzaklık Jetson veya GPU'lu uç kutu Az eğitim verisiyle güçlü Daha büyük model

Mantıklı bir yol, bant enerjisi referansıyla başlamak, sesin makineniz için anlamlı sinyal taşıdığını kanıtlamak ve gerekirse ardından bir autoencoder'a geçmektir. Sensör verisi için Isolation Forest eğitimi özellik tabanlı yaklaşımı ayrıntılı olarak gösteriyor ve aynı kalıp ses özelliklerine de uygulanabilir.

MQTT Çıktılı Minimal Bir Uç Dinleyici

Aşağıdaki betik bir Raspberry Pi'de veya mikrofonlu herhangi bir Linux makinede çalışır. İki saniyelik klipler kaydeder, mel aralıklı bantlarda logaritmik enerjileri hesaplar, ilk dakikalarda bir referans öğrenir ve ardından her klip için bir anomali skoru yayınlar.

pip install "paho-mqtt>=2.0" numpy sounddevice
# On Raspberry Pi OS you may also need: 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          # yaklaşık iki dakikalık normal ses
THRESHOLD = 4.0           # bantlar genelinde ortalama mutlak z


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)

Mesaj, kasıtlı olarak en çok sapan frekans bandını taşır. "Anomali, en güçlü değişim 2,1 ila 2,4 kHz" gören bir teknisyen, yalnızca kırmızı bir ışık gören birinden çok daha iyi bir başlangıç noktasına sahiptir.

Betiği sessiz bir odada çalıştırın, iki dakika öğrenmesine izin verin, ardından bir ton çalın veya mikrofonun yakınında masaya vurun ve skorun yükselişini izleyin:

mosquitto_sub -h broker.connectmq.com -p 1883 -i snd-watch-4be0 -t "connectmq/demo/snd-4be0/#" -v

Neden Ses Değil Skor Yayınlanmalı

Her makineden ham ses aktarmak maliyetlidir, gizlilik açısından hassastır (mikrofonlar konuşmaları kaydedebilir) ve gereksizdir. Uçta puanlama yapıp birkaç saniyede bir kompakt bir JSON mesajı yayınlamak, bant genişliğini çok düşük tutar ve sesi sahada bırakır.

Bir klip işaretlendiğinde yine de kanıt isteyebilirsiniz. İyi bir orta yol, işaretlenen klibi yerelde saklayıp yalnızca meta verisini yayınlamak ya da broker'ın mesaj boyutu sınırının altında kalarak bir komut topic'i üzerinden talep üzerine kısa kesitler yüklemektir.

Referanstan Autoencoder'a Geçmek

Bant enerjisi referansı sesin sinyal taşıdığını kanıtlar ama daha ince arızaları kaçırırsa, olağan sonraki adım normal kliplerin log-mel spektrogramları üzerinde eğitilmiş küçük bir evrişimli autoencoder'dır. Onu bir iş istasyonunda eğitin, TensorFlow Lite veya ONNX formatına dönüştürün ve uç cihazda referansın yerine çalıştırın. MQTT tarafı hiç değişmez: dinleyici aynı topic'te yine bir skor, bir eşik ve model sürümünü yayınlar. Dashboard'lar ve uyarı kuralları çalışmaya devam eder; iki modeli, her biri kendi skor topic'ine yayın yaparak bir hafta boyunca yan yana çalıştırıp karşılaştırabilirsiniz.

Kurulum Kontrol Listesi

  1. Tutarlı şekilde monte edin. Mikrofonu hareket ettirmek referansı değiştirir; onu yerine sabitleyin ve konumunu belgeleyin.
  2. Tüm normal modları kaydedin. Rölanti, yarım yük, tam yük ve devreye alma farklı ses çıkarır; hepsini öğrenin ya da makine durumuna göre koşullandırın.
  3. Makine durumunu bağlam olarak kullanın. Makinenin durum topic'ine abone olun ve ürün değişimi veya temizlik sırasında puanlamayı atlayın.
  4. Eşikleri eğitim kliplerinin kendisinden değil, ayrılmış normal verilerden belirleyin.
  5. Uyarı vermeden önce süreklilik arayın.
  6. Gizliliği koruyun. Sesi yerelde işleyin ve ham klipleri asla paylaşılan veya genel topic'lere yayınlamayın.
  7. Bakımdan sonra yeniden öğretin. Yeni bir kayış veya rulman, sesi meşru şekilde değiştirir.

Skordan Bakım Aksiyonuna

Anomali skorları diğer sinyallerle birleştiğinde değer kazanır. Artan titreşim ve sıcaklıkla birlikte yükselen bir akustik skor güçlü bir kanıttır; bir forklift geçişi sırasındaki tek başına bir akustik sıçrama ise değildir. Bu füzyon ve arıza zamanlarını tahmin etme adımı makine öğrenmesi ile kestirimci bakım yazısında ele alınırken, IoT anomali tespiti yöntemleri her dedektörün nerede çalışması gerektiğini açıklıyor. Yapay zeka ve IoT rehberi ise akustik izlemeyi daha geniş uç yapay zeka manzarası içine yerleştiriyor.

Dinleyicileri Fabrikaya Bağlamak

Her dinleyici yalnızca bir MQTT client'ıdır; bu yüzden bir makine daha eklemek, kendi topic'i olan bir cihaz daha devreye almak demektir. Denemeler için ücretsiz genel MQTT broker alanı sentetik seslerle uygundur. Gerçek makineler için 8883 portunda TLS ve dinleyici başına kimlik bilgileriyle özel bir bulut MQTT broker kullanın. ConnectMQ her dinleyiciyi ISA-95 seviyelerine göre düzenlenmiş cihaz görünümünde gösterir, skorları canlı topic gezgininde izlemenize olanak tanır ve ek kod yazmadan score alanı üzerinde eşik tabanlı uyarılar üretebilir.

ConnectMQ ile Dinlemeye Başlayın

app.connectmq.com adresinde ücretsiz Serverless planında kredi kartı gerektirmeden bir ConnectMQ broker'ı oluşturun, host ve kimlik bilgilerini dinleyici betiğine yerleştirin ve ilk makinenizin akustik skorunun gerçek zamanlı olarak görünmesini izleyin.

Sık Sorulan Sorular

Ses tabanlı anomali tespiti için hangi mikrofonu kullanmalıyım?

Duyulabilir arızaların çoğu için dijital bir MEMS mikrofon veya iyi bir USB mikrofon yeterlidir. Hava kaçakları ve erken rulman hasarı için daha yüksek frekansları yakalayan mikrofonları ve örnekleme hızlarını değerlendirin.

Ses tabanlı anomali tespiti bir mikrodenetleyicide çalışabilir mi?

Basit bant enerjisi referansları ve küçük TinyML modelleri, ESP32-S3 gibi yetenekli mikrodenetleyicilerde çalışır. Tam spektrogramlar üzerindeki autoencoder'lar ise genellikle hızlandırıcılı bir Raspberry Pi veya Jetson sınıfı bir cihaz gerektirir.

Yüksek arka plan gürültüsünü nasıl ele alırım?

Mikrofonu makineye yakın yerleştirin, referansı gerçekçi arka plan koşullarında öğretin ve uyarı vermeden önce art arda birkaç anormal klip arayın. Yönlü mikrofonlar da yardımcı olur.

Sesi MQTT üzerinden göndermek güvenli mi?

Ses yerine skorları ve meta verileri göndermeyi tercih edin. Klip göndermeniz gerekiyorsa asla genel bir test alanı değil, TLS ve kimlik bilgileriyle korunan özel bir broker kullanın.

İlgili yazılar

Tüm yazılar →

Özel MQTT broker’ınız birkaç tık uzağınızda

Hesabınızı oluşturun, broker kimlik bilgilerinizi alın ve ilk cihazınızı bağlayın — kurulacak, yamalanacak ya da ölçeklendirilecek sunucu yok.