İçeriğe geç
Bloga dön

Mühendisler İçin Python: Titreşim Sinyalini FFT ile Çözümlemek

NumPy ve SciPy ile bir ivme sinyalinden frekans spektrumu çıkarmak. Örnekleme, pencereleme ve FFT'nin mühendislik bağlamında pratik kullanımı.

KlaketSesi2 dk okuma
Mühendisler İçin Python: Titreşim Sinyalini FFT ile Çözümlemek

Titreşim verisiyle çalışan her mühendis er ya da geç bir zaman sinyalini frekans alanına taşımak ister. Python, bu iş için pahalı bir lisans gerektirmeyen, güçlü ve okunabilir bir ortam sunar. Bu yazıda NumPy ve SciPy ile bir ivme sinyalinin FFT'sini adım adım çıkarıyoruz.

Örnekleme ve Nyquist#

Her şey örnekleme frekansıyla başlar. Nyquist teoremi, ilgilendiğiniz en yüksek frekansın en az iki katı hızında örnekleme yapmanız gerektiğini söyler. Aksi halde aliasing oluşur ve yüksek frekanslı bileşenler spektrumda yanlış yerlere "katlanır".

Pratik öneri

Genellikle ilgi frekansının 2 katı değil, 2.56 katı veya daha fazlası kullanılır. Bu, anti-aliasing filtresine pay bırakır ve gerçek ölçüm zincirinde standart bir yaklaşımdır.

Örnek Sinyal Oluşturma#

İki sinüs bileşeni ve biraz gürültü içeren yapay bir sinyalle başlayalım:

import numpy as np
 
fs = 1000           # örnekleme frekansı [Hz]
t = np.arange(0, 1, 1 / fs)
 
# 50 Hz ve 120 Hz bileşenler + gürültü
signal = (
    1.0 * np.sin(2 * np.pi * 50 * t)
    + 0.5 * np.sin(2 * np.pi * 120 * t)
    + 0.2 * np.random.randn(len(t))
)

Pencereleme#

FFT, sinyalin periyodik olduğunu varsayar. Sonlu bir kayıt bu varsayımı bozar ve spektral sızıntıya yol açar. Bir pencere fonksiyonu (örneğin Hann) bu etkiyi azaltır:

from scipy.signal import windows
 
window = windows.hann(len(signal))
windowed = signal * window

FFT ve Spektrum#

Tek taraflı genlik spektrumunu hesaplayalım:

n = len(windowed)
spectrum = np.fft.rfft(windowed)
freqs = np.fft.rfftfreq(n, d=1 / fs)
 
# pencere kaybını telafi eden genlik ölçeklemesi
amplitude = 2 * np.abs(spectrum) / np.sum(window)

freqs ve amplitude dizilerini çizdiğinizde 50 Hz ve 120 Hz'de iki belirgin tepe görmelisiniz.

Ölçeklemeyi unutmayın

Genlik ölçeklemesi pencere tipine bağlıdır. Pencereyi değiştirirseniz normalizasyon katsayısını da güncellemeniz gerekir; aksi halde mutlak genlikler hatalı çıkar.

Özet#

Python ile titreşim sinyali analizi; örnekleme frekansını doğru seçmek, uygun bir pencere uygulamak ve FFT çıktısını doğru ölçeklemekten ibarettir. Bu temel iş akışı, modal testten makine durum izlemeye kadar pek çok uygulamanın çekirdeğini oluşturur. Bir sonraki yazıda aynı veriden PSD (güç spektral yoğunluğu) hesaplamayı ele alacağız.

İlgili Yazılar