Assalamualaikum Wr.Wb
Selamat siang teman teman dan Prof DAI, izin kan saya memperkenalkan diri, saya Farhan Ubaidillah dengan Nomor Pokok Mahasiswa (NPM) 2406431580 dari Metode Numerik – 03. Disini saya ingin memberitahukan tentang update progres karya ilmiah saya
BAB III
METODOLOGI PENELITIAN
3.1 Spesifikasi Data
Data yang digunakan dalam analisis ini merupakan sinyal getaran (vibration time series) dari sistem propulsi kapal pada kondisi berbeban (loaded). Data diperoleh dari pengukuran menggunakan akselerometer yang ditempatkan pada lokasi propeller. Pemilihan lokasi propeller didasarkan pada pertimbangan bahwa area tersebut merupakan titik kritis dimana gaya eksitasi dari baling-baling dan pembebanan transversal dari sistem hidrolik paling dominan, sehingga sinyal getaran yang terekam memiliki kualitas terbaik untuk analisis lebih lanjut. Pengukuran dilakukan pada saat sistem beroperasi dengan kecepatan poros 60 rpm, yang merupakan salah satu dari lima variasi kecepatan yang diuji dalam penelitian eksperimental. Kondisi berbeban (loaded) dipilih karena pada kondisi ini respons getaran menunjukkan pertumbuhan amplitudo yang lebih besar dan transien yang lebih jelas dibandingkan kondisi tanpa beban (idling), sehingga lebih sesuai untuk mempelajari fenomena forced vibration with damping.
Tabel Spesifikasi Data
| Parameter | Nilai |
|---|---|
| Nama File | STD_051.csv |
| Jenis Data | Time Series Getaran |
| Jumlah Sampel | 2000 data |
| Interval Waktu (dt) | 0.005 s |
| Frekuensi Sampling | 200 Hz |
| Sensor | Accelerometer |
| Lokasi Pengukuran | Propeller / Tail Bearing |
| Kondisi Operasi | Loaded |
| Kecepatan Poros | 60 rpm |
| Variabel Utama | Time dan Acceleration |
3.2 Tools Analisis
Analisis data getaran pada tugas ini dilakukan menggunakan bahasa pemrograman Python dengan memanfaatkan berbagai pustaka yang mendukung komputasi numerik dan pemrosesan sinyal. Library NumPy digunakan untuk melakukan operasi numerik dan perhitungan statistik secara efisien, sementara Pandas berperan dalam membaca serta mengelola data dari file berformat CSV maupun Excel.
Untuk kebutuhan visualisasi, Matplotlib digunakan dalam menampilkan grafik time series dan spektrum FFT, sehingga pola sinyal dapat diamati dengan lebih jelas. Selain itu, SciPy dimanfaatkan untuk pemrosesan sinyal lanjutan, meliputi perhitungan FFT, deteksi puncak (find_peaks), penerapan filter Butterworth, transformasi Hilbert untuk analisis amplop, serta curve fitting eksponensial dalam estimasi parameter redaman.
Tabel Tools dan Library
| Library | Fungsi |
|---|---|
| NumPy | Operasi numerik dan statistik |
| Pandas | Membaca dan mengelola data |
| Matplotlib | Visualisasi grafik |
| SciPy Signal | FFT, filtering, Hilbert transform |
| SciPy Optimize | Curve fitting estimasi damping |
3.3 Alur Pengolahan Data
Pengolahan data sinyal getaran dalam analisis ini dilakukan melalui serangkaian langkah sistematis untuk mengubah data mentah (raw signal) menjadi informasi yang bermakna tentang karakteristik getaran sistem. Alur pengolahan data mencakup pra-pemrosesan, analisis domain waktu, analisis domain frekuensi, estimasi parameter redaman, hingga interpretasi hasil.
1) Load Data
Data getaran dimuat dari file STD_051.csv yang berisi dua kolom utama: time_s (waktu dalam detik) dan acceleration (nilai akselerasi dalam m/sยฒ). File ini memiliki 2000 baris data dengan interval waktu 0.005 detik. Selain itu, file dataset_51.xlsx dimuat untuk memperoleh parameter operasi seperti kecepatan poros (60 rpm), rasio redaman (0.045), konten harmonik (1X+3X), dan informasi lainnya.
Coding Python โ Load Data
import pandas as pd
import numpy as np
# Load vibration signal
df = pd.read_csv('STD_051.csv')
# Load operational dataset
meta = pd.read_excel('dataset_51.xlsx')
# Extract variables
time = df['time_s'].values
acc = df['acceleration'].values
# Display first rows
print(df.head())
print(meta.head())
2) Pra-Pemrosesan
Tahap pra-pemrosesan bertujuan untuk meningkatkan kualitas data dengan menghilangkan komponen yang tidak diinginkan sebelum dilakukan analisis lebih lanjut.
Salah satu langkah penting dalam tahap ini adalah penghilangan DC offset (DC removal), yaitu dengan menghitung nilai rata-rata dari sinyal mentah, kemudian mengurangkannya dari setiap titik data. Proses ini membuat sinyal berosilasi di sekitar garis nol, sehingga meningkatkan akurasi dalam analisis Fast Fourier Transform (FFT) maupun perhitungan parameter statistik.
Perhitungan parameter dasar dilakukan untuk memperoleh karakteristik utama dari data sinyal yang akan dianalisis. Parameter-parameter tersebut meliputi frekuensi sampling (fs), interval waktu (dt), dan jumlah sampel (N), yang semuanya dihitung langsung dari data yang tersedia.
Coding Python โ Preprocessing
# Remove DC offset
acc_mean = np.mean(acc)
acc_detrended = acc - acc_mean
# Sampling parameters
dt = time[1] - time[0]
fs = 1 / dt
N = len(acc_detrended)
print("Mean:", acc_mean)
print("Sampling Frequency:", fs)
print("Number of Samples:", N)
3) Analisis Domain Waktu
Analisis domain waktu dilakukan untuk memahami perilaku sinyal terhadap waktu serta mengidentifikasi karakteristik dinamisnya.
Visualisasi time series dilakukan dengan memplot sinyal terhadap waktu, sehingga pola getaran secara keseluruhan dapat diamati. Melalui plot ini, dapat diidentifikasi adanya transien awal serta dievaluasi kestabilan sinyal ketika telah mencapai kondisi steady-state.
Selain itu, dilakukan perhitungan parameter statistik untuk mengkuantifikasi karakteristik sinyal, antara lain:
Persamaan RMS
xRMSโ=N1โโi=1Nโxi2โโ
Persamaan Peak Value
xpeakโ=max(xiโ)
Persamaan Peak-to-Peak
xpโpโ=xmaxโโxminโ
Persamaan Crest Factor
Crest Factor=xRMSโxpeakโโ
Coding Python โ Time Domain Analysis
import matplotlib.pyplot as plt
# Statistical parameters
rms = np.sqrt(np.mean(acc_detrended**2))
peak = np.max(np.abs(acc_detrended))
p2p = np.max(acc_detrended) - np.min(acc_detrended)
crest_factor = peak / rms
# Plot time series
plt.figure(figsize=(10,4))
plt.plot(time, acc_detrended)
plt.xlabel('Time (s)')
plt.ylabel('Acceleration (m/sยฒ)')
plt.title('Time Series Vibration Signal')
plt.grid(True)
plt.show()
print("RMS:", rms)
print("Peak:", peak)
print("Peak-to-Peak:", p2p)
print("Crest Factor:", crest_factor)
4) Analisis Domain Frekuensi
Analisis domain frekuensi dilakukan menggunakan Fast Fourier Transform (FFT) untuk mengidentifikasi komponen frekuensi yang menyusun sinyal getaran.
Sebelum transformasi dilakukan, sinyal terlebih dahulu diberikan window function, yaitu Hanning window, untuk mengurangi fenomena spectral leakage yang umumnya muncul akibat pemotongan sinyal pada batas awal dan akhir data.
Coding Python โ FFT Analysis
from scipy.signal import windows
from scipy.fft import fft, fftfreq
# Apply Hanning window
window = windows.hann(N)
signal_windowed = acc_detrended * window
# FFT
fft_values = fft(signal_windowed)
freqs = fftfreq(N, dt)
# Positive frequencies
half = N // 2
freqs = freqs[:half]
magnitude = 2/N * np.abs(fft_values[:half])
# Plot FFT Spectrum
plt.figure(figsize=(10,4))
plt.semilogy(freqs, magnitude)
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')
plt.title('FFT Spectrum')
plt.grid(True)
plt.show()
5) Analisis Redaman (Damping)
Estimasi parameter redaman dilakukan untuk mengkuantifikasi kemampuan sistem dalam meredam getaran serta memahami karakteristik peluruhan respons dinamis.
Langkah awal adalah mengisolasi region transien, yaitu bagian awal sinyal (sekitar 2 detik pertama) yang mengandung respons peluruhan sebelum sistem mencapai kondisi steady-state.
Selanjutnya diterapkan bandpass filter Butterworth orde 4 untuk mengekstrak komponen frekuensi di sekitar 1X.
Persamaan Eksponensial Peluruhan
x(t)=A0โeโฮฒt
Persamaan Damping Ratio
ฮถ=ฯnโฮฒโ
Persamaan Frekuensi Natural Sudut
ฯnโ=2ฯfnโ
Coding Python โ Damping Analysis
from scipy.signal import butter, filtfilt, hilbert
from scipy.optimize import curve_fit
# Select transient region
mask = time <= 2
t_trans = time[mask]
sig_trans = acc_detrended[mask]
# Butterworth bandpass filter
lowcut = 0.8
highcut = 1.2
b, a = butter(4, [lowcut/(fs/2), highcut/(fs/2)], btype=’band’)
filtered = filtfilt(b, a, sig_trans)
# Envelope using Hilbert transform
analytic_signal = hilbert(filtered)
envelope = np.abs(analytic_signal)
# Exponential decay function
def exp_decay(t, A, beta):
return A * np.exp(-beta * t)
# Curve fitting
params, _ = curve_fit(exp_decay, t_trans, envelope)
A0, beta = params
# Damping ratio
fn = 1.0
omega_n = 2 * np.pi * fn
zeta = beta / omega_n
print(“Decay Constant:”, beta)
print(“Damping Ratio:”, zeta)
# Plot envelope fitting
plt.figure(figsize=(10,4))
plt.plot(t_trans, envelope, label=’Envelope’)
plt.plot(t_trans, exp_decay(t_trans, *params),
label=’Exponential Fit’)
plt.xlabel(‘Time (s)’)
plt.ylabel(‘Amplitude’)
plt.legend()
plt.grid(True)
plt.show()