Titreşim Analizi ile Hata Öngörüsü

İvme ölçerden aldığım ivme değişimi değerlerini bir mekanik sistemin “titreşimi” olarak kabul ediyorum. Çalışmamız çok basit bir iki kabule dayanıyor:
** İvme ölçerin ölçtüğü ivme sinyali, cihazın üzerine tam olarak sabitlendiği sistemin titreşimi ile bire bir bir sinyal üretir.
** Bu sinyalin bir (ya da iki) eksendeki ölçümlerinin belli bir frekans aralığındaki değerleri bana belli bir mekanik durum hakkında bilgi verir. Çünkü toplam titreşim sinyali sisteme etki eden hareket bileşenlerinin süperpozisyonudur. Dönen bir motoru sallanan bir salıncağa bindirirsem iki ivmelenmenin kompozisyonunu okurum.
** İvme ölçerin ölçtüğü genlik potansiyel olarak “istenmeyen” durumun şiddetini belirtirken frekans spektrumu durumun kimliği hakkında bilgi içeriri. Belli bir frekans aralığındaki bileşenler belli bir değerin üstüne çıktığında o mekanik sistemde “normal olmayan” ya da “bozulmuş” bir hareket olduğu sonucunu çıkarabilirim.
**Bu frekans aralığı ve hata için kabul edeceğim eşik her sistem için farklı olacaktır, o yüzden bunları ayarlanabilir yapmam gerekebilir.

Bu durumda, elimde iki şey olması gerekiyor:
1) Belli bir hızda sürekli olarak okuyabildiğim bir ivme ölçer…
2) Ondan aldığım sinyallerin frekans analizini yapabilecek bir hesaplayıcı

İşe PC üzerinde başlıyorum. Önce, bir sinyalin frekans bileşenlerini birbirlerine göre nasıl kıyaslarım sorusunu ele alıyorum. Bu, elbette Fourier analizi yapmam demek.

Elimdeki bir sinyal dizisinin FFT’sini almak için bir program hazırladım. Ama önce bu işlerin nasıl olduğuyla ilgili birkaç deneme yapmak istiyorum.

Deneme amaçlı olarak 3 bileşenli bir sinyal üretiyorum:

fx[i]:= DC + (A * sin(2*pi*i*f1/k) + (B * sin(2*pi*i*f2/k)) );

Buradaki k, benim örnekleme frekansım oluyor. Zaman domeninde sinyali çizdiğimde ekranın kaç saniyelik örnekleme içerdiğini bu oran belirliyor (çünkü ben sample’ları indeksleriyle sayabiliyorum, bağımsız değişkenim zaman değil).

Bu fonksiyonu 4000 noktalı olarak üretiyorum. (Gerçekte 16 bitlik tam sayılarla ve bundan daha uzun sinyallerle uğraşacağım).

f1 ve f2, sinyalin içerdiği iki sinüsoidalin frekansını gösteriyor.. DC, A ve B bileşenlerin genliklerini belirtiyor. DC bir offset her zaman karşılaşacağım bir durum çünkü sistemim yeryüzüne yakın bir noktada çalıştığı sürece mutlaka 1g’lik bir yerçekimi ivmesine maruz olacak..

Örnek değerler:

k = 400;
DC = 1;
A = 10;
B = 4;
f1 = 25;
f2 = 50;

Bu değerler için sinyal şöyle bir şey oluyor:

sine_synth_signal

Bu sinyalin 512 noktalı FFT’sini alırsak ve dikdörtgen (uniform) ağırlıklandırma penceresi uygularsak şöyle bir genlik spektrumu görüyoruz:

sine_synth_freq_spec

  1. bileşen DC component
  2. bileşen 25 Hz ‘e karşılık gelen sinüs.
  3. bileşen de 50 Hz olan sinüs..

Benim örnekleme frekansım 400Hz olduğu için, sinyalin spektrum genişliği 200Hz oluyor.
BW = fs / 2;

Spektrum çözünürlüğü de;
H = BW / (spect_size / 2)
oluyor.

Bant genişliğim 200Hz, spektrum çözünürlüğüm de 200/256 oluyor. Yani spektrum penceremdeki her bir çubuk 0,781Hz’lik bir harmoniği gösteriyor.

Yukarıdaki örnekte 200’ü tam sayıya bölen frekanslar seçmiştim. Şimdi öyle olmayan bileşenler içeren bir sinyal üretelim:

sine_synth_signal_2

sine_synth_freq_spec_2

Artık harmonikler, gerçekte bir tane saf sinüsten oluşsalar da burada birden çok komponent olarak gözüküyorlar. 
Sonrası FFT spektrum boyu, sinyal boyu ve pencereleme fonksiyonu ile ilgili bir tercih olacak.
Bizim için genliklerin doğru gösterilmesi frekansların doğru gösteriminden daha önemlidir. Şu anda dikdörtgen pencere fena gözükmüyor diyebiliriz.

Genel olarak ihtiyacımız olan şeyler şunlar;
Bant genişliği sınırlanmış sürekli bir sensör verisi kaydı.
Hatadan kaynaklanan frekans bileşenini biliyor olmamız.
Bu bileşenin değerine göre hata ya da sağlıklı durumuna karar verebilmemiz için güvenilir bir eşik değeri

Düşüncelerinizi yazın...

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.