Compare commits

...

13 Commits

Author SHA1 Message Date
Rifqi D. Panuluh
65ffd1a158 fix: Convert PNG files to LFS pointers 2025-10-13 05:43:00 +00:00
Rifqi D. Panuluh
389237325d fix(latex): Correct typo in the reference to 1D CNN in the literature review section 2025-09-29 20:48:15 +00:00
Rifqi D. Panuluh
9e246e1d18 feat(latex): add new literature review about SVM research on SHM 2025-09-29 20:43:31 +00:00
Rifqi D. Panuluh
9412f0f53f fix(latex): Fix the steps flow to follow common practice and reformat writing style 2025-09-06 04:28:57 +00:00
Rifqi D. Panuluh
d844fb8f66 fix(latex): Update damaged/undamaged figure references and captions for clarity in methodology section and optimize figures with guetzli 2025-09-06 04:26:01 +00:00
Rifqi D. Panuluh
b581b3c755 refactor(latex): Refactor chapter 3 to remove section headers from data analysis and materials files and optimize figures with guetzli 2025-09-06 04:23:31 +00:00
Rifqi D. Panuluh
9fc5da03c1 feat(gitattributes): Add LFS support for JPG, JPEG, and PDF files 2025-09-05 11:01:23 +00:00
Rifqi D. Panuluh
ebb2c0d686 refactor(latex): Refactor chapter 3 2025-09-05 10:57:00 +00:00
Rifqi D. Panuluh
c2f48694c9 Merge branch 'dev' of https://github.com/nuluh/thesis into dev 2025-08-30 00:24:05 +00:00
nuluh
f2d427f0e8 feat(gitattributes): Add LFS filters for SVG and PNG files 2025-08-29 10:49:18 +07:00
nuluh
cf4bdd43cd feat(notebooks): Enhance STFT preview functionality and improve plotting
- Updated `preview_stft` function to accept both DataFrame and list of DataFrames.
- Added support for multiple subplots when a list of DataFrames is provided.
- Improved color mapping and axis labeling in plots.
- Adjusted figure saving options for better output formats.
- Refactored code to reduce redundancy in plotting logic for Sensor A and Sensor B.
- Added predictions using SVM models for processed data.
2025-08-29 10:48:49 +07:00
Rifqi D. Panuluh
7ee6231017 Merge pull request #107 from nuluh/exp/74-exp-cross-dataset-validation
Exp/74 exp cross dataset validation
2025-08-28 12:09:16 +07:00
Rifqi D. Panuluh
18edaaa7c9 refactor(latex): refactor introduction and results chapters to localization directory 2025-08-23 01:55:23 +00:00
18 changed files with 430 additions and 149 deletions

5
.gitattributes vendored
View File

@@ -1 +1,6 @@
*.ipynb filter=nbstripout
*.svg filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text

View File

@@ -402,7 +402,14 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Preview Plot"
"##### Preview Plot"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###### Function plot"
]
},
{
@@ -411,7 +418,8 @@
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt"
"import matplotlib.pyplot as plt\n",
"from typing import Union"
]
},
{
@@ -420,7 +428,7 @@
"metadata": {},
"outputs": [],
"source": [
"def preview_stft(data: pd.DataFrame, x_num_ticks: int = 6, y_num_ticks: int = 5):\n",
"def preview_stft(data: Union[pd.DataFrame, list[pd.DataFrame]], x_num_ticks: int = 6, y_num_ticks: int = 5, cols: int=3):\n",
" \"\"\"\n",
" Preview the Short-Time Fourier Transform (STFT) of the given data.\n",
"\n",
@@ -430,15 +438,54 @@
" x_num_ticks (int): Number of ticks on the x-axis (time frames). Defaults to 6.\n",
" y_num_ticks (int): Number of ticks on the y-axis (frequency bins). Defaults to 5.\n",
" \"\"\"\n",
" plt.figure(dpi=300) # Set figure size and DPI\n",
" plt.pcolormesh(data.transpose(), cmap='jet', vmax=0.03, vmin=0.0)\n",
" # plt.title('STFT Preview')\n",
" plt.colorbar(label='Magnitude')\n",
" plt.xlabel('Segmen Waktu')\n",
" plt.ylabel('Sampel Frekuensi (Hz)')\n",
" plt.xticks(np.linspace(0, len(data)-1, x_num_ticks)) # Set x-ticks at regular intervals\n",
" plt.yticks(np.linspace(0, len(data.columns)-1, y_num_ticks)) # Set y-ticks at regular intervals\n",
" plt.show()"
" if type(data) == pd.DataFrame:\n",
" plt.figure(dpi=300) # Set figure size and DPI\n",
" plt.pcolormesh(data.transpose(), cmap='jet', vmax=0.03, vmin=0.0, rasterized=True)\n",
" # plt.title('STFT Preview')\n",
" plt.colorbar(label='Magnitude ($m/s^2$)')\n",
" plt.xlabel('Segmen Waktu')\n",
" plt.ylabel('Sampel Frekuensi (Hz)')\n",
" plt.xticks(np.linspace(0, len(data)-1, x_num_ticks)) # Set x-ticks at regular intervals\n",
" plt.yticks(np.linspace(0, len(data.columns)-1, y_num_ticks)) # Set y-ticks at regular intervals\n",
" plt.savefig(\"output_single.svg\", format=\"svg\", dpi=100)\n",
" plt.show()\n",
"\n",
" elif type(data) == list and len(data) > 1:\n",
" # Create a figure and subplots\n",
" fig, axes = plt.subplots(len(data)//cols, cols, figsize=(15, 8), sharex=True, sharey=True)\n",
"\n",
" # Flatten the axes array for easier iteration\n",
" axes = axes.flatten()\n",
"\n",
" # Loop through each subplot and plot the data\n",
" for i in range(len(data)):\n",
" pcm = axes[i].pcolormesh(data[i].transpose(), cmap='jet', vmax=0.03, vmin=0.0, rasterized=True)\n",
" axes[i].set_title(f'd_{i+1}', fontsize=12)\n",
" axes[i].set_xticks(np.linspace(0, len(data[i])-1, 6)) # Set x-ticks at regular intervals\n",
" axes[i].set_yticks(np.linspace(0, len(data[i].columns)-1, 9)) # Set y-ticks at regular intervals\n",
"\n",
" # Add a single color bar for all subplots\n",
" # Use the first `pcolormesh` object (or any valid one) for the color bar\n",
" cbar = fig.colorbar(pcm, ax=axes, orientation='vertical')\n",
" cbar.set_label('Magnitude ($m/s^2$)', fontsize=12)\n",
"\n",
" # Set shared labels\n",
" fig.text(0.5, 0.04, 'Segmen Waktu', ha='center', fontsize=12)\n",
" fig.text(0.04, 0.5, 'Sampel Frekuensi (Hz)', va='center', rotation='vertical', fontsize=12)\n",
" # fig.suptitle('STFT of Sensor A Damage Case (d1--d6) Dataset A', fontsize=16)\n",
"\n",
" # Adjust layout\n",
" # plt.tight_layout(rect=[0.05, 0.05, 1, 1]) # Leave space for shared labels\n",
" plt.subplots_adjust(left=0.1, right=0.75, top=0.9, bottom=0.1, wspace=0.2, hspace=0.2)\n",
" plt.savefig(\"output_multiple.svg\", format=\"svg\", dpi=80)\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###### Sensor A"
]
},
{
@@ -449,7 +496,14 @@
"source": [
"# colormesh give title x is frequency and y is time and rotate/transpose the data\n",
"# Plotting the STFT Data\n",
"preview_stft(ready_data1a[0]) # Preview for Sensor 1"
"preview_stft(ready_data1a[0], y_num_ticks=9) # Preview for Sensor 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###### Sensor B"
]
},
{
@@ -458,11 +512,7 @@
"metadata": {},
"outputs": [],
"source": [
"plt.figure(dpi=300) # Set figure size and DPI\n",
"plt.pcolormesh(ready_data2a[0].transpose(), cmap='jet', vmax=0.03, vmin=0.0)\n",
"plt.title('STFT of Sensor B Dataset A Label 0 Undamaged')\n",
"plt.savefig(\"stft-sensor-b-dataset-a-undamaged.png\", dpi=300)\n",
"plt.show()"
"preview_stft(ready_data2a[0], y_num_ticks=9) # Preview for Sensor 2"
]
},
{
@@ -483,7 +533,14 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Preview Plot"
"##### Preview Plot"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###### Sensor A"
]
},
{
@@ -492,33 +549,14 @@
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"# Create a figure and subplots\n",
"fig, axes = plt.subplots(2, 3, figsize=(15, 8), sharex=True, sharey=True)\n",
"\n",
"# Flatten the axes array for easier iteration\n",
"axes = axes.flatten()\n",
"\n",
"# Loop through each subplot and plot the data\n",
"for i in range(6):\n",
" pcm = axes[i].pcolormesh(ready_data1a[i+1].transpose(), cmap='jet', vmax=0.03, vmin=0.0)\n",
" axes[i].set_title(f'Label {i+1}', fontsize=12)\n",
"\n",
"# Add a single color bar for all subplots\n",
"# Use the first `pcolormesh` object (or any valid one) for the color bar\n",
"cbar = fig.colorbar(pcm, ax=axes, orientation='vertical')\n",
"# cbar.set_label('Magnitude')\n",
"\n",
"# Set shared labels\n",
"fig.text(0.5, 0.04, 'Time Frames', ha='center', fontsize=12)\n",
"fig.text(0.04, 0.5, 'Frequency [Hz]', va='center', rotation='vertical', fontsize=12)\n",
"fig.suptitle('STFT of Sensor A Damage Case (d1--d6) Dataset A', fontsize=16)\n",
"\n",
"# Adjust layout\n",
"# plt.tight_layout(rect=[0.05, 0.05, 1, 1]) # Leave space for shared labels\n",
"plt.subplots_adjust(left=0.1, right=0.75, top=0.9, bottom=0.1, wspace=0.2, hspace=0.2)\n",
"\n",
"plt.show()"
"preview_stft(ready_data1a[1:], cols=3, y_num_ticks=9) # Preview for Sensor 1 Damage Cases (d1--d6)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"###### Sensor B"
]
},
{
@@ -527,33 +565,7 @@
"metadata": {},
"outputs": [],
"source": [
"from cmcrameri import cm\n",
"# Create a figure and subplots\n",
"fig, axes = plt.subplots(2, 3, figsize=(15, 8), sharex=True, sharey=True)\n",
"\n",
"# Flatten the axes array for easier iteration\n",
"axes = axes.flatten()\n",
"\n",
"# Loop through each subplot and plot the data\n",
"for i in range(6):\n",
" pcm = axes[i].pcolormesh(ready_data2a[i+1].transpose(), cmap='jet', vmax=0.03, vmin=0.0)\n",
" axes[i].set_title(f'Label {i+1}', fontsize=12)\n",
"\n",
"# Add a single color bar for all subplots\n",
"# Use the first `pcolormesh` object (or any valid one) for the color bar\n",
"cbar = fig.colorbar(pcm, ax=axes, orientation='vertical')\n",
"# cbar.set_label('Magnitude')\n",
"\n",
"# Set shared labels\n",
"fig.text(0.5, 0.04, 'Time Frames', ha='center', fontsize=12)\n",
"fig.text(0.04, 0.5, 'Frequency [Hz]', va='center', rotation='vertical', fontsize=12)\n",
"fig.suptitle('STFT of Sensor B Damage Case (d1--d6) Dataset A', fontsize=16)\n",
"\n",
"# Adjust layout\n",
"# plt.tight_layout(rect=[0.05, 0.05, 1, 1]) # Leave space for shared labels\n",
"plt.subplots_adjust(left=0.1, right=0.75, top=0.9, bottom=0.1, wspace=0.2, hspace=0.2)\n",
"\n",
"plt.show()"
"preview_stft(ready_data2a[1:], cols=3, y_num_ticks=9) # Preview for Sensor 1 Damage Cases (d1--d6)"
]
},
{
@@ -1072,8 +1084,57 @@
"window = 1024\n",
"hop = 512\n",
"\n",
"stft1 = stft(df1.values.flatten(), window=hann(window), nperseg=window, noverlap=hop, fs=window)\n",
"stft2 = stft(df2.values.flatten(), window=hann(window), nperseg=window, noverlap=hop, fs=window)\n"
"_, _, stft1 = stft(df1.values.flatten(), window=hann(window), nperseg=window, noverlap=hop, fs=window)\n",
"_, _, stft2 = stft(df2.values.flatten(), window=hann(window), nperseg=window, noverlap=hop, fs=window)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"a = pd.DataFrame(np.abs(stft1.T), columns=[f\"Freq_{freq:.2f}\" for freq in np.linspace(0, window/2, stft1.shape[1])]).rename(columns={a.columns[0]: \"00\"})\n",
"b = pd.DataFrame(np.abs(stft2.T), columns=[f\"Freq_{freq:.2f}\" for freq in np.linspace(0, window/2, stft2.shape[1])]).rename(columns={b.columns[0]: \"00\"})"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"y = [0]*len(a)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from joblib import load\n",
"\n",
"svm_model_a = load('D:/thesis/models/sensor1/SVM with StandardScaler and PCA.joblib')\n",
"svm_model_b = load('D:/thesis/models/sensor2/SVM with StandardScaler and PCA.joblib')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"y_pred_svm = svm_model_b.predict(b)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"y_pred_svm"
]
}
],

View File

@@ -14,6 +14,24 @@
file = {C:\Users\damar\Zotero\storage\5WG6DL7B\Abdeljaber et al. - 2017 - Real-time vibration-based structural damage detect.pdf}
}
@article{gui2017,
title = {Data-Driven Support Vector Machine with Optimization Techniques for Structural Health Monitoring and Damage Detection},
author = {Gui, Guoqing and Pan, Hong and Lin, Zhibin and Li, Yonghua and Yuan, Zhijun},
date = {2017-02-01},
journaltitle = {KSCE Journal of Civil Engineering},
shortjournal = {KSCE Journal of Civil Engineering},
volume = {21},
number = {2},
pages = {523--534},
issn = {1226-7988},
doi = {10.1007/s12205-017-1518-5},
url = {https://www.sciencedirect.com/science/article/pii/S1226798824047913},
urldate = {2025-09-29},
abstract = {Rapid detecting damages/defeats in the large-scale civil engineering structures, assessing their conditions and timely decision making are crucial to ensure their health and ultimately enhance the level of public safety. Advanced sensor network techniques recently allow collecting large amounts of data for structural health monitoring and damage detection, while how to effectively interpret these complex sensor data to technical information posts many challenges. This paper presents three optimization-algorithm based support vector machines for damage detection. The optimization algorithms, including grid-search, partial swarm optimization and genetic algorithm, are used to optimize the penalty parameters and Gaussian kernel function parameters. Two types of feature extraction methods in terms of time-series data are selected to capture effective damage characteristics. A benchmark experimental data with the 17 different scenarios in the literature were used for verifying the proposed data-driven methods. Numerical results revealed that all three optimized machine learning methods exhibited significantly improvement in sensitivity, accuracy and effectiveness over conventional methods. The genetic algorithm based SVM had a better prediction than other methods. Two different feature methods used in this study also demonstrated the appropriate features are crucial to improve the sensitivity in detecting damage and assessing structural health conditions. The findings of this study are expected to help engineers to process big data and effectively detect the damage/defects, and thus enable them to make timely decision for supporting civil infrastructure management practices.},
keywords = {data-driven modeling,optimization,structural health monitoring and damage detection,support vector machine learning},
file = {C\:\\Users\\damar\\Zotero\\storage\\V8PP7XRS\\Gui et al. - 2017 - Data-driven support vector machine with optimizati.pdf;C\:\\Users\\damar\\Zotero\\storage\\KMM2Q6NT\\S1226798824047913.html}
}
@article{zhao2019,
title = {Bolt Loosening Angle Detection Technology Using Deep Learning},
author = {Zhao, Xuefeng and Zhang, Yang and Wang, Niannian},

View File

@@ -1,13 +0,0 @@
\chapter{Hasil Penelitian dan Pembahasan}
\begin{table}[ht]
\centering
\begin{tabular}{c|c}
& \\
&
\end{tabular}
\caption{Caption}
\label{tab:my_label}
\end{table}
\section{}
\section{}
\section{}

View File

@@ -1,18 +1,16 @@
\chapter{Tinjauan Pustaka dan Landasan Teori}
\section{Tinjauan Pustaka}
% \input{chapters/id/02_literature_review/index}
Metode monitor kesehatan struktur (SHM) tradisional sering kali mengandalkan fitur yang dibuat secara manual dan pengklasifikasi (\textit{classifier}) yang diatur secara manual, yang menimbulkan tantangan dalam hal generalisasi, keandalan, dan efisiensi komputasi. Seperti yang disorot oleh \textcite{abdeljaber2017}, pendekatan-pendekatan ini umumnya memerlukan proses \textit{trial-and-error} dalam pemilihan fitur dan pengklasifikasi yang tidak hanya mengurangi ketangguhan metode tersebut di berbagai jenis struktur, tetapi juga menghambat penerapannya dalam aplikasi \textit{real-time} karena beban komputasi pada fase ekstraksi fitur.
\textcite{abdeljaber2017} memperkenalkan pendekatan deteksi kerusakan struktur berbasis CNN yang divalidasi melalui \textit{large-scale grandstand simulator} di Qatar University. Struktur tersebut dirancang untuk mereplikasi stadion modern, dilengkapi dengan 30 akselerometer, dan dikenai kerusakan terkontrol melalui pelonggaran baut sambungan antara balok dan gelagar. Data percepatan yang dikumpulkan di bawah eksitasi \textit{band-limited white noise} dan disampel pada 1024 Hz, kemudian dibagi menjadi bingkai berukuran 128 sampel untuk melatih 1-D CNN yang dilokalkan—satu untuk setiap sambungan (\textit{joint})—menciptakan sistem deteksi terdesentralisasi. Dalam dua fase (skenario) eksperimen, yang melibatkan pemantauan sebagian dan seluruh struktur, metode ini menunjukkan akurasi tinggi dalam pelokalisasian kerusakan, dengan kesalahan klasifikasi saat pelatihan hanya sebesar 0.54\%. Meskipun performa tetap andal bahkan dalam skenario kerusakan ganda, beberapa salah klasifikasi terjadi pada kasus kerusakan yang simetris atau berdekatan. Secara keseluruhan, metode yang diusulkan ini menawarkan solusi yang sangat efisien dan akurat untuk aplikasi SHM secara \textit{real-time}.
\textcite{abdeljaber2017} memperkenalkan pendekatan deteksi kerusakan struktur berbasis \gls{cnn} yang divalidasi melalui \textit{large-scale grandstand simulator} di Qatar University. Struktur tersebut dirancang untuk mereplikasi stadion modern, dilengkapi dengan 30 akselerometer, dan dikenai kerusakan terkontrol melalui pelonggaran baut sambungan antara balok dan gelagar. Data percepatan yang dikumpulkan di bawah eksitasi \textit{band-limited white noise} dan disampel pada 1024 Hz, kemudian dibagi menjadi bingkai berukuran 128 sampel untuk melatih \gls{1d-cnn} yang dilokalkan—satu untuk setiap sambungan (\textit{joint})—menciptakan sistem deteksi terdesentralisasi. Dalam dua fase (skenario) eksperimen, yang melibatkan pemantauan sebagian dan seluruh struktur, metode ini menunjukkan akurasi tinggi dalam pelokalisasian kerusakan, dengan kesalahan klasifikasi saat pelatihan hanya sebesar 0.54\%. Meskipun performa tetap andal bahkan dalam skenario kerusakan ganda, beberapa salah klasifikasi terjadi pada kasus kerusakan yang simetris atau berdekatan. Secara keseluruhan, metode yang diusulkan ini menawarkan solusi yang sangat efisien dan akurat untuk aplikasi SHM secara \textit{real-time}.
\textcite{eraliev2022} memperkenalkan teknik baru untuk mendeteksi dan mengidentifikasi tahap awal kelonggaran pada sambungan baut ganda menggunakan algoritma pembelajaran mesin. Studi ini difokuskan pada sebuah motor yang dikencangkan dengan empat baut dan dioperasikan dalam tiga kondisi putaran berbeda (800 rpm, 1000 rpm, dan 1200 rpm) guna mengumpulkan data getaran yang cukup untuk dianalisis. Studi ini menyoroti keterbatasan metode inspeksi tradisional, seperti inspeksi visual dan teknik pukulan palu, yang dinilai memakan waktu dan rentan terhadap gangguan kebisingan lingkungan \parencite{j.h.park2015, kong2018}.
Untuk meningkatkan akurasi deteksi, \textcite{eraliev2022} menggunakan transformasi Fourier waktu-singkat (STFT) sebagai metode ekstraksi fitur, yang menghasilkan 513 fitur frekuensidari sinyal getaran. Berbagai pengklasifikasi model pemelajaran mesin dilatih dan dievaluasi, dengan hasil menunjukkan performa yang memuaskan dalam mendeteksi baut longgar serta mengidentifikasi baut spesifik yang mulai kehilangan tegangan awal (preload). Studi ini juga menekankan pentingnya penempatan sensor, karena posisi sensor sangat memengaruhi akurasi dari pengklasifikasi yang digunakan \parencite{pham2020}. Temuan penelitian ini menunjukkan bahwa pengklasifikasi pada studi ini dapat digunakan untuk sistem pemantauan baut yang longgar secara daring (\textit{online monitoring}) pada pengaplikasian di masa depan, sehingga berkontribusi dalam pengembangan sistem pemantauan kesehatan struktur yang lebih baik.
Untuk meningkatkan akurasi deteksi, \textcite{eraliev2022} menggunakan \gls{stft} sebagai metode ekstraksi fitur, yang menghasilkan 513 fitur frekuensidari sinyal getaran. Berbagai pengklasifikasi model pemelajaran mesin dilatih dan dievaluasi, dengan hasil menunjukkan performa yang memuaskan dalam mendeteksi baut longgar serta mengidentifikasi baut spesifik yang mulai kehilangan tegangan awal (\textit{preload}). Studi ini juga menekankan pentingnya penempatan sensor, karena posisi sensor sangat memengaruhi akurasi dari pengklasifikasi yang digunakan \parencite{pham2020}. Temuan penelitian ini menunjukkan bahwa pengklasifikasi pada studi ini dapat digunakan untuk sistem pemantauan baut yang longgar secara daring (\textit{online monitoring}) pada pengaplikasian di masa depan, sehingga berkontribusi dalam pengembangan sistem pemantauan kesehatan struktur yang lebih baik.
STFT diidentifikasi sebagai metode peningkatan sinyal yang efektif, bersanding dengan \textit{wavelet transform} dan \textit{fractional fourier transform}. Keunggulan STFT terletak pada kemampuannya dalam menganalisis sinyal non-stasioner secara lokal, yang dapat meningkatkan kualitas fitur dalam mengenali pola, termasuk dalam tugas-tugas klasifikasi berbasis respon getaran struktur \parencite{zhang2023}.
Lebih lanjut, pendekatan yang dikembangkan oleh \textcite{garrido2016} menunjukkan potensi untuk menjembatani efektivitas fitur domain waktu-frekuensi dengan efisiensi pemrosesan model \textit{end-to-end}. Model ini mengintegrasikan proses STFT langsung ke dalam arsitektur jaringan \textit{feedforward}, memungkinkan sistem untuk tetap menggunakan representasi waktu-frekuensi namun tanpa biaya komputasi berat dari transformasi eksplisit di luar jaringan. Dengan demikian, pendekatan ini menawarkan jalan tengah yang menjanjikan antara kompleksitas 1-D CNN berbasis \textit{real-time raw signal} dan keunggulan struktural dari representasi domain frekuensi. Dalam konteks penelitian ini, meskipun transformasi dilakukan secara eksplisit, gagasan ini mendukung hipotesis bahwa representasi STFT dapat menjadi alternatif yang efisien dan kompetitif dibanding pemrosesan sinyal mentah dalam skenario pembelajaran mesin dengan sensor terbatas.
\gls{stft} diidentifikasi sebagai metode peningkatan sinyal yang efektif, bersanding dengan \textit{wavelet transform} dan \textit{fractional fourier transform}. Keunggulan \gls{stft} terletak pada kemampuannya dalam menganalisis sinyal non-stasioner secara lokal, yang dapat meningkatkan kualitas fitur dalam mengenali pola, termasuk dalam tugas-tugas klasifikasi berbasis respon getaran struktur \parencite{zhang2023}.
Lebih lanjut, pendekatan yang dikembangkan oleh \textcite{garrido2016} menunjukkan potensi untuk menjembatani efektivitas fitur domain waktu-frekuensi dengan efisiensi pemrosesan model \textit{end-to-end}. Model ini mengintegrasikan proses \gls{stft} langsung ke dalam arsitektur jaringan \textit{feedforward}, memungkinkan sistem untuk tetap menggunakan representasi waktu-frekuensi namun tanpa biaya komputasi berat dari transformasi eksplisit di luar jaringan. Dengan demikian, pendekatan ini menawarkan jalan tengah yang menjanjikan antara kompleksitas \gls{1d-cnn} berbasis \textit{real-time raw signal} dan keunggulan struktural dari representasi domain frekuensi. Dalam konteks penelitian ini, meskipun transformasi dilakukan secara eksplisit, gagasan ini mendukung hipotesis bahwa representasi STFT dapat menjadi alternatif yang efisien dan kompetitif dibanding pemrosesan sinyal mentah dalam skenario pembelajaran mesin dengan sensor terbatas.
% \indent Metode berbasis getaran merupakan salah satu teknik paling umum dalam sistem pemantauan kesehatan struktur (SHM) karena kemampuannya dalam mendeteksi perubahan kondisi struktur secara non-destruktif. Pendekatan ini bergantung pada prinsip bahwa kerusakan pada suatu struktur, seperti kelonggaran sambungan atau penurunan kekakuan elemen, akan mengubah karakteristik dinamikanya, seperti frekuensi alami, bentuk mode, dan respons getaran terhadap eksitasi tertentu.
@@ -20,7 +18,9 @@ Lebih lanjut, pendekatan yang dikembangkan oleh \textcite{garrido2016} menunjukk
\indent Teknik deteksi berbasis getaran terbukti efektif dalam mengidentifikasi tanda-tanda awal anomali pada sambungan. Hal ini dilakukan dengan menganalisis perubahan spektrum frekuensi atau energi getaran antar kondisi sehat dan rusak. Dalam praktiknya, data getaran biasanya dikumpulkan melalui akselerometer yang dipasang pada titik-titik tertentu dalam struktur. Perubahan karakteristik getaran, seperti penurunan amplitudo, pergeseran frekuensi dominan, atau pola spektral lainnya, menjadi indikator keberadaan dan lokasi kerusakan. Misalnya, studi oleh \textcite{zhao2019, eraliev2022} menunjukkan bahwa perubahan rotasi kepala baut akibat kelonggaran dapat dikaitkan dengan pola getaran tertentu. Sementara itu, pendekatan yang lebih umum dalam domain teknik sipil adalah memanfaatkan sinyal akselerasi dari sambungan kolom atau balok sebagai masukan untuk sistem klasifikasi kerusakan berbasis pembelajaran mesin.
\indent Kelebihan utama dari pendekatan berbasis getaran dibanding metode visual atau inspeksi manual adalah kemampuannya dalam mendeteksi kerusakan mikro secara lebih dini, bahkan sebelum tampak secara fisik. Namun, tantangan tetap ada, terutama dalam penempatan sensor yang optimal, pemrosesan sinyal, dan interpretasi pola dinamik yang kompleks dalam struktur grid. Oleh karena itu, kombinasi antara teknik transformasi sinyal seperti Short-Time Fourier Transform (STFT) dan algoritma pembelajaran mesin menjadi arah baru yang menjanjikan dalam riset SHM masa kini.
\indent Pendekatan \textit{data-driven} lainnya yang patut dicatat dikembangkan oleh \textcite{gui2017}, yang mengusulkan penggunaan algoritma \gls{svm} yang dioptimasi untuk mendeteksi kerusakan struktural menggunakan data akselerometer. Dalam studi ini, parameter \gls{svm} (penalti kesalahan (C) dan parameter kernel Gaussian ($\gamma$)) dioptimasi menggunakan tiga teknik: \textit{Grid Search}, \gls{pso}, dan \gls{ga}. Data akselerasi dikumpulkan dari struktur bangunan tiga lantai menggunakan sensor akselerometer di setiap lantai, dan fitur-fitur sensitif terhadap kerusakan diekstraksi melalui model \gls{ar} dan delapan analisis statistik dari data \text{error} residual. Hasil eksperimen menunjukkan bahwa kombinasi fitur residual dengan \gls{svm} yang dioptimasi mampu mencapai akurasi klasifikasi kerusakan hingga 100\%. Temuan ini menegaskan pentingnya pemilihan fitur yang tepat dan pengaturan parameter model secara optimal dalam meningkatkan sensitivitas dan reliabilitas sistem \gls{shm} berbasis \gls{ml}.
\indent Kelebihan utama dari pendekatan berbasis getaran dibanding metode visual atau inspeksi manual adalah kemampuannya dalam mendeteksi kerusakan mikro secara lebih dini, bahkan sebelum tampak secara fisik. Namun, tantangan tetap ada, terutama dalam penempatan sensor yang optimal, pemrosesan sinyal, dan interpretasi pola dinamik yang kompleks dalam struktur grid. Oleh karena itu, kombinasi antara teknik transformasi sinyal seperti \gls{stft} dan algoritma pembelajaran mesin menjadi arah baru yang menjanjikan dalam riset \gls{shm} masa kini.
\section{Dasar Teori}
\input{chapters/id/02_literature_review/theoritical_foundation/stft}
@@ -28,4 +28,4 @@ Lebih lanjut, pendekatan yang dikembangkan oleh \textcite{garrido2016} menunjukk
\input{chapters/id/02_literature_review/theoritical_foundation/hann}
\input{chapters/id/02_literature_review/theoritical_foundation/machine_learning}
Dasar teori ini memberikan kerangka metodologi untuk mengimplementasi dan mengevaluasi usulan sistem lokalisasi kerusakan pada penelitian ini. Kokmbinasi dari analisis waktu-frekuensi menggunakan STFT dan klasifikasi pemelajaran mesin klasik memungkinkan ketercapaian monitor kesehatan struktur yang efisien dan mudah diterapkan.
Dasar teori ini memberikan kerangka metodologi untuk mengimplementasi dan mengevaluasi usulan sistem lokalisasi kerusakan pada penelitian ini. Kombinasi dari analisis waktu-frekuensi menggunakan \gls{stft} dan klasifikasi pemelajaran mesin klasik memungkinkan ketercapaian monitor kesehatan struktur yang efisien dan mudah diterapkan.

View File

@@ -1,5 +1,3 @@
\section{Analisis Data}
% Dalam studi ini, setiap sensor menghasilkan data akselerasi yang direkam sebagai sebuah vektor numerik kontinu. Secara matematis,
% setiap data sensor didefinisikan sebagai
% \begin{equation}
@@ -183,3 +181,37 @@ Karena terdapat total \(6\times5\times513 = 15\,390\) baris, dan setiap baris me
\begin{equation*}
|\mathcal{D}^{(s)}| = 15\,390 \times 514.
\end{equation*}
\subsection{Validasi Silang K-Fold Terstratifikasi}
Untuk mengevaluasi model secara andal dan menghindari \textit{overfitting}, digunakan validasi silang K-Fold terstratifikasi pada masing-masing himpunan data sensor (Sensor A dan Sensor B). Skema ini membagi data menjadi \(K\) lipatan dengan proporsi label yang dipertahankan pada setiap lipatan. Pada iterasi ke-\(k\), model dilatih pada \(\mathcal{D}_{\text{train}}^{(k)}\) (gabungan \(K-1\) lipatan) dan dievaluasi pada \(\mathcal{D}_{\text{val}}^{(k)}\) (lipatan ke-\(k\)). Rata-rata metrik diperoleh sebagai
\begin{equation*}
\mathrm{Metric}_{\mathrm{K\text{-}Fold}}
= \frac{1}{K} \sum_{k=1}^{K} \mathrm{Metric}\bigl(\hat f^{(k)};\, \mathcal{D}_{\text{val}}^{(k)}\bigr),
\end{equation*}
di mana \(\hat f^{(k)}\) adalah model terlatih pada iterasi ke-\(k\). Pada studi ini, nilai \(K\) dipilih \(K=5\) untuk menyeimbangkan variasi estimasi dan biaya komputasi.
\paragraph{Prosedur ringkas:}
\begin{enumerate}
\item Pisahkan fitur dan label dari \(\mathcal{D}^{(s)}\) untuk \(s\in\{\text{A},\text{B}\}\) secara terpisah.
\item Lakukan stratifikasi berdasarkan label kerusakan \(y\) pada \(K=5\) lipatan.
\item Untuk setiap lipatan: latih pengklasifikasi (SVM, LDA, Bagged Trees, Random Forest, XGBoost) pada \(K-1\) lipatan, uji pada lipatan tersisa.
\item Hitung akurasi, presisi, dan \textit{confusion matrix}; ambil rata-rata dan simpangan baku lintas lipatan.
\end{enumerate}
\subsection{Validasi Silang Antar-\textit{Dataset} (Cross-Dataset)}
Selain K-Fold, dilakukan pengujian lintas sumber data untuk menilai generalisasi domain. Diasumsikan tersedia dua himpunan data berbeda (misalnya, Sensor A dan Sensor B, atau dua sesi/penempatan berbeda) yang dilambangkan sebagai \(\mathcal{D}^{(1)}\) dan \(\mathcal{D}^{(2)}\).
\paragraph{Skema latih-uji silang:}
\begin{align*}
ext{Eksperimen-1:}\quad & \hat f_{1} \leftarrow \mathrm{Train}\bigl(\mathcal{D}^{(1)}\bigr), & \mathrm{Eval\ on}\; \mathcal{D}^{(2)} \\
ext{Eksperimen-2:}\quad & \hat f_{2} \leftarrow \mathrm{Train}\bigl(\mathcal{D}^{(2)}\bigr), & \mathrm{Eval\ on}\; \mathcal{D}^{(1)}
\end{align*}
Metrik yang dilaporkan adalah rata-rata kedua arah evaluasi untuk memberikan gambaran seimbang terhadap kemampuan \textit{out-of-domain}:
\begin{equation*}
\mathrm{Metric}_{\mathrm{X\text{-}Domain}}
= \tfrac{1}{2}\Bigl[\,\mathrm{Metric}(\hat f_{1};\, \mathcal{D}^{(2)}) + \mathrm{Metric}(\hat f_{2};\, \mathcal{D}^{(1)})\,\Bigr].
\end{equation*}
\paragraph{Catatan praktis:} Untuk menjaga keadilan komparasi, normalisasi fitur dihitung hanya pada data pelatihan lalu diaplikasikan ke data uji. Bila ukuran kedua himpunan tidak seimbang, dapat digunakan penyeimbangan kelas atau pengambilan sampel berstrata pada tahap pelatihan.

View File

@@ -1,7 +1,14 @@
\chapter{Metode Penelitian}
\section{Benda Uji}
\input{chapters/id/03_methodology/materials}
\section{Alat}
\input{chapters/id/03_methodology/tools}
\input{chapters/id/03_methodology/material/index}
\input{chapters/id/03_methodology/tool/index}
\clearpage
\section{Tahapan Penelitian}
\input{chapters/id/03_methodology/steps/index}
\input{chapters/id/03_methodology/data_analysis/index}
\section{Analisis Data}
\input{chapters/id/03_methodology/data_analysis}

View File

@@ -1,5 +1,3 @@
\section{Benda Uji}
Penelitian ini menggunakan data sekunder dari \textcite{abdeljaber2017}, yang tersedia secara publik dan diperoleh melalui eksperimen menggunakan \textit{Queen's University Grandstand Simulator}. Adapun rincian data yang digunakan adalah sebagai berikut:
\begin{itemize}
@@ -20,7 +18,22 @@ Struktur dataset yang digunakan ditampilkan pada Gambar~\ref{fig:specimen-photo}
\begin{figure}[ht]
\centering
\includegraphics[width=0.75\linewidth]{chapters/img/specimen.png}
\caption{Bentuk benda uji}
\includegraphics[width=0.75\linewidth]{chapters/img/specimen.jpg}
\caption{Bentuk benda uji struktur baja dan penempatan akselerometer \textcite{abdeljaber2017}}
\label{fig:specimen-photo}
\end{figure}
\begin{figure}[ht]
\centering
\begin{minipage}[b]{0.45\linewidth}
\centering
\includegraphics[width=\linewidth]{chapters/img/i3-a-output.jpg}
\end{minipage}
\hfill
\begin{minipage}[b]{0.45\linewidth}
\centering
\includegraphics[width=\linewidth]{chapters/img/i3-b-output.jpg}
\end{minipage}
\caption{(kiri) posisi akselerometer dan skenario baut yang dikencangkan (damaged). (kanan) posisi akselerometer dan skenario baut yang dikendurkan (undamaged) \textcite{abdeljaber2017}}
\label{fig:skenario-kerusakan}
\end{figure}

View File

@@ -1,4 +1,3 @@
\section{Tahapan Penelitian}
Alur keseluruhan penelitian ini dilakukan melalui tahapan-tahapan sebagai berikut:
\begin{figure}[H]
@@ -9,17 +8,21 @@ Alur keseluruhan penelitian ini dilakukan melalui tahapan-tahapan sebagai beriku
\end{figure}
\begin{enumerate}
\item \textbf{Akuisisi Data:} Mengunduh dataset dari \textcite{abdeljaber2017} yang berisi sinyal percepatan untuk 31 kondisi struktur (1 kondisi sehat dan 30 kondisi kerusakan tunggal).
\item Akuisisi Data: Mengunduh dataset dari \textcite{abdeljaber2017} yang berisi sinyal percepatan untuk 31 kondisi struktur (1 kondisi sehat dan 30 kondisi kerusakan tunggal).
% \item \textbf{Seleksi Sensor:} Memilih sinyal dari sejumlah sensor terbatas pada garis vertikal tertentu (misalnya, node 1 dan 26) untuk mensimulasikan konfigurasi sensor yang direduksi.
% \item Seleksi Sensor: Memilih sinyal dari sejumlah sensor terbatas pada garis vertikal tertentu (misalnya, node 1 dan 26) untuk mensimulasikan konfigurasi sensor yang direduksi.
\item \textbf{Pra-pemrosesan:} Melakukan normalisasi dan mengubah sinyal domain waktu mentah menjadi domain waktu-frekuensi menggunakan metode Short-Time Fourier Transform (STFT).
\item Ekstraksi Fitur: Melakukan normalisasi dan mengubah sinyal domain waktu mentah menjadi domain waktu-frekuensi menggunakan metode Short-Time Fourier Transform (STFT).
\item \textbf{Ekstraksi Fitur:} Menghasilkan \textit{data frame} frekuensi dalam domain waktu.
\item \textit{Pre-processing} Fitur: Melakukan \textit{feature scaling} menggunakan normalisasi Min-Max pada setiap fitur untuk memastikan semua fitur berada dalam skala yang sama.
\item \textbf{Pengembangan Model:} Membangun dan melatih model klasifikasi berbasis algoritma pemelajaran mesin klasik (SVM, LDA, Bagged Trees, Random Forest, XGBoost) untuk mengklasifikasikan lokasi kerusakan struktur.
\item Reduksi Dimensi: Mengurangi dimensi fitur menggunakan metode Principal Component Analysis (PCA) untuk mengurangi kompleksitas komputasi dan menghilangkan fitur yang kurang informatif.
\item \textbf{Evaluasi:} Mengevaluasi kinerja model menggunakan metrik akurasi, presisi, dan confusion matrix pada berbagai skenario pengujian.
\item Pengembangan Model: Membangun dan melatih model \textit{baseline} SVM untuk mengklasifikasikan lokasi kerusakan struktur.
\item Optimasi \textit{Hyperparameter}: Melakukan pencarian \textit{hyperparameter} menggunakan \textit{coarse} dan \textit{fine grid-search} dengan validasi silang \textit{stratified K-Fold} untuk setiap model guna meningkatkan kinerja klasifikasi.
\item Evaluasi: Mengevaluasi kinerja model menggunakan metrik akurasi, presisi, dan \textit{confusion matrix} pada berbagai skenario pengujian. Evaluasi dilakukan dengan dua skema: (i) validasi silang K-Fold terstratifikasi pada setiap himpunan data, dan (ii) validasi silang antar-dataset (latih pada Dataset-A, uji pada Dataset-B, dan sebaliknya) untuk menilai kemampuan generalisasi lintas sumber data.
\end{enumerate}
\subsection{Akuisisi Data}

View File

@@ -1,7 +0,0 @@
\section{Alat}
\subsection{Alat Perangkat Keras}
\input{chapters/id/03_methodology/tool/hardware}
\subsection{Alat Perangkat Lunak}
\input{chapters/id/03_methodology/tool/software}

View File

@@ -1,11 +0,0 @@
Berikut merupakan perangkat lunak yang digunakan selama proses penelitian ini:
\begin{itemize}
\item \textbf{Python 3.11} digunakan untuk proses pra-pemrosesan data, pemodelan, dan evaluasi.
\item \textbf{NumPy 1.22.4} digunakan untuk perhitungan deret numerik.
\item \textbf{Pandas 1.5.1} digunakan untuk memanipulasi struktur data.
\item \textbf{Pandas 1.7.3} digunakan untuk memproses sinyal.
\item \textbf{Matplotlib 3.7.1} digunakan untuk menghasilkan plot data.
\item \textbf{Scikit-Learn 1.5.1} digunakan untuk membangun dan melatih model dengan algoritma pemelajaran mesin klasik.
\item \textbf{Jupyter Notebook} digunakan untuk pelatihan model dan percobaan eksperimental secara interaktif.
\end{itemize}

View File

@@ -1,3 +1,4 @@
\subsection{Alat Perangkat Keras}
Data getaran struktur yang digunakan dalam penelitian ini diperoleh dari penelitian oleh \textcite{abdeljaber2017}, yang dilakukan menggunakan simulator struktur baja Grandstand di Queens University. Dalam eksperimen tersebut, struktur baja dipasang dengan akselerometer pada setiap sambungan-sambungan (\textit{joints}). Rangkaian perangkat keras yang digunakan untuk pengambilan data meliputi:
\begin{itemize}
@@ -33,7 +34,21 @@ Adapun sumberdaya komputasi yang digunakan untuk pemrosesan semua data dan pemod
\end{figure}
\begin{figure}[H]
\centering
\includegraphics[width=0.7\textwidth]{chapters/img/datalogger.png}
\includegraphics[width=0.7\textwidth]{chapters/img/datalogger.jpg}
\caption{Perangkat akuisisi data (DT9857E-16) dan penguat daya SmartAmp 2100E21-400}
\label{fig:datalogger}
\end{figure}
\subsection{Alat Perangkat Lunak}
Berikut merupakan perangkat lunak yang digunakan selama proses penelitian ini:
\begin{itemize}
\item \textbf{Python 3.11} digunakan untuk proses pra-pemrosesan data, pemodelan, dan evaluasi.
\item \textbf{NumPy 1.22.4} digunakan untuk perhitungan deret numerik.
\item \textbf{Pandas 1.5.1} digunakan untuk memanipulasi struktur data.
\item \textbf{Pandas 1.7.3} digunakan untuk memproses sinyal.
\item \textbf{Matplotlib 3.7.1} digunakan untuk menghasilkan plot data.
\item \textbf{Scikit-Learn 1.5.1} digunakan untuk membangun dan melatih model dengan algoritma pemelajaran mesin klasik.
\item \textbf{Jupyter Notebook} digunakan untuk pelatihan model dan percobaan eksperimental secara interaktif.
\end{itemize}

View File

@@ -0,0 +1,149 @@
\chapter{Hasil Penelitian dan Pembahasan}
\section{Pendahuluan Singkat}
Bab ini menyajikan hasil evaluasi model untuk prediksi lokasi kerusakan berbasis fitur domain waktu dan frekuensi yang diekstrak dari STFT. Tujuan utama evaluasi adalah menguji apakah kombinasi fitur waktu--frekuensi dapat meningkatkan kinerja klasifikasi dibandingkan masing-masing domain secara terpisah, serta menilai kelayakan pendekatan sensor terbatas untuk penerapan di lapangan.
Secara ringkas, kami menampilkan: (i) performa utama pada data uji, (ii) analisis per-kelas dan pola kesalahan, (iii) studi ablation dan sensitivitas mencakup fitur, parameter STFT, serta jumlah/posisi sensor, dan (iv) uji robustness serta implikasi implementasi. Detail metodologi eksperimen telah diuraikan pada Bab Metodologi; bagian ini berfokus pada temuan empiris dan interpretasinya.
\section{Rancangan Evaluasi}
\subsection{Dataset dan Pembagian Data}
Evaluasi dilakukan pada himpunan data berlabel yang terdiri dari \textit{[N\_total]} sampel dengan \textit{[K]} kelas lokasi kerusakan. Data dibagi menjadi \textit{[N\_train]} sampel pelatihan, \textit{[N\_val]} validasi, dan \textit{[N\_test]} pengujian, atau menggunakan skema \textit{k}-fold dengan \textit{[k]} lipatan (rincian skema dipertahankan konsisten dengan Bab Metodologi). Potensi ketidakseimbangan kelas dicatat dengan rasio maksimum/minimum sekitar \textit{[imbalance\_ratio:1]}.
\subsection{Pra-pemrosesan dan Ekstraksi Fitur}
Sinyal diproses dengan normalisasi \textit{[jenis normalisasi/standarisasi]}, dan augmentasi \textit{[jenis augmentasi, jika ada]}. Fitur domain waktu dan frekuensi diekstraksi; komponen frekuensi diperoleh dari STFT dengan window Hann, ukuran jendela \textit{[win\_size]} sampel, overlap
\subsection{Model dan Metrik Evaluasi}
Model utama adalah SVM dengan kernel \textit{[RBF/Linear]} dan pemilihan hyperparameter (\textit{C}, \textit{gamma}) melalui \textit{[grid/random/bayes] search} pada data validasi. Metrik evaluasi meliputi Akurasi, Macro-F1, Macro-Precision, Macro-Recall, Balanced Accuracy, serta Cohen's Kappa. Untuk analisis multi-kelas yang lebih tajam, kami juga melaporkan metrik per-kelas dan Confusion Matrix.
\section{Hasil Utama}
\begin{table}[htbp]
\centering
\caption{Hasil utama pada data uji untuk beberapa konfigurasi fitur dan model. Nilai diisi dari eksperimen akhir.}
\label{tab:main-results}
\begin{tabular}{lccc}
\hline
Konfigurasi & Akurasi & Macro-F1 & Kappa \\
\hline
Time-domain + SVM-RBF & -- & -- & -- \\
Freq-domain + SVM-RBF & -- & -- & -- \\
Kombinasi (Time+Freq) + SVM-RBF & \textbf{--} & \textbf{--} & \textbf{--} \\
\hline
\end{tabular}
\end{table}
Konfigurasi terbaik diperoleh pada kombinasi fitur waktu--frekuensi dengan SVM-\textit{[kernel]}, menghasilkan Akurasi sebesar \textit{[acc\_best]}\%, Macro-F1 sebesar \textit{[f1\_best]}\%, dan Kappa sebesar \textit{[kappa\_best]} pada data uji (Tabel~\ref{tab:main-results}). Dibandingkan baseline domain waktu saja, Macro-F1 meningkat sekitar \textit{[delta\_f1\_time]} poin persentase; dibandingkan domain frekuensi saja, peningkatan mencapai \textit{[delta\_f1\_freq]} poin persentase. Hasil ini mengindikasikan bahwa informasi pelengkap antara dinamika temporal dan spektral berkontribusi nyata terhadap separabilitas kelas.
Performa pada metrik Balanced Accuracy dan Macro-Recall juga konsisten, menandakan model tidak terlalu bias pada kelas mayoritas. Nilai Kappa \textit{[kappa\_best]} mengindikasikan tingkat kesepakatan yang \textit{[moderat/tinggi]} melampaui kebetulan.
\section{Analisis Per-Kelas dan Kesalahan}
\begin{figure}[htbp]
\centering
% \includegraphics[width=0.8\textwidth]{img/confusion_matrix.pdf}
\fbox{\begin{minipage}[c][0.30\textheight][c]{0.80\textwidth}\centering
Placeholder Confusion Matrix
\end{minipage}}
\caption{Confusion matrix pada data uji. Isikan gambar aktual dari pipeline evaluasi.}
\label{fig:cm}
\end{figure}
\begin{table}[htbp]
\centering
\caption{Metrik per-kelas pada data uji. Gunakan bila diperlukan untuk melengkapi Confusion Matrix.}
\label{tab:per-class}
\begin{tabular}{lccc}
\hline
Kelas & Precision & Recall & F1 \\
\hline
A & -- & -- & -- \\
B & -- & -- & -- \\
C & -- & -- & -- \\
% ... tambah baris sesuai jumlah kelas
\hline
\end{tabular}
\end{table}
Confusion Matrix pada Gambar~\ref{fig:cm} menunjukkan pola salah klasifikasi yang dominan antara kelas \textit{[kelas\_A]} dan \textit{[kelas\_B]}. Dua kelas ini memiliki respons spektral yang mirip pada rentang \textit{[f\_low--f\_high]} Hz, sehingga kesalahan terutama terjadi ketika amplitudo sinyal rendah atau \textit{signal-to-noise ratio} menurun. Sebaliknya, kelas \textit{[kelas\_C]} memperlihatkan separasi yang baik dengan Recall \textit{[recall\_C]}\% dan F1 \textit{[f1\_C]}\% (Tabel~\ref{tab:per-class}).
Analisis kesalahan kasus-per-kasus menunjukkan bahwa \textit{[proporsi\_\%]}\% prediksi keliru terjadi pada sampel dengan \textit{[ciri sinyal/condisi uji]} dan \textit{[konfigurasi sensor]}. Hal ini menyarankan perlunya \textit{[strategi perbaikan, mis. penambahan fitur bandpass tertentu atau penyeimbangan kelas]}.
\section{Ablasi dan Sensitivitas}
\subsection{Ablasi Fitur}
\begin{figure}[htbp]
\centering
\includegraphics[width=0.75\textwidth]{example-image-a}
\fbox{\begin{minipage}[c][0.22\textheight][c]{0.70\textwidth}\centering
Placeholder Bar Chart: Time vs Freq vs Kombinasi
\end{minipage}}
\caption{Perbandingan performa berdasarkan jenis fitur.}
\label{fig:ablation-features}
\end{figure}
Studi ablation pada Gambar~\ref{fig:ablation-features} menegaskan bahwa kombinasi fitur memberikan peningkatan \textit{[delta\_ablation]} poin persentase pada Macro-F1 dibandingkan fitur domain waktu saja. Hal ini mengindikasikan bahwa karakteristik harmonik dan komponen frekuensi transien yang ditangkap STFT berkontribusi pada pemisahan kelas yang lebih baik.
\subsection{Parameter STFT dan Windowing}
\begin{table}[htbp]
\centering
\caption{Sensitivitas terhadap parameter STFT pada data validasi.}
\label{tab:stft-sensitivity}
\begin{tabular}{lcccc}
\hline
Window & n\_fft & Overlap & Akurasi & Macro-F1 \\
\hline
Hann & -- & -- & -- & -- \\
Hann & -- & -- & -- & -- \\
(Tanpa window) & -- & -- & -- & -- \\
\hline
\end{tabular}
\end{table}
Eksperimen sensitivitas pada Tabel~\ref{tab:stft-sensitivity} memperlihatkan adanya \textit{trade-off} antara resolusi waktu dan frekuensi. Peningkatan \textit{n\_fft} cenderung memperhalus resolusi frekuensi namun mengurangi ketelitian temporal, sedangkan overlap yang lebih besar \textit{[overlap\_\% range]}\% membantu stabilitas estimasi fitur pada sinyal bising. Penggunaan window Hann memberikan kenaikan Macro-F1 sekitar \textit{[delta\_hann]} poin dibanding tanpa window, menegaskan peran pengurangan \textit{spectral leakage}.
\subsection{Pendekatan Sensor Terbatas}
\begin{figure}[htbp]
\centering
% placeholder
\includegraphics[width=0.75\textwidth]{example-image-a}
\fbox{\begin{minipage}[c][0.22\textheight][c]{0.70\textwidth}\centering
Placeholder: Performa vs Jumlah/Posisi Sensor
\end{minipage}}
\caption{Dampak jumlah/konfigurasi sensor terhadap performa.}
\label{fig:sensor-limited}
\end{figure}
Hasil pada Gambar~\ref{fig:sensor-limited} menunjukkan bahwa pengurangan dari \textit{[n\_sensors\_full]} menjadi \textit{[n\_sensors\_min]} sensor hanya menurunkan Macro-F1 sekitar \textit{[delta\_perf\_sensors]} poin, khususnya ketika sensor ditempatkan pada \textit{[posisi sensor terbaik]}. Ini mengindikasikan bahwa pendekatan sensor terbatas tetap layak untuk implementasi dengan biaya perangkat keras yang lebih rendah, selama pemilihan posisi sensor dioptimalkan.
\section{Robustness dan Generalisasi}
\begin{table}[htbp]
\centering
\caption{Ringkasan kinerja antar-fold (jika menggunakan k-fold).}
\label{tab:kfold}
\begin{tabular}{lcc}
\hline
Metrik & Rata-rata & Deviasi Standar \\
\hline
Macro-F1 & -- & -- \\
Akurasi & -- & -- \\
\hline
\end{tabular}
\end{table}
Pada skema validasi silang \textit{k}-fold, variasi performa relatif rendah dengan simpangan baku Macro-F1 sebesar \textit{[std\_f1]} (Tabel~\ref{tab:kfold}), menandakan stabilitas model terhadap variasi subset data. Penambahan noise sintetis pada tingkat SNR \textit{[snr levels]} menunjukkan penurunan performa yang \textit{[ringan/sedang/bermakna]} sekitar \textit{[delta\_snr]} poin; augmentasi \textit{[jenis augmentasi]} membantu mengkompensasi sebagian penurunan tersebut.
Pada skenario \textit{domain shift} \textit{[nama skenario]}, model mempertahankan Macro-F1 sebesar \textit{[f1\_shift]}\%, yang menunjukkan \textit{[derajat generalisasi]} terhadap kondisi yang berbeda dari data pelatihan.
\section{Perbandingan dengan Pustaka/Baseline}
Temuan kami selaras dengan tren yang dilaporkan oleh \textcite{abdeljaber2017}, khususnya mengenai pentingnya informasi frekuensi untuk mendeteksi lokasi kerusakan. Meskipun demikian, perbedaan \textit{setup} eksperimen (\textit{[jenis struktur/skenario uji]}, konfigurasi sensor, dan definisi kelas) membuat angka metrik tidak dapat dibandingkan secara langsung. Oleh karena itu, perbandingan difokuskan pada pola dan arah peningkatan, bukan nilai absolut.
\section{Kompleksitas dan Implementasi}
Model SVM dengan fitur \textit{[jenis fitur terbaik]} menawarkan waktu inferensi sekitar \textit{[t\_infer\_ms]} ms per sampel pada \textit{[perangkat/CPU/GPU]}. Tahap ekstraksi STFT memerlukan \textit{[t\_stft\_ms]} ms per segmen dengan parameter \textit{[n\_fft]}, overlap \textit{[overlap\_\%]}\%, dan window Hann. Secara keseluruhan, latensi ujung-ke-ujung diperkirakan \textit{[t\_end2end\_ms]} ms, yang \textit{[memadai/belum memadai]} untuk aplikasi \textit{[real-time/near real-time]}.
Dengan \textit{[n\_sensors\_min]} sensor, kebutuhan komputasi dan bandwidth data berkurang \textit{[proporsi pengurangan]} dibanding konfigurasi penuh, yang memperbaiki kelayakan implementasi lapangan tanpa mengorbankan akurasi secara signifikan.
\section{Ringkasan Bab}
\begin{itemize}
\item Konfigurasi terbaik (\textit{[konfigurasi terbaik]}) mencapai Akurasi \textit{[acc\_best]}\%, Macro-F1 \textit{[f1\_best]}\%, dan Kappa \textit{[kappa\_best]} pada data uji.
\item Kesalahan dominan terjadi antara kelas \textit{[kelas\_A]} dan \textit{[kelas\_B]} karena kemiripan respons pada \textit{[f\_low--f\_high]} Hz; strategi \textit{[strategi perbaikan]} direkomendasikan.
\item Ablasi menegaskan manfaat kombinasi fitur; window Hann dan parameter STFT \textit{[n\_fft, overlap]} memberi keseimbangan resolusi yang baik.
\item Pendekatan sensor terbatas dengan \textit{[n\_sensors\_min]} sensor tetap layak dengan penurunan performa \textit{[delta\_perf\_sensors]} poin.
\item Model menunjukkan stabilitas antar-fold (\textit{[std\_f1]}) dan ketahanan \textit{[terhadap noise/domain shift]} dengan penyesuaian \textit{[augmentasi/penalaan]}.
\end{itemize}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 132 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 678 KiB

After

Width:  |  Height:  |  Size: 131 B

View File

@@ -1,16 +1,25 @@
% Define an abbreviation (acronym)
% Acronyms for the thesis
\newacronym{ml}{ML}{machine learning}
\newacronym{stft}{STFT}{short-time fourier transform}
\newacronym{ai}{AI}{artificial intelligence}
\newacronym{dl}{DL}{deep learning}
\newacronym{nn}{NN}{neural network}
\newacronym{fft}{FFT}{fast fourier transform}
\newacronym{svm}{SVM}{support vector machine}
\newacronym{cnn}{CNN}{convolutional neural network}
\newacronym{rnn}{RNN}{recurrent neural network}
\newacronym{vbi}{VBI}{vibration-based inspection}
\newacronym{shm}{SHM}{structural health monitoring}
\newacronym{fea}{FEA}{finite element analysis}
\newacronym{ml}{ML}{\textit{machine learning}}
\newacronym{stft}{STFT}{\textit{short-time fourier transform}}
\newacronym{ai}{AI}{\textit{artificial intelligence}}
\newacronym{dl}{DL}{\textit{deep learning}}
\newacronym{nn}{NN}{\textit{neural network}}
\newacronym{fft}{FFT}{\textit{fast fourier transform}}
\newacronym{svm}{SVM}{\textit{support vector machine}}
\newacronym{cnn}{CNN}{\textit{convolutional neural network}}
\newacronym{rnn}{RNN}{\textit{recurrent neural network}}
\newacronym{vbi}{VBI}{\textit{vibration-based inspection}}
\newacronym{shm}{SHM}{\textit{structural health monitoring}}
\newacronym{fea}{FEA}{\textit{finite element analysis}}
\newacronym{1d-cnn}{1-D CNN}{\textit{One-Dimensional Convolutional Neural Network}}
\newacronym{pca}{PCA}{\textit{principal component analysis}}
\newacronym{cm}{CM}{\textit{confusion matrix}}
% pso
\newacronym{pso}{PSO}{\textit{particle swarm optimization}}
% ga
\newacronym{ga}{GA}{\textit{genetic algorithm}}
% AR
\newacronym{ar}{AR}{\textit{autoregressive}}
% frft
\newacronym{frft}{FRFT}{\textit{fractional fourier transform}}

View File

@@ -1,4 +1,4 @@
\documentclass[draftmark]{thesis}
\documentclass[draftmark,draft]{thesis}
\title{Prediksi Lokasi Kerusakan dengan Machine Learning}
\author{Rifqi Damar Panuluh}
\date{\today}
@@ -42,10 +42,10 @@
% \pagestyle{fancyplain}
\mainmatter
% Include content
\include{chapters/01_introduction}
\include{chapters/id/01_introduction}
\include{chapters/id/02_literature_review/index}
\include{chapters/id/03_methodology/index}
% \include{chapters/04_results}
\include{chapters/id/04_results}
% \include{content/conclusion}
\backmatter
% Bibliography