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ı.
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 * windowFFT 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.