Compare commits
231 Commits
43-bug-stf
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
| bb6f71277a | |||
| f2e1668718 | |||
| 58f89b1302 | |||
| d9506fcfc8 | |||
| 9be2afb558 | |||
| 0530ce0cea | |||
| 03afd709ca | |||
| 5fa6d8fecc | |||
| bf6b91fa1c | |||
|
|
9565847b3a | ||
|
|
6b5a00dc63 | ||
|
|
9fac156c36 | ||
|
|
8252f99f01 | ||
|
|
f561998871 | ||
|
|
1d33aae225 | ||
|
|
aeef32fe9f | ||
|
|
e347b63e6e | ||
|
|
511014d37d | ||
|
|
b1be3a8b6f | ||
|
|
06f158f143 | ||
|
|
df38c00935 | ||
|
|
59793e83de | ||
|
|
e1376b6d03 | ||
|
|
866799fb65 | ||
|
|
52c38d13c0 | ||
|
|
33f154837c | ||
|
|
9e3e234ef6 | ||
|
|
6570480277 | ||
|
|
eb539e32b9 | ||
|
|
fe3f636a0c | ||
|
|
74fdcf2c66 | ||
|
|
af31affe07 | ||
|
|
06ddea8162 | ||
|
|
9bbe990b22 | ||
|
|
d541300916 | ||
|
|
34e2143daa | ||
|
|
95c3356b4d | ||
|
|
b277d3cda6 | ||
|
|
9e22db4665 | ||
|
|
ab472f19f0 | ||
|
|
423d1efad4 | ||
|
|
76969f9311 | ||
|
|
d5bf0c6fc9 | ||
|
|
2a9cf2cc3d | ||
|
|
117f17d6a2 | ||
|
|
f9a125092a | ||
|
|
39e4dc67bf | ||
|
|
719ae8e297 | ||
|
|
ce8cd8bf36 | ||
|
|
ae49c61ff0 | ||
|
|
720db42041 | ||
|
|
e90f9a07a6 | ||
|
|
3d9223a565 | ||
|
|
0017d686b6 | ||
|
|
e1e0b07944 | ||
|
|
c54094f248 | ||
|
|
6f83033fc0 | ||
|
|
8fe7fb2d89 | ||
|
|
6b629f6f7d | ||
|
|
a0659e7892 | ||
|
|
0217abfb88 | ||
|
|
c2aa68d2e9 | ||
|
|
01c2a9d232 | ||
|
|
3258cd2e82 | ||
|
|
9412f0f53f | ||
|
|
d844fb8f66 | ||
|
|
b581b3c755 | ||
|
|
9fc5da03c1 | ||
|
|
ebb2c0d686 | ||
|
|
d8482988ff | ||
|
|
cdcd056102 | ||
|
|
30ecb6a88a | ||
|
|
c2f48694c9 | ||
|
|
f2d427f0e8 | ||
|
|
cf4bdd43cd | ||
|
|
7ee6231017 | ||
|
|
b2bf1b0e31 | ||
|
|
7a7b2a41af | ||
|
|
3ef656dd28 | ||
|
|
18edaaa7c9 | ||
|
|
f45614b6d9 | ||
|
|
e2a4c80d49 | ||
|
|
d126559920 | ||
|
|
855114d633 | ||
|
|
4a1c0ed83e | ||
|
|
274cd60d27 | ||
|
|
9f23d82fab | ||
|
|
a8288b1426 | ||
|
|
860542f3f9 | ||
|
|
e2cfd0329f | ||
|
|
e183040c13 | ||
|
|
da5192a315 | ||
|
|
79da2e7bcc | ||
|
|
5a9cc9eb06 | ||
|
|
7a447893cc | ||
|
|
432d00b699 | ||
|
|
16c171fb46 | ||
|
|
0e28ed6dd0 | ||
|
|
3e2b153d11 | ||
|
|
3cbef17b0c | ||
|
|
80d4a66925 | ||
|
|
9b018efc15 | ||
|
|
2fbdeac1eb | ||
|
|
086032c250 | ||
|
|
f6c71739df | ||
|
|
2dc915949b | ||
|
|
18824e05c0 | ||
|
|
2504157b29 | ||
|
|
5ba628b678 | ||
|
|
a93adc8af3 | ||
|
|
c2df42cc2b | ||
|
|
465ed121f9 | ||
|
|
d6975b4817 | ||
|
|
79070921d7 | ||
|
|
e8eb07a91b | ||
|
|
c98c6a091b | ||
|
|
9921d7663b | ||
|
|
459fbcc17a | ||
|
|
5041ee3feb | ||
|
|
114ab849b9 | ||
|
|
6196523ea0 | ||
|
|
46b66e0a90 | ||
|
|
18892c1188 | ||
|
|
d0b603ba9f | ||
|
|
a7d8f1ef56 | ||
|
|
1164627bac | ||
|
|
58a672a680 | ||
|
|
24c1484300 | ||
|
|
60ff4e0fa9 | ||
|
|
3e652accfb | ||
|
|
66a09e0ddf | ||
|
|
195f8143f0 | ||
|
|
e7332252a6 | ||
|
|
4b0819f94e | ||
|
|
7613c08ebd | ||
|
|
ad6cda4270 | ||
|
|
ebaa263781 | ||
|
|
f5dada1b9c | ||
|
|
37c9a0765a | ||
|
|
8656289a1c | ||
|
|
15fe8339ec | ||
|
|
44210ef372 | ||
|
|
9192d4c81c | ||
|
|
0373743ca7 | ||
|
|
49d6395e6f | ||
|
|
bf9cca2d90 | ||
|
|
08420296e6 | ||
|
|
1540213eec | ||
|
|
6fd4b7465e | ||
|
|
85a0aebf36 | ||
|
|
8d1edfdbf7 | ||
|
|
ff862d9467 | ||
|
|
dfb64db1d8 | ||
|
|
3e3de577ba | ||
|
|
76a09c0219 | ||
|
|
1a994fd59c | ||
|
|
cdb3010b78 | ||
|
|
8a3c1ae585 | ||
|
|
7b934d3fba | ||
|
|
aaccad7ae8 | ||
|
|
2c453ec403 | ||
|
|
7da3179d08 | ||
|
|
254b24cb21 | ||
|
|
d151062115 | ||
|
|
a32415cebf | ||
|
|
12669ed24c | ||
|
|
b0bdb67efb | ||
|
|
4d5de37e30 | ||
|
|
92fd3acd05 | ||
|
|
e0fade285a | ||
|
|
b4fb0d64a2 | ||
|
|
b1e1edee77 | ||
|
|
2016f4e780 | ||
|
|
0cf2834095 | ||
|
|
d5f43ba48b | ||
|
|
a872ae144c | ||
|
|
452afd6580 | ||
|
|
3d2432f26e | ||
|
|
1533a6ce46 | ||
|
|
471eccb12c | ||
|
|
74ea4d412c | ||
|
|
9d526971d9 | ||
|
|
49adb273d8 | ||
|
|
ee004e55f4 | ||
|
|
f97c58e114 | ||
|
|
190cd0904e | ||
|
|
6105da57f0 | ||
|
|
63da3b6308 | ||
|
|
5634776d26 | ||
|
|
e65026f9ca | ||
|
|
eb1d2a87b4 | ||
|
|
1f275fad42 | ||
|
|
07ed6a9a13 | ||
|
|
1b20376700 | ||
|
|
104b72e624 | ||
|
|
e9568583e4 | ||
|
|
ae201d61fa | ||
|
|
921dc9245c | ||
|
|
bf3c43639d | ||
|
|
f38d44df1d | ||
|
|
5c70d7db51 | ||
|
|
702760cc5e | ||
|
|
43a0f40182 | ||
|
|
92a7143d90 | ||
|
|
5e08d4f8c6 | ||
|
|
907f725fa7 | ||
|
|
676b2b1a87 | ||
|
|
e0fbc23257 | ||
|
|
39f966e71b | ||
|
|
740680d1c7 | ||
|
|
2db5170366 | ||
|
|
f83b890055 | ||
|
|
7820dd580a | ||
|
|
6c0fb67b86 | ||
|
|
792ed64027 | ||
|
|
c57a916a1a | ||
|
|
ca668ffc5f | ||
|
|
8d09adefd4 | ||
|
|
05926e3857 | ||
|
|
d13dfdc34e | ||
|
|
6b866b9ed5 | ||
|
|
4a796694bf | ||
|
|
6357136e6c | ||
|
|
c7584e2dd8 | ||
|
|
80ee9a3ec4 | ||
|
|
f9f346a57e | ||
|
|
c8509aa728 | ||
|
|
4ebfb52635 | ||
|
|
cb380219f9 | ||
|
|
804c178175 | ||
|
|
1511012e11 |
7
.gitattributes
vendored
7
.gitattributes
vendored
@@ -1 +1,6 @@
|
|||||||
*.ipynb filter=nbstripout
|
*.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
|
||||||
|
|||||||
16
.gitignore
vendored
16
.gitignore
vendored
@@ -1,4 +1,18 @@
|
|||||||
# Ignore CSV files in the data directory and all its subdirectories
|
# Ignore CSV files in the data directory and all its subdirectories
|
||||||
data/**/*.csv
|
data/**/*.csv
|
||||||
.venv/
|
.venv/
|
||||||
*.pyc
|
*.pyc
|
||||||
|
*.egg-info/
|
||||||
|
|
||||||
|
# Latex
|
||||||
|
*.aux
|
||||||
|
*.log
|
||||||
|
*.out
|
||||||
|
*.toc
|
||||||
|
*.bbl
|
||||||
|
*.blg
|
||||||
|
*.fdb_latexmk
|
||||||
|
*.fls
|
||||||
|
*.synctex.gz
|
||||||
|
*.dvi
|
||||||
|
latex/.build/*
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
#
|
#
|
||||||
# Scope:
|
# Scope:
|
||||||
# latex (changes to thesis LaTeX)
|
# latex (changes to thesis LaTeX)
|
||||||
|
# documentclass (LaTeX in-house document class changes)
|
||||||
# src (changes to Python source code)
|
# src (changes to Python source code)
|
||||||
# nb (changes to notebooks)
|
# nb (changes to notebooks)
|
||||||
# ml (ML model specific changes)
|
# ml (ML model specific changes)
|
||||||
|
|||||||
28
.vscode/settings.json
vendored
28
.vscode/settings.json
vendored
@@ -1,3 +1,29 @@
|
|||||||
{
|
{
|
||||||
"python.analysis.extraPaths": ["./code/src/features"]
|
"files.autoSave": "off", // Disable autosave
|
||||||
|
"python.analysis.extraPaths": [
|
||||||
|
"./code/src/features",
|
||||||
|
"${workspaceFolder}/code/src"
|
||||||
|
],
|
||||||
|
"jupyter.notebookFileRoot": "${workspaceFolder}/code",
|
||||||
|
"latex-workshop.latex.outDir": "./.build",
|
||||||
|
// "latex-workshop.latex.tools": [
|
||||||
|
// {
|
||||||
|
// "name": "xelatex",
|
||||||
|
// "command": "xelatex",
|
||||||
|
// "args": [
|
||||||
|
// "-synctex=1",
|
||||||
|
// "-interaction=nonstopmode",
|
||||||
|
// "-output-directory=./latex/.build",
|
||||||
|
// "%DOC%"
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
// ],
|
||||||
|
// "latex-workshop.latex.recipes": [
|
||||||
|
// {
|
||||||
|
// "name": "xelatex",
|
||||||
|
// "tools": ["xelatex"]
|
||||||
|
// }
|
||||||
|
// ],
|
||||||
|
"latex-workshop.latex.recipe.default": "latexmk (xelatex)", // Optional: Use the last used recipe
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,3 +16,8 @@ The repository is private and access is restricted only to those who have been g
|
|||||||
All contents of this repository, including the thesis idea, code, and associated data, are copyrighted © 2024 by Rifqi Panuluh. Unauthorized use or duplication is prohibited.
|
All contents of this repository, including the thesis idea, code, and associated data, are copyrighted © 2024 by Rifqi Panuluh. Unauthorized use or duplication is prohibited.
|
||||||
|
|
||||||
[LICENSE](https://github.com/nuluh/thesis?tab=License-1-ov-file#readme)
|
[LICENSE](https://github.com/nuluh/thesis?tab=License-1-ov-file#readme)
|
||||||
|
|
||||||
|
## How to Run `stft.ipynb`
|
||||||
|
|
||||||
|
1. run `pip install -e .` in root project first
|
||||||
|
2. run the notebook
|
||||||
File diff suppressed because one or more lines are too long
363
code/src/data_preprocessing.py
Normal file
363
code/src/data_preprocessing.py
Normal file
@@ -0,0 +1,363 @@
|
|||||||
|
import pandas as pd
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
import numpy as np
|
||||||
|
from colorama import Fore, Style, init
|
||||||
|
from typing import TypedDict, Tuple, List
|
||||||
|
from joblib import load
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
|
# class DamageFilesIndices(TypedDict):
|
||||||
|
# damage_index: int
|
||||||
|
# files: list[int]
|
||||||
|
OriginalSingleDamageScenarioFilePath = str
|
||||||
|
DamageScenarioGroupIndex = int
|
||||||
|
OriginalSingleDamageScenario = pd.DataFrame
|
||||||
|
SensorIndex = int
|
||||||
|
VectorColumnIndex = List[SensorIndex]
|
||||||
|
VectorColumnIndices = List[VectorColumnIndex]
|
||||||
|
DamageScenarioGroup = List[OriginalSingleDamageScenario]
|
||||||
|
GroupDataset = List[DamageScenarioGroup]
|
||||||
|
|
||||||
|
|
||||||
|
class DamageFilesIndices(TypedDict):
|
||||||
|
damage_index: int
|
||||||
|
files: List[str]
|
||||||
|
|
||||||
|
def complement_pairs(n, prefix, extension):
|
||||||
|
"""
|
||||||
|
Return the four complement tuples for zzzBD<n>.TXT
|
||||||
|
"""
|
||||||
|
filename = f"{prefix}{n}.{extension}" # TODO: shouldnt be hardcoded
|
||||||
|
orig_a = (n - 1) % 5 + 1 # 1 … 5
|
||||||
|
for a in range(1, 6): # a = 1 … 5
|
||||||
|
if a != orig_a: # skip original a
|
||||||
|
yield (filename, [a, a + 25]) # use yield instead of return to return a generator of tuples
|
||||||
|
|
||||||
|
def generate_df_tuples(prefix: str, extension: str="TXT", first_col_start: int=1, last_col_offset: int=25,
|
||||||
|
group_size: int=5, special_groups: list=None, group: bool=True, undamage_file: str=None) -> List[Tuple[str, List[int]]]:
|
||||||
|
"""
|
||||||
|
Generate a structured list of tuples containing DataFrame references and column indices.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
-----------
|
||||||
|
total_dfs : int, default 30
|
||||||
|
Total number of DataFrames to include in the tuples
|
||||||
|
group_size : int, default 5
|
||||||
|
Number of DataFrames in each group (determines the pattern repeat)
|
||||||
|
prefix : str
|
||||||
|
Prefix for DataFrame variable names
|
||||||
|
first_col_start : int, default 1
|
||||||
|
Starting value for the first column index (1-indexed)
|
||||||
|
last_col_offset : int, default 25
|
||||||
|
Offset to add to first_col_start to get the last column index
|
||||||
|
special_groups : list of dict, optional
|
||||||
|
List of special groups to insert, each dict should contain:
|
||||||
|
- 'df_name': The DataFrame name to use for all tuples in this group
|
||||||
|
- 'position': Where to insert this group (0 for beginning)
|
||||||
|
- 'size': Size of this group (default: same as group_size)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
--------
|
||||||
|
list
|
||||||
|
List of tuples, where each tuple contains (df_name, [first_col, last_col])
|
||||||
|
"""
|
||||||
|
result = []
|
||||||
|
if group:
|
||||||
|
# Group tuples into sublists of group_size
|
||||||
|
for g in range(6): # TODO: shouldnt be hardcoded
|
||||||
|
group = []
|
||||||
|
for i in range(1, 6): # TODO: shouldnt be hardcoded
|
||||||
|
n = g * 5 + i
|
||||||
|
bottom_end = i # 1, 2, 3, 4, 5
|
||||||
|
top_end = bottom_end + 25 # 26, 27, 28, 29, 30 # TODO: shouldnt be hardcoded
|
||||||
|
group.append((f"{prefix}{n}.{extension}", [bottom_end, top_end]))
|
||||||
|
result.append(group)
|
||||||
|
|
||||||
|
# Add special groups at specified positions (other than beginning)
|
||||||
|
if special_groups:
|
||||||
|
result.insert(0, special_groups)
|
||||||
|
if undamage_file:
|
||||||
|
for i in range (1, 6):
|
||||||
|
n = 5 + i
|
||||||
|
bottom_end = i
|
||||||
|
top_end = bottom_end + 25
|
||||||
|
result[0].append((undamage_file, [bottom_end, top_end]))
|
||||||
|
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
# file_path = os.path.join(base_path, f"zzz{prefix}D{file_index}.TXT")
|
||||||
|
# df = pd.read_csv(file_path, sep="\t", skiprows=10) # Read with explicit column names
|
||||||
|
|
||||||
|
|
||||||
|
class DataProcessor:
|
||||||
|
def __init__(self, file_index, cache_path: str = None, base_path: str = None, include_time: bool = False):
|
||||||
|
self.file_index = file_index
|
||||||
|
self.base_path = base_path
|
||||||
|
self.include_time = include_time
|
||||||
|
if cache_path:
|
||||||
|
self.data = load(cache_path)
|
||||||
|
else:
|
||||||
|
self.data = self.load_data()
|
||||||
|
|
||||||
|
def load_data(self):
|
||||||
|
for idxs, group in enumerate(self.file_index):
|
||||||
|
for idx, tuple in enumerate(group):
|
||||||
|
file_path = os.path.join(self.base_path, tuple[0]) # ('zzzAD1.TXT')
|
||||||
|
if self.include_time:
|
||||||
|
col_indices = [0] + tuple[1] # [1, 26] + [0] -> [0, 1, 26]
|
||||||
|
else:
|
||||||
|
col_indices = tuple[1] # [1, 26]
|
||||||
|
try:
|
||||||
|
# Read the CSV file
|
||||||
|
df = pd.read_csv(file_path, delim_whitespace=True, skiprows=10, header=0, memory_map=True)
|
||||||
|
self.file_index[idxs][idx] = df.iloc[:, col_indices].copy() # Extract the specified columns
|
||||||
|
|
||||||
|
print(f"Processed {file_path}, extracted columns: {col_indices}")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error processing {file_path}: {str(e)}")
|
||||||
|
def _load_dataframe(self, file_path: str) -> OriginalSingleDamageScenario:
|
||||||
|
"""
|
||||||
|
Loads a single data file into a pandas DataFrame.
|
||||||
|
|
||||||
|
:param file_path: Path to the data file.
|
||||||
|
:return: DataFrame containing the numerical data.
|
||||||
|
"""
|
||||||
|
df = pd.read_csv(file_path, delim_whitespace=True, skiprows=10, header=0, memory_map=True, nrows=1)
|
||||||
|
return df
|
||||||
|
|
||||||
|
def _load_all_data(self) -> GroupDataset:
|
||||||
|
"""
|
||||||
|
Loads all data files based on the grouping dictionary and returns a nested list.
|
||||||
|
|
||||||
|
:return: A nested list of DataFrames where the outer index corresponds to group_idx - 1.
|
||||||
|
"""
|
||||||
|
data = []
|
||||||
|
# Find the maximum group index to determine the list size
|
||||||
|
max_group_idx = len(self.file_index) if self.file_index else 0
|
||||||
|
|
||||||
|
# Handle case when file_index is empty
|
||||||
|
if max_group_idx == 0:
|
||||||
|
raise ValueError("No file index provided; file_index is empty.")
|
||||||
|
|
||||||
|
# Initialize empty lists
|
||||||
|
for _ in range(max_group_idx):
|
||||||
|
data.append([])
|
||||||
|
|
||||||
|
# Fill the list with data
|
||||||
|
for group_idx, file_list in self.file_index.items():
|
||||||
|
group_idx -= 1 # adjust due to undamage file
|
||||||
|
data[group_idx] = [self._load_dataframe(file) for file in file_list]
|
||||||
|
return data
|
||||||
|
|
||||||
|
def get_group_data(self, group_idx: int) -> List[pd.DataFrame]:
|
||||||
|
"""
|
||||||
|
Returns the list of DataFrames for the given group index.
|
||||||
|
|
||||||
|
:param group_idx: Index of the group.
|
||||||
|
:return: List of DataFrames.
|
||||||
|
"""
|
||||||
|
return self.data.get([group_idx, []])
|
||||||
|
|
||||||
|
def get_column_names(self, group_idx: int, file_idx: int = 0) -> List[str]:
|
||||||
|
"""
|
||||||
|
Returns the column names for the given group and file indices.
|
||||||
|
|
||||||
|
:param group_idx: Index of the group.
|
||||||
|
:param file_idx: Index of the file in the group.
|
||||||
|
:return: List of column names.
|
||||||
|
"""
|
||||||
|
if group_idx in self.data and len(self.data[group_idx]) > file_idx:
|
||||||
|
return self.data[group_idx][file_idx].columns.tolist()
|
||||||
|
return []
|
||||||
|
|
||||||
|
def get_data_info(self):
|
||||||
|
"""
|
||||||
|
Print information about the loaded data structure.
|
||||||
|
Adapted for when self.data is a List instead of a Dictionary.
|
||||||
|
"""
|
||||||
|
if isinstance(self.data, list):
|
||||||
|
# For each sublist in self.data, get the type names of all elements
|
||||||
|
pprint(
|
||||||
|
[
|
||||||
|
(
|
||||||
|
[type(item).__name__ for item in sublist]
|
||||||
|
if isinstance(sublist, list)
|
||||||
|
else type(sublist).__name__
|
||||||
|
)
|
||||||
|
for sublist in self.data
|
||||||
|
]
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
pprint(
|
||||||
|
{
|
||||||
|
key: [type(df).__name__ for df in value]
|
||||||
|
for key, value in self.data.items()
|
||||||
|
}
|
||||||
|
if isinstance(self.data, dict)
|
||||||
|
else type(self.data).__name__
|
||||||
|
)
|
||||||
|
|
||||||
|
def _create_vector_column_index(self) -> VectorColumnIndices:
|
||||||
|
vector_col_idx: VectorColumnIndices = []
|
||||||
|
y = 0
|
||||||
|
for data_group in self.data: # len(data_group[i]) = 5
|
||||||
|
for j in data_group: # len(j[i]) =
|
||||||
|
c: VectorColumnIndex = []
|
||||||
|
x = 0
|
||||||
|
for _ in range(6): # TODO: range(6) should be dynamic and parameterized
|
||||||
|
c.append(x + y)
|
||||||
|
x += 5
|
||||||
|
vector_col_idx.append(c)
|
||||||
|
y += 1
|
||||||
|
return vector_col_idx # TODO: refactor this so that it returns just from first data_group without using for loops through the self.data that seems unnecessary
|
||||||
|
|
||||||
|
def create_vector_column(self, overwrite=True) -> List[List[List[pd.DataFrame]]]:
|
||||||
|
"""
|
||||||
|
Create a vector column from the loaded data.
|
||||||
|
|
||||||
|
:param overwrite: Overwrite the original data with vector column-based data.
|
||||||
|
"""
|
||||||
|
idxs = self._create_vector_column_index()
|
||||||
|
for i, group in enumerate(self.data):
|
||||||
|
# add 1 to all indices to account for 'Time' being at position 0
|
||||||
|
for j, df in enumerate(group):
|
||||||
|
idx = [_ + 1 for _ in idxs[j]]
|
||||||
|
# slice out the desired columns, copy into a fresh DataFrame,
|
||||||
|
# then overwrite self.data[i][j] with it
|
||||||
|
self.data[i][j] = df.iloc[:, idx].copy()
|
||||||
|
|
||||||
|
# TODO: if !overwrite:
|
||||||
|
|
||||||
|
def create_limited_sensor_vector_column(self, overwrite=True):
|
||||||
|
"""
|
||||||
|
Create a vector column from the loaded data.
|
||||||
|
|
||||||
|
:param overwrite: Overwrite the original data with vector column-based data.
|
||||||
|
"""
|
||||||
|
idx = self._create_vector_column_index()
|
||||||
|
# if overwrite:
|
||||||
|
for i in range(len(self.data)): # damage(s)
|
||||||
|
for j in range(len(self.data[i])): # col(s)
|
||||||
|
# Get the appropriate indices for slicing from idx
|
||||||
|
indices = idx[j]
|
||||||
|
|
||||||
|
# Get the current DataFrame
|
||||||
|
df = self.data[i][j]
|
||||||
|
|
||||||
|
# Keep the 'Time' column and select only specifid 'Real' colmns
|
||||||
|
# First, we add 1 to all indices to acount for 'Time' being at positiion 0
|
||||||
|
real_indices = [index + 1 for index in indices]
|
||||||
|
|
||||||
|
# Create list with Time column index (0) and the adjustedd Real indices
|
||||||
|
all_indices = [0] + [real_indices[0]] + [real_indices[-1]]
|
||||||
|
|
||||||
|
# Apply the slicing
|
||||||
|
self.data[i][j] = df.iloc[:, all_indices]
|
||||||
|
# TODO: if !overwrite:
|
||||||
|
|
||||||
|
def export_to_csv(self, output_dir: str, file_prefix: str = "DAMAGE"):
|
||||||
|
"""
|
||||||
|
Export the processed data to CSV files in the required folder structure.
|
||||||
|
|
||||||
|
:param output_dir: Directory to save the CSV files.
|
||||||
|
:param file_prefix: Prefix for the output filenames.
|
||||||
|
"""
|
||||||
|
for group_idx, group in enumerate(self.file_index, start=0):
|
||||||
|
group_folder = os.path.join(output_dir, f"{file_prefix}_{group_idx}")
|
||||||
|
os.makedirs(group_folder, exist_ok=True)
|
||||||
|
|
||||||
|
for test_idx, df in enumerate(group, start=1):
|
||||||
|
out1 = os.path.join(group_folder, f"{file_prefix}_{group_idx}_TEST{test_idx}_01.csv")
|
||||||
|
cols_to_export = [0, 1] if self.include_time else [1]
|
||||||
|
df.iloc[:, cols_to_export].to_csv(out1, index=False)
|
||||||
|
|
||||||
|
out2 = os.path.join(group_folder, f"{file_prefix}_{group_idx}_TEST{test_idx}_02.csv")
|
||||||
|
cols_to_export = [0, 2] if self.include_time else [2]
|
||||||
|
df.iloc[:, cols_to_export].to_csv(out2, index=False)
|
||||||
|
|
||||||
|
# def create_damage_files(base_path, output_base, prefix):
|
||||||
|
# # Initialize colorama
|
||||||
|
# init(autoreset=True)
|
||||||
|
|
||||||
|
# # Generate column labels based on expected duplication in input files
|
||||||
|
# columns = ["Real"] + [
|
||||||
|
# f"Real.{i}" for i in range(1, 30)
|
||||||
|
# ] # Explicitly setting column names
|
||||||
|
|
||||||
|
# sensor_end_map = {
|
||||||
|
# 1: "Real.25",
|
||||||
|
# 2: "Real.26",
|
||||||
|
# 3: "Real.27",
|
||||||
|
# 4: "Real.28",
|
||||||
|
# 5: "Real.29",
|
||||||
|
# }
|
||||||
|
|
||||||
|
# # Define the damage scenarios and the corresponding original file indices
|
||||||
|
# damage_scenarios = {
|
||||||
|
# 1: range(1, 6), # Damage 1 files from zzzAD1.csv to zzzAD5.csv
|
||||||
|
# 2: range(6, 11), # Damage 2 files from zzzAD6.csv to zzzAD10.csv
|
||||||
|
# 3: range(11, 16), # Damage 3 files from zzzAD11.csv to zzzAD15.csvs
|
||||||
|
# 4: range(16, 21), # Damage 4 files from zzzAD16.csv to zzzAD20.csv
|
||||||
|
# 5: range(21, 26), # Damage 5 files from zzzAD21.csv to zzzAD25.csv
|
||||||
|
# 6: range(26, 31), # Damage 6 files from zzzAD26.csv to zzzAD30.csv
|
||||||
|
# }
|
||||||
|
# damage_pad = len(str(len(damage_scenarios)))
|
||||||
|
# test_pad = len(str(30))
|
||||||
|
|
||||||
|
# for damage, files in damage_scenarios.items():
|
||||||
|
# for i, file_index in enumerate(files, start=1):
|
||||||
|
# # Load original data file
|
||||||
|
# file_path = os.path.join(base_path, f"zzz{prefix}D{file_index}.TXT")
|
||||||
|
# df = pd.read_csv(
|
||||||
|
# file_path, sep="\t", skiprows=10
|
||||||
|
# ) # Read with explicit column names
|
||||||
|
|
||||||
|
# top_sensor = columns[i - 1]
|
||||||
|
# print(top_sensor, type(top_sensor))
|
||||||
|
# output_file_1 = os.path.join(
|
||||||
|
# output_base, f"DAMAGE_{damage}", f"DAMAGE{damage}_TEST{i}_01.csv"
|
||||||
|
# )
|
||||||
|
# print(f"Creating {output_file_1} from taking zzz{prefix}D{file_index}.TXT")
|
||||||
|
# print("Taking datetime column on index 0...")
|
||||||
|
# print(f"Taking `{top_sensor}`...")
|
||||||
|
# os.makedirs(os.path.dirname(output_file_1), exist_ok=True)
|
||||||
|
# df[["Time", top_sensor]].to_csv(output_file_1, index=False)
|
||||||
|
# print(Fore.GREEN + "Done")
|
||||||
|
|
||||||
|
# bottom_sensor = sensor_end_map[i]
|
||||||
|
# output_file_2 = os.path.join(
|
||||||
|
# output_base, f"DAMAGE_{damage}", f"DAMAGE{damage}_TEST{i}_02.csv"
|
||||||
|
# )
|
||||||
|
# print(f"Creating {output_file_2} from taking zzz{prefix}D{file_index}.TXT")
|
||||||
|
# print("Taking datetime column on index 0...")
|
||||||
|
# print(f"Taking `{bottom_sensor}`...")
|
||||||
|
# os.makedirs(os.path.dirname(output_file_2), exist_ok=True)
|
||||||
|
# df[["Time", bottom_sensor]].to_csv(output_file_2, index=False)
|
||||||
|
# print(Fore.GREEN + "Done")
|
||||||
|
# print("---")
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
if len(sys.argv) < 2:
|
||||||
|
print("Usage: python convert.py <path_to_csv_files>")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
base_path = sys.argv[1]
|
||||||
|
output_base = sys.argv[2]
|
||||||
|
prefix = sys.argv[3] # Define output directory
|
||||||
|
|
||||||
|
# Create output folders if they don't exist
|
||||||
|
# for i in range(1, 7):
|
||||||
|
# os.makedirs(os.path.join(output_base, f'DAMAGE_{i}'), exist_ok=True)
|
||||||
|
|
||||||
|
create_damage_files(base_path, output_base, prefix)
|
||||||
|
print(Fore.YELLOW + Style.BRIGHT + "All files have been created successfully.")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
199
code/src/inference.py
Normal file
199
code/src/inference.py
Normal file
@@ -0,0 +1,199 @@
|
|||||||
|
from joblib import load
|
||||||
|
import pandas as pd
|
||||||
|
import numpy as np
|
||||||
|
from process_stft import compute_stft
|
||||||
|
from typing import List, Tuple
|
||||||
|
from sklearn.base import BaseEstimator
|
||||||
|
|
||||||
|
|
||||||
|
def probability_damage(pred: Tuple[np.ndarray, np.ndarray], model_classes: BaseEstimator, percentage=False) -> dict[str, int]:
|
||||||
|
"""
|
||||||
|
Process the prediction output to return unique labels and their counts.
|
||||||
|
"""
|
||||||
|
labels, counts = np.unique(pred, return_counts=True)
|
||||||
|
label_counts = dict(zip(labels, counts))
|
||||||
|
|
||||||
|
# init all models classes probability of damage with 0 in dictionary
|
||||||
|
pod: dict[np.ndarray, int] = dict.fromkeys(model_classes.classes_, 0)
|
||||||
|
|
||||||
|
# update corresponding data
|
||||||
|
pod.update(label_counts)
|
||||||
|
|
||||||
|
# turn the value into ratio instead of prediction counts
|
||||||
|
for label, count in pod.items():
|
||||||
|
|
||||||
|
ratio: float = count/np.sum(counts)
|
||||||
|
|
||||||
|
if percentage:
|
||||||
|
pod[label] = ratio * 100
|
||||||
|
else:
|
||||||
|
pod[label] = ratio
|
||||||
|
return pod
|
||||||
|
|
||||||
|
def convert_keys_to_strings(obj):
|
||||||
|
"""
|
||||||
|
Recursively convert all dictionary keys to strings.
|
||||||
|
"""
|
||||||
|
if isinstance(obj, dict):
|
||||||
|
return {str(key): convert_keys_to_strings(value) for key, value in obj["data"].items()}
|
||||||
|
elif isinstance(obj, list):
|
||||||
|
return [convert_keys_to_strings(item) for item in obj["data"]]
|
||||||
|
else:
|
||||||
|
return obj
|
||||||
|
|
||||||
|
def inference(model_sensor_A_path: str, model_sensor_B_path: str, file_path: str):
|
||||||
|
|
||||||
|
# Generate column indices
|
||||||
|
column_index: List[Tuple[int, int]] = [
|
||||||
|
(i + 1, i + 26)
|
||||||
|
for i in range(5)
|
||||||
|
]
|
||||||
|
# Load a single case data
|
||||||
|
df: pd.DataFrame = pd.read_csv(file_path, delim_whitespace=True, skiprows=10, header=0, memory_map=True)
|
||||||
|
# Take case name
|
||||||
|
case_name: str = file_path.split("/")[-1].split(".")[0]
|
||||||
|
# Extract relevant columns for each sensor
|
||||||
|
column_data: List[Tuple[pd.Series[float], pd.Series[float]]] = [
|
||||||
|
(df.iloc[:, i[0]], df.iloc[:, i[1]])
|
||||||
|
for i in column_index
|
||||||
|
]
|
||||||
|
|
||||||
|
column_data_stft: List[Tuple[pd.DataFrame, pd.DataFrame]] = [
|
||||||
|
(compute_stft(sensor_A), compute_stft(sensor_B))
|
||||||
|
for (sensor_A, sensor_B) in column_data
|
||||||
|
]
|
||||||
|
|
||||||
|
# Load the model
|
||||||
|
model_sensor_A = load(model_sensor_A_path)
|
||||||
|
model_sensor_B = load(model_sensor_B_path)
|
||||||
|
|
||||||
|
res = {}
|
||||||
|
|
||||||
|
for i, (stft_A, stft_B) in enumerate(column_data_stft):
|
||||||
|
# Make predictions using the model
|
||||||
|
pred_A: list[int] = model_sensor_A.predict(stft_A)
|
||||||
|
pred_B: list[int] = model_sensor_B.predict(stft_B)
|
||||||
|
|
||||||
|
|
||||||
|
percentage_A = probability_damage(pred_A, model_sensor_A)
|
||||||
|
percentage_B = probability_damage(pred_B, model_sensor_B)
|
||||||
|
|
||||||
|
|
||||||
|
res[f"Column_{i+1}"] = {
|
||||||
|
"Sensor_A": {
|
||||||
|
# "Predictions": pred_A,
|
||||||
|
"PoD": percentage_A
|
||||||
|
},
|
||||||
|
"Sensor_B": {
|
||||||
|
# "Predictions": pred_B,
|
||||||
|
"PoD": percentage_B
|
||||||
|
}
|
||||||
|
}
|
||||||
|
final_res = {"data": res, "case": case_name}
|
||||||
|
return final_res
|
||||||
|
|
||||||
|
def heatmap(result, damage_classes: list[int] = [1, 2, 3, 4, 5, 6], sensor: str = 'Sensor_A'):
|
||||||
|
from scipy.interpolate import RectBivariateSpline
|
||||||
|
resolution = 300
|
||||||
|
y = list(range(1, len(damage_classes)+1))
|
||||||
|
|
||||||
|
# length of column
|
||||||
|
x = list(range(len(result["data"])))
|
||||||
|
|
||||||
|
# X, Y = np.meshgrid(x, y)
|
||||||
|
Z = []
|
||||||
|
for _, column_data in result["data"].items():
|
||||||
|
sensor_a_pod = column_data[sensor]['PoD']
|
||||||
|
Z.append([sensor_a_pod.get(cls, 0) for cls in damage_classes])
|
||||||
|
Z = np.array(Z).T
|
||||||
|
|
||||||
|
y2 = np.linspace(1, len(damage_classes), resolution)
|
||||||
|
x2 = np.linspace(0,4,resolution)
|
||||||
|
f = RectBivariateSpline(x, y, Z.T, kx=2, ky=2) # 2nd degree quadratic spline interpolation
|
||||||
|
|
||||||
|
Z2 = f(x2, y2).T.clip(0, 1) # clip to ignores negative values from cubic interpolation
|
||||||
|
|
||||||
|
X2, Y2 = np.meshgrid(x2, y2)
|
||||||
|
# breakpoint()
|
||||||
|
plt.figure(figsize=(9, 6))
|
||||||
|
|
||||||
|
# Change the window title
|
||||||
|
plt.gcf().canvas.manager.set_window_title(f"Heatmap {sensor} - {result['case']}")
|
||||||
|
|
||||||
|
c = plt.pcolormesh(X2, Y2, Z2, cmap='jet', shading='auto', vmin=0, vmax=1)
|
||||||
|
|
||||||
|
# Add a colorbar
|
||||||
|
plt.colorbar(c, label='Probability of Damage (PoD)', fraction=0.05)
|
||||||
|
plt.gca().invert_xaxis()
|
||||||
|
plt.grid(True, linestyle='-', alpha=0.7)
|
||||||
|
plt.xticks(np.arange(0, 5, 1), np.arange(1, 6, 1))
|
||||||
|
plt.xlabel("Column Index")
|
||||||
|
plt.ylabel("Damage Index")
|
||||||
|
plt.title(result["case"])
|
||||||
|
# plt.xticks(ticks=x2, labels=[f'Col_{i+1}' for i in range(len(result))])
|
||||||
|
# plt.gca().xaxis.set_major_locator(MultipleLocator(65/4))
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
def plot_sensor_pod(result, sensor: str = 'Sensor_A', damage_classes: list[int] = [1, 2, 3, 4, 5, 6]):
|
||||||
|
"""
|
||||||
|
Plot Probability of Damage (PoD) for all columns for a specific sensor.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
result: Dictionary containing inference results
|
||||||
|
sensor: Sensor name ('Sensor_A' or 'Sensor_B')
|
||||||
|
damage_classes: List of damage class labels
|
||||||
|
"""
|
||||||
|
x_values = list(range(len(damage_classes)))
|
||||||
|
|
||||||
|
# Define colors for different columns
|
||||||
|
colors = plt.cm.tab10(np.linspace(0, 1, len(result['data'])))
|
||||||
|
|
||||||
|
# Create figure
|
||||||
|
plt.figure(figsize=(9, 6))
|
||||||
|
|
||||||
|
# Create a figure
|
||||||
|
|
||||||
|
# Change the window title
|
||||||
|
plt.gcf().canvas.manager.set_window_title(f"PoD {sensor} - {result['case']}")
|
||||||
|
# line_styles = ['-', '--', '-.', ':'] # Solid, dashed, dash-dot, dotted
|
||||||
|
markers = ['o', 's', '^', 'D', 'x'] # Circle, square, triangle, diamond, cross
|
||||||
|
|
||||||
|
# Loop through each column in the data
|
||||||
|
for row_idx, (column_name, column_data) in enumerate(result['data'].items()):
|
||||||
|
sensor_pod = column_data[sensor]['PoD']
|
||||||
|
y_values = [sensor_pod.get(cls, 0) for cls in damage_classes]
|
||||||
|
|
||||||
|
# Cycle through line styles and markers
|
||||||
|
# line_style = line_styles[row_idx % len(line_styles)]
|
||||||
|
marker = markers[row_idx % len(markers)]
|
||||||
|
|
||||||
|
plt.plot(x_values, y_values, linestyle='-', marker=marker, linewidth=2, markersize=8,
|
||||||
|
color=colors[row_idx], label=column_name, alpha=0.8)
|
||||||
|
|
||||||
|
# Configure plot
|
||||||
|
# plt.title(f"{sensor}", fontsize=14, fontweight='bold')
|
||||||
|
plt.xticks(x_values, damage_classes)
|
||||||
|
plt.ylim(0, 1.05)
|
||||||
|
plt.ylabel('Probability', fontsize=12)
|
||||||
|
plt.xlabel('Damage Class', fontsize=12)
|
||||||
|
plt.grid(True, linestyle='-', alpha=0.3)
|
||||||
|
plt.legend(loc='best', fontsize=10)
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import json
|
||||||
|
# from scipy.interpolate import UnivariateSpline
|
||||||
|
|
||||||
|
|
||||||
|
result = inference(
|
||||||
|
"D:/thesis/models/Sensor A/finegrid_pca32_c8_g-8.joblib",
|
||||||
|
"D:/thesis/models/Sensor B/finegrid_pca16_c3_g-5.5.joblib",
|
||||||
|
"D:/thesis/data/dataset_B/zzzBD30.TXT"
|
||||||
|
)
|
||||||
|
|
||||||
|
heatmap(result, sensor='Sensor_A')
|
||||||
|
heatmap(result, sensor='Sensor_B')
|
||||||
|
|
||||||
|
plot_sensor_pod(result, sensor='Sensor_A')
|
||||||
|
plot_sensor_pod(result, sensor='Sensor_B')
|
||||||
272
code/src/ml/model_selection.py
Normal file
272
code/src/ml/model_selection.py
Normal file
@@ -0,0 +1,272 @@
|
|||||||
|
import numpy as np
|
||||||
|
import pandas as pd
|
||||||
|
import os
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay, classification_report
|
||||||
|
from joblib import load
|
||||||
|
|
||||||
|
def create_ready_data(
|
||||||
|
stft_data_path: str,
|
||||||
|
stratify: np.ndarray = None,
|
||||||
|
) -> tuple[pd.DataFrame, np.ndarray]:
|
||||||
|
"""
|
||||||
|
Create a stratified train-test split from STFT data.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
-----------
|
||||||
|
stft_data_path : str
|
||||||
|
Path to the directory containing STFT data files (e.g. 'data/converted/raw/sensor1')
|
||||||
|
stratify : np.ndarray, optional
|
||||||
|
Labels to use for stratified sampling
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
--------
|
||||||
|
tuple
|
||||||
|
(pd.DataFrame, np.ndarray) - Combined data and corresponding labels
|
||||||
|
"""
|
||||||
|
ready_data = []
|
||||||
|
for file in os.listdir(stft_data_path):
|
||||||
|
ready_data.append(pd.read_csv(os.path.join(stft_data_path, file), skiprows=1))
|
||||||
|
|
||||||
|
y_data = [i for i in range(len(ready_data))] # TODO: Should be replaced with actual desired labels
|
||||||
|
|
||||||
|
# Combine all dataframes in ready_data into a single dataframe
|
||||||
|
if ready_data: # Check if the list is not empty
|
||||||
|
# Use pandas concat function instead of iterative concatenation
|
||||||
|
combined_data = pd.concat(ready_data, axis=0, ignore_index=True)
|
||||||
|
|
||||||
|
print(f"Type of combined data: {type(combined_data)}")
|
||||||
|
print(f"Shape of combined data: {combined_data.shape}")
|
||||||
|
else:
|
||||||
|
print("No data available in ready_data list")
|
||||||
|
combined_data = pd.DataFrame()
|
||||||
|
|
||||||
|
# Store the result in x1a for compatibility with subsequent code
|
||||||
|
X = combined_data
|
||||||
|
|
||||||
|
for i in range(len(y_data)):
|
||||||
|
y_data[i] = [y_data[i]] * ready_data[i].shape[0]
|
||||||
|
y_data[i] = np.array(y_data[i])
|
||||||
|
|
||||||
|
if y_data:
|
||||||
|
# Use numpy concatenate function instead of iterative concatenation
|
||||||
|
y = np.concatenate(y_data, axis=0)
|
||||||
|
else:
|
||||||
|
print("No labels available in y_data list")
|
||||||
|
y = np.array([])
|
||||||
|
|
||||||
|
return X, y
|
||||||
|
|
||||||
|
|
||||||
|
def train_and_evaluate_model(
|
||||||
|
model, model_name, sensor_label, x_train, y_train, x_test, y_test, export=None
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
Train a machine learning model, evaluate its performance, and optionally export it.
|
||||||
|
|
||||||
|
This function trains the provided model on the training data, evaluates its
|
||||||
|
performance on test data using accuracy score, and can save the trained model
|
||||||
|
to disk if an export path is provided.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
model : estimator object
|
||||||
|
The machine learning model to train.
|
||||||
|
model_name : str
|
||||||
|
Name of the model, used for the export filename and in the returned results.
|
||||||
|
sensor_label : str
|
||||||
|
Label identifying which sensor's data the model is being trained on.
|
||||||
|
x_train : array-like or pandas.DataFrame
|
||||||
|
The training input samples.
|
||||||
|
y_train : array-like
|
||||||
|
The target values for training.
|
||||||
|
x_test : array-like or pandas.DataFrame
|
||||||
|
The test input samples.
|
||||||
|
y_test : array-like
|
||||||
|
The target values for testing.
|
||||||
|
export : str, optional
|
||||||
|
Directory path where the trained model should be saved. If None, model won't be saved.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
dict
|
||||||
|
Dictionary containing:
|
||||||
|
- 'model': model_name (str)
|
||||||
|
- 'sensor': sensor_label (str)
|
||||||
|
- 'accuracy': accuracy percentage (float)
|
||||||
|
|
||||||
|
Example
|
||||||
|
-------
|
||||||
|
>>> from sklearn.svm import SVC
|
||||||
|
>>> from sklearn.model_selection import train_test_split
|
||||||
|
>>> X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2)
|
||||||
|
>>> result = train_and_evaluate_model(
|
||||||
|
... SVC(),
|
||||||
|
... "SVM",
|
||||||
|
... "sensor1",
|
||||||
|
... X_train,
|
||||||
|
... y_train,
|
||||||
|
... X_test,
|
||||||
|
... y_test,
|
||||||
|
... export="models/sensor1"
|
||||||
|
... )
|
||||||
|
>>> print(f"Model accuracy: {result['accuracy']:.2f}%")
|
||||||
|
"""
|
||||||
|
from sklearn.metrics import accuracy_score
|
||||||
|
|
||||||
|
result = {"model": model_name, "sensor": sensor_label, "success": False}
|
||||||
|
|
||||||
|
try:
|
||||||
|
import time
|
||||||
|
start_time = time.time()
|
||||||
|
|
||||||
|
# Train the model
|
||||||
|
model.fit(x_train, y_train)
|
||||||
|
|
||||||
|
result["elapsed_time_training"] = time.time() - start_time
|
||||||
|
try:
|
||||||
|
# Predict on the test set (validation)
|
||||||
|
start_time = time.time()
|
||||||
|
|
||||||
|
y_pred = model.predict(x_test)
|
||||||
|
|
||||||
|
result["elapsed_time_validation"] = time.time() - start_time
|
||||||
|
result["y_pred"] = y_pred # Convert to numpy array
|
||||||
|
except Exception as e:
|
||||||
|
result["error"] = f"Prediction error: {str(e)}"
|
||||||
|
return result
|
||||||
|
|
||||||
|
# Calculate accuracy
|
||||||
|
try:
|
||||||
|
accuracy = accuracy_score(y_test, y_pred) * 100
|
||||||
|
result["accuracy"] = accuracy
|
||||||
|
except Exception as e:
|
||||||
|
result["error"] = f"Accuracy calculation error: {str(e)}"
|
||||||
|
return result
|
||||||
|
|
||||||
|
# Export model if requested
|
||||||
|
if export:
|
||||||
|
try:
|
||||||
|
import joblib
|
||||||
|
|
||||||
|
full_path = os.path.join(export, f"{model_name}.joblib")
|
||||||
|
os.makedirs(os.path.dirname(full_path), exist_ok=True)
|
||||||
|
joblib.dump(model, full_path)
|
||||||
|
print(f"Model saved to {full_path}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Warning: Failed to export model to {export}: {str(e)}")
|
||||||
|
result["export_error"] = str(e)
|
||||||
|
# Continue despite export error
|
||||||
|
|
||||||
|
result["success"] = True
|
||||||
|
result["classification_report"] = classification_report(y_test, y_pred, output_dict=True)
|
||||||
|
return result
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
result["error"] = f"Training error: {str(e)}"
|
||||||
|
return result
|
||||||
|
def plot_confusion_matrix(results_sensor, y_test, title):
|
||||||
|
"""
|
||||||
|
Plot confusion matrices for each model in results_sensor1.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
-----------
|
||||||
|
results_sensor1 : list
|
||||||
|
List of dictionaries containing model results.
|
||||||
|
x_test1 : array-like
|
||||||
|
Test input samples.
|
||||||
|
y_test : array-like
|
||||||
|
True labels for the test samples.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
--------
|
||||||
|
None
|
||||||
|
This function will display confusion matrices for each model in results_sensor1.
|
||||||
|
|
||||||
|
Example
|
||||||
|
-------
|
||||||
|
>>> results_sensor1 = [
|
||||||
|
... {'model': 'model1', 'accuracy': 95.0},
|
||||||
|
... {'model': 'model2', 'accuracy': 90.0}
|
||||||
|
... ]
|
||||||
|
>>> x_test1 = np.random.rand(100, 10) # Example test data
|
||||||
|
>>> y_test = np.random.randint(0, 2, size=100) # Example true labels
|
||||||
|
>>> plot_confusion_matrix(results_sensor1, x_test1, y_test)
|
||||||
|
"""
|
||||||
|
# Iterate through each model result and plot confusion matrix
|
||||||
|
for i in results_sensor:
|
||||||
|
model = load(f"D:/thesis/models/{i['sensor']}/{i['model']}.joblib")
|
||||||
|
cm = confusion_matrix(y_test, i['y_pred']) # -> ndarray
|
||||||
|
|
||||||
|
# get the class labels
|
||||||
|
labels = model.classes_
|
||||||
|
# Plot
|
||||||
|
disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=labels)
|
||||||
|
disp.plot(cmap=plt.cm.Blues) # You can change colormap
|
||||||
|
plt.title(f"{title}")
|
||||||
|
|
||||||
|
def calculate_label_percentages(labels):
|
||||||
|
"""
|
||||||
|
Calculate and print the percentage distribution of unique labels in a numpy array.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
labels (np.array): Input array of labels.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
None
|
||||||
|
"""
|
||||||
|
# Count occurrences of each unique label
|
||||||
|
unique, counts = np.unique(labels, return_counts=True)
|
||||||
|
|
||||||
|
# Calculate percentages
|
||||||
|
percentages = (counts / len(labels)) * 100
|
||||||
|
|
||||||
|
# Build and print the result string
|
||||||
|
result = "\n".join([f"Label {label}: {percentage:.2f}%" for label, percentage in zip(unique, percentages)])
|
||||||
|
return print(result)
|
||||||
|
|
||||||
|
def inference_model(
|
||||||
|
models, raw_file, column_question: int = None
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
Perform inference using a trained machine learning model on a raw vibration data file with questioned column grid.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
model : dict with some exported model path
|
||||||
|
The trained machine learning model to use for inference.
|
||||||
|
x_test : array-like or pandas.DataFrame
|
||||||
|
The input samples for which predictions are to be made.
|
||||||
|
export : str, optional
|
||||||
|
Directory path where the predictions should be saved. If None, predictions won't be saved.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
np.ndarray
|
||||||
|
Array of predicted values.
|
||||||
|
|
||||||
|
Example
|
||||||
|
-------
|
||||||
|
>>> from sklearn.svm import SVC
|
||||||
|
>>> model = {"SVM": "models/sensor1/SVM.joblib", "SVM with PCA": "models/sensor1/SVM_with_PCA.joblib"}
|
||||||
|
>>> inference_model(model["SVM"], "zzzAD1.TXT", column_question=1)
|
||||||
|
"""
|
||||||
|
df = pd.read_csv(raw_file, delim_whitespace=True, skiprows=10, header=0, memory_map=True)
|
||||||
|
col_idx = []
|
||||||
|
for i in range(1,6):
|
||||||
|
idx = [i, i+5, i+10, i+15, i+20, i+25]
|
||||||
|
col_idx.append(idx)
|
||||||
|
vibration_data = df.iloc[:, column_question].values
|
||||||
|
# Perform STFT
|
||||||
|
from scipy.signal import stft, hann
|
||||||
|
freq, times, Zxx = stft(
|
||||||
|
vibration_data,
|
||||||
|
fs=1024,
|
||||||
|
window=hann(1024),
|
||||||
|
nperseg=1024,
|
||||||
|
noverlap=1024-512
|
||||||
|
)
|
||||||
|
data = pd.DataFrame(np.abs(Zxx).T, columns=[f"Freq_{freq:.2f}" for freq in np.linspace(0, 1024/2, Zxx.shape[1])])
|
||||||
|
data = data.rename(columns={"Freq_0.00": "00"}) # To match the model input format
|
||||||
|
model = load(models) # Load the model from the provided path
|
||||||
|
return calculate_label_percentages(model.predict(data.iloc[:21,:]))
|
||||||
@@ -1,12 +1,14 @@
|
|||||||
import os
|
import os
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from scipy.signal import stft, hann
|
from scipy.signal import stft
|
||||||
|
from scipy.signal.windows import hann
|
||||||
import glob
|
import glob
|
||||||
import multiprocessing # Added import for multiprocessing
|
import multiprocessing # Added import for multiprocessing
|
||||||
|
from typing import Union, Tuple
|
||||||
|
|
||||||
# Define the base directory where DAMAGE_X folders are located
|
# Define the base directory where DAMAGE_X folders are located
|
||||||
damage_base_path = 'D:/thesis/data/converted/raw'
|
damage_base_path = 'D:/thesis/data/converted/raw_B'
|
||||||
|
|
||||||
# Define output directories for each sensor
|
# Define output directories for each sensor
|
||||||
output_dirs = {
|
output_dirs = {
|
||||||
@@ -19,32 +21,65 @@ for dir_path in output_dirs.values():
|
|||||||
os.makedirs(dir_path, exist_ok=True)
|
os.makedirs(dir_path, exist_ok=True)
|
||||||
|
|
||||||
# Define STFT parameters
|
# Define STFT parameters
|
||||||
window_size = 1024
|
|
||||||
hop_size = 512
|
|
||||||
window = hann(window_size)
|
|
||||||
Fs = 1024
|
|
||||||
|
|
||||||
# Number of damage cases (adjust as needed)
|
# Number of damage cases (adjust as needed)
|
||||||
num_damage_cases = 6 # Change to 30 if you have 30 damage cases
|
num_damage_cases = 6 # Change to 30 if you have 30 damage cases
|
||||||
|
|
||||||
# Number of test runs per damage case
|
|
||||||
num_test_runs = 5
|
|
||||||
|
|
||||||
# Function to perform STFT and return magnitude
|
# Function to perform STFT and return magnitude
|
||||||
def compute_stft(vibration_data):
|
def compute_stft(vibration_data: np.ndarray, return_param: bool = False) -> Union[pd.DataFrame, Tuple[pd.DataFrame, list[int, int, int]]]:
|
||||||
|
"""
|
||||||
|
Computes the Short-Time Fourier Transform (STFT) magnitude of the input vibration data.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
vibration_data : numpy.ndarray
|
||||||
|
The input vibration data as a 1D NumPy array.
|
||||||
|
return_param : bool, optional
|
||||||
|
If True, the function returns additional STFT parameters (window size, hop size, and sampling frequency).
|
||||||
|
Defaults to False.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
pd.DataFrame
|
||||||
|
The transposed STFT magnitude, with frequencies as columns, if `return_param` is False.
|
||||||
|
tuple
|
||||||
|
If `return_param` is True, returns a tuple containing:
|
||||||
|
- pd.DataFrame: The transposed STFT magnitude, with frequencies as columns.
|
||||||
|
- list[int, int, int]: A list of STFT parameters [window_size, hop_size, Fs].
|
||||||
|
"""
|
||||||
|
|
||||||
|
window_size = 1024
|
||||||
|
hop_size = 512
|
||||||
|
window = hann(window_size)
|
||||||
|
Fs = 1024
|
||||||
|
|
||||||
frequencies, times, Zxx = stft(
|
frequencies, times, Zxx = stft(
|
||||||
vibration_data,
|
vibration_data,
|
||||||
fs=Fs,
|
fs=Fs,
|
||||||
window=window,
|
window=window,
|
||||||
nperseg=window_size,
|
nperseg=window_size,
|
||||||
noverlap=window_size - hop_size
|
noverlap=window_size - hop_size
|
||||||
)
|
)
|
||||||
stft_magnitude = np.abs(Zxx)
|
stft_magnitude = np.abs(Zxx)
|
||||||
return stft_magnitude.T # Transpose to have frequencies as columns
|
|
||||||
|
# Convert STFT result to DataFrame
|
||||||
|
df_stft = pd.DataFrame(
|
||||||
|
stft_magnitude.T,
|
||||||
|
columns=[f"Freq_{freq:.2f}" for freq in np.linspace(0, Fs/2, stft_magnitude.shape[1])]
|
||||||
|
)
|
||||||
|
# breakpoint()
|
||||||
|
if return_param:
|
||||||
|
return df_stft, [window_size, hop_size, Fs]
|
||||||
|
else:
|
||||||
|
return df_stft
|
||||||
|
|
||||||
def process_damage_case(damage_num):
|
def process_damage_case(damage_num):
|
||||||
damage_folder = os.path.join(damage_base_path, f'DAMAGE_{damage_num}')
|
damage_folder = os.path.join(damage_base_path, f'DAMAGE_{damage_num}')
|
||||||
|
if damage_num == 0:
|
||||||
|
# Number of test runs per damage case
|
||||||
|
num_test_runs = 125
|
||||||
|
else:
|
||||||
|
num_test_runs = 5
|
||||||
# Check if the damage folder exists
|
# Check if the damage folder exists
|
||||||
if not os.path.isdir(damage_folder):
|
if not os.path.isdir(damage_folder):
|
||||||
print(f"Folder {damage_folder} does not exist. Skipping...")
|
print(f"Folder {damage_folder} does not exist. Skipping...")
|
||||||
@@ -79,20 +114,24 @@ def process_damage_case(damage_num):
|
|||||||
print(f"Unexpected number of columns in {file_path}. Expected 2, got {df.shape[1]}. Skipping...")
|
print(f"Unexpected number of columns in {file_path}. Expected 2, got {df.shape[1]}. Skipping...")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Extract vibration data (assuming the second column is sensor data)
|
|
||||||
vibration_data = df.iloc[:, 1].values
|
vibration_data = df.iloc[:, 1].values
|
||||||
|
|
||||||
# Perform STFT
|
# Perform STFT
|
||||||
stft_magnitude = compute_stft(vibration_data)
|
df_stft = compute_stft(vibration_data)
|
||||||
|
|
||||||
# Convert STFT result to DataFrame
|
# only inlcude 21 samples vector features for first 45 num_test_runs else include 22 samples vector features
|
||||||
df_stft = pd.DataFrame(
|
if damage_num == 0:
|
||||||
stft_magnitude,
|
print(f"Processing damage_num = 0, test_num = {test_num}")
|
||||||
columns=[f"Freq_{freq:.2f}" for freq in np.linspace(0, Fs/2, stft_magnitude.shape[1])]
|
if test_num <= 60:
|
||||||
)
|
df_stft = df_stft.iloc[:20, :]
|
||||||
|
print(f"Reduced df_stft shape (20 samples): {df_stft.shape}")
|
||||||
|
else:
|
||||||
|
df_stft = df_stft.iloc[:21, :]
|
||||||
|
print(f"Reduced df_stft shape (21 samples): {df_stft.shape}")
|
||||||
|
|
||||||
# Append to the aggregated list
|
# Append to the aggregated list
|
||||||
aggregated_stft.append(df_stft)
|
aggregated_stft.append(df_stft)
|
||||||
|
print(sum(df.shape[0] for df in aggregated_stft))
|
||||||
|
|
||||||
# Concatenate all STFT DataFrames vertically
|
# Concatenate all STFT DataFrames vertically
|
||||||
if aggregated_stft:
|
if aggregated_stft:
|
||||||
@@ -105,11 +144,13 @@ def process_damage_case(damage_num):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Save the aggregated STFT to CSV
|
# Save the aggregated STFT to CSV
|
||||||
df_aggregated.to_csv(output_file, index=False)
|
with open(output_file, 'w') as file:
|
||||||
|
file.write('sep=,\n')
|
||||||
|
df_aggregated.to_csv(file, index=False)
|
||||||
print(f"Saved aggregated STFT for Sensor {sensor_num}, Damage {damage_num} to {output_file}")
|
print(f"Saved aggregated STFT for Sensor {sensor_num}, Damage {damage_num} to {output_file}")
|
||||||
else:
|
else:
|
||||||
print(f"No STFT data aggregated for Sensor {sensor_num}, Damage {damage_num}.")
|
print(f"No STFT data aggregated for Sensor {sensor_num}, Damage {damage_num}.")
|
||||||
|
|
||||||
if __name__ == "__main__": # Added main guard for multiprocessing
|
if __name__ == "__main__": # Added main guard for multiprocessing
|
||||||
with multiprocessing.Pool() as pool:
|
with multiprocessing.Pool() as pool:
|
||||||
pool.map(process_damage_case, range(1, num_damage_cases + 1))
|
pool.map(process_damage_case, range(num_damage_cases + 1))
|
||||||
|
|||||||
68
code/src/representation.py
Normal file
68
code/src/representation.py
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
import pandas as pd
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
def grid_result_summary(df: pd.DataFrame, output_path: str, include_efficiency: bool = True, verbose=False) -> None:
|
||||||
|
"""
|
||||||
|
Export a DataFrame to a LaTeX file with optional inclusion of the efficiency column.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
-----------
|
||||||
|
df : pd.DataFrame
|
||||||
|
The DataFrame to export.
|
||||||
|
output_path : str
|
||||||
|
The file path where the LaTeX file will be saved.
|
||||||
|
include_efficiency : bool, optional
|
||||||
|
Whether to include the efficiency column (E_i) in the output. Default is True.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
--------
|
||||||
|
None
|
||||||
|
"""
|
||||||
|
# Define the columns to include
|
||||||
|
columns: list[str] = [
|
||||||
|
"param_pca__n_components",
|
||||||
|
"param_svc__C",
|
||||||
|
"param_svc__gamma",
|
||||||
|
"mean_test_score",
|
||||||
|
"mean_fit_time"
|
||||||
|
]
|
||||||
|
# Filter DataFrame to include only the best mean_test_score for each param_pca__n_components
|
||||||
|
df = df.loc[df.groupby('param_pca__n_components')['mean_test_score'].idxmax()][columns]
|
||||||
|
|
||||||
|
# Convert C and gamma to log2 scale
|
||||||
|
df['param_svc__C'] = np.log2(df['param_svc__C']).astype(int)
|
||||||
|
df['param_svc__gamma'] = np.log2(df['param_svc__gamma']).astype(int)
|
||||||
|
|
||||||
|
if include_efficiency:
|
||||||
|
columns.append("time_score_ratio")
|
||||||
|
df['time_score_ratio'] = df['mean_test_score'] / df['mean_fit_time'] * 1e3
|
||||||
|
|
||||||
|
# Rename columns for LaTeX formatting
|
||||||
|
column_names = {
|
||||||
|
"param_pca__n_components": r"$n_{\text{components}}$",
|
||||||
|
"param_svc__C": r"$C (\log_2)$",
|
||||||
|
"param_svc__gamma": r"$\gamma (\log_2)$",
|
||||||
|
"mean_test_score": r"$S_i$",
|
||||||
|
"mean_fit_time": r"$T_i$",
|
||||||
|
"time_score_ratio": r"$E_i (\times 10^{-3})$"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Filter and rename columns
|
||||||
|
df_filtered = df[columns].rename(columns=column_names)
|
||||||
|
|
||||||
|
# Export to LaTeX
|
||||||
|
latex_table = df_filtered.to_latex(
|
||||||
|
index=False,
|
||||||
|
float_format="%.5f",
|
||||||
|
column_format="cccccc" if include_efficiency else "ccccc",
|
||||||
|
# caption="Best hyperparameters for each PCA component size.",
|
||||||
|
# label="tab:best_hyperparams"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Save to file
|
||||||
|
with open(output_path, "w") as f:
|
||||||
|
f.write(latex_table)
|
||||||
|
|
||||||
|
if verbose:
|
||||||
|
print(latex_table)
|
||||||
|
print(f"LaTeX table exported to '{output_path}'")
|
||||||
52
code/src/test.py
Normal file
52
code/src/test.py
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
from data_preprocessing import *
|
||||||
|
from joblib import dump, load
|
||||||
|
|
||||||
|
# b = generate_damage_files_index(
|
||||||
|
# num_damage=6,
|
||||||
|
# file_index_start=1,
|
||||||
|
# col=5,
|
||||||
|
# base_path="D:/thesis/data/dataset_B",
|
||||||
|
# prefix="zzzBD",
|
||||||
|
# # undamage_file="zzzBU.TXT"
|
||||||
|
# )
|
||||||
|
# Example: Generate tuples with a special group of df0 at the beginning
|
||||||
|
# special_groups_A = [
|
||||||
|
# {'df_name': 'zzzAU.TXT', 'position': 0, 'size': 5} # Add at beginning
|
||||||
|
# ]
|
||||||
|
|
||||||
|
# special_groups_B = [
|
||||||
|
# {'df_name': 'zzzBU.TXT', 'position': 0, 'size': 5} # Add at beginning
|
||||||
|
# ]
|
||||||
|
|
||||||
|
# Generate the tuples with the special group
|
||||||
|
# a_complement = [(comp)
|
||||||
|
# for n in range(1, 31)
|
||||||
|
# for comp in complement_pairs(n, prefix="zzzAD", extension="TXT")]
|
||||||
|
# a = generate_df_tuples(special_groups=a_complement, prefix="zzzAD", undamage_file="zzzAU.TXT")
|
||||||
|
|
||||||
|
b_complement = [(comp)
|
||||||
|
for n in range(1, 31)
|
||||||
|
for comp in complement_pairs(n, prefix="zzzBD", extension="TXT")]
|
||||||
|
b = generate_df_tuples(special_groups=b_complement, prefix="zzzBD", undamage_file="zzzBU.TXT")
|
||||||
|
|
||||||
|
|
||||||
|
# a = generate_damage_files_index(
|
||||||
|
# num_damage=6,
|
||||||
|
# file_index_start=1,
|
||||||
|
# col=5,
|
||||||
|
# base_path="D:/thesis/data/dataset_A",
|
||||||
|
# prefix="zzzAD",
|
||||||
|
# # undamage_file="zzzBU.TXT"
|
||||||
|
# )
|
||||||
|
|
||||||
|
# data_A = DataProcessor(file_index=a, base_path="D:/thesis/data/dataset_A", include_time=True)
|
||||||
|
# data_A.create_vector_column(overwrite=True)
|
||||||
|
# # data_A.create_limited_sensor_vector_column(overwrite=True)
|
||||||
|
# data_A.export_to_csv("D:/thesis/data/converted/raw")
|
||||||
|
|
||||||
|
data_B = DataProcessor(file_index=b, base_path="D:/thesis/data/dataset_B", include_time=True)
|
||||||
|
# data_B.create_vector_column(overwrite=True)
|
||||||
|
# # data_B.create_limited_sensor_vector_column(overwrite=True)
|
||||||
|
data_B.export_to_csv("D:/thesis/data/converted/raw_B")
|
||||||
|
# a = load("D:/cache.joblib")
|
||||||
|
# breakpoint()
|
||||||
@@ -1,360 +0,0 @@
|
|||||||
import pandas as pd
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
import numpy as np
|
|
||||||
from colorama import Fore, Style, init
|
|
||||||
from typing import TypedDict, Dict, List
|
|
||||||
from joblib import load
|
|
||||||
from pprint import pprint
|
|
||||||
|
|
||||||
# class DamageFilesIndices(TypedDict):
|
|
||||||
# damage_index: int
|
|
||||||
# files: list[int]
|
|
||||||
OriginalSingleDamageScenarioFilePath = str
|
|
||||||
DamageScenarioGroupIndex = int
|
|
||||||
OriginalSingleDamageScenario = pd.DataFrame
|
|
||||||
SensorIndex = int
|
|
||||||
VectorColumnIndex = List[SensorIndex]
|
|
||||||
VectorColumnIndices = List[VectorColumnIndex]
|
|
||||||
DamageScenarioGroup = List[OriginalSingleDamageScenario]
|
|
||||||
GroupDataset = List[DamageScenarioGroup]
|
|
||||||
|
|
||||||
|
|
||||||
class DamageFilesIndices(TypedDict):
|
|
||||||
damage_index: int
|
|
||||||
files: List[str]
|
|
||||||
|
|
||||||
|
|
||||||
def generate_damage_files_index(**kwargs) -> DamageFilesIndices:
|
|
||||||
prefix: str = kwargs.get("prefix", "zzzAD")
|
|
||||||
extension: str = kwargs.get("extension", ".TXT")
|
|
||||||
num_damage: int = kwargs.get("num_damage")
|
|
||||||
file_index_start: int = kwargs.get("file_index_start")
|
|
||||||
col: int = kwargs.get("col")
|
|
||||||
base_path: str = kwargs.get("base_path")
|
|
||||||
|
|
||||||
damage_scenarios = {}
|
|
||||||
a = file_index_start
|
|
||||||
b = col + 1
|
|
||||||
for i in range(1, num_damage + 1):
|
|
||||||
damage_scenarios[i] = range(a, b)
|
|
||||||
a += col
|
|
||||||
b += col
|
|
||||||
|
|
||||||
# return damage_scenarios
|
|
||||||
|
|
||||||
x = {}
|
|
||||||
for damage, files in damage_scenarios.items():
|
|
||||||
x[damage] = [] # Initialize each key with an empty list
|
|
||||||
for i, file_index in enumerate(files, start=1):
|
|
||||||
if base_path:
|
|
||||||
x[damage].append(
|
|
||||||
os.path.normpath(
|
|
||||||
os.path.join(base_path, f"{prefix}{file_index}{extension}")
|
|
||||||
)
|
|
||||||
)
|
|
||||||
# if not os.path.exists(file_path):
|
|
||||||
# print(Fore.RED + f"File {file_path} does not exist.")
|
|
||||||
# continue
|
|
||||||
else:
|
|
||||||
x[damage].append(f"{prefix}{file_index}{extension}")
|
|
||||||
return x
|
|
||||||
|
|
||||||
# file_path = os.path.join(base_path, f"zzz{prefix}D{file_index}.TXT")
|
|
||||||
# df = pd.read_csv( file_path, sep="\t", skiprows=10) # Read with explicit column names
|
|
||||||
|
|
||||||
|
|
||||||
class DataProcessor:
|
|
||||||
def __init__(self, file_index: DamageFilesIndices, cache_path: str = None):
|
|
||||||
self.file_index = file_index
|
|
||||||
if cache_path:
|
|
||||||
self.data = load(cache_path)
|
|
||||||
else:
|
|
||||||
self.data = self._load_all_data()
|
|
||||||
|
|
||||||
def _extract_column_names(self, file_path: str) -> List[str]:
|
|
||||||
"""
|
|
||||||
Extracts column names from the header of the given file.
|
|
||||||
Assumes the 6th line contains column names.
|
|
||||||
|
|
||||||
:param file_path: Path to the data file.
|
|
||||||
:return: List of column names.
|
|
||||||
"""
|
|
||||||
with open(file_path, "r") as f:
|
|
||||||
header_lines = [next(f) for _ in range(12)]
|
|
||||||
|
|
||||||
# Extract column names from the 6th line
|
|
||||||
channel_line = header_lines[10].strip()
|
|
||||||
tokens = re.findall(r'"([^"]+)"', channel_line)
|
|
||||||
if not channel_line.startswith('"'):
|
|
||||||
first_token = channel_line.split()[0]
|
|
||||||
tokens = [first_token] + tokens
|
|
||||||
|
|
||||||
return tokens # Prepend 'Time' column if applicable
|
|
||||||
|
|
||||||
def _load_dataframe(self, file_path: str) -> OriginalSingleDamageScenario:
|
|
||||||
"""
|
|
||||||
Loads a single data file into a pandas DataFrame.
|
|
||||||
|
|
||||||
:param file_path: Path to the data file.
|
|
||||||
:return: DataFrame containing the numerical data.
|
|
||||||
"""
|
|
||||||
col_names = self._extract_column_names(file_path)
|
|
||||||
df = pd.read_csv(
|
|
||||||
file_path, delim_whitespace=True, skiprows=11, header=None, memory_map=True
|
|
||||||
)
|
|
||||||
df.columns = col_names
|
|
||||||
return df
|
|
||||||
|
|
||||||
def _load_all_data(self) -> GroupDataset:
|
|
||||||
"""
|
|
||||||
Loads all data files based on the grouping dictionary and returns a nested list.
|
|
||||||
|
|
||||||
:return: A nested list of DataFrames where the outer index corresponds to group_idx - 1.
|
|
||||||
"""
|
|
||||||
data = []
|
|
||||||
# Find the maximum group index to determine the list size
|
|
||||||
max_group_idx = max(self.file_index.keys()) if self.file_index else 0
|
|
||||||
|
|
||||||
# Initialize empty lists
|
|
||||||
for _ in range(max_group_idx):
|
|
||||||
data.append([])
|
|
||||||
|
|
||||||
# Fill the list with data
|
|
||||||
for group_idx, file_list in self.file_index.items():
|
|
||||||
# Adjust index to be 0-based
|
|
||||||
list_idx = group_idx - 1
|
|
||||||
data[list_idx] = [self._load_dataframe(file) for file in file_list]
|
|
||||||
|
|
||||||
return data
|
|
||||||
|
|
||||||
def get_group_data(self, group_idx: int) -> List[pd.DataFrame]:
|
|
||||||
"""
|
|
||||||
Returns the list of DataFrames for the given group index.
|
|
||||||
|
|
||||||
:param group_idx: Index of the group.
|
|
||||||
:return: List of DataFrames.
|
|
||||||
"""
|
|
||||||
return self.data.get([group_idx, []])
|
|
||||||
|
|
||||||
def get_column_names(self, group_idx: int, file_idx: int = 0) -> List[str]:
|
|
||||||
"""
|
|
||||||
Returns the column names for the given group and file indices.
|
|
||||||
|
|
||||||
:param group_idx: Index of the group.
|
|
||||||
:param file_idx: Index of the file in the group.
|
|
||||||
:return: List of column names.
|
|
||||||
"""
|
|
||||||
if group_idx in self.data and len(self.data[group_idx]) > file_idx:
|
|
||||||
return self.data[group_idx][file_idx].columns.tolist()
|
|
||||||
return []
|
|
||||||
|
|
||||||
def get_data_info(self):
|
|
||||||
"""
|
|
||||||
Print information about the loaded data structure.
|
|
||||||
Adapted for when self.data is a List instead of a Dictionary.
|
|
||||||
"""
|
|
||||||
if isinstance(self.data, list):
|
|
||||||
# For each sublist in self.data, get the type names of all elements
|
|
||||||
pprint(
|
|
||||||
[
|
|
||||||
(
|
|
||||||
[type(item).__name__ for item in sublist]
|
|
||||||
if isinstance(sublist, list)
|
|
||||||
else type(sublist).__name__
|
|
||||||
)
|
|
||||||
for sublist in self.data
|
|
||||||
]
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
pprint(
|
|
||||||
{
|
|
||||||
key: [type(df).__name__ for df in value]
|
|
||||||
for key, value in self.data.items()
|
|
||||||
}
|
|
||||||
if isinstance(self.data, dict)
|
|
||||||
else type(self.data).__name__
|
|
||||||
)
|
|
||||||
|
|
||||||
def _create_vector_column_index(self) -> VectorColumnIndices:
|
|
||||||
vector_col_idx: VectorColumnIndices = []
|
|
||||||
y = 0
|
|
||||||
for data_group in self.data: # len(data_group[i]) = 5
|
|
||||||
for j in data_group: # len(j[i]) =
|
|
||||||
c: VectorColumnIndex = [] # column vector c_{j}
|
|
||||||
x = 0
|
|
||||||
for _ in range(6): # TODO: range(6) should be dynamic and parameterized
|
|
||||||
c.append(x + y)
|
|
||||||
x += 5
|
|
||||||
vector_col_idx.append(c)
|
|
||||||
y += 1
|
|
||||||
return vector_col_idx
|
|
||||||
|
|
||||||
def create_vector_column(self, overwrite=True) -> List[List[List[pd.DataFrame]]]:
|
|
||||||
"""
|
|
||||||
Create a vector column from the loaded data.
|
|
||||||
|
|
||||||
:param overwrite: Overwrite the original data with vector column-based data.
|
|
||||||
"""
|
|
||||||
idx = self._create_vector_column_index()
|
|
||||||
# if overwrite:
|
|
||||||
for i in range(len(self.data)):
|
|
||||||
for j in range(len(self.data[i])):
|
|
||||||
# Get the appropriate indices for slicing from idx
|
|
||||||
indices = idx[j]
|
|
||||||
|
|
||||||
# Get the current DataFrame
|
|
||||||
df = self.data[i][j]
|
|
||||||
|
|
||||||
# Keep the 'Time' column and select only specified 'Real' columns
|
|
||||||
# First, we add 1 to all indices to account for 'Time' being at position 0
|
|
||||||
real_indices = [index + 1 for index in indices]
|
|
||||||
|
|
||||||
# Create list with Time column index (0) and the adjusted Real indices
|
|
||||||
all_indices = [0] + real_indices
|
|
||||||
|
|
||||||
# Apply the slicing
|
|
||||||
self.data[i][j] = df.iloc[:, all_indices]
|
|
||||||
# TODO: if !overwrite:
|
|
||||||
|
|
||||||
def create_limited_sensor_vector_column(self, overwrite=True):
|
|
||||||
"""
|
|
||||||
Create a vector column from the loaded data.
|
|
||||||
|
|
||||||
:param overwrite: Overwrite the original data with vector column-based data.
|
|
||||||
"""
|
|
||||||
idx = self._create_vector_column_index()
|
|
||||||
# if overwrite:
|
|
||||||
for i in range(len(self.data)): # damage(s)
|
|
||||||
for j in range(len(self.data[i])): # col(s)
|
|
||||||
# Get the appropriate indices for slicing from idx
|
|
||||||
indices = idx[j]
|
|
||||||
|
|
||||||
# Get the current DataFrame
|
|
||||||
df = self.data[i][j]
|
|
||||||
|
|
||||||
# Keep the 'Time' column and select only specifid 'Real' colmns
|
|
||||||
# First, we add 1 to all indices to acount for 'Time' being at positiion 0
|
|
||||||
real_indices = [index + 1 for index in indices]
|
|
||||||
|
|
||||||
# Create list with Time column index (0) and the adjustedd Real indices
|
|
||||||
all_indices = [0] + [real_indices[0]] + [real_indices[-1]]
|
|
||||||
|
|
||||||
# Apply the slicing
|
|
||||||
self.data[i][j] = df.iloc[:, all_indices]
|
|
||||||
# TODO: if !overwrite:
|
|
||||||
|
|
||||||
def export_to_csv(self, output_dir: str, file_prefix: str = "DAMAGE"):
|
|
||||||
"""
|
|
||||||
Export the processed data to CSV files in the required folder structure.
|
|
||||||
|
|
||||||
:param output_dir: Directory to save the CSV files.
|
|
||||||
:param file_prefix: Prefix for the output filenames.
|
|
||||||
"""
|
|
||||||
for group_idx, group in enumerate(self.data, start=1):
|
|
||||||
group_folder = os.path.join(output_dir, f"{file_prefix}_{group_idx}")
|
|
||||||
os.makedirs(group_folder, exist_ok=True)
|
|
||||||
for test_idx, df in enumerate(group, start=1):
|
|
||||||
# Ensure columns are named uniquely if duplicated
|
|
||||||
df = df.copy()
|
|
||||||
df.columns = ["Time", "Real_0", "Real_1"] # Rename
|
|
||||||
|
|
||||||
# Export first Real column
|
|
||||||
out1 = os.path.join(
|
|
||||||
group_folder, f"{file_prefix}_{group_idx}_TEST{test_idx}_01.csv"
|
|
||||||
)
|
|
||||||
df[["Time", "Real_0"]].rename(columns={"Real_0": "Real"}).to_csv(
|
|
||||||
out1, index=False
|
|
||||||
)
|
|
||||||
|
|
||||||
# Export last Real column
|
|
||||||
out2 = os.path.join(
|
|
||||||
group_folder, f"{file_prefix}_{group_idx}_TEST{test_idx}_02.csv"
|
|
||||||
)
|
|
||||||
df[["Time", "Real_1"]].rename(columns={"Real_1": "Real"}).to_csv(
|
|
||||||
out2, index=False
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def create_damage_files(base_path, output_base, prefix):
|
|
||||||
# Initialize colorama
|
|
||||||
init(autoreset=True)
|
|
||||||
|
|
||||||
# Generate column labels based on expected duplication in input files
|
|
||||||
columns = ["Real"] + [
|
|
||||||
f"Real.{i}" for i in range(1, 30)
|
|
||||||
] # Explicitly setting column names
|
|
||||||
|
|
||||||
sensor_end_map = {
|
|
||||||
1: "Real.25",
|
|
||||||
2: "Real.26",
|
|
||||||
3: "Real.27",
|
|
||||||
4: "Real.28",
|
|
||||||
5: "Real.29",
|
|
||||||
}
|
|
||||||
|
|
||||||
# Define the damage scenarios and the corresponding original file indices
|
|
||||||
damage_scenarios = {
|
|
||||||
1: range(1, 6), # Damage 1 files from zzzAD1.csv to zzzAD5.csv
|
|
||||||
2: range(6, 11), # Damage 2 files from zzzAD6.csv to zzzAD10.csv
|
|
||||||
3: range(11, 16), # Damage 3 files from zzzAD11.csv to zzzAD15.csvs
|
|
||||||
4: range(16, 21), # Damage 4 files from zzzAD16.csv to zzzAD20.csv
|
|
||||||
5: range(21, 26), # Damage 5 files from zzzAD21.csv to zzzAD25.csv
|
|
||||||
6: range(26, 31), # Damage 6 files from zzzAD26.csv to zzzAD30.csv
|
|
||||||
}
|
|
||||||
damage_pad = len(str(len(damage_scenarios)))
|
|
||||||
test_pad = len(str(30))
|
|
||||||
|
|
||||||
for damage, files in damage_scenarios.items():
|
|
||||||
for i, file_index in enumerate(files, start=1):
|
|
||||||
# Load original data file
|
|
||||||
file_path = os.path.join(base_path, f"zzz{prefix}D{file_index}.TXT")
|
|
||||||
df = pd.read_csv(
|
|
||||||
file_path, sep="\t", skiprows=10
|
|
||||||
) # Read with explicit column names
|
|
||||||
|
|
||||||
top_sensor = columns[i - 1]
|
|
||||||
print(top_sensor, type(top_sensor))
|
|
||||||
output_file_1 = os.path.join(
|
|
||||||
output_base, f"DAMAGE_{damage}", f"DAMAGE{damage}_TEST{i}_01.csv"
|
|
||||||
)
|
|
||||||
print(f"Creating {output_file_1} from taking zzz{prefix}D{file_index}.TXT")
|
|
||||||
print("Taking datetime column on index 0...")
|
|
||||||
print(f"Taking `{top_sensor}`...")
|
|
||||||
os.makedirs(os.path.dirname(output_file_1), exist_ok=True)
|
|
||||||
df[["Time", top_sensor]].to_csv(output_file_1, index=False)
|
|
||||||
print(Fore.GREEN + "Done")
|
|
||||||
|
|
||||||
bottom_sensor = sensor_end_map[i]
|
|
||||||
output_file_2 = os.path.join(
|
|
||||||
output_base, f"DAMAGE_{damage}", f"DAMAGE{damage}_TEST{i}_02.csv"
|
|
||||||
)
|
|
||||||
print(f"Creating {output_file_2} from taking zzz{prefix}D{file_index}.TXT")
|
|
||||||
print("Taking datetime column on index 0...")
|
|
||||||
print(f"Taking `{bottom_sensor}`...")
|
|
||||||
os.makedirs(os.path.dirname(output_file_2), exist_ok=True)
|
|
||||||
df[["Time", bottom_sensor]].to_csv(output_file_2, index=False)
|
|
||||||
print(Fore.GREEN + "Done")
|
|
||||||
print("---")
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
if len(sys.argv) < 2:
|
|
||||||
print("Usage: python convert.py <path_to_csv_files>")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
base_path = sys.argv[1]
|
|
||||||
output_base = sys.argv[2]
|
|
||||||
prefix = sys.argv[3] # Define output directory
|
|
||||||
|
|
||||||
# Create output folders if they don't exist
|
|
||||||
# for i in range(1, 7):
|
|
||||||
# os.makedirs(os.path.join(output_base, f'DAMAGE_{i}'), exist_ok=True)
|
|
||||||
|
|
||||||
create_damage_files(base_path, output_base, prefix)
|
|
||||||
print(Fore.YELLOW + Style.BRIGHT + "All files have been created successfully.")
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@@ -1,12 +1,52 @@
|
|||||||
from convert import *
|
from data_preprocessing import *
|
||||||
from joblib import dump, load
|
from joblib import dump, load
|
||||||
|
|
||||||
a = generate_damage_files_index(
|
# b = generate_damage_files_index(
|
||||||
num_damage=6, file_index_start=1, col=5, base_path="D:/thesis/data/dataset_A"
|
# num_damage=6,
|
||||||
)
|
# file_index_start=1,
|
||||||
data = DataProcessor(file_index=a)
|
# col=5,
|
||||||
# data.create_vector_column(overwrite=True)
|
# base_path="D:/thesis/data/dataset_B",
|
||||||
data.create_limited_sensor_vector_column(overwrite=True)
|
# prefix="zzzBD",
|
||||||
data.export_to_csv("D:/thesis/data/")
|
# # undamage_file="zzzBU.TXT"
|
||||||
|
# )
|
||||||
|
# Example: Generate tuples with a special group of df0 at the beginning
|
||||||
|
special_groups_A = [
|
||||||
|
{'df_name': 'zzzAU.TXT', 'position': 0, 'size': 5} # Add at beginning
|
||||||
|
]
|
||||||
|
|
||||||
|
special_groups_B = [
|
||||||
|
{'df_name': 'zzzBU.TXT', 'position': 0, 'size': 5} # Add at beginning
|
||||||
|
]
|
||||||
|
|
||||||
|
# Generate the tuples with the special group
|
||||||
|
a_complement = [(comp)
|
||||||
|
for n in range(1, 31)
|
||||||
|
for comp in complement_pairs(n)]
|
||||||
|
a = generate_df_tuples(special_groups=a_complement, prefix="zzzAD")
|
||||||
|
|
||||||
|
# b_complement = [(comp)
|
||||||
|
# for n in range(1, 31)
|
||||||
|
# for comp in complement_pairs(n)]
|
||||||
|
# b = generate_df_tuples(special_groups=b_complement, prefix="zzzBD")
|
||||||
|
|
||||||
|
|
||||||
|
# a = generate_damage_files_index(
|
||||||
|
# num_damage=6,
|
||||||
|
# file_index_start=1,
|
||||||
|
# col=5,
|
||||||
|
# base_path="D:/thesis/data/dataset_A",
|
||||||
|
# prefix="zzzAD",
|
||||||
|
# # undamage_file="zzzBU.TXT"
|
||||||
|
# )
|
||||||
|
|
||||||
|
data_A = DataProcessor(file_index=a, base_path="D:/thesis/data/dataset_A", include_time=True)
|
||||||
|
# data_A.create_vector_column(overwrite=True)
|
||||||
|
# # data_A.create_limited_sensor_vector_column(overwrite=True)
|
||||||
|
data_A.export_to_csv("D:/thesis/data/converted/raw")
|
||||||
|
|
||||||
|
# data_B = DataProcessor(file_index=b, base_path="D:/thesis/data/dataset_B", include_time=True)
|
||||||
|
# data_B.create_vector_column(overwrite=True)
|
||||||
|
# # data_B.create_limited_sensor_vector_column(overwrite=True)
|
||||||
|
# data_B.export_to_csv("D:/thesis/data/converted/raw_B")
|
||||||
# a = load("D:/cache.joblib")
|
# a = load("D:/cache.joblib")
|
||||||
breakpoint()
|
# breakpoint()
|
||||||
1
foam
Submodule
1
foam
Submodule
Submodule foam added at 175ecbbdb2
242
latex/appendix/coarse_grid_results_A.tex
Normal file
242
latex/appendix/coarse_grid_results_A.tex
Normal file
@@ -0,0 +1,242 @@
|
|||||||
|
\begin{rlandscape}
|
||||||
|
% \chapter*{Grid Search}
|
||||||
|
% \section*{Hasil Coarse Grid Search}
|
||||||
|
\centering
|
||||||
|
\begin{longtable}{
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}}
|
||||||
|
\caption{Hasil \textit{Coarse Grid-Search} Sensor A diurutkan berdasarkan \textit{rank test score}}
|
||||||
|
\label{tab:coarse grid results A}
|
||||||
|
\\
|
||||||
|
\toprule
|
||||||
|
\toprule
|
||||||
|
mean fit time & std fit time & mean score time & std score time & param pca n components & param svc C & param svc gamma & param svc kernel & mean test score & std test score & rank test score \\
|
||||||
|
\midrule
|
||||||
|
\endfirsthead
|
||||||
|
|
||||||
|
\toprule
|
||||||
|
\toprule
|
||||||
|
mean fit time & std fit time & mean score time & std score time & param pca n components & param svc C & param svc gamma & param svc kernel & mean test score & std test score & rank test score \\
|
||||||
|
\midrule
|
||||||
|
\endhead
|
||||||
|
|
||||||
|
\midrule
|
||||||
|
\multicolumn{11}{r}{\textit{berlanjut di halaman berikutnya}}
|
||||||
|
\endfoot
|
||||||
|
|
||||||
|
\bottomrule
|
||||||
|
\bottomrule
|
||||||
|
\endlastfoot
|
||||||
|
|
||||||
|
% Start of table content
|
||||||
|
31.24 & 1.08 & 2.15 & 0.30 & 512 & 5.00 & -10.00 & rbf & 1.00 & 0.00 & 1 \\
|
||||||
|
26.66 & 0.66 & 1.81 & 0.04 & 512 & 10.00 & -10.00 & rbf & 1.00 & 0.00 & 1 \\
|
||||||
|
28.55 & 0.65 & 2.01 & 0.23 & 512 & 15.00 & -10.00 & rbf & 1.00 & 0.00 & 1 \\
|
||||||
|
17.84 & 0.57 & 0.87 & 0.09 & 256 & 5.00 & -10.00 & rbf & 1.00 & 0.00 & 4 \\
|
||||||
|
18.42 & 0.74 & 0.98 & 0.18 & 256 & 10.00 & -10.00 & rbf & 1.00 & 0.00 & 4 \\
|
||||||
|
17.89 & 0.38 & 0.89 & 0.13 & 256 & 15.00 & -10.00 & rbf & 1.00 & 0.00 & 4 \\
|
||||||
|
13.44 & 0.14 & 0.41 & 0.03 & 128 & 5.00 & -10.00 & rbf & 1.00 & 0.00 & 7 \\
|
||||||
|
16.85 & 0.45 & 0.52 & 0.08 & 128 & 10.00 & -10.00 & rbf & 1.00 & 0.00 & 7 \\
|
||||||
|
13.16 & 0.07 & 0.46 & 0.04 & 128 & 15.00 & -10.00 & rbf & 1.00 & 0.00 & 7 \\
|
||||||
|
13.47 & 0.58 & 0.26 & 0.05 & 64 & 10.00 & -10.00 & rbf & 1.00 & 0.00 & 10 \\
|
||||||
|
10.86 & 0.38 & 0.22 & 0.01 & 64 & 15.00 & -10.00 & rbf & 1.00 & 0.00 & 10 \\
|
||||||
|
29.77 & 1.96 & 2.46 & 0.15 & 512 & 0.00 & -10.00 & rbf & 1.00 & 0.00 & 12 \\
|
||||||
|
19.85 & 1.19 & 1.26 & 0.06 & 256 & 0.00 & -10.00 & rbf & 1.00 & 0.00 & 13 \\
|
||||||
|
10.46 & 0.05 & 0.15 & 0.01 & 32 & 10.00 & -10.00 & rbf & 0.99 & 0.00 & 14 \\
|
||||||
|
14.95 & 1.06 & 0.66 & 0.05 & 128 & 0.00 & -10.00 & rbf & 0.99 & 0.00 & 15 \\
|
||||||
|
12.48 & 0.53 & 0.19 & 0.05 & 32 & 5.00 & -10.00 & rbf & 0.99 & 0.00 & 16 \\
|
||||||
|
18.00 & 0.49 & 0.52 & 0.05 & 256 & 10.00 & -15.00 & rbf & 0.99 & 0.00 & 17 \\
|
||||||
|
12.51 & 1.25 & 0.16 & 0.01 & 32 & 15.00 & -10.00 & rbf & 0.99 & 0.00 & 18 \\
|
||||||
|
18.76 & 0.99 & 0.51 & 0.05 & 256 & 15.00 & -15.00 & rbf & 0.99 & 0.00 & 19 \\
|
||||||
|
27.92 & 0.95 & 1.16 & 0.08 & 512 & 15.00 & -15.00 & rbf & 0.99 & 0.00 & 20 \\
|
||||||
|
29.16 & 0.99 & 1.08 & 0.12 & 512 & 10.00 & -15.00 & rbf & 0.99 & 0.00 & 21 \\
|
||||||
|
13.58 & 0.52 & 0.19 & 0.01 & 64 & 15.00 & -15.00 & rbf & 0.99 & 0.00 & 22 \\
|
||||||
|
14.78 & 0.52 & 2.43 & 0.24 & 32 & 15.00 & -5.00 & rbf & 0.99 & 0.00 & 23 \\
|
||||||
|
12.06 & 0.10 & 2.08 & 0.08 & 32 & 10.00 & -5.00 & rbf & 0.99 & 0.00 & 23 \\
|
||||||
|
14.54 & 0.60 & 2.53 & 0.21 & 32 & 5.00 & -5.00 & rbf & 0.99 & 0.00 & 23 \\
|
||||||
|
15.50 & 0.71 & 0.18 & 0.04 & 32 & 15.00 & -15.00 & rbf & 0.99 & 0.00 & 26 \\
|
||||||
|
11.84 & 0.07 & 2.08 & 0.04 & 32 & 0.00 & -5.00 & rbf & 0.99 & 0.00 & 27 \\
|
||||||
|
28.30 & 1.53 & 1.51 & 0.17 & 512 & 5.00 & -15.00 & rbf & 0.99 & 0.00 & 28 \\
|
||||||
|
17.53 & 0.48 & 0.73 & 0.02 & 256 & 5.00 & -15.00 & rbf & 0.99 & 0.00 & 29 \\
|
||||||
|
10.54 & 0.41 & 0.49 & 0.09 & 16 & 0.00 & -5.00 & rbf & 0.99 & 0.00 & 30 \\
|
||||||
|
14.07 & 0.34 & 0.26 & 0.03 & 128 & 15.00 & -15.00 & rbf & 0.99 & 0.00 & 31 \\
|
||||||
|
10.48 & 0.19 & 0.42 & 0.02 & 16 & 5.00 & -5.00 & rbf & 0.99 & 0.00 & 32 \\
|
||||||
|
12.53 & 0.80 & 0.48 & 0.09 & 16 & 15.00 & -5.00 & rbf & 0.99 & 0.00 & 33 \\
|
||||||
|
10.44 & 0.20 & 0.41 & 0.04 & 16 & 10.00 & -5.00 & rbf & 0.99 & 0.00 & 33 \\
|
||||||
|
13.33 & 0.32 & 0.48 & 0.11 & 64 & 0.00 & -10.00 & rbf & 0.99 & 0.00 & 35 \\
|
||||||
|
10.67 & 0.09 & 0.13 & 0.02 & 16 & 10.00 & -10.00 & rbf & 0.99 & 0.00 & 36 \\
|
||||||
|
17.23 & 1.02 & 0.31 & 0.06 & 128 & 10.00 & -15.00 & rbf & 0.99 & 0.01 & 37 \\
|
||||||
|
15.70 & 0.96 & 0.14 & 0.03 & 16 & 15.00 & -10.00 & rbf & 0.99 & 0.00 & 38 \\
|
||||||
|
10.26 & 0.22 & 0.18 & 0.03 & 16 & 5.00 & -10.00 & rbf & 0.99 & 0.00 & 39 \\
|
||||||
|
13.18 & 0.44 & 0.44 & 0.04 & 128 & 5.00 & -15.00 & rbf & 0.98 & 0.00 & 40 \\
|
||||||
|
17.16 & 0.96 & 0.17 & 0.02 & 16 & 15.00 & -15.00 & rbf & 0.98 & 0.00 & 41 \\
|
||||||
|
11.53 & 0.14 & 0.23 & 0.02 & 64 & 5.00 & -10.00 & rbf & 0.98 & 0.01 & 42 \\
|
||||||
|
10.60 & 0.13 & 2.04 & 0.04 & 16 & -5.00 & -5.00 & rbf & 0.98 & 0.00 & 43 \\
|
||||||
|
13.92 & 1.42 & 0.24 & 0.04 & 64 & 10.00 & -15.00 & rbf & 0.98 & 0.01 & 44 \\
|
||||||
|
10.27 & 0.10 & 0.31 & 0.03 & 32 & 0.00 & -10.00 & rbf & 0.98 & 0.00 & 45 \\
|
||||||
|
11.37 & 0.28 & 0.31 & 0.02 & 64 & 5.00 & -15.00 & rbf & 0.97 & 0.00 & 46 \\
|
||||||
|
10.98 & 0.14 & 0.19 & 0.01 & 32 & 10.00 & -15.00 & rbf & 0.97 & 0.00 & 47 \\
|
||||||
|
10.88 & 0.36 & 0.23 & 0.02 & 8 & 5.00 & -5.00 & rbf & 0.97 & 0.00 & 48 \\
|
||||||
|
11.69 & 0.23 & 0.35 & 0.02 & 8 & 0.00 & -5.00 & rbf & 0.97 & 0.00 & 49 \\
|
||||||
|
30.52 & 1.52 & 0.13 & 0.02 & 8 & 15.00 & -10.00 & rbf & 0.96 & 0.01 & 50 \\
|
||||||
|
11.52 & 0.15 & 0.16 & 0.01 & 8 & 10.00 & -10.00 & rbf & 0.96 & 0.00 & 51 \\
|
||||||
|
12.01 & 0.30 & 0.24 & 0.02 & 8 & 10.00 & -5.00 & rbf & 0.96 & 0.00 & 52 \\
|
||||||
|
24.88 & 1.70 & 7.56 & 1.13 & 256 & -5.00 & -10.00 & rbf & 0.96 & 0.00 & 53 \\
|
||||||
|
27.66 & 2.04 & 12.21 & 0.98 & 512 & -5.00 & -10.00 & rbf & 0.96 & 0.00 & 54 \\
|
||||||
|
15.40 & 0.45 & 4.28 & 0.33 & 128 & -5.00 & -10.00 & rbf & 0.96 & 0.00 & 55 \\
|
||||||
|
19.85 & 0.15 & 6.14 & 0.48 & 64 & 15.00 & -5.00 & rbf & 0.96 & 0.00 & 56 \\
|
||||||
|
23.47 & 0.57 & 5.70 & 0.07 & 64 & 10.00 & -5.00 & rbf & 0.96 & 0.00 & 56 \\
|
||||||
|
19.63 & 0.16 & 5.54 & 0.14 & 64 & 5.00 & -5.00 & rbf & 0.96 & 0.00 & 56 \\
|
||||||
|
29.58 & 1.50 & 7.94 & 0.36 & 512 & 0.00 & -15.00 & rbf & 0.95 & 0.00 & 59 \\
|
||||||
|
19.24 & 0.80 & 4.87 & 0.43 & 256 & 0.00 & -15.00 & rbf & 0.95 & 0.00 & 60 \\
|
||||||
|
9.82 & 0.09 & 0.35 & 0.02 & 16 & 0.00 & -10.00 & rbf & 0.95 & 0.00 & 61 \\
|
||||||
|
10.24 & 0.07 & 1.33 & 0.01 & 8 & -5.00 & -5.00 & rbf & 0.95 & 0.00 & 62 \\
|
||||||
|
17.52 & 1.08 & 0.23 & 0.03 & 8 & 15.00 & -5.00 & rbf & 0.95 & 0.00 & 63 \\
|
||||||
|
10.21 & 0.16 & 0.21 & 0.01 & 16 & 10.00 & -15.00 & rbf & 0.95 & 0.00 & 64 \\
|
||||||
|
21.87 & 0.29 & 5.73 & 0.08 & 64 & 0.00 & -5.00 & rbf & 0.95 & 0.00 & 65 \\
|
||||||
|
12.06 & 0.80 & 0.37 & 0.04 & 32 & 5.00 & -15.00 & rbf & 0.95 & 0.00 & 66 \\
|
||||||
|
14.26 & 0.57 & 3.25 & 0.32 & 128 & 0.00 & -15.00 & rbf & 0.95 & 0.00 & 67 \\
|
||||||
|
12.17 & 0.08 & 2.76 & 0.07 & 64 & -5.00 & -10.00 & rbf & 0.95 & 0.00 & 68 \\
|
||||||
|
11.07 & 0.25 & 0.22 & 0.02 & 8 & 5.00 & -10.00 & rbf & 0.95 & 0.00 & 69 \\
|
||||||
|
16.92 & 1.59 & 0.19 & 0.02 & 8 & 15.00 & -15.00 & rbf & 0.94 & 0.00 & 70 \\
|
||||||
|
13.37 & 0.75 & 2.57 & 0.19 & 64 & 0.00 & -15.00 & rbf & 0.94 & 0.00 & 71 \\
|
||||||
|
11.83 & 0.16 & 0.41 & 0.03 & 16 & 5.00 & -15.00 & rbf & 0.93 & 0.00 & 72 \\
|
||||||
|
11.84 & 0.52 & 2.21 & 0.09 & 32 & -5.00 & -10.00 & rbf & 0.93 & 0.00 & 73 \\
|
||||||
|
10.99 & 0.12 & 1.90 & 0.07 & 32 & 0.00 & -15.00 & rbf & 0.92 & 0.00 & 74 \\
|
||||||
|
10.78 & 0.69 & 0.75 & 0.12 & 8 & 0.00 & -10.00 & rbf & 0.91 & 0.00 & 75 \\
|
||||||
|
9.66 & 0.10 & 0.33 & 0.02 & 8 & 10.00 & -15.00 & rbf & 0.90 & 0.00 & 76 \\
|
||||||
|
12.32 & 0.30 & 0.71 & 0.13 & 8 & 5.00 & -15.00 & rbf & 0.88 & 0.00 & 77 \\
|
||||||
|
10.62 & 0.12 & 2.16 & 0.09 & 16 & -5.00 & -10.00 & rbf & 0.87 & 0.01 & 78 \\
|
||||||
|
10.55 & 0.08 & 1.96 & 0.07 & 16 & 0.00 & -15.00 & rbf & 0.87 & 0.01 & 79 \\
|
||||||
|
21.82 & 0.43 & 7.86 & 0.32 & 128 & 5.00 & -5.00 & rbf & 0.81 & 0.01 & 80 \\
|
||||||
|
24.90 & 0.62 & 10.09 & 0.39 & 128 & 15.00 & -5.00 & rbf & 0.81 & 0.01 & 80 \\
|
||||||
|
22.31 & 0.65 & 8.05 & 0.27 & 128 & 10.00 & -5.00 & rbf & 0.81 & 0.01 & 80 \\
|
||||||
|
11.22 & 0.09 & 0.41 & 0.01 & 4 & 5.00 & -5.00 & rbf & 0.81 & 0.01 & 83 \\
|
||||||
|
9.93 & 0.15 & 0.66 & 0.04 & 4 & 0.00 & -5.00 & rbf & 0.81 & 0.00 & 84 \\
|
||||||
|
41.20 & 0.45 & 0.37 & 0.02 & 4 & 10.00 & -5.00 & rbf & 0.80 & 0.01 & 85 \\
|
||||||
|
112.24 & 4.87 & 0.50 & 0.03 & 4 & 15.00 & -10.00 & rbf & 0.80 & 0.01 & 86 \\
|
||||||
|
10.58 & 0.08 & 2.60 & 0.06 & 8 & -5.00 & -10.00 & rbf & 0.79 & 0.01 & 87 \\
|
||||||
|
13.87 & 0.22 & 2.50 & 0.21 & 4 & 0.00 & 0.00 & rbf & 0.79 & 0.01 & 88 \\
|
||||||
|
516.82 & 20.58 & 0.27 & 0.11 & 4 & 15.00 & -5.00 & rbf & 0.79 & 0.01 & 89 \\
|
||||||
|
27.24 & 0.86 & 8.13 & 0.20 & 128 & 0.00 & -5.00 & rbf & 0.79 & 0.01 & 90 \\
|
||||||
|
11.86 & 0.10 & 4.70 & 0.08 & 32 & -5.00 & -5.00 & rbf & 0.78 & 0.01 & 91 \\
|
||||||
|
10.34 & 0.06 & 2.62 & 0.20 & 8 & 0.00 & -15.00 & rbf & 0.78 & 0.01 & 92 \\
|
||||||
|
10.50 & 0.14 & 2.22 & 0.23 & 4 & -5.00 & -5.00 & rbf & 0.78 & 0.01 & 93 \\
|
||||||
|
17.73 & 0.80 & 0.83 & 0.04 & 4 & 10.00 & -10.00 & rbf & 0.77 & 0.01 & 94 \\
|
||||||
|
17.00 & 0.32 & 4.34 & 0.08 & 8 & 15.00 & 0.00 & rbf & 0.76 & 0.00 & 95 \\
|
||||||
|
18.86 & 0.56 & 5.68 & 0.24 & 8 & 10.00 & 0.00 & rbf & 0.76 & 0.00 & 95 \\
|
||||||
|
17.76 & 0.19 & 4.33 & 0.09 & 8 & 5.00 & 0.00 & rbf & 0.76 & 0.00 & 95 \\
|
||||||
|
21.32 & 0.61 & 5.04 & 0.20 & 8 & 0.00 & 0.00 & rbf & 0.74 & 0.00 & 98 \\
|
||||||
|
15.82 & 0.16 & 2.15 & 0.06 & 4 & 5.00 & 0.00 & rbf & 0.73 & 0.01 & 99 \\
|
||||||
|
17.37 & 0.63 & 2.10 & 0.09 & 4 & 10.00 & 0.00 & rbf & 0.72 & 0.01 & 100 \\
|
||||||
|
17.18 & 0.51 & 1.98 & 0.06 & 4 & 15.00 & 0.00 & rbf & 0.72 & 0.01 & 101 \\
|
||||||
|
10.20 & 0.17 & 1.08 & 0.03 & 4 & 5.00 & -10.00 & rbf & 0.71 & 0.01 & 102 \\
|
||||||
|
22.02 & 1.38 & 0.93 & 0.08 & 4 & 15.00 & -15.00 & rbf & 0.68 & 0.01 & 103 \\
|
||||||
|
10.80 & 0.53 & 1.95 & 0.06 & 4 & 0.00 & -10.00 & rbf & 0.62 & 0.01 & 104 \\
|
||||||
|
30.25 & 1.39 & 15.70 & 0.63 & 256 & 10.00 & -5.00 & rbf & 0.62 & 0.01 & 105 \\
|
||||||
|
26.77 & 0.36 & 12.15 & 0.34 & 256 & 15.00 & -5.00 & rbf & 0.62 & 0.01 & 105 \\
|
||||||
|
30.58 & 1.02 & 15.26 & 0.44 & 256 & 5.00 & -5.00 & rbf & 0.62 & 0.01 & 105 \\
|
||||||
|
11.07 & 0.34 & 1.73 & 0.09 & 4 & 10.00 & -15.00 & rbf & 0.62 & 0.01 & 108 \\
|
||||||
|
32.02 & 0.63 & 12.66 & 0.56 & 256 & 0.00 & -5.00 & rbf & 0.56 & 0.01 & 109 \\
|
||||||
|
12.40 & 0.16 & 5.08 & 0.27 & 4 & -5.00 & 0.00 & rbf & 0.55 & 0.01 & 110 \\
|
||||||
|
11.04 & 0.52 & 2.32 & 0.06 & 4 & 5.00 & -15.00 & rbf & 0.48 & 0.01 & 111 \\
|
||||||
|
44.42 & 1.45 & 24.44 & 1.18 & 512 & 15.00 & -5.00 & rbf & 0.46 & 0.00 & 112 \\
|
||||||
|
37.44 & 0.43 & 22.61 & 0.71 & 512 & 10.00 & -5.00 & rbf & 0.46 & 0.00 & 112 \\
|
||||||
|
42.09 & 1.07 & 21.07 & 0.85 & 512 & 5.00 & -5.00 & rbf & 0.46 & 0.00 & 112 \\
|
||||||
|
17.35 & 0.23 & 4.71 & 0.11 & 16 & 5.00 & 0.00 & rbf & 0.42 & 0.01 & 115 \\
|
||||||
|
17.59 & 0.35 & 4.71 & 0.05 & 16 & 15.00 & 0.00 & rbf & 0.42 & 0.01 & 115 \\
|
||||||
|
17.22 & 0.12 & 4.61 & 0.04 & 16 & 10.00 & 0.00 & rbf & 0.42 & 0.01 & 115 \\
|
||||||
|
44.66 & 1.22 & 23.29 & 0.56 & 512 & 0.00 & -5.00 & rbf & 0.39 & 0.01 & 118 \\
|
||||||
|
19.51 & 0.47 & 5.86 & 0.32 & 16 & 0.00 & 0.00 & rbf & 0.38 & 0.01 & 119 \\
|
||||||
|
10.71 & 0.13 & 3.63 & 0.06 & 4 & -5.00 & -10.00 & rbf & 0.37 & 0.01 & 120 \\
|
||||||
|
13.53 & 0.42 & 4.00 & 0.35 & 4 & 0.00 & -15.00 & rbf & 0.36 & 0.02 & 121 \\
|
||||||
|
17.12 & 0.50 & 4.44 & 0.34 & 4 & 5.00 & 5.00 & rbf & 0.34 & 0.01 & 122 \\
|
||||||
|
16.78 & 0.30 & 4.05 & 0.18 & 4 & 10.00 & 5.00 & rbf & 0.34 & 0.01 & 122 \\
|
||||||
|
18.46 & 2.10 & 5.13 & 0.75 & 4 & 15.00 & 5.00 & rbf & 0.34 & 0.01 & 122 \\
|
||||||
|
16.10 & 0.76 & 4.60 & 0.33 & 4 & 0.00 & 5.00 & rbf & 0.32 & 0.01 & 125 \\
|
||||||
|
18.63 & 0.21 & 4.84 & 0.05 & 32 & 10.00 & 0.00 & rbf & 0.19 & 0.00 & 126 \\
|
||||||
|
20.68 & 0.70 & 4.92 & 0.07 & 32 & 5.00 & 0.00 & rbf & 0.19 & 0.00 & 126 \\
|
||||||
|
22.36 & 0.58 & 5.87 & 0.18 & 32 & 15.00 & 0.00 & rbf & 0.19 & 0.00 & 126 \\
|
||||||
|
16.64 & 0.24 & 5.32 & 0.29 & 32 & 0.00 & 0.00 & rbf & 0.18 & 0.00 & 129 \\
|
||||||
|
20.19 & 1.12 & 6.95 & 0.70 & 64 & 15.00 & 0.00 & rbf & 0.16 & 0.00 & 130 \\
|
||||||
|
19.28 & 0.16 & 6.36 & 0.77 & 64 & 5.00 & 0.00 & rbf & 0.16 & 0.00 & 130 \\
|
||||||
|
21.26 & 1.52 & 5.85 & 0.21 & 64 & 10.00 & 0.00 & rbf & 0.16 & 0.00 & 130 \\
|
||||||
|
17.34 & 0.63 & 6.00 & 0.17 & 64 & 0.00 & 0.00 & rbf & 0.16 & 0.00 & 133 \\
|
||||||
|
21.99 & 1.49 & 8.32 & 0.58 & 128 & 5.00 & 0.00 & rbf & 0.15 & 0.00 & 134 \\
|
||||||
|
21.12 & 0.60 & 7.80 & 0.21 & 128 & 10.00 & 0.00 & rbf & 0.15 & 0.00 & 134 \\
|
||||||
|
25.10 & 0.71 & 9.52 & 1.36 & 128 & 15.00 & 0.00 & rbf & 0.15 & 0.00 & 134 \\
|
||||||
|
11.56 & 0.17 & 4.78 & 0.11 & 16 & -5.00 & -15.00 & rbf & 0.15 & 0.00 & 137 \\
|
||||||
|
16.92 & 0.06 & 4.50 & 0.07 & 8 & 15.00 & 5.00 & rbf & 0.15 & 0.00 & 138 \\
|
||||||
|
20.18 & 0.78 & 5.25 & 0.82 & 8 & 10.00 & 5.00 & rbf & 0.15 & 0.00 & 138 \\
|
||||||
|
16.83 & 0.38 & 4.40 & 0.08 & 8 & 5.00 & 5.00 & rbf & 0.15 & 0.00 & 138 \\
|
||||||
|
13.43 & 0.94 & 5.94 & 0.18 & 64 & -5.00 & -15.00 & rbf & 0.15 & 0.00 & 141 \\
|
||||||
|
17.33 & 0.83 & 8.54 & 0.77 & 128 & -5.00 & -15.00 & rbf & 0.15 & 0.00 & 142 \\
|
||||||
|
13.30 & 0.34 & 5.40 & 0.56 & 32 & -5.00 & -15.00 & rbf & 0.15 & 0.00 & 142 \\
|
||||||
|
16.80 & 0.50 & 5.29 & 0.38 & 8 & 0.00 & 5.00 & rbf & 0.15 & 0.00 & 144 \\
|
||||||
|
23.54 & 0.92 & 15.98 & 0.91 & 256 & -5.00 & -15.00 & rbf & 0.15 & 0.00 & 145 \\
|
||||||
|
11.36 & 0.07 & 4.45 & 0.06 & 8 & -5.00 & -15.00 & rbf & 0.15 & 0.00 & 146 \\
|
||||||
|
19.85 & 1.52 & 7.99 & 0.28 & 128 & 0.00 & 0.00 & rbf & 0.15 & 0.00 & 147 \\
|
||||||
|
27.08 & 0.77 & 19.92 & 0.43 & 512 & -5.00 & -15.00 & rbf & 0.15 & 0.00 & 148 \\
|
||||||
|
11.03 & 0.20 & 4.36 & 0.09 & 4 & -5.00 & -15.00 & rbf & 0.14 & 0.00 & 149 \\
|
||||||
|
16.95 & 0.42 & 4.92 & 0.05 & 32 & 10.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
19.52 & 1.29 & 5.37 & 0.27 & 32 & 15.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
21.07 & 0.47 & 8.03 & 0.12 & 128 & 10.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
12.91 & 0.19 & 6.00 & 0.08 & 64 & -5.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
12.93 & 0.15 & 5.88 & 0.16 & 64 & -5.00 & 0.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
17.89 & 0.42 & 5.02 & 0.12 & 32 & 5.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
15.22 & 1.12 & 6.18 & 0.61 & 32 & 0.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
12.13 & 0.03 & 5.16 & 0.08 & 32 & -5.00 & 0.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
20.80 & 0.44 & 7.74 & 0.34 & 64 & 15.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
12.13 & 0.05 & 5.16 & 0.06 & 32 & -5.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
17.84 & 0.55 & 8.08 & 0.55 & 128 & 0.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
38.17 & 2.80 & 21.36 & 0.56 & 512 & 0.00 & 0.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
33.34 & 1.27 & 22.83 & 0.43 & 512 & -5.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
30.86 & 0.80 & 25.89 & 0.73 & 512 & -5.00 & -5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
34.99 & 2.30 & 23.40 & 1.80 & 512 & -5.00 & 0.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
37.55 & 1.17 & 23.33 & 1.97 & 512 & 5.00 & 0.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
34.88 & 1.47 & 22.61 & 1.22 & 512 & 0.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
40.39 & 1.06 & 21.87 & 0.57 & 512 & 10.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
38.87 & 2.02 & 23.14 & 1.56 & 512 & 10.00 & 0.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
42.60 & 3.30 & 22.25 & 0.58 & 512 & 15.00 & 0.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
40.82 & 1.90 & 23.89 & 0.86 & 512 & 5.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
13.18 & 0.23 & 5.91 & 0.09 & 64 & -5.00 & -5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
23.83 & 0.54 & 7.85 & 0.12 & 128 & 15.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
23.83 & 0.66 & 9.33 & 0.02 & 128 & 5.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
15.58 & 0.08 & 6.02 & 0.11 & 64 & 0.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
18.70 & 0.26 & 7.46 & 0.30 & 64 & 5.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
19.33 & 0.06 & 5.78 & 0.13 & 64 & 10.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
21.27 & 0.37 & 12.29 & 0.42 & 256 & -5.00 & 0.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
20.72 & 0.16 & 12.10 & 0.61 & 256 & -5.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
39.33 & 1.20 & 22.44 & 1.24 & 512 & 15.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
21.07 & 0.34 & 12.95 & 0.50 & 256 & -5.00 & -5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
23.94 & 1.20 & 12.06 & 0.47 & 256 & 0.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
25.49 & 1.69 & 12.61 & 0.57 & 256 & 0.00 & 0.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
30.38 & 1.31 & 14.00 & 1.13 & 256 & 5.00 & 0.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
28.18 & 0.53 & 12.44 & 0.57 & 256 & 5.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
30.23 & 0.82 & 12.85 & 0.31 & 256 & 10.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
31.85 & 0.82 & 14.05 & 1.43 & 256 & 10.00 & 0.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
15.27 & 0.74 & 8.05 & 0.35 & 128 & -5.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
27.91 & 1.12 & 13.14 & 1.15 & 256 & 15.00 & 0.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
30.68 & 1.11 & 13.80 & 0.45 & 256 & 15.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
15.13 & 0.36 & 8.07 & 0.33 & 128 & -5.00 & 0.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
15.73 & 0.41 & 8.12 & 0.28 & 128 & -5.00 & -5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
16.97 & 0.17 & 4.76 & 0.09 & 16 & 5.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
13.94 & 0.71 & 5.44 & 0.14 & 4 & -5.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
11.32 & 0.11 & 4.71 & 0.10 & 16 & -5.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
11.39 & 0.11 & 4.74 & 0.06 & 16 & -5.00 & 0.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
17.03 & 0.51 & 5.33 & 0.58 & 16 & 0.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
17.13 & 0.22 & 4.67 & 0.18 & 16 & 15.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
17.36 & 0.30 & 5.20 & 0.57 & 16 & 10.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
11.03 & 0.10 & 4.49 & 0.14 & 8 & -5.00 & 5.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
11.15 & 0.07 & 4.44 & 0.09 & 8 & -5.00 & 0.00 & rbf & 0.14 & 0.00 & 150 \\
|
||||||
|
\end{longtable}
|
||||||
|
\end{rlandscape}
|
||||||
240
latex/appendix/coarse_grid_results_B.tex
Normal file
240
latex/appendix/coarse_grid_results_B.tex
Normal file
@@ -0,0 +1,240 @@
|
|||||||
|
\begin{rlandscape}
|
||||||
|
\centering
|
||||||
|
\begin{longtable}{
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}}
|
||||||
|
\caption{Hasil \textit{Coarse Grid-Search} Sensor B diurutkan berdasarkan \textit{rank test score}}
|
||||||
|
\label{tab:coarse grid results B}
|
||||||
|
\\
|
||||||
|
\toprule
|
||||||
|
\toprule
|
||||||
|
mean fit time & std fit time & mean score time & std score time & param pca n components & param svc C & param svc gamma & param svc kernel & mean test score & std test score & rank test score \\
|
||||||
|
\midrule
|
||||||
|
\endfirsthead
|
||||||
|
|
||||||
|
\toprule
|
||||||
|
\toprule
|
||||||
|
mean fit time & std fit time & mean score time & std score time & param pca n components & param svc C & param svc gamma & param svc kernel & mean test score & std test score & rank test score \\
|
||||||
|
\midrule
|
||||||
|
\endhead
|
||||||
|
|
||||||
|
\midrule
|
||||||
|
\multicolumn{11}{r}{\textit{berlanjut di halaman berikutnya}}
|
||||||
|
\endfoot
|
||||||
|
|
||||||
|
\bottomrule
|
||||||
|
\bottomrule
|
||||||
|
\endlastfoot
|
||||||
|
|
||||||
|
% Start of table content
|
||||||
|
39.63 & 1.65 & 2.88 & 0.23 & 512 & 5.00 & -10.00 & rbf & 1.00 & 0.00 & 1 \\
|
||||||
|
30.49 & 1.15 & 2.16 & 0.19 & 512 & 10.00 & -10.00 & rbf & 1.00 & 0.00 & 1 \\
|
||||||
|
29.69 & 0.62 & 1.86 & 0.16 & 512 & 15.00 & -10.00 & rbf & 1.00 & 0.00 & 1 \\
|
||||||
|
20.28 & 1.59 & 1.00 & 0.10 & 256 & 5.00 & -10.00 & rbf & 1.00 & 0.00 & 4 \\
|
||||||
|
22.79 & 0.62 & 1.25 & 0.10 & 256 & 10.00 & -10.00 & rbf & 1.00 & 0.00 & 4 \\
|
||||||
|
23.17 & 0.46 & 1.06 & 0.07 & 256 & 15.00 & -10.00 & rbf & 1.00 & 0.00 & 4 \\
|
||||||
|
11.41 & 0.74 & 0.21 & 0.04 & 64 & 5.00 & -10.00 & rbf & 1.00 & 0.00 & 7 \\
|
||||||
|
14.55 & 0.81 & 0.44 & 0.03 & 128 & 5.00 & -10.00 & rbf & 1.00 & 0.00 & 8 \\
|
||||||
|
11.39 & 0.82 & 0.22 & 0.04 & 64 & 10.00 & -10.00 & rbf & 1.00 & 0.00 & 9 \\
|
||||||
|
12.25 & 0.39 & 0.25 & 0.04 & 64 & 15.00 & -10.00 & rbf & 1.00 & 0.00 & 9 \\
|
||||||
|
15.41 & 1.24 & 0.48 & 0.05 & 128 & 10.00 & -10.00 & rbf & 1.00 & 0.00 & 11 \\
|
||||||
|
14.47 & 0.53 & 0.44 & 0.04 & 128 & 15.00 & -10.00 & rbf & 1.00 & 0.00 & 11 \\
|
||||||
|
41.95 & 1.36 & 3.28 & 0.27 & 512 & 0.00 & -10.00 & rbf & 1.00 & 0.00 & 13 \\
|
||||||
|
19.77 & 0.88 & 1.10 & 0.06 & 256 & 0.00 & -10.00 & rbf & 1.00 & 0.00 & 14 \\
|
||||||
|
13.43 & 0.24 & 0.22 & 0.04 & 32 & 5.00 & -10.00 & rbf & 1.00 & 0.00 & 15 \\
|
||||||
|
11.48 & 1.05 & 0.16 & 0.01 & 32 & 10.00 & -10.00 & rbf & 1.00 & 0.00 & 16 \\
|
||||||
|
13.80 & 2.12 & 0.21 & 0.02 & 32 & 15.00 & -10.00 & rbf & 1.00 & 0.00 & 16 \\
|
||||||
|
13.82 & 0.43 & 0.58 & 0.09 & 128 & 0.00 & -10.00 & rbf & 1.00 & 0.00 & 18 \\
|
||||||
|
32.47 & 4.05 & 1.22 & 0.14 & 512 & 10.00 & -15.00 & rbf & 1.00 & 0.00 & 19 \\
|
||||||
|
29.99 & 2.05 & 1.12 & 0.10 & 512 & 15.00 & -15.00 & rbf & 1.00 & 0.00 & 20 \\
|
||||||
|
15.26 & 1.09 & 0.16 & 0.03 & 32 & 15.00 & -15.00 & rbf & 0.99 & 0.00 & 21 \\
|
||||||
|
10.31 & 0.81 & 0.47 & 0.09 & 16 & 15.00 & -5.00 & rbf & 0.99 & 0.00 & 22 \\
|
||||||
|
10.91 & 0.79 & 0.46 & 0.08 & 16 & 5.00 & -5.00 & rbf & 0.99 & 0.00 & 22 \\
|
||||||
|
10.91 & 0.32 & 0.41 & 0.02 & 16 & 10.00 & -5.00 & rbf & 0.99 & 0.00 & 22 \\
|
||||||
|
12.04 & 1.08 & 0.53 & 0.22 & 16 & 0.00 & -5.00 & rbf & 0.99 & 0.00 & 25 \\
|
||||||
|
21.33 & 2.50 & 0.55 & 0.07 & 256 & 15.00 & -15.00 & rbf & 0.99 & 0.00 & 26 \\
|
||||||
|
12.21 & 0.68 & 2.08 & 0.24 & 32 & 10.00 & -5.00 & rbf & 0.99 & 0.00 & 27 \\
|
||||||
|
13.43 & 1.14 & 1.80 & 0.16 & 32 & 5.00 & -5.00 & rbf & 0.99 & 0.00 & 27 \\
|
||||||
|
14.51 & 1.63 & 2.15 & 0.23 & 32 & 15.00 & -5.00 & rbf & 0.99 & 0.00 & 27 \\
|
||||||
|
12.05 & 0.86 & 1.90 & 0.21 & 32 & 0.00 & -5.00 & rbf & 0.99 & 0.00 & 30 \\
|
||||||
|
21.03 & 1.59 & 0.57 & 0.05 & 256 & 10.00 & -15.00 & rbf & 0.99 & 0.00 & 31 \\
|
||||||
|
32.57 & 2.21 & 1.44 & 0.10 & 512 & 5.00 & -15.00 & rbf & 0.99 & 0.00 & 32 \\
|
||||||
|
21.09 & 1.19 & 0.72 & 0.06 & 256 & 5.00 & -15.00 & rbf & 0.99 & 0.00 & 33 \\
|
||||||
|
11.04 & 0.86 & 0.12 & 0.02 & 16 & 10.00 & -10.00 & rbf & 0.99 & 0.00 & 34 \\
|
||||||
|
12.41 & 0.67 & 0.38 & 0.05 & 64 & 0.00 & -10.00 & rbf & 0.99 & 0.00 & 35 \\
|
||||||
|
14.88 & 0.46 & 0.30 & 0.03 & 128 & 10.00 & -15.00 & rbf & 0.99 & 0.00 & 36 \\
|
||||||
|
13.66 & 0.29 & 0.16 & 0.04 & 64 & 15.00 & -15.00 & rbf & 0.99 & 0.00 & 37 \\
|
||||||
|
14.38 & 0.46 & 0.26 & 0.04 & 128 & 15.00 & -15.00 & rbf & 0.99 & 0.00 & 38 \\
|
||||||
|
10.82 & 0.53 & 0.18 & 0.03 & 16 & 5.00 & -10.00 & rbf & 0.99 & 0.00 & 39 \\
|
||||||
|
12.27 & 1.03 & 0.17 & 0.04 & 16 & 15.00 & -10.00 & rbf & 0.99 & 0.00 & 40 \\
|
||||||
|
18.20 & 0.48 & 0.17 & 0.05 & 16 & 15.00 & -15.00 & rbf & 0.99 & 0.00 & 41 \\
|
||||||
|
11.42 & 0.55 & 0.32 & 0.06 & 32 & 0.00 & -10.00 & rbf & 0.99 & 0.00 & 42 \\
|
||||||
|
16.15 & 0.73 & 0.53 & 0.12 & 128 & 5.00 & -15.00 & rbf & 0.99 & 0.00 & 43 \\
|
||||||
|
11.11 & 1.00 & 2.01 & 0.21 & 16 & -5.00 & -5.00 & rbf & 0.99 & 0.00 & 44 \\
|
||||||
|
12.20 & 0.69 & 0.19 & 0.04 & 32 & 10.00 & -15.00 & rbf & 0.98 & 0.00 & 45 \\
|
||||||
|
12.52 & 0.63 & 0.30 & 0.05 & 8 & 0.00 & -5.00 & rbf & 0.98 & 0.00 & 46 \\
|
||||||
|
11.20 & 0.12 & 0.31 & 0.06 & 64 & 5.00 & -15.00 & rbf & 0.98 & 0.00 & 47 \\
|
||||||
|
12.93 & 1.15 & 0.22 & 0.03 & 64 & 10.00 & -15.00 & rbf & 0.98 & 0.01 & 48 \\
|
||||||
|
35.29 & 5.11 & 0.17 & 0.05 & 8 & 15.00 & -10.00 & rbf & 0.98 & 0.00 & 49 \\
|
||||||
|
10.76 & 0.47 & 0.29 & 0.07 & 8 & 5.00 & -5.00 & rbf & 0.98 & 0.01 & 50 \\
|
||||||
|
20.97 & 2.37 & 0.24 & 0.09 & 8 & 10.00 & -10.00 & rbf & 0.97 & 0.00 & 51 \\
|
||||||
|
21.67 & 1.24 & 0.52 & 0.10 & 8 & 10.00 & -5.00 & rbf & 0.97 & 0.00 & 52 \\
|
||||||
|
11.56 & 0.74 & 0.27 & 0.03 & 8 & 15.00 & -5.00 & rbf & 0.97 & 0.00 & 53 \\
|
||||||
|
10.98 & 0.41 & 1.36 & 0.17 & 8 & -5.00 & -5.00 & rbf & 0.97 & 0.00 & 54 \\
|
||||||
|
10.89 & 1.19 & 0.42 & 0.07 & 16 & 0.00 & -10.00 & rbf & 0.97 & 0.00 & 55 \\
|
||||||
|
10.76 & 0.56 & 0.23 & 0.04 & 16 & 10.00 & -15.00 & rbf & 0.96 & 0.00 & 56 \\
|
||||||
|
11.71 & 1.25 & 0.39 & 0.13 & 32 & 5.00 & -15.00 & rbf & 0.96 & 0.00 & 57 \\
|
||||||
|
9.87 & 0.67 & 0.22 & 0.02 & 8 & 5.00 & -10.00 & rbf & 0.96 & 0.01 & 58 \\
|
||||||
|
20.68 & 0.69 & 6.92 & 0.40 & 256 & -5.00 & -10.00 & rbf & 0.96 & 0.00 & 59 \\
|
||||||
|
54.74 & 4.07 & 23.94 & 3.67 & 512 & -5.00 & -10.00 & rbf & 0.96 & 0.00 & 60 \\
|
||||||
|
18.02 & 0.81 & 5.02 & 0.70 & 128 & -5.00 & -10.00 & rbf & 0.95 & 0.00 & 61 \\
|
||||||
|
19.49 & 1.06 & 5.78 & 0.29 & 64 & 5.00 & -5.00 & rbf & 0.95 & 0.01 & 62 \\
|
||||||
|
23.89 & 1.21 & 6.69 & 0.32 & 64 & 10.00 & -5.00 & rbf & 0.95 & 0.01 & 62 \\
|
||||||
|
23.50 & 0.74 & 6.74 & 0.85 & 64 & 15.00 & -5.00 & rbf & 0.95 & 0.01 & 62 \\
|
||||||
|
43.30 & 1.96 & 12.07 & 0.52 & 512 & 0.00 & -15.00 & rbf & 0.95 & 0.00 & 65 \\
|
||||||
|
21.28 & 1.21 & 4.60 & 0.07 & 256 & 0.00 & -15.00 & rbf & 0.95 & 0.00 & 66 \\
|
||||||
|
13.36 & 0.42 & 2.99 & 0.13 & 64 & -5.00 & -10.00 & rbf & 0.95 & 0.00 & 67 \\
|
||||||
|
22.03 & 0.37 & 6.06 & 0.34 & 64 & 0.00 & -5.00 & rbf & 0.95 & 0.01 & 68 \\
|
||||||
|
15.26 & 0.59 & 2.88 & 0.15 & 128 & 0.00 & -15.00 & rbf & 0.95 & 0.00 & 69 \\
|
||||||
|
19.18 & 2.32 & 0.24 & 0.04 & 8 & 15.00 & -15.00 & rbf & 0.94 & 0.01 & 70 \\
|
||||||
|
13.60 & 0.79 & 2.30 & 0.11 & 32 & -5.00 & -10.00 & rbf & 0.94 & 0.00 & 71 \\
|
||||||
|
12.06 & 0.47 & 2.24 & 0.19 & 64 & 0.00 & -15.00 & rbf & 0.94 & 0.00 & 72 \\
|
||||||
|
10.80 & 0.94 & 0.41 & 0.07 & 16 & 5.00 & -15.00 & rbf & 0.94 & 0.00 & 73 \\
|
||||||
|
11.32 & 0.36 & 1.85 & 0.19 & 32 & 0.00 & -15.00 & rbf & 0.93 & 0.00 & 74 \\
|
||||||
|
12.67 & 0.51 & 0.75 & 0.12 & 8 & 0.00 & -10.00 & rbf & 0.91 & 0.00 & 75 \\
|
||||||
|
11.22 & 0.47 & 2.37 & 0.26 & 16 & -5.00 & -10.00 & rbf & 0.90 & 0.01 & 76 \\
|
||||||
|
9.97 & 0.57 & 0.41 & 0.05 & 8 & 10.00 & -15.00 & rbf & 0.89 & 0.02 & 77 \\
|
||||||
|
10.36 & 1.08 & 2.16 & 0.34 & 16 & 0.00 & -15.00 & rbf & 0.88 & 0.01 & 78 \\
|
||||||
|
13.77 & 0.36 & 0.40 & 0.05 & 4 & 5.00 & -5.00 & rbf & 0.88 & 0.01 & 79 \\
|
||||||
|
10.10 & 0.54 & 0.50 & 0.11 & 4 & 0.00 & -5.00 & rbf & 0.87 & 0.01 & 80 \\
|
||||||
|
10.38 & 0.95 & 0.58 & 0.09 & 8 & 5.00 & -15.00 & rbf & 0.87 & 0.00 & 81 \\
|
||||||
|
16.12 & 0.79 & 2.85 & 0.23 & 4 & 0.00 & 0.00 & rbf & 0.86 & 0.01 & 82 \\
|
||||||
|
26.82 & 2.04 & 0.27 & 0.04 & 4 & 10.00 & -5.00 & rbf & 0.86 & 0.02 & 83 \\
|
||||||
|
88.21 & 4.01 & 0.32 & 0.03 & 4 & 15.00 & -10.00 & rbf & 0.85 & 0.01 & 84 \\
|
||||||
|
287.33 & 21.19 & 0.14 & 0.03 & 4 & 15.00 & -5.00 & rbf & 0.85 & 0.02 & 85 \\
|
||||||
|
15.10 & 0.25 & 0.46 & 0.08 & 4 & 10.00 & -10.00 & rbf & 0.84 & 0.01 & 86 \\
|
||||||
|
11.62 & 0.69 & 1.85 & 0.11 & 4 & -5.00 & -5.00 & rbf & 0.84 & 0.00 & 87 \\
|
||||||
|
13.25 & 1.11 & 4.40 & 0.32 & 32 & -5.00 & -5.00 & rbf & 0.83 & 0.01 & 88 \\
|
||||||
|
19.04 & 0.51 & 2.53 & 0.25 & 4 & 5.00 & 0.00 & rbf & 0.82 & 0.00 & 89 \\
|
||||||
|
16.86 & 1.29 & 2.60 & 0.23 & 4 & 10.00 & 0.00 & rbf & 0.81 & 0.00 & 90 \\
|
||||||
|
15.92 & 1.29 & 2.48 & 0.40 & 4 & 15.00 & 0.00 & rbf & 0.81 & 0.00 & 91 \\
|
||||||
|
12.75 & 1.08 & 0.99 & 0.18 & 4 & 5.00 & -10.00 & rbf & 0.79 & 0.01 & 92 \\
|
||||||
|
10.57 & 0.60 & 2.52 & 0.23 & 8 & -5.00 & -10.00 & rbf & 0.79 & 0.01 & 93 \\
|
||||||
|
11.79 & 1.31 & 2.99 & 0.33 & 8 & 0.00 & -15.00 & rbf & 0.78 & 0.01 & 94 \\
|
||||||
|
28.25 & 0.68 & 10.82 & 0.49 & 128 & 10.00 & -5.00 & rbf & 0.78 & 0.01 & 95 \\
|
||||||
|
23.91 & 0.24 & 9.31 & 0.32 & 128 & 15.00 & -5.00 & rbf & 0.78 & 0.01 & 95 \\
|
||||||
|
22.74 & 1.25 & 8.30 & 0.37 & 128 & 5.00 & -5.00 & rbf & 0.78 & 0.01 & 95 \\
|
||||||
|
23.04 & 1.83 & 0.80 & 0.07 & 4 & 15.00 & -15.00 & rbf & 0.76 & 0.01 & 98 \\
|
||||||
|
31.40 & 1.74 & 6.17 & 0.29 & 8 & 10.00 & 0.00 & rbf & 0.76 & 0.00 & 99 \\
|
||||||
|
18.01 & 0.70 & 4.37 & 0.23 & 8 & 5.00 & 0.00 & rbf & 0.76 & 0.00 & 99 \\
|
||||||
|
23.46 & 2.44 & 6.29 & 0.69 & 8 & 15.00 & 0.00 & rbf & 0.76 & 0.00 & 99 \\
|
||||||
|
22.90 & 0.83 & 8.79 & 0.48 & 128 & 0.00 & -5.00 & rbf & 0.76 & 0.01 & 102 \\
|
||||||
|
18.40 & 0.65 & 4.71 & 0.15 & 8 & 0.00 & 0.00 & rbf & 0.74 & 0.01 & 103 \\
|
||||||
|
11.46 & 0.25 & 1.50 & 0.12 & 4 & 0.00 & -10.00 & rbf & 0.72 & 0.00 & 104 \\
|
||||||
|
11.15 & 0.41 & 1.16 & 0.05 & 4 & 10.00 & -15.00 & rbf & 0.70 & 0.01 & 105 \\
|
||||||
|
31.21 & 0.84 & 12.67 & 0.54 & 256 & 10.00 & -5.00 & rbf & 0.62 & 0.01 & 106 \\
|
||||||
|
29.16 & 0.72 & 13.20 & 0.91 & 256 & 5.00 & -5.00 & rbf & 0.62 & 0.01 & 106 \\
|
||||||
|
31.63 & 1.84 & 12.80 & 0.43 & 256 & 15.00 & -5.00 & rbf & 0.62 & 0.01 & 106 \\
|
||||||
|
11.71 & 0.92 & 2.31 & 0.17 & 4 & 5.00 & -15.00 & rbf & 0.59 & 0.01 & 109 \\
|
||||||
|
28.37 & 0.86 & 13.04 & 0.37 & 256 & 0.00 & -5.00 & rbf & 0.58 & 0.01 & 110 \\
|
||||||
|
12.91 & 0.17 & 5.06 & 0.26 & 4 & -5.00 & 0.00 & rbf & 0.57 & 0.01 & 111 \\
|
||||||
|
38.95 & 1.03 & 22.99 & 0.93 & 512 & 15.00 & -5.00 & rbf & 0.52 & 0.01 & 112 \\
|
||||||
|
43.47 & 1.32 & 21.46 & 1.80 & 512 & 10.00 & -5.00 & rbf & 0.52 & 0.01 & 112 \\
|
||||||
|
56.13 & 1.93 & 33.40 & 1.80 & 512 & 5.00 & -5.00 & rbf & 0.52 & 0.01 & 112 \\
|
||||||
|
12.08 & 0.95 & 3.63 & 0.28 & 4 & -5.00 & -10.00 & rbf & 0.49 & 0.01 & 115 \\
|
||||||
|
59.39 & 3.21 & 37.12 & 2.83 & 512 & 0.00 & -5.00 & rbf & 0.48 & 0.01 & 116 \\
|
||||||
|
11.15 & 0.54 & 3.39 & 0.30 & 4 & 0.00 & -15.00 & rbf & 0.45 & 0.01 & 117 \\
|
||||||
|
18.29 & 1.10 & 5.17 & 0.36 & 16 & 5.00 & 0.00 & rbf & 0.41 & 0.04 & 118 \\
|
||||||
|
18.70 & 0.76 & 5.89 & 0.13 & 16 & 10.00 & 0.00 & rbf & 0.41 & 0.04 & 118 \\
|
||||||
|
18.46 & 1.11 & 4.63 & 0.34 & 16 & 15.00 & 0.00 & rbf & 0.41 & 0.04 & 118 \\
|
||||||
|
21.28 & 0.87 & 6.36 & 0.73 & 16 & 0.00 & 0.00 & rbf & 0.37 & 0.04 & 121 \\
|
||||||
|
20.26 & 1.35 & 4.68 & 0.28 & 4 & 5.00 & 5.00 & rbf & 0.35 & 0.01 & 122 \\
|
||||||
|
19.26 & 1.28 & 4.61 & 0.50 & 4 & 10.00 & 5.00 & rbf & 0.35 & 0.01 & 122 \\
|
||||||
|
17.60 & 1.57 & 3.77 & 0.28 & 4 & 15.00 & 5.00 & rbf & 0.35 & 0.01 & 122 \\
|
||||||
|
17.67 & 1.23 & 5.26 & 0.67 & 4 & 0.00 & 5.00 & rbf & 0.33 & 0.01 & 125 \\
|
||||||
|
18.94 & 1.56 & 5.17 & 0.14 & 32 & 10.00 & 0.00 & rbf & 0.19 & 0.00 & 126 \\
|
||||||
|
19.43 & 0.91 & 5.23 & 0.69 & 32 & 5.00 & 0.00 & rbf & 0.19 & 0.00 & 126 \\
|
||||||
|
19.68 & 0.96 & 5.32 & 0.58 & 32 & 15.00 & 0.00 & rbf & 0.19 & 0.00 & 126 \\
|
||||||
|
17.64 & 1.11 & 5.61 & 0.50 & 32 & 0.00 & 0.00 & rbf & 0.18 & 0.00 & 129 \\
|
||||||
|
23.99 & 1.88 & 6.74 & 0.31 & 64 & 15.00 & 0.00 & rbf & 0.16 & 0.00 & 130 \\
|
||||||
|
19.78 & 0.82 & 5.87 & 0.59 & 64 & 5.00 & 0.00 & rbf & 0.16 & 0.00 & 130 \\
|
||||||
|
24.28 & 1.97 & 6.50 & 0.72 & 64 & 10.00 & 0.00 & rbf & 0.16 & 0.00 & 130 \\
|
||||||
|
19.46 & 0.69 & 6.47 & 0.76 & 64 & 0.00 & 0.00 & rbf & 0.15 & 0.00 & 133 \\
|
||||||
|
22.83 & 0.85 & 6.11 & 0.08 & 8 & 15.00 & 5.00 & rbf & 0.14 & 0.00 & 134 \\
|
||||||
|
25.67 & 2.30 & 5.26 & 0.62 & 8 & 10.00 & 5.00 & rbf & 0.14 & 0.00 & 134 \\
|
||||||
|
18.09 & 1.21 & 4.88 & 0.40 & 8 & 5.00 & 5.00 & rbf & 0.14 & 0.00 & 134 \\
|
||||||
|
26.87 & 2.05 & 9.54 & 0.96 & 128 & 10.00 & 0.00 & rbf & 0.14 & 0.00 & 137 \\
|
||||||
|
22.82 & 0.80 & 8.18 & 0.34 & 128 & 5.00 & 0.00 & rbf & 0.14 & 0.00 & 137 \\
|
||||||
|
25.45 & 2.61 & 9.58 & 0.52 & 128 & 15.00 & 0.00 & rbf & 0.14 & 0.00 & 137 \\
|
||||||
|
14.62 & 0.59 & 4.54 & 0.39 & 8 & 0.00 & 5.00 & rbf & 0.14 & 0.00 & 140 \\
|
||||||
|
21.15 & 1.40 & 9.55 & 0.28 & 128 & 0.00 & 0.00 & rbf & 0.14 & 0.00 & 141 \\
|
||||||
|
18.70 & 0.74 & 5.94 & 0.31 & 64 & 0.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
18.29 & 0.64 & 6.10 & 0.61 & 64 & 5.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
19.14 & 1.33 & 6.94 & 0.48 & 64 & 10.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
19.40 & 1.95 & 5.37 & 0.34 & 32 & 15.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
11.49 & 0.29 & 4.88 & 0.55 & 16 & -5.00 & -15.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
19.08 & 1.05 & 5.64 & 0.93 & 32 & 5.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
18.01 & 1.11 & 5.22 & 0.55 & 32 & 10.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
13.01 & 0.61 & 5.39 & 0.42 & 32 & -5.00 & 0.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
16.10 & 0.62 & 6.27 & 0.71 & 32 & -5.00 & -15.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
12.40 & 0.63 & 5.41 & 0.49 & 32 & -5.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
16.16 & 1.74 & 5.41 & 0.32 & 32 & 0.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
22.09 & 0.67 & 8.40 & 0.34 & 64 & 15.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
14.87 & 0.62 & 6.54 & 0.79 & 64 & -5.00 & 0.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
14.19 & 0.50 & 6.77 & 0.44 & 64 & -5.00 & -5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
15.11 & 1.67 & 6.90 & 0.78 & 64 & -5.00 & -15.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
28.10 & 1.07 & 9.40 & 0.43 & 128 & 15.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
27.71 & 0.36 & 12.87 & 0.48 & 256 & 15.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
17.81 & 0.82 & 8.55 & 0.44 & 128 & -5.00 & -5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
21.35 & 1.03 & 10.15 & 0.30 & 128 & 0.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
24.11 & 1.69 & 14.50 & 0.49 & 256 & -5.00 & 0.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
25.28 & 0.52 & 14.40 & 0.46 & 256 & -5.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
24.03 & 1.90 & 13.31 & 0.63 & 256 & -5.00 & -15.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
21.57 & 0.26 & 13.40 & 0.23 & 256 & -5.00 & -5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
45.39 & 1.01 & 22.44 & 0.21 & 512 & 15.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
39.60 & 1.70 & 21.35 & 0.61 & 512 & 10.00 & 0.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
37.37 & 1.35 & 22.79 & 0.81 & 512 & 10.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
41.59 & 2.41 & 22.59 & 0.84 & 512 & 15.00 & 0.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
51.53 & 1.28 & 34.79 & 2.38 & 512 & -5.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
61.98 & 2.19 & 44.70 & 5.92 & 512 & -5.00 & -15.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
51.97 & 2.36 & 37.98 & 1.31 & 512 & -5.00 & -5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
54.09 & 1.95 & 34.66 & 1.89 & 512 & -5.00 & 0.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
50.43 & 13.46 & 23.31 & 3.95 & 512 & 0.00 & 0.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
34.60 & 0.87 & 25.44 & 1.06 & 512 & 0.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
59.12 & 1.76 & 31.10 & 1.85 & 512 & 5.00 & 0.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
58.71 & 2.68 & 24.94 & 0.90 & 512 & 5.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
14.93 & 0.19 & 6.10 & 0.33 & 64 & -5.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
23.19 & 0.99 & 8.43 & 0.42 & 128 & 10.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
22.54 & 0.35 & 8.50 & 0.09 & 128 & 5.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
28.93 & 1.50 & 12.57 & 0.59 & 256 & 10.00 & 0.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
27.90 & 0.85 & 16.03 & 0.28 & 256 & 0.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
25.92 & 1.36 & 13.94 & 1.43 & 256 & 0.00 & 0.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
28.25 & 0.66 & 13.30 & 1.44 & 256 & 5.00 & 0.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
28.43 & 1.21 & 14.84 & 0.52 & 256 & 5.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
28.60 & 1.12 & 14.25 & 0.72 & 256 & 10.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
16.56 & 0.55 & 8.44 & 0.26 & 128 & -5.00 & 0.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
16.56 & 0.28 & 8.63 & 0.52 & 128 & -5.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
16.76 & 0.18 & 9.79 & 1.45 & 128 & -5.00 & -15.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
28.98 & 1.34 & 12.71 & 0.38 & 256 & 15.00 & 0.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
12.07 & 0.43 & 4.74 & 0.50 & 8 & -5.00 & 0.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
12.12 & 0.80 & 4.90 & 0.50 & 16 & -5.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
17.73 & 0.90 & 4.94 & 0.44 & 16 & 5.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
12.43 & 0.77 & 4.76 & 0.41 & 4 & -5.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
14.85 & 0.74 & 5.38 & 0.50 & 4 & -5.00 & -15.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
12.12 & 0.91 & 5.04 & 0.45 & 16 & -5.00 & 0.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
20.29 & 1.26 & 5.73 & 0.74 & 16 & 10.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
11.72 & 0.21 & 4.94 & 0.22 & 8 & -5.00 & -15.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
18.29 & 1.29 & 4.66 & 0.41 & 16 & 15.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
12.07 & 0.86 & 4.80 & 0.71 & 8 & -5.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
16.08 & 1.41 & 5.43 & 0.94 & 16 & 0.00 & 5.00 & rbf & 0.14 & 0.00 & 142 \\
|
||||||
|
\end{longtable}
|
||||||
|
\end{rlandscape}
|
||||||
122
latex/appendix/fine_grid_results_A_32.tex
Normal file
122
latex/appendix/fine_grid_results_A_32.tex
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
|
||||||
|
\begin{rlandscape}
|
||||||
|
% \section*{Hasil Fine Grid Search}
|
||||||
|
\centering
|
||||||
|
\begin{longtable}{
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}}
|
||||||
|
\caption{Hasil \textit{Fine Grid-Search} Sensor A (PCA=32) diurutkan berdasarkan \textit{rank test score}}
|
||||||
|
\label{tab:fine grid results A}
|
||||||
|
\\
|
||||||
|
\toprule
|
||||||
|
\toprule
|
||||||
|
mean fit time & std fit time & mean score time & std score time & param svc C & param svc gamma & param svc kernel & mean test score & std test score & rank test score \\
|
||||||
|
\midrule
|
||||||
|
\endfirsthead
|
||||||
|
|
||||||
|
\toprule
|
||||||
|
\toprule
|
||||||
|
mean fit time & std fit time & mean score time & std score time & param svc C & param svc gamma & param svc kernel & mean test score & std test score & rank test score \\
|
||||||
|
\midrule
|
||||||
|
\endhead
|
||||||
|
|
||||||
|
\midrule
|
||||||
|
\multicolumn{10}{r}{\textit{berlanjut di halaman berikutnya}}
|
||||||
|
\endfoot
|
||||||
|
|
||||||
|
\bottomrule
|
||||||
|
\bottomrule
|
||||||
|
\endlastfoot
|
||||||
|
|
||||||
|
% Start of table content
|
||||||
|
11.51 & 0.20 & 0.29 & 0.07 & 8.00 & -8.00 & rbf & 1.00 & 0.00 & 1 \\
|
||||||
|
11.35 & 0.20 & 0.26 & 0.04 & 8.50 & -8.00 & rbf & 1.00 & 0.00 & 1 \\
|
||||||
|
14.04 & 0.73 & 0.35 & 0.08 & 9.00 & -8.00 & rbf & 1.00 & 0.00 & 1 \\
|
||||||
|
10.47 & 0.36 & 0.21 & 0.02 & 9.50 & -8.00 & rbf & 1.00 & 0.00 & 1 \\
|
||||||
|
11.00 & 0.19 & 0.23 & 0.03 & 10.50 & -8.00 & rbf & 1.00 & 0.00 & 1 \\
|
||||||
|
11.13 & 0.50 & 0.25 & 0.05 & 11.00 & -8.00 & rbf & 1.00 & 0.00 & 1 \\
|
||||||
|
10.96 & 0.39 & 0.22 & 0.02 & 10.00 & -8.00 & rbf & 1.00 & 0.00 & 1 \\
|
||||||
|
11.00 & 0.22 & 0.25 & 0.04 & 11.50 & -8.00 & rbf & 1.00 & 0.00 & 1 \\
|
||||||
|
10.05 & 0.68 & 0.15 & 0.04 & 12.00 & -8.00 & rbf & 1.00 & 0.00 & 1 \\
|
||||||
|
11.64 & 0.79 & 0.17 & 0.02 & 8.00 & -9.00 & rbf & 0.99 & 0.00 & 10 \\
|
||||||
|
11.72 & 0.49 & 0.20 & 0.01 & 8.00 & -8.50 & rbf & 0.99 & 0.00 & 11 \\
|
||||||
|
11.91 & 0.37 & 0.17 & 0.03 & 10.00 & -8.50 & rbf & 0.99 & 0.00 & 12 \\
|
||||||
|
10.69 & 0.57 & 0.18 & 0.02 & 9.50 & -8.50 & rbf & 0.99 & 0.00 & 12 \\
|
||||||
|
12.79 & 0.19 & 0.21 & 0.01 & 9.00 & -8.50 & rbf & 0.99 & 0.00 & 12 \\
|
||||||
|
12.04 & 0.21 & 0.21 & 0.05 & 11.00 & -8.50 & rbf & 0.99 & 0.00 & 12 \\
|
||||||
|
10.73 & 0.17 & 0.22 & 0.05 & 10.50 & -8.50 & rbf & 0.99 & 0.00 & 12 \\
|
||||||
|
11.07 & 0.62 & 0.21 & 0.06 & 11.50 & -8.50 & rbf & 0.99 & 0.00 & 12 \\
|
||||||
|
11.90 & 0.40 & 0.18 & 0.04 & 12.00 & -8.50 & rbf & 0.99 & 0.00 & 12 \\
|
||||||
|
10.83 & 0.48 & 0.19 & 0.03 & 8.50 & -8.50 & rbf & 0.99 & 0.00 & 12 \\
|
||||||
|
10.83 & 0.43 & 0.20 & 0.05 & 8.50 & -9.00 & rbf & 0.99 & 0.00 & 20 \\
|
||||||
|
11.66 & 0.29 & 0.22 & 0.02 & 9.00 & -9.00 & rbf & 0.99 & 0.00 & 21 \\
|
||||||
|
13.20 & 0.48 & 0.20 & 0.02 & 11.00 & -9.00 & rbf & 0.99 & 0.00 & 21 \\
|
||||||
|
12.11 & 0.50 & 0.18 & 0.03 & 10.00 & -9.00 & rbf & 0.99 & 0.00 & 21 \\
|
||||||
|
10.78 & 0.48 & 0.16 & 0.01 & 9.50 & -9.00 & rbf & 0.99 & 0.00 & 21 \\
|
||||||
|
11.37 & 0.35 & 0.18 & 0.02 & 10.50 & -9.00 & rbf & 0.99 & 0.00 & 21 \\
|
||||||
|
13.46 & 0.73 & 0.20 & 0.02 & 12.00 & -9.00 & rbf & 0.99 & 0.00 & 21 \\
|
||||||
|
11.13 & 0.50 & 0.18 & 0.03 & 11.50 & -9.00 & rbf & 0.99 & 0.00 & 21 \\
|
||||||
|
11.21 & 0.46 & 0.21 & 0.03 & 9.00 & -9.50 & rbf & 0.99 & 0.00 & 28 \\
|
||||||
|
10.93 & 1.39 & 0.16 & 0.02 & 8.50 & -9.50 & rbf & 0.99 & 0.00 & 29 \\
|
||||||
|
11.35 & 0.22 & 0.16 & 0.02 & 9.50 & -9.50 & rbf & 0.99 & 0.00 & 30 \\
|
||||||
|
13.34 & 0.95 & 0.19 & 0.01 & 11.00 & -9.50 & rbf & 0.99 & 0.00 & 31 \\
|
||||||
|
11.74 & 0.72 & 0.18 & 0.04 & 10.50 & -9.50 & rbf & 0.99 & 0.00 & 31 \\
|
||||||
|
14.65 & 0.45 & 0.21 & 0.04 & 12.00 & -9.50 & rbf & 0.99 & 0.00 & 31 \\
|
||||||
|
11.41 & 0.80 & 0.17 & 0.04 & 11.50 & -9.50 & rbf & 0.99 & 0.00 & 31 \\
|
||||||
|
12.80 & 0.94 & 0.20 & 0.06 & 8.50 & -11.50 & rbf & 0.99 & 0.00 & 35 \\
|
||||||
|
11.17 & 0.33 & 0.17 & 0.04 & 10.00 & -9.50 & rbf & 0.99 & 0.00 & 36 \\
|
||||||
|
15.20 & 0.66 & 0.19 & 0.04 & 9.50 & -12.00 & rbf & 0.99 & 0.00 & 37 \\
|
||||||
|
11.93 & 0.84 & 0.21 & 0.05 & 10.50 & -10.00 & rbf & 0.99 & 0.00 & 37 \\
|
||||||
|
10.62 & 0.21 & 0.14 & 0.01 & 10.00 & -10.00 & rbf & 0.99 & 0.00 & 39 \\
|
||||||
|
11.53 & 0.57 & 0.15 & 0.02 & 9.00 & -11.50 & rbf & 0.99 & 0.00 & 40 \\
|
||||||
|
11.73 & 0.14 & 0.17 & 0.02 & 11.00 & -10.50 & rbf & 0.99 & 0.00 & 41 \\
|
||||||
|
12.91 & 1.20 & 0.15 & 0.03 & 12.00 & -11.00 & rbf & 0.99 & 0.00 & 41 \\
|
||||||
|
11.08 & 0.53 & 0.18 & 0.05 & 9.50 & -10.00 & rbf & 0.99 & 0.00 & 43 \\
|
||||||
|
11.17 & 0.32 & 0.16 & 0.02 & 8.00 & -10.50 & rbf & 0.99 & 0.00 & 44 \\
|
||||||
|
11.45 & 0.62 & 0.17 & 0.03 & 8.00 & -9.50 & rbf & 0.99 & 0.00 & 45 \\
|
||||||
|
11.25 & 0.34 & 0.15 & 0.03 & 10.00 & -12.00 & rbf & 0.99 & 0.00 & 46 \\
|
||||||
|
11.58 & 0.19 & 0.19 & 0.05 & 11.50 & -10.50 & rbf & 0.99 & 0.00 & 47 \\
|
||||||
|
11.53 & 0.28 & 0.15 & 0.02 & 11.50 & -11.00 & rbf & 0.99 & 0.00 & 48 \\
|
||||||
|
12.31 & 1.04 & 0.20 & 0.02 & 11.00 & -10.00 & rbf & 0.99 & 0.00 & 49 \\
|
||||||
|
11.49 & 0.54 & 0.19 & 0.03 & 10.50 & -10.50 & rbf & 0.99 & 0.00 & 49 \\
|
||||||
|
13.31 & 1.17 & 0.19 & 0.01 & 9.50 & -11.50 & rbf & 0.99 & 0.00 & 51 \\
|
||||||
|
13.78 & 0.61 & 0.24 & 0.03 & 12.00 & -10.00 & rbf & 0.99 & 0.00 & 52 \\
|
||||||
|
10.78 & 0.44 & 0.17 & 0.03 & 11.50 & -10.00 & rbf & 0.99 & 0.00 & 52 \\
|
||||||
|
11.03 & 0.14 & 0.15 & 0.02 & 8.00 & -11.50 & rbf & 0.99 & 0.00 & 54 \\
|
||||||
|
12.36 & 1.21 & 0.14 & 0.01 & 8.50 & -10.00 & rbf & 0.99 & 0.00 & 55 \\
|
||||||
|
11.25 & 0.54 & 0.16 & 0.04 & 10.50 & -12.00 & rbf & 0.99 & 0.00 & 56 \\
|
||||||
|
11.56 & 0.84 & 0.17 & 0.03 & 9.00 & -12.00 & rbf & 0.99 & 0.00 & 57 \\
|
||||||
|
11.44 & 0.41 & 0.17 & 0.02 & 9.00 & -10.00 & rbf & 0.99 & 0.00 & 58 \\
|
||||||
|
11.88 & 0.68 & 0.15 & 0.02 & 9.00 & -11.00 & rbf & 0.99 & 0.00 & 59 \\
|
||||||
|
12.35 & 1.43 & 0.18 & 0.03 & 12.00 & -10.50 & rbf & 0.99 & 0.00 & 60 \\
|
||||||
|
10.89 & 0.17 & 0.17 & 0.01 & 10.00 & -10.50 & rbf & 0.99 & 0.00 & 61 \\
|
||||||
|
10.95 & 0.37 & 0.14 & 0.01 & 10.00 & -11.50 & rbf & 0.99 & 0.00 & 62 \\
|
||||||
|
10.82 & 0.49 & 0.19 & 0.04 & 9.50 & -10.50 & rbf & 0.99 & 0.00 & 63 \\
|
||||||
|
11.50 & 0.29 & 0.17 & 0.02 & 10.50 & -11.50 & rbf & 0.99 & 0.00 & 64 \\
|
||||||
|
11.41 & 0.31 & 0.17 & 0.04 & 9.50 & -11.00 & rbf & 0.99 & 0.00 & 64 \\
|
||||||
|
11.56 & 0.38 & 0.15 & 0.02 & 11.50 & -12.00 & rbf & 0.99 & 0.00 & 66 \\
|
||||||
|
11.47 & 0.55 & 0.19 & 0.04 & 10.50 & -11.00 & rbf & 0.99 & 0.00 & 66 \\
|
||||||
|
13.02 & 0.60 & 0.17 & 0.04 & 8.50 & -10.50 & rbf & 0.99 & 0.00 & 66 \\
|
||||||
|
11.64 & 0.06 & 0.16 & 0.03 & 11.50 & -11.50 & rbf & 0.99 & 0.00 & 66 \\
|
||||||
|
11.95 & 0.27 & 0.17 & 0.02 & 11.00 & -12.00 & rbf & 0.99 & 0.00 & 70 \\
|
||||||
|
11.08 & 0.49 & 0.16 & 0.03 & 8.00 & -10.00 & rbf & 0.99 & 0.00 & 70 \\
|
||||||
|
12.28 & 0.59 & 0.15 & 0.01 & 12.00 & -11.50 & rbf & 0.99 & 0.00 & 70 \\
|
||||||
|
11.46 & 0.36 & 0.15 & 0.02 & 11.00 & -11.00 & rbf & 0.99 & 0.00 & 73 \\
|
||||||
|
11.19 & 0.58 & 0.20 & 0.05 & 9.00 & -10.50 & rbf & 0.99 & 0.00 & 74 \\
|
||||||
|
12.88 & 0.29 & 0.16 & 0.02 & 8.50 & -12.00 & rbf & 0.99 & 0.00 & 75 \\
|
||||||
|
10.91 & 0.09 & 0.14 & 0.01 & 10.00 & -11.00 & rbf & 0.99 & 0.00 & 76 \\
|
||||||
|
11.80 & 0.22 & 0.16 & 0.02 & 11.00 & -11.50 & rbf & 0.99 & 0.00 & 77 \\
|
||||||
|
11.41 & 0.18 & 0.18 & 0.02 & 12.00 & -12.00 & rbf & 0.99 & 0.00 & 78 \\
|
||||||
|
10.92 & 0.12 & 0.17 & 0.03 & 8.00 & -12.00 & rbf & 0.99 & 0.00 & 79 \\
|
||||||
|
14.04 & 0.35 & 0.19 & 0.03 & 8.50 & -11.00 & rbf & 0.99 & 0.01 & 80 \\
|
||||||
|
10.82 & 0.20 & 0.18 & 0.03 & 8.00 & -11.00 & rbf & 0.98 & 0.02 & 81 \\
|
||||||
|
\end{longtable}
|
||||||
|
\end{rlandscape}
|
||||||
121
latex/appendix/fine_grid_results_B_16.tex
Normal file
121
latex/appendix/fine_grid_results_B_16.tex
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
|
||||||
|
\begin{rlandscape}
|
||||||
|
\centering
|
||||||
|
\begin{longtable}{
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}
|
||||||
|
p{0.1\textwidth}}
|
||||||
|
\caption{Hasil \textit{Fine Grid-Search} Sensor B (PCA=16) diurutkan berdasarkan \textit{rank test score}}
|
||||||
|
\label{tab:fine grid results A}
|
||||||
|
\\
|
||||||
|
\toprule
|
||||||
|
\toprule
|
||||||
|
mean fit time & std fit time & mean score time & std score time & param svc C & param svc gamma & param svc kernel & mean test score & std test score & rank test score \\
|
||||||
|
\midrule
|
||||||
|
\endfirsthead
|
||||||
|
|
||||||
|
\toprule
|
||||||
|
\toprule
|
||||||
|
mean fit time & std fit time & mean score time & std score time & param svc C & param svc gamma & param svc kernel & mean test score & std test score & rank test score \\
|
||||||
|
\midrule
|
||||||
|
\endhead
|
||||||
|
|
||||||
|
\midrule
|
||||||
|
\multicolumn{10}{r}{\textit{berlanjut di halaman berikutnya}}
|
||||||
|
\endfoot
|
||||||
|
|
||||||
|
\bottomrule
|
||||||
|
\bottomrule
|
||||||
|
\endlastfoot
|
||||||
|
|
||||||
|
% Start of table content
|
||||||
|
15.05 & 2.17 & 0.51 & 0.10 & 3.00 & -5.50 & rbf & 0.99 & 0.00 & 1 \\
|
||||||
|
15.58 & 0.88 & 0.66 & 0.16 & 3.00 & -5.00 & rbf & 0.99 & 0.00 & 1 \\
|
||||||
|
17.69 & 1.83 & 0.86 & 0.18 & 3.50 & -5.00 & rbf & 0.99 & 0.00 & 1 \\
|
||||||
|
17.31 & 2.43 & 0.81 & 0.27 & 4.00 & -5.00 & rbf & 0.99 & 0.00 & 4 \\
|
||||||
|
14.79 & 1.40 & 1.23 & 0.21 & 3.00 & -4.50 & rbf & 0.99 & 0.00 & 5 \\
|
||||||
|
16.52 & 1.10 & 0.58 & 0.21 & 3.50 & -5.50 & rbf & 0.99 & 0.00 & 6 \\
|
||||||
|
15.97 & 2.50 & 0.42 & 0.12 & 3.00 & -6.00 & rbf & 0.99 & 0.00 & 7 \\
|
||||||
|
17.13 & 1.43 & 1.42 & 0.29 & 3.50 & -4.50 & rbf & 0.99 & 0.00 & 8 \\
|
||||||
|
15.20 & 1.24 & 0.53 & 0.16 & 4.00 & -5.50 & rbf & 0.99 & 0.00 & 9 \\
|
||||||
|
17.55 & 2.71 & 1.51 & 0.44 & 4.00 & -4.50 & rbf & 0.99 & 0.00 & 10 \\
|
||||||
|
13.33 & 0.43 & 1.04 & 0.12 & 5.00 & -4.50 & rbf & 0.99 & 0.00 & 10 \\
|
||||||
|
14.88 & 0.76 & 1.17 & 0.10 & 4.50 & -4.50 & rbf & 0.99 & 0.00 & 10 \\
|
||||||
|
15.24 & 1.19 & 1.12 & 0.22 & 5.50 & -4.50 & rbf & 0.99 & 0.00 & 10 \\
|
||||||
|
15.48 & 1.94 & 1.15 & 0.08 & 6.00 & -4.50 & rbf & 0.99 & 0.00 & 10 \\
|
||||||
|
15.71 & 1.53 & 1.30 & 0.17 & 7.00 & -4.50 & rbf & 0.99 & 0.00 & 10 \\
|
||||||
|
17.31 & 1.39 & 1.49 & 0.16 & 6.50 & -4.50 & rbf & 0.99 & 0.00 & 10 \\
|
||||||
|
14.48 & 1.24 & 0.47 & 0.15 & 4.00 & -6.00 & rbf & 0.99 & 0.00 & 17 \\
|
||||||
|
13.91 & 1.43 & 0.33 & 0.07 & 4.00 & -6.50 & rbf & 0.99 & 0.00 & 18 \\
|
||||||
|
14.88 & 0.72 & 0.45 & 0.08 & 4.50 & -5.50 & rbf & 0.99 & 0.00 & 18 \\
|
||||||
|
14.17 & 0.99 & 0.64 & 0.05 & 5.00 & -5.00 & rbf & 0.99 & 0.00 & 20 \\
|
||||||
|
14.58 & 0.84 & 0.70 & 0.02 & 4.50 & -5.00 & rbf & 0.99 & 0.00 & 20 \\
|
||||||
|
13.31 & 0.80 & 0.68 & 0.14 & 7.00 & -5.00 & rbf & 0.99 & 0.00 & 20 \\
|
||||||
|
19.03 & 2.56 & 0.68 & 0.17 & 6.00 & -5.00 & rbf & 0.99 & 0.00 & 20 \\
|
||||||
|
14.79 & 1.28 & 0.68 & 0.05 & 5.50 & -5.00 & rbf & 0.99 & 0.00 & 20 \\
|
||||||
|
17.23 & 1.01 & 0.77 & 0.09 & 6.50 & -5.00 & rbf & 0.99 & 0.00 & 20 \\
|
||||||
|
13.35 & 1.06 & 0.23 & 0.05 & 4.50 & -7.00 & rbf & 0.99 & 0.00 & 26 \\
|
||||||
|
15.12 & 1.35 & 0.26 & 0.05 & 5.00 & -7.00 & rbf & 0.99 & 0.00 & 27 \\
|
||||||
|
13.77 & 0.96 & 0.40 & 0.07 & 5.00 & -6.00 & rbf & 0.99 & 0.00 & 27 \\
|
||||||
|
13.31 & 0.72 & 0.31 & 0.05 & 4.50 & -6.50 & rbf & 0.99 & 0.00 & 29 \\
|
||||||
|
14.02 & 0.96 & 0.28 & 0.04 & 3.50 & -7.00 & rbf & 0.99 & 0.00 & 29 \\
|
||||||
|
13.48 & 1.41 & 0.39 & 0.10 & 5.00 & -6.50 & rbf & 0.99 & 0.00 & 29 \\
|
||||||
|
15.94 & 3.48 & 0.36 & 0.12 & 3.00 & -6.50 & rbf & 0.99 & 0.00 & 29 \\
|
||||||
|
14.91 & 0.68 & 0.38 & 0.03 & 3.50 & -6.50 & rbf & 0.99 & 0.00 & 33 \\
|
||||||
|
19.28 & 3.10 & 0.30 & 0.07 & 3.00 & -7.00 & rbf & 0.99 & 0.00 & 34 \\
|
||||||
|
13.49 & 0.87 & 0.23 & 0.06 & 4.00 & -7.00 & rbf & 0.99 & 0.00 & 35 \\
|
||||||
|
13.84 & 0.70 & 0.48 & 0.05 & 5.00 & -5.50 & rbf & 0.99 & 0.00 & 36 \\
|
||||||
|
16.10 & 0.82 & 0.50 & 0.13 & 3.50 & -6.00 & rbf & 0.99 & 0.00 & 37 \\
|
||||||
|
14.78 & 1.20 & 0.61 & 0.06 & 5.50 & -5.50 & rbf & 0.99 & 0.00 & 38 \\
|
||||||
|
16.82 & 2.34 & 0.52 & 0.12 & 6.00 & -5.50 & rbf & 0.99 & 0.00 & 38 \\
|
||||||
|
14.90 & 1.36 & 0.46 & 0.06 & 6.50 & -5.50 & rbf & 0.99 & 0.00 & 38 \\
|
||||||
|
12.47 & 0.28 & 0.41 & 0.03 & 7.00 & -5.50 & rbf & 0.99 & 0.00 & 38 \\
|
||||||
|
14.96 & 0.84 & 0.25 & 0.02 & 6.00 & -7.00 & rbf & 0.99 & 0.00 & 42 \\
|
||||||
|
13.57 & 1.58 & 0.38 & 0.11 & 4.50 & -6.00 & rbf & 0.99 & 0.00 & 43 \\
|
||||||
|
17.85 & 1.20 & 0.26 & 0.04 & 5.50 & -7.00 & rbf & 0.99 & 0.00 & 44 \\
|
||||||
|
17.20 & 0.40 & 0.41 & 0.05 & 5.50 & -6.50 & rbf & 0.99 & 0.00 & 45 \\
|
||||||
|
18.66 & 1.06 & 0.58 & 0.06 & 6.00 & -6.00 & rbf & 0.99 & 0.00 & 46 \\
|
||||||
|
16.02 & 0.88 & 0.39 & 0.12 & 6.00 & -6.50 & rbf & 0.99 & 0.00 & 47 \\
|
||||||
|
14.46 & 1.11 & 0.24 & 0.05 & 6.50 & -7.00 & rbf & 0.99 & 0.00 & 48 \\
|
||||||
|
13.45 & 1.56 & 0.39 & 0.05 & 6.50 & -6.50 & rbf & 0.99 & 0.00 & 49 \\
|
||||||
|
13.74 & 1.04 & 0.21 & 0.03 & 7.00 & -7.00 & rbf & 0.99 & 0.00 & 50 \\
|
||||||
|
15.99 & 1.92 & 1.70 & 0.27 & 3.50 & -4.00 & rbf & 0.99 & 0.00 & 51 \\
|
||||||
|
15.82 & 1.46 & 1.69 & 0.19 & 5.50 & -4.00 & rbf & 0.99 & 0.00 & 51 \\
|
||||||
|
14.77 & 0.73 & 1.63 & 0.17 & 5.00 & -4.00 & rbf & 0.99 & 0.00 & 51 \\
|
||||||
|
16.90 & 0.93 & 1.99 & 0.20 & 4.50 & -4.00 & rbf & 0.99 & 0.00 & 51 \\
|
||||||
|
17.19 & 1.39 & 1.73 & 0.16 & 6.50 & -4.00 & rbf & 0.99 & 0.00 & 51 \\
|
||||||
|
18.28 & 1.01 & 2.04 & 0.42 & 7.00 & -4.00 & rbf & 0.99 & 0.00 & 51 \\
|
||||||
|
14.20 & 1.10 & 1.50 & 0.10 & 6.00 & -4.00 & rbf & 0.99 & 0.00 & 51 \\
|
||||||
|
16.36 & 2.05 & 1.91 & 0.40 & 3.00 & -4.00 & rbf & 0.99 & 0.00 & 51 \\
|
||||||
|
16.89 & 0.94 & 1.79 & 0.41 & 4.00 & -4.00 & rbf & 0.99 & 0.00 & 51 \\
|
||||||
|
12.72 & 0.90 & 0.31 & 0.07 & 7.00 & -6.50 & rbf & 0.99 & 0.00 & 60 \\
|
||||||
|
15.35 & 2.01 & 0.43 & 0.07 & 5.50 & -6.00 & rbf & 0.99 & 0.00 & 61 \\
|
||||||
|
14.36 & 0.67 & 0.41 & 0.05 & 6.50 & -6.00 & rbf & 0.99 & 0.00 & 62 \\
|
||||||
|
13.48 & 0.75 & 0.36 & 0.06 & 7.00 & -6.00 & rbf & 0.99 & 0.00 & 63 \\
|
||||||
|
15.55 & 0.98 & 2.57 & 0.25 & 6.00 & -3.50 & rbf & 0.99 & 0.00 & 64 \\
|
||||||
|
16.90 & 2.86 & 3.15 & 0.54 & 3.50 & -3.50 & rbf & 0.99 & 0.00 & 64 \\
|
||||||
|
20.47 & 0.65 & 3.69 & 0.67 & 4.50 & -3.50 & rbf & 0.99 & 0.00 & 64 \\
|
||||||
|
17.26 & 2.11 & 3.20 & 0.25 & 4.00 & -3.50 & rbf & 0.99 & 0.00 & 64 \\
|
||||||
|
16.86 & 1.06 & 2.80 & 0.35 & 3.00 & -3.50 & rbf & 0.99 & 0.00 & 64 \\
|
||||||
|
16.37 & 0.57 & 2.73 & 0.23 & 5.50 & -3.50 & rbf & 0.99 & 0.00 & 64 \\
|
||||||
|
15.84 & 1.13 & 2.65 & 0.22 & 6.50 & -3.50 & rbf & 0.99 & 0.00 & 64 \\
|
||||||
|
18.78 & 1.67 & 2.97 & 0.92 & 7.00 & -3.50 & rbf & 0.99 & 0.00 & 64 \\
|
||||||
|
16.36 & 0.32 & 3.23 & 0.69 & 5.00 & -3.50 & rbf & 0.99 & 0.00 & 64 \\
|
||||||
|
17.62 & 0.96 & 3.91 & 0.46 & 6.00 & -3.00 & rbf & 0.98 & 0.00 & 73 \\
|
||||||
|
18.16 & 0.90 & 4.26 & 0.21 & 5.50 & -3.00 & rbf & 0.98 & 0.00 & 73 \\
|
||||||
|
21.16 & 1.28 & 4.15 & 0.45 & 4.50 & -3.00 & rbf & 0.98 & 0.00 & 73 \\
|
||||||
|
20.53 & 2.31 & 4.70 & 0.50 & 5.00 & -3.00 & rbf & 0.98 & 0.00 & 73 \\
|
||||||
|
19.49 & 0.88 & 3.72 & 0.96 & 3.50 & -3.00 & rbf & 0.98 & 0.00 & 73 \\
|
||||||
|
18.95 & 0.97 & 4.17 & 0.30 & 3.00 & -3.00 & rbf & 0.98 & 0.00 & 73 \\
|
||||||
|
19.88 & 1.32 & 3.57 & 0.35 & 4.00 & -3.00 & rbf & 0.98 & 0.00 & 73 \\
|
||||||
|
17.70 & 1.30 & 3.50 & 0.29 & 6.50 & -3.00 & rbf & 0.98 & 0.00 & 73 \\
|
||||||
|
17.71 & 2.48 & 2.51 & 0.12 & 7.00 & -3.00 & rbf & 0.98 & 0.00 & 73 \\
|
||||||
|
\end{longtable}
|
||||||
|
\end{rlandscape}
|
||||||
18
latex/appendix/important/abdeljaber2017.tex
Normal file
18
latex/appendix/important/abdeljaber2017.tex
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
% No.
|
||||||
|
\thecustomcounter
|
||||||
|
& % Judul
|
||||||
|
Real-Time Vibration-Based Structural Damage Detection Using One-Dimensional Convolutional Neural Networks
|
||||||
|
&
|
||||||
|
O. Abdeljaber, et al (2017)
|
||||||
|
& % Konteks paper
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Data percepatan dari 30 sensor akselerometer
|
||||||
|
\item Menghasilkan 30 model CNN terpisah
|
||||||
|
\item Deteksi kerusakan struktur grid menggunakan 1D-CNN dengan raw data
|
||||||
|
\end{enumerate}
|
||||||
|
& % Gap research
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Data percepatan hanya dari 5 sensor ujung-ujung
|
||||||
|
\item 2 model SVM untuk deteksi multi-lokasi
|
||||||
|
\item SVM + STFT dengan PCA untuk pendekatan ringan dan cepat
|
||||||
|
\end{enumerate}
|
||||||
18
latex/appendix/important/diao2023.tex
Normal file
18
latex/appendix/important/diao2023.tex
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
% No.
|
||||||
|
\thecustomcounter
|
||||||
|
& % Judul
|
||||||
|
Structural Damage Identification Based on Variational Mode Decomposition–Hilbert Transform and CNN
|
||||||
|
&
|
||||||
|
Y. Diao, et al (2023)
|
||||||
|
& % Konteks paper
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Deteksi kerusakan menggunakan kombinasi VMD dan Hilbert Transform
|
||||||
|
\item Fitur hasil ekstraksi digunakan untuk CNN
|
||||||
|
\item Tujuan: efisiensi tinggi dan akurasi deteksi kerusakan
|
||||||
|
\end{enumerate}
|
||||||
|
& % Gap research
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Gunakan STFT sebagai alternatif VMD-HT
|
||||||
|
\item Fokus pada sensor terbatas dan model ringan
|
||||||
|
\item Kombinasi PCA dan SVM untuk efisiensi training
|
||||||
|
\end{enumerate}
|
||||||
18
latex/appendix/important/eraliev2022.tex
Normal file
18
latex/appendix/important/eraliev2022.tex
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
% No.
|
||||||
|
\thecustomcounter
|
||||||
|
& % Judul
|
||||||
|
Vibration-Based Loosening Detection of a Multi-Bolt Structure Using Machine Learning Algorithms
|
||||||
|
&
|
||||||
|
O. Eraliev, et al (2022)
|
||||||
|
& % Konteks paper
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Deteksi kelonggaran baut pada motor multi-baut
|
||||||
|
\item Data getaran pada berbagai kondisi operasi (800–1200 rpm)
|
||||||
|
\item Ekstraksi fitur menggunakan STFT
|
||||||
|
\end{enumerate}
|
||||||
|
& % Gap research
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Deteksi kerusakan pada struktur grid, bukan motor
|
||||||
|
\item Dataset dengan skenario multi-lokasi (joint)
|
||||||
|
\item Optimasi STFT dan reduksi dimensi PCA untuk efisiensi komputasi
|
||||||
|
\end{enumerate}
|
||||||
18
latex/appendix/important/gui2017.tex
Normal file
18
latex/appendix/important/gui2017.tex
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
% No.
|
||||||
|
\thecustomcounter
|
||||||
|
& % Judul
|
||||||
|
Data-Driven Support Vector Machine with Optimization Techniques for Structural Health Monitoring and Damage Detection
|
||||||
|
&
|
||||||
|
G. Gui, et al (2017)
|
||||||
|
& % Konteks paper
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Deteksi kerusakan struktur sipil berskala besar
|
||||||
|
\item Optimasi SVM menggunakan \textit{grid-search}, PSO, dan GA
|
||||||
|
\item Fitur diperoleh dari model autoregresif (AR)
|
||||||
|
\end{enumerate}
|
||||||
|
& % Gap research
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Optimasi multi-objektif akurasi vs efisiensi komputasi
|
||||||
|
\item Fitur berbasis domain waktu-frekuensi (STFT + PCA)
|
||||||
|
\item SVM-RBF dengan parameter dioptimasi melalui grid-search halus
|
||||||
|
\end{enumerate}
|
||||||
18
latex/appendix/important/jang2023.tex
Normal file
18
latex/appendix/important/jang2023.tex
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
% No.
|
||||||
|
\thecustomcounter
|
||||||
|
& % Judul
|
||||||
|
Vibration Data Feature Extraction and Deep Learning-Based Preprocessing Method for Highly Accurate Motor Fault Diagnosis
|
||||||
|
&
|
||||||
|
J. G. Jang, et al (2023)
|
||||||
|
& % Konteks paper
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Diagnosis kegagalan motor listrik berbasis getaran
|
||||||
|
\item Preprocessing menggunakan \textit{denoising autoencoder}
|
||||||
|
\item Klasifikasi dengan \textit{one-class SVM}
|
||||||
|
\end{enumerate}
|
||||||
|
& % Gap research
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Fokus pada sistem SHM struktural, bukan mesin berputar
|
||||||
|
\item Menggunakan PCA sebagai denoising
|
||||||
|
\item Klasifikasi multi-class SVM dalam kondisi sensor terbatas
|
||||||
|
\end{enumerate}
|
||||||
18
latex/appendix/important/jhpark2015.tex
Normal file
18
latex/appendix/important/jhpark2015.tex
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
% No.
|
||||||
|
\thecustomcounter
|
||||||
|
& % Judul
|
||||||
|
Image-based Bolt-loosening Detection Technique of Bolt Joint in Steel Bridges %2
|
||||||
|
&
|
||||||
|
J. H. Park, et al (2015)
|
||||||
|
& % Konteks paper
|
||||||
|
\begin{enumerate} %7
|
||||||
|
\item Deteksi rotasi baut-baut yang longgar pada joint jembatan baja
|
||||||
|
\item Data citra digital (\textit{computer vision})
|
||||||
|
\item Ekstraksi fitur dengan Hough transform
|
||||||
|
\end{enumerate}
|
||||||
|
& % Gap research yang akan dilakukan berdasarkan konteks tujuan dan kesimpulan penelitian yang di "mention" di atas
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Inspeksi anomali/kerusakan joint % <- mentioning: Deteksi rotasi baut yang longgar pada jembatan baja
|
||||||
|
\item Data \textit{vibration-based} % <- mentioning: citra digital
|
||||||
|
\item Ekstraksi fitur dengan STFT % <- mentioning: Ekstraksi fitur dengan Hough transform
|
||||||
|
\end{enumerate}
|
||||||
18
latex/appendix/important/katam2025.tex
Normal file
18
latex/appendix/important/katam2025.tex
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
% No.
|
||||||
|
\thecustomcounter
|
||||||
|
& % Judul
|
||||||
|
Machine Learning-Driven Structural Health Monitoring: STFT-based Feature Extraction for Damage Detection
|
||||||
|
&
|
||||||
|
R. Katam, et al (2025)
|
||||||
|
& % Konteks paper
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Deteksi kerusakan pada balok kantilever skala kecil
|
||||||
|
\item Data getaran dianalisis dengan FFT dan STFT
|
||||||
|
\item Reduksi dimensi menggunakan \textit{autoencoder}, klasifikasi SVM
|
||||||
|
\end{enumerate}
|
||||||
|
& % Gap research
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Aplikasi pada struktur grid dengan banyak sambungan
|
||||||
|
\item Reduksi dimensi menggunakan PCA, bukan \textit{autoencoder}
|
||||||
|
\item Evaluasi efisiensi STFT + SVM untuk sensor terbatas
|
||||||
|
\end{enumerate}
|
||||||
18
latex/appendix/important/liu2022.tex
Normal file
18
latex/appendix/important/liu2022.tex
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
% No.
|
||||||
|
\thecustomcounter
|
||||||
|
& % Judul
|
||||||
|
Hardware Acceleration for 1D-CNN Based Real-Time Edge Computing
|
||||||
|
&
|
||||||
|
X. Liu, et al (2022)
|
||||||
|
& % Konteks paper
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Akselerasi perangkat keras untuk CNN 1D di sistem \textit{edge computing}
|
||||||
|
\item Fokus pada pemrosesan data getaran real-time
|
||||||
|
\item Optimasi performa model melalui paralelisasi
|
||||||
|
\end{enumerate}
|
||||||
|
& % Gap research
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Pengurangan kebutuhan komputasi melalui metode klasik
|
||||||
|
\item Fokus pada optimasi perangkat lunak (SVM-RBF + PCA)
|
||||||
|
\item Desain sistem efisien tanpa akselerator khusus
|
||||||
|
\end{enumerate}
|
||||||
18
latex/appendix/important/pham2020.tex
Normal file
18
latex/appendix/important/pham2020.tex
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
% No.
|
||||||
|
\thecustomcounter
|
||||||
|
& % Judul
|
||||||
|
Bolt-Loosening Monitoring Framework Using an Image-Based Deep Learning and Graphical Model
|
||||||
|
&
|
||||||
|
H. C. Pham, et al (2020)
|
||||||
|
& % Konteks paper
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Deteksi kelonggaran baut menggunakan model grafis dan citra sintetis
|
||||||
|
\item Pelatihan model \textit{deep learning} dengan data sintetik
|
||||||
|
\item Aplikasi pada jembatan baja berskala penuh
|
||||||
|
\end{enumerate}
|
||||||
|
& % Gap research
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Penggunaan sinyal getaran untuk pengujian realistik
|
||||||
|
\item Fokus pada deteksi multi-lokasi menggunakan data fisik
|
||||||
|
\item Model efisien tanpa kebutuhan data citra besar
|
||||||
|
\end{enumerate}
|
||||||
18
latex/appendix/important/shahid2022.tex
Normal file
18
latex/appendix/important/shahid2022.tex
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
% No.
|
||||||
|
\thecustomcounter
|
||||||
|
& % Judul
|
||||||
|
Performance Comparison of 1D and 2D Convolutional Neural Networks for Real-Time Classification of Time Series Sensor Data
|
||||||
|
&
|
||||||
|
S. M. Shahid, et al (2022)
|
||||||
|
& % Konteks paper
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Perbandingan arsitektur 1D dan 2D CNN untuk klasifikasi data sensor
|
||||||
|
\item Fokus pada kecepatan inferensi dan akurasi real-time
|
||||||
|
\item Data getaran multi-kanal sebagai input
|
||||||
|
\end{enumerate}
|
||||||
|
& % Gap research
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Substitusi CNN dengan SVM untuk efisiensi komputasi
|
||||||
|
\item Integrasi STFT sebagai fitur domain waktu–frekuensi
|
||||||
|
\item Evaluasi trade-off akurasi vs waktu latih
|
||||||
|
\end{enumerate}
|
||||||
18
latex/appendix/important/van2020.tex
Normal file
18
latex/appendix/important/van2020.tex
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
% No.
|
||||||
|
\thecustomcounter
|
||||||
|
& % Judul
|
||||||
|
Statistical Feature Extraction in Machine Fault Detection Using Vibration Signal
|
||||||
|
&
|
||||||
|
B. Van, et al (2020)
|
||||||
|
& % Konteks paper
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Deteksi kerusakan \textit{gearbox} menggunakan sinyal getaran
|
||||||
|
\item Ekstraksi fitur statistik dari hasil FFT
|
||||||
|
\item Klasifikasi menggunakan ANN, LR, dan SVM
|
||||||
|
\end{enumerate}
|
||||||
|
& % Gap research
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Fokus pada struktur sipil dengan sambungan multi-joint
|
||||||
|
\item Gunakan STFT untuk representasi waktu–frekuensi
|
||||||
|
\item Evaluasi SVM-RBF dengan optimasi hyperparameter
|
||||||
|
\end{enumerate}
|
||||||
18
latex/appendix/important/wang2013.tex
Normal file
18
latex/appendix/important/wang2013.tex
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
% No.
|
||||||
|
\thecustomcounter
|
||||||
|
& % Judul
|
||||||
|
Review of Bolted Connection Monitoring
|
||||||
|
&
|
||||||
|
T. Wang, et al (2013)
|
||||||
|
& % Konteks paper
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Tinjauan metode pemantauan sambungan baut
|
||||||
|
\item Teknik akustoelastik dan piezoelektrik untuk mendeteksi kelonggaran
|
||||||
|
\item Fokus pada metode non-destruktif berbasis sensor aktif
|
||||||
|
\end{enumerate}
|
||||||
|
& % Gap research
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Perluasan ke deteksi anomali berbasis getaran
|
||||||
|
\item Penggunaan sensor pasif untuk efisiensi sistem
|
||||||
|
\item Implementasi pembelajaran mesin untuk klasifikasi kerusakan
|
||||||
|
\end{enumerate}
|
||||||
18
latex/appendix/important/yang2020.tex
Normal file
18
latex/appendix/important/yang2020.tex
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
% No.
|
||||||
|
\thecustomcounter
|
||||||
|
& % Judul
|
||||||
|
Data-Driven Feature Extraction for Analog Circuit Fault Diagnosis Using 1-D CNN
|
||||||
|
&
|
||||||
|
H. Yang, et al (2020)
|
||||||
|
& % Konteks paper
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Ekstraksi fitur otomatis menggunakan CNN 1D
|
||||||
|
\item Data sinyal dari sirkuit analog untuk diagnosis kerusakan
|
||||||
|
\item Model berbasis \textit{data-driven feature learning}
|
||||||
|
\end{enumerate}
|
||||||
|
& % Gap research
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Gunakan fitur terinterpretable (STFT) untuk deteksi kerusakan struktural
|
||||||
|
\item Pendekatan berbasis \textit{feature engineering}, bukan \textit{feature learning}
|
||||||
|
\item Optimasi model klasik (SVM) untuk efisiensi dan akurasi tinggi
|
||||||
|
\end{enumerate}
|
||||||
18
latex/appendix/important/zhang2020.tex
Normal file
18
latex/appendix/important/zhang2020.tex
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
% No.
|
||||||
|
\thecustomcounter
|
||||||
|
& % Judul
|
||||||
|
Autonomous Bolt Loosening Detection Using Deep Learning
|
||||||
|
&
|
||||||
|
Y. Zhang, et al (2020)
|
||||||
|
& % Konteks paper
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Deteksi kelonggaran baut menggunakan citra dan \textit{Faster R-CNN}
|
||||||
|
\item Dataset gambar dengan dua kondisi (kencang vs longgar)
|
||||||
|
\item Validasi deteksi real-time berbasis kamera
|
||||||
|
\end{enumerate}
|
||||||
|
& % Gap research
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Pendekatan berbasis sinyal getaran, bukan citra
|
||||||
|
\item Deteksi multi-lokasi pada struktur kompleks
|
||||||
|
\item Integrasi STFT + PCA + SVM untuk efisiensi komputasi
|
||||||
|
\end{enumerate}
|
||||||
18
latex/appendix/important/zhao2019.tex
Normal file
18
latex/appendix/important/zhao2019.tex
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
% No.
|
||||||
|
\thecustomcounter
|
||||||
|
& % Judul
|
||||||
|
Bolt Loosening Angle Detection Technology Using Deep Learning
|
||||||
|
&
|
||||||
|
X. Zhao, et al (2019)
|
||||||
|
& % Konteks paper
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Deteksi sudut rotasi kepala baut menggunakan \textit{deep learning}
|
||||||
|
\item Sistem berbasis \textit{convolutional neural network} (CNN)
|
||||||
|
\item Mengandalkan data visual dari orientasi baut
|
||||||
|
\end{enumerate}
|
||||||
|
& % Gap research
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Beralih ke data getaran untuk menghindari keterbatasan visual
|
||||||
|
\item Deteksi kelonggaran multi-sambungan dengan sinyal percepatan
|
||||||
|
\item Penggunaan fitur waktu–frekuensi (STFT) untuk klasifikasi SVM
|
||||||
|
\end{enumerate}
|
||||||
134
latex/appendix/summary_related_paper.tex
Normal file
134
latex/appendix/summary_related_paper.tex
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
\begin{rlandscape}
|
||||||
|
\begin{customcounterenv}
|
||||||
|
% Table generated by Excel2LaTeX from sheet 'Sheet1'
|
||||||
|
% \begin{table}[h]
|
||||||
|
\centering
|
||||||
|
\begin{longtable}{
|
||||||
|
>{\raggedleft\arraybackslash}p{0.02\linewidth} %1
|
||||||
|
>{\raggedright\arraybackslash}a{0.2\linewidth} %2
|
||||||
|
% >{\raggedright\arraybackslash}p{0.1\linewidth} %3
|
||||||
|
% >{\raggedright\arraybackslash}a{0.075\linewidth} %4
|
||||||
|
% p{0.065\linewidth} %5
|
||||||
|
% >{\raggedleft\arraybackslash}p{0.05\linewidth} %6
|
||||||
|
>{\raggedright\arraybackslash}p{0.1\linewidth} %7
|
||||||
|
>{\raggedright\arraybackslash}a{0.275\linewidth} %8
|
||||||
|
>{\raggedright\arraybackslash}p{0.275\linewidth} %9
|
||||||
|
}
|
||||||
|
|
||||||
|
\caption{Tinjauan pustaka, topik: pemanfaatan data getaran untuk monitor kesehatan struktur jembatan}
|
||||||
|
\label{tab:my_label}
|
||||||
|
\\
|
||||||
|
\toprule
|
||||||
|
\toprule
|
||||||
|
\rowcolor{white}
|
||||||
|
No. %1
|
||||||
|
&
|
||||||
|
Judul %2
|
||||||
|
&
|
||||||
|
Penulis
|
||||||
|
&
|
||||||
|
Konteks Penelitian %7
|
||||||
|
&
|
||||||
|
Konteks Penelitian yang akan dilakukan %8
|
||||||
|
|
||||||
|
\\\midrule
|
||||||
|
\endfirsthead
|
||||||
|
\toprule
|
||||||
|
\rowcolor{white}
|
||||||
|
No. %1
|
||||||
|
&
|
||||||
|
Judul %2
|
||||||
|
&
|
||||||
|
Penulis
|
||||||
|
&
|
||||||
|
Konteks Penelitian %7
|
||||||
|
&
|
||||||
|
Konteks Penelitian yang akan dilakukan %8
|
||||||
|
|
||||||
|
\\\midrule
|
||||||
|
\endhead
|
||||||
|
\midrule
|
||||||
|
\multicolumn{5}{r}{\textit{berlanjut di halaman berikutnya}}
|
||||||
|
\endfoot
|
||||||
|
\bottomrule
|
||||||
|
\bottomrule
|
||||||
|
\endlastfoot
|
||||||
|
% %-------------page break----------------
|
||||||
|
\input{appendix/important/jhpark2015.tex}
|
||||||
|
\\
|
||||||
|
%-----1
|
||||||
|
\input{appendix/important/van2020}
|
||||||
|
\\
|
||||||
|
%-----2
|
||||||
|
\input{appendix/important/abdeljaber2017}
|
||||||
|
\\
|
||||||
|
%-----3
|
||||||
|
\input{appendix/important/diao2023.tex}
|
||||||
|
\\
|
||||||
|
%-----4
|
||||||
|
\input{appendix/important/eraliev2022.tex}
|
||||||
|
\\
|
||||||
|
%-----5
|
||||||
|
\input{appendix/important/gui2017.tex}
|
||||||
|
\\
|
||||||
|
%-----6
|
||||||
|
\input{appendix/important/jang2023.tex}
|
||||||
|
\\
|
||||||
|
%-----7
|
||||||
|
\input{appendix/important/katam2025.tex}
|
||||||
|
\\
|
||||||
|
%-----8
|
||||||
|
\input{appendix/important/liu2022.tex}
|
||||||
|
\\
|
||||||
|
%-----9
|
||||||
|
\input{appendix/important/pham2020.tex}
|
||||||
|
\\
|
||||||
|
%-----10
|
||||||
|
\input{appendix/important/shahid2022.tex}
|
||||||
|
\\
|
||||||
|
%-----11
|
||||||
|
\input{appendix/important/wang2013.tex}
|
||||||
|
\\
|
||||||
|
%-----12
|
||||||
|
\input{appendix/important/yang2020.tex}
|
||||||
|
\\
|
||||||
|
%-----13
|
||||||
|
\input{appendix/important/zhang2020.tex}
|
||||||
|
\\
|
||||||
|
%-----14
|
||||||
|
\input{appendix/important/zhao2019.tex}
|
||||||
|
\end{longtable}
|
||||||
|
\end{customcounterenv}
|
||||||
|
% \end{table}
|
||||||
|
\end{rlandscape}
|
||||||
|
|
||||||
|
|
||||||
|
% \clearpage
|
||||||
|
% \thispagestyle{empty}
|
||||||
|
% \centering
|
||||||
|
% \frame{\includegraphics[page=1,scale=.7]{assets/1-s2.0-S2095756420300295-main.pdf}}
|
||||||
|
% \captionof{figure}{Halaman pertama jurnal pertama}
|
||||||
|
|
||||||
|
% \clearpage
|
||||||
|
% \thispagestyle{empty}
|
||||||
|
% \centering
|
||||||
|
% \frame{\includegraphics[page=1,scale=.7]{assets/1-s2.0-S2214509520300024-main.pdf}}
|
||||||
|
% \captionof{figure}{Halaman pertama jurnal kedua}
|
||||||
|
|
||||||
|
% \clearpage
|
||||||
|
% \thispagestyle{empty}
|
||||||
|
% \centering
|
||||||
|
% \frame{\includegraphics[page=1,scale=.7]{assets/1-s2.0-S2214509520300784-main.pdf}}
|
||||||
|
% \captionof{figure}{Halaman pertama jurnal ketiga}
|
||||||
|
|
||||||
|
% \clearpage
|
||||||
|
% \thispagestyle{empty}
|
||||||
|
% \centering
|
||||||
|
% \frame{\includegraphics[page=1,scale=.7]{assets/1-s2.0-S2097049821000044-main.pdf}}
|
||||||
|
% \captionof{figure}{Halaman pertama jurnal keempat}
|
||||||
|
|
||||||
|
% \clearpage
|
||||||
|
% \thispagestyle{empty}
|
||||||
|
% \centering
|
||||||
|
% \frame{\includegraphics[page=1,scale=.7]{assets/1-s2.0-S2590198222000379-main.pdf}}
|
||||||
|
% \captionof{figure}{Halaman pertama jurnal kelima}
|
||||||
373
latex/bahasa-apa.lbx
Normal file
373
latex/bahasa-apa.lbx
Normal file
@@ -0,0 +1,373 @@
|
|||||||
|
\ProvidesFile{bahasa-apa.lbx}[2023/03/20\space v9.17\space APA biblatex localisation]
|
||||||
|
\InheritBibliographyExtras{bahasa}
|
||||||
|
|
||||||
|
\NewBibliographyString{publication}
|
||||||
|
\NewBibliographyString{jourarticle}
|
||||||
|
\NewBibliographyString{revisededition}
|
||||||
|
\NewBibliographyString{typevolume}
|
||||||
|
\NewBibliographyString{typevolumes}
|
||||||
|
\NewBibliographyString{typeseries}
|
||||||
|
\NewBibliographyString{typeseriess}
|
||||||
|
\NewBibliographyString{typevolseries}
|
||||||
|
\NewBibliographyString{typevolseriess}
|
||||||
|
\NewBibliographyString{chair}
|
||||||
|
\NewBibliographyString{chairs}
|
||||||
|
\NewBibliographyString{on}
|
||||||
|
\NewBibliographyString{retrieved}
|
||||||
|
\NewBibliographyString{available}
|
||||||
|
\NewBibliographyString{from}
|
||||||
|
\NewBibliographyString{archivedat}
|
||||||
|
\NewBibliographyString{origyear}
|
||||||
|
\NewBibliographyString{reviewof}
|
||||||
|
\NewBibliographyString{with}
|
||||||
|
\NewBibliographyString{supplement}
|
||||||
|
\NewBibliographyString{commenton}
|
||||||
|
\NewBibliographyString{manunpub}
|
||||||
|
\NewBibliographyString{maninprep}
|
||||||
|
\NewBibliographyString{mansub}
|
||||||
|
\NewBibliographyString{producer}
|
||||||
|
\NewBibliographyString{producers}
|
||||||
|
\NewBibliographyString{execproducer}
|
||||||
|
\NewBibliographyString{execproducers}
|
||||||
|
\NewBibliographyString{director}
|
||||||
|
\NewBibliographyString{directors}
|
||||||
|
\NewBibliographyString{execdirector}
|
||||||
|
\NewBibliographyString{execdirectors}
|
||||||
|
\NewBibliographyString{writer}
|
||||||
|
\NewBibliographyString{writers}
|
||||||
|
\NewBibliographyString{host}
|
||||||
|
\NewBibliographyString{hosts}
|
||||||
|
\NewBibliographyString{guestexpert}
|
||||||
|
\NewBibliographyString{guestexperts}
|
||||||
|
\NewBibliographyString{narrator}
|
||||||
|
\NewBibliographyString{narrators}
|
||||||
|
\NewBibliographyString{film}
|
||||||
|
\NewBibliographyString{tvseries}
|
||||||
|
\NewBibliographyString{tvepisode}
|
||||||
|
\NewBibliographyString{video}
|
||||||
|
\NewBibliographyString{song}
|
||||||
|
\NewBibliographyString{album}
|
||||||
|
\NewBibliographyString{podcast}
|
||||||
|
\NewBibliographyString{podcastepisode}
|
||||||
|
\NewBibliographyString{interview}
|
||||||
|
\NewBibliographyString{speech}
|
||||||
|
\NewBibliographyString{lithograph}
|
||||||
|
\NewBibliographyString{map}
|
||||||
|
\NewBibliographyString{lecturenotes}
|
||||||
|
\NewBibliographyString{powerpoint}
|
||||||
|
\NewBibliographyString{photograph}
|
||||||
|
\NewBibliographyString{photographs}
|
||||||
|
\NewBibliographyString{present}
|
||||||
|
\NewBibliographyString{painting}
|
||||||
|
\NewBibliographyString{article}
|
||||||
|
\NewBibliographyString{execorder}
|
||||||
|
\NewBibliographyString{senate}
|
||||||
|
\NewBibliographyString{resolution}
|
||||||
|
\NewBibliographyString{houseofrepresentatives}
|
||||||
|
\NewBibliographyString{report}
|
||||||
|
\NewBibliographyString{us}
|
||||||
|
\NewBibliographyString{southcarolina}
|
||||||
|
\NewBibliographyString{constitution}
|
||||||
|
\NewBibliographyString{section}
|
||||||
|
\NewBibliographyString{amendment}
|
||||||
|
\NewBibliographyString{proposed}
|
||||||
|
\NewBibliographyString{repealed}
|
||||||
|
\NewBibliographyString{unitednations}
|
||||||
|
\NewBibliographyString{charter}
|
||||||
|
\NewBibliographyString{ofthe}
|
||||||
|
\NewBibliographyString{tothe}
|
||||||
|
\NewBibliographyString{alabama}
|
||||||
|
\NewBibliographyString{alaska}
|
||||||
|
\NewBibliographyString{arizona}
|
||||||
|
\NewBibliographyString{arkansas}
|
||||||
|
\NewBibliographyString{california}
|
||||||
|
\NewBibliographyString{colorado}
|
||||||
|
\NewBibliographyString{connecticut}
|
||||||
|
\NewBibliographyString{delaware}
|
||||||
|
\NewBibliographyString{florida}
|
||||||
|
\NewBibliographyString{georgia}
|
||||||
|
\NewBibliographyString{hawaii}
|
||||||
|
\NewBibliographyString{idaho}
|
||||||
|
\NewBibliographyString{illinois}
|
||||||
|
\NewBibliographyString{indiana}
|
||||||
|
\NewBibliographyString{iowa}
|
||||||
|
\NewBibliographyString{kansas}
|
||||||
|
\NewBibliographyString{kentucky}
|
||||||
|
\NewBibliographyString{louisiana}
|
||||||
|
\NewBibliographyString{maine}
|
||||||
|
\NewBibliographyString{maryland}
|
||||||
|
\NewBibliographyString{massachusetts}
|
||||||
|
\NewBibliographyString{michigan}
|
||||||
|
\NewBibliographyString{minnesota}
|
||||||
|
\NewBibliographyString{mississippi}
|
||||||
|
\NewBibliographyString{missouri}
|
||||||
|
\NewBibliographyString{montana}
|
||||||
|
\NewBibliographyString{nebraska}
|
||||||
|
\NewBibliographyString{nevada}
|
||||||
|
\NewBibliographyString{newhampshire}
|
||||||
|
\NewBibliographyString{newjersey}
|
||||||
|
\NewBibliographyString{newmexico}
|
||||||
|
\NewBibliographyString{newyork}
|
||||||
|
\NewBibliographyString{northcarolina}
|
||||||
|
\NewBibliographyString{northdakota}
|
||||||
|
\NewBibliographyString{ohio}
|
||||||
|
\NewBibliographyString{oklahoma}
|
||||||
|
\NewBibliographyString{oregon}
|
||||||
|
\NewBibliographyString{pennsylvania}
|
||||||
|
\NewBibliographyString{rhodeisland}
|
||||||
|
\NewBibliographyString{southcarolina}
|
||||||
|
\NewBibliographyString{southdakota}
|
||||||
|
\NewBibliographyString{tennessee}
|
||||||
|
\NewBibliographyString{texas}
|
||||||
|
\NewBibliographyString{utah}
|
||||||
|
\NewBibliographyString{vermont}
|
||||||
|
\NewBibliographyString{virginia}
|
||||||
|
\NewBibliographyString{washington}
|
||||||
|
\NewBibliographyString{westvirginia}
|
||||||
|
\NewBibliographyString{wisconsin}
|
||||||
|
\NewBibliographyString{wyoming}
|
||||||
|
|
||||||
|
\DeclareBibliographyStrings{%
|
||||||
|
inherit = {bahasa},
|
||||||
|
jourarticle = {{artikel}{artikel}},
|
||||||
|
ofthe = {{dari}{dari}},
|
||||||
|
tothe = {{ke}{ke}},
|
||||||
|
unitednations = {{Perserikatan Bangsa-Bangsa}{P\adddot B\adddot B\adddot}},
|
||||||
|
charter = {{piagam}{piagam}},
|
||||||
|
proposed = {{diusulkan}{diusulkan}},
|
||||||
|
repealed = {{dicabut pada}{dicabut}},
|
||||||
|
execorder = {{Perintah Eksekutif}{Per\adddot\ Eksekutif}},
|
||||||
|
senate = {{Senate}{S\adddot}},
|
||||||
|
resolution = {{Resolusi}{Res\adddot}},
|
||||||
|
houseofrepresentatives = {{House\space of\space Representatives}{H\adddot R\adddot}},
|
||||||
|
report = {{Laporan}{Lap\adddot}},
|
||||||
|
us = {{A\adddot S\adddot}{A\adddot S\adddot}},
|
||||||
|
southcarolina = {{South\space Carolina}{S\adddot C\adddot}},
|
||||||
|
constitution = {{Constitution}{Const\adddot}},
|
||||||
|
section = {{Bagian}{§}},
|
||||||
|
amendment = {{amendemen}{amend\adddot}},
|
||||||
|
article = {{pasal}{ps\adddot}},
|
||||||
|
painting = {{lukisan}{lukisan}},
|
||||||
|
present = {{saat ini}{saat ini}},
|
||||||
|
song = {{lagu}{lagu}},
|
||||||
|
album = {{album}{album}},
|
||||||
|
map = {{peta}{peta}},
|
||||||
|
photograph = {{foto}{foto}},
|
||||||
|
photographs = {{foto}{foto}},
|
||||||
|
powerpoint = {{Salindia Powerpoint}{Salindia Powerpoint}},
|
||||||
|
lecturenotes = {{catatan kuliah}{catatan kuliah}},
|
||||||
|
podcast = {{siniar audio}{siniar audio}},
|
||||||
|
podcastepisode = {{episode siniar audio}{episode siniar audio}},
|
||||||
|
interview = {{wawancara}{wawancara}},
|
||||||
|
speech = {{rekaman audio pidato}{rekaman audio pidato}},
|
||||||
|
lithograph = {{litograf}{litograf}},
|
||||||
|
video = {{video}{video}},
|
||||||
|
film = {{film}{film}},
|
||||||
|
tvseries = {{serial TV}{serial TV}},
|
||||||
|
tvepisode = {{episode serial TV}{episode serial TV}},
|
||||||
|
manunpub = {{naskah tidak diterbitkan}{naskah tidak diterbitkan}},
|
||||||
|
maninprep = {{naskah dalam persiapan}{naskah dalam persiapan}},
|
||||||
|
mansub = {{naskah diserahkan untuk publikasi}{naskah diserahkan untuk publikasi}},
|
||||||
|
supplement = {{suplemen}{supl\adddot}},
|
||||||
|
revisededition = {{Edisi Revisi}{Ed\adddot\ Rev\adddot}},
|
||||||
|
reviewof = {{tinjauan atas}{tinjauan atas}},
|
||||||
|
page = {{Halaman}{hlm\adddot}},
|
||||||
|
pages = {{Halaman}{hlm\adddot}},
|
||||||
|
on = {{pada}{pada}},
|
||||||
|
retrieved = {{Diakses}{Diakses}},
|
||||||
|
available = {{Tersedia}{Tersedia}},
|
||||||
|
from = {{dari}{dari}},
|
||||||
|
archivedat = {{Diarsipkan di}{Diarsipkan di}},
|
||||||
|
with = {{dengan}{dengan}},
|
||||||
|
reprintas = {{dicetak ulang sebagai}{dicetak ulang sbg\adddot}},
|
||||||
|
reprintfrom = {{dicetak ulang dari}{dicetak ulang dari}},
|
||||||
|
commenton = {{komentar pada}{komentar pada}},
|
||||||
|
part = {{bagian}{bag\adddot}},
|
||||||
|
paragraph = {{Paragraf}{par\adddot}},
|
||||||
|
paragraphs = {{Paragraf}{par\adddot}},
|
||||||
|
narrator = {{narator}{nar\adddot}},
|
||||||
|
narrators = {{narator}{nar\adddot}},
|
||||||
|
producer = {{produser}{produser}},
|
||||||
|
producers = {{produser}{produser}},
|
||||||
|
execproducer = {{Produser Eksekutif}{Prod\adddot\ Eks\adddot}},
|
||||||
|
execproducers = {{Produser Eksekutif}{Prod\adddot\ Eks\adddot}},
|
||||||
|
execdirector = {{Direktur Eksekutif}{Dir\adddot\ Eks\adddot}},
|
||||||
|
execdirectors = {{Direktur Eksekutif}{Dir\adddot\ Eks\adddot}},
|
||||||
|
chair = {{Ketua}{Ketua}},
|
||||||
|
chairs = {{Ketua}{Ketua}},
|
||||||
|
director = {{sutradara}{sut\adddot}},
|
||||||
|
directors = {{sutradara}{sut\adddot}},
|
||||||
|
writer = {{penulis}{penulis}},
|
||||||
|
writers = {{penulis}{penulis}},
|
||||||
|
host = {{pembawa acara}{pembawa acara}},
|
||||||
|
hosts = {{pembawa acara}{pembawa acara}},
|
||||||
|
guestexpert = {{Pakar Tamu}{Pakar Tamu}},
|
||||||
|
guestexperts = {{Pakar Tamu}{Pakar Tamu}},
|
||||||
|
mathesis = {{Tesis magister}{Tesis magister}},
|
||||||
|
phdthesis = {{Disertasi doktoral}{Disertasi doktoral}},
|
||||||
|
origyear = {{karya asli terbit}{karya asli terbit}},
|
||||||
|
typevolume = {{Penyunting Volume}{Peny\adddot\ Vol\adddot}},
|
||||||
|
typevolumes = {{Penyunting Volume}{Peny\adddot\ Vol\adddot}},
|
||||||
|
typeseries = {{Penyunting Seri}{Peny\adddot\ Seri}},
|
||||||
|
typeseriess = {{Penyunting Seri}{Peny\adddot\ Seri}},
|
||||||
|
typevolseries = {{Penyunting Seri dan Volume}{Peny\adddot\ Seri & Vol\adddot}},
|
||||||
|
typevolseriess = {{Penyunting Seri dan Volume}{Peny\adddot\ Seri & Vol\adddot}},
|
||||||
|
annodomini = {{Masehi}{M\adddot}},
|
||||||
|
beforechrist = {{Sebelum Masehi}{SM\adddot}},
|
||||||
|
commonera = {{Masehi}{M\adddot}},
|
||||||
|
beforecommonera = {{Sebelum Masehi}{SM\adddot}},
|
||||||
|
alabama = {{Alabama}{{A\adddot L\adddot}}},
|
||||||
|
alaska = {{Alaska}{{A\adddot K\adddot}}},
|
||||||
|
arizona = {{Arizona}{{A\adddot Z\adddot}}},
|
||||||
|
arkansas = {{Arkansas}{{A\adddot R\adddot}}},
|
||||||
|
california = {{California}{{C\adddot A\adddot}}},
|
||||||
|
colorado = {{Colorado}{{C\adddot O\adddot}}},
|
||||||
|
connecticut = {{Connecticut}{{C\adddot T\adddot}}},
|
||||||
|
delaware = {{Delaware}{{D\adddot E\adddot}}},
|
||||||
|
florida = {{Florida}{{F\adddot L\adddot}}},
|
||||||
|
georgia = {{Georgia}{{G\adddot A\adddot}}},
|
||||||
|
hawaii = {{Hawaii}{{H\adddot I\adddot}}},
|
||||||
|
idaho = {{Idaho}{{I\adddot D\adddot}}},
|
||||||
|
illinois = {{Illinois}{{I\adddot L\adddot}}},
|
||||||
|
indiana = {{Indiana}{{I\adddot N\adddot}}},
|
||||||
|
iowa = {{Iowa}{{I\adddot A\adddot}}},
|
||||||
|
kansas = {{Kansas}{{K\adddot S\adddot}}},
|
||||||
|
kentucky = {{Kentucky}{{K\adddot Y\adddot}}},
|
||||||
|
louisiana = {{Louisiana}{{L\adddot A\adddot}}},
|
||||||
|
maine = {{Maine}{{M\adddot E\adddot}}},
|
||||||
|
maryland = {{Maryland}{{M\adddot D\adddot}}},
|
||||||
|
massachusetts = {{Massachusetts}{{M\adddot A\adddot}}},
|
||||||
|
michigan = {{Michigan}{{M\adddot I\adddot}}},
|
||||||
|
minnesota = {{Minnesota}{{M\adddot N\adddot}}},
|
||||||
|
mississippi = {{Mississippi}{{M\adddot S\adddot}}},
|
||||||
|
missouri = {{Missouri}{{M\adddot O\adddot}}},
|
||||||
|
montana = {{Montana}{{M\adddot T\adddot}}},
|
||||||
|
nebraska = {{Nebraska}{{N\adddot E\adddot}}},
|
||||||
|
nevada = {{Nevada}{{N\adddot V\adddot}}},
|
||||||
|
newhampshire = {{New Hampshire}{{N\adddot H\adddot}}},
|
||||||
|
newjersey = {{New Jersey}{{N\adddot J\adddot}}},
|
||||||
|
newmexico = {{New Mexico}{{N\adddot M\adddot}}},
|
||||||
|
newyork = {{New York}{{N\adddot Y\adddot}}},
|
||||||
|
northcarolina = {{North Carolina}{{N\adddot C\adddot}}},
|
||||||
|
northdakota = {{North Dakota}{{N\adddot D\adddot}}},
|
||||||
|
ohio = {{Ohio}{{O\adddot H\adddot}}},
|
||||||
|
oklahoma = {{Oklahoma}{{O\adddot K\adddot}}},
|
||||||
|
oregon = {{Oregon}{{O\adddot R\adddot}}},
|
||||||
|
pennsylvania = {{Pennsylvania}{{P\adddot A\adddot}}},
|
||||||
|
rhodeisland = {{Rhode Island}{{R\adddot I\adddot}}},
|
||||||
|
southcarolina = {{South Carolina}{{S\adddot C\adddot}}},
|
||||||
|
southdakota = {{South Dakota}{{S\adddot D\adddot}}},
|
||||||
|
tennessee = {{Tennessee}{{T\adddot N\adddot}}},
|
||||||
|
texas = {{Texas}{{T\adddot X\adddot}}},
|
||||||
|
utah = {{Utah}{{U\adddot T\adddot}}},
|
||||||
|
vermont = {{Vermont}{{V\adddot T\adddot}}},
|
||||||
|
virginia = {{Virginia}{{V\adddot A\adddot}}},
|
||||||
|
washington = {{Washington}{{W\adddot A\adddot}}},
|
||||||
|
westvirginia = {{West Virginia}{{W\adddot V\adddot}}},
|
||||||
|
wisconsin = {{Wisconsin}{{W\adddot I\adddot}}},
|
||||||
|
wyoming = {{Wyoming}{{W\adddot Y\adddot}}},
|
||||||
|
publication = {{Publikasi}{Publikasi}}
|
||||||
|
}
|
||||||
|
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
% Drop end* when they are the same as *
|
||||||
|
% You must use \print*date to get here otherwise it will be ignored
|
||||||
|
|
||||||
|
\DeclareBibliographyExtras{%
|
||||||
|
\def\urldatecomma{\addcomma\addspace}%
|
||||||
|
\protected\def\mkbibdateapalong#1#2#3#4{%
|
||||||
|
% As per 10.1, Articles only have year
|
||||||
|
\ifboolexpr{ (test {\ifentrytype{article}}
|
||||||
|
or (test {\ifentrytype{inbook}} and not test {\ifnameundef{editor}}))
|
||||||
|
and not test {\iffieldequalstr{entrysubtype}{nonacademic}} }
|
||||||
|
{\clearfield{labelmonth}%
|
||||||
|
\clearfield{labelday}}
|
||||||
|
{}%
|
||||||
|
\iffieldundef{#1}% YEAR
|
||||||
|
{}%
|
||||||
|
{\iffieldbibstring{#1}{\bibncpstring{\thefield{#1}}}{\thefield{#1}}}%
|
||||||
|
\iffieldundef{#2}% YEARDIVISION
|
||||||
|
{}%
|
||||||
|
{\iffieldundef{#1}%
|
||||||
|
{}%
|
||||||
|
{\addcomma\addspace}%
|
||||||
|
\iffieldbibstring{#2}{\bibcplstring{\thefield{#2}}}{\thefield{#2}}}%
|
||||||
|
\iffieldundef{#3}% MONTH
|
||||||
|
{}%
|
||||||
|
{\iffieldundef{#1}%
|
||||||
|
{}%
|
||||||
|
{\addcomma\addspace}%
|
||||||
|
\mkbibmonth{\thefield{#3}}}%
|
||||||
|
\iffieldundef{#4}% DAY
|
||||||
|
{}%
|
||||||
|
{\iffieldundef{#3}%
|
||||||
|
{}%
|
||||||
|
{\addspace}%
|
||||||
|
\stripzeros{\thefield{#4}}}}%
|
||||||
|
\protected\def\mkbibdateapalongextra#1#2#3#4{%
|
||||||
|
% As per 10.1, Articles only have year
|
||||||
|
\ifboolexpr{ (test {\ifentrytype{article}}
|
||||||
|
or (test {\ifentrytype{inbook}} and not test {\ifnameundef{editor}}))
|
||||||
|
and not test {\iffieldequalstr{entrysubtype}{nonacademic}} }
|
||||||
|
{\clearfield{labelmonth}%
|
||||||
|
\clearfield{labelday}}
|
||||||
|
{}%
|
||||||
|
\iffieldundef{#1}% YEAR
|
||||||
|
{}%
|
||||||
|
{\iffieldbibstring{#1}{\bibncpstring{\thefield{#1}}}{\thefield{#1}}\printfield{extradate}}%
|
||||||
|
\iffieldundef{#2}% YEARDIVISION
|
||||||
|
{}%
|
||||||
|
{\iffieldundef{#1}%
|
||||||
|
{}%
|
||||||
|
{\addcomma\addspace}%
|
||||||
|
\iffieldbibstring{#2}{\bibcplstring{\thefield{#2}}}{\thefield{#2}}}%
|
||||||
|
\iffieldundef{#3}% MONTH
|
||||||
|
{}%
|
||||||
|
{\iffieldundef{#1}%
|
||||||
|
{}%
|
||||||
|
{\addcomma\addspace}%
|
||||||
|
\mkbibmonth{\thefield{#3}}}%
|
||||||
|
\iffieldundef{#4}% DAY
|
||||||
|
{}%
|
||||||
|
{\iffieldundef{#3}%
|
||||||
|
{}%
|
||||||
|
{\addspace}%
|
||||||
|
\stripzeros{\thefield{#4}}}}%
|
||||||
|
\protected\def\mkbibdateapalongmdy#1#2#3#4{%
|
||||||
|
% As per 10.1, Articles only have year
|
||||||
|
\ifboolexpr{ (test {\ifentrytype{article}}
|
||||||
|
or (test {\ifentrytype{inbook}} and not test {\ifnameundef{editor}}))
|
||||||
|
and not test {\iffieldequalstr{entrysubtype}{nonacademic}} }
|
||||||
|
{\clearfield{labelmonth}%
|
||||||
|
\clearfield{labelday}}
|
||||||
|
{}%
|
||||||
|
\iffieldundef{#2}% YEARDIVISION
|
||||||
|
{}%
|
||||||
|
{\iffieldundef{#1}%
|
||||||
|
{}%
|
||||||
|
{\addcomma\addspace}%
|
||||||
|
\iffieldbibstring{#2}{\bibcplstring{\thefield{#2}}}{\thefield{#2}}}%
|
||||||
|
\iffieldundef{#3}% MONTH
|
||||||
|
{}%
|
||||||
|
{\mkbibmonth{\thefield{#3}}}%
|
||||||
|
\iffieldundef{#4}% DAY
|
||||||
|
{}%
|
||||||
|
{\addspace}%
|
||||||
|
\stripzeros{\thefield{#4}}%
|
||||||
|
\iffieldundef{#1}% YEAR
|
||||||
|
{}%
|
||||||
|
{\iffieldundef{#4}%
|
||||||
|
{\iffieldundef{#3}%
|
||||||
|
{}%
|
||||||
|
{\addspace}}%
|
||||||
|
{\addcomma\addspace}%
|
||||||
|
\iffieldbibstring{#1}{\bibncpstring{\thefield{#1}}}{\thefield{#1}}}}}
|
||||||
|
|
||||||
|
%
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
|
||||||
|
\endinput
|
||||||
747
latex/bahasa.lbx
Normal file
747
latex/bahasa.lbx
Normal file
@@ -0,0 +1,747 @@
|
|||||||
|
\ProvidesFile{bahasa.lbx}
|
||||||
|
[\abx@lbxid]
|
||||||
|
|
||||||
|
\DeclareRedundantLanguages{english,american}{english,american,british,
|
||||||
|
canadian,australian,newzealand,USenglish,UKenglish}
|
||||||
|
|
||||||
|
\DeclareBibliographyExtras{%
|
||||||
|
\renewrobustcmd*{\bibdatesep}{-}%
|
||||||
|
\protected\def\bibrangedash{%
|
||||||
|
\textendash\penalty\hyphenpenalty}% breakable dash
|
||||||
|
\def\finalandcomma{\addcomma}%
|
||||||
|
\def\finalandsemicolon{\addsemicolon}%
|
||||||
|
\protected\def\mkbibordinal#1{%
|
||||||
|
\begingroup
|
||||||
|
\@tempcnta0#1\relax\number\@tempcnta
|
||||||
|
\@whilenum\@tempcnta>100\do{\advance\@tempcnta-100\relax}%
|
||||||
|
\ifnum\@tempcnta>20
|
||||||
|
\@whilenum\@tempcnta>9\do{\advance\@tempcnta-10\relax}%
|
||||||
|
\fi
|
||||||
|
\ifcase\@tempcnta th\or st\or nd\or rd\else th\fi
|
||||||
|
\endgroup}%
|
||||||
|
\protected\def\mkbibmascord{\mkbibordinal}%
|
||||||
|
\protected\def\mkbibfemord{\mkbibordinal}%
|
||||||
|
\protected\def\mkbibneutord{\mkbibordinal}%
|
||||||
|
\protected\def\mkbibdatelong#1#2#3{%
|
||||||
|
\iffieldundef{#2}
|
||||||
|
{}
|
||||||
|
{\mkbibmonth{\thefield{#2}}%
|
||||||
|
\iffieldundef{#3}
|
||||||
|
{\iffieldundef{#1}{}{\space}}
|
||||||
|
{\nobreakspace}}%
|
||||||
|
\iffieldundef{#3}
|
||||||
|
{}
|
||||||
|
{\stripzeros{\thefield{#3}}%
|
||||||
|
\iffieldundef{#1}{}{,\space}}%
|
||||||
|
\iffieldbibstring{#1}
|
||||||
|
{\bibstring{\thefield{#1}}}
|
||||||
|
{\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}%
|
||||||
|
\protected\def\mkbibdateshort#1#2#3{%
|
||||||
|
\iffieldundef{#3}
|
||||||
|
{}
|
||||||
|
{\mkdayzeros{\thefield{#3}}%
|
||||||
|
\iffieldundef{#2}
|
||||||
|
{\iffieldundef{#1}{}{\bibdatesep}}
|
||||||
|
{-}}%
|
||||||
|
\iffieldundef{#2}
|
||||||
|
{}
|
||||||
|
{\mkmonthzeros{\thefield{#2}}%
|
||||||
|
\iffieldundef{#1}{}{\bibdatesep}}%
|
||||||
|
\iffieldbibstring{#1}
|
||||||
|
{\bibstring{\thefield{#1}}}
|
||||||
|
{\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}%
|
||||||
|
\expandafter\protected\expandafter\def\csname mkbibtime24h\endcsname#1#2#3#4{%
|
||||||
|
\iffieldundef{#1}
|
||||||
|
{}
|
||||||
|
{\mktimezeros{\thefield{#1}}%
|
||||||
|
\iffieldundef{#2}{}{\bibtimesep}}%
|
||||||
|
\iffieldundef{#2}
|
||||||
|
{}
|
||||||
|
{\mktimezeros{\thefield{#2}}%
|
||||||
|
\iffieldundef{#3}{}{\bibtimesep}}%
|
||||||
|
\iffieldundef{#3}
|
||||||
|
{}
|
||||||
|
{\mktimezeros{\thefield{#3}}}%
|
||||||
|
\iffieldundef{#4}{}
|
||||||
|
{\bibtimezonesep
|
||||||
|
\mkbibtimezone{\thefield{#4}}}}%
|
||||||
|
\expandafter\protected\expandafter\def\csname mkbibtime12h\endcsname#1#2#3#4{%
|
||||||
|
\stripzeros{\mktimehh{\thefield{#1}}}%
|
||||||
|
\bibtimesep
|
||||||
|
\forcezerosmdt{\thefield{#2}}%
|
||||||
|
\iffieldundef{#3}{}
|
||||||
|
{\bibtimesep
|
||||||
|
\forcezerosmdt{\thefield{#3}}}%
|
||||||
|
\space
|
||||||
|
\ifnumless{\thefield{#1}}{12}
|
||||||
|
{\bibstring{am}}
|
||||||
|
{\bibstring{pm}}%
|
||||||
|
\iffieldundef{#4}{}
|
||||||
|
{\space\bibtimezonesep
|
||||||
|
\parentext{\mkbibtimezone{\thefield{#4}}}}}%
|
||||||
|
\protected\def\mkbibyeardivisiondateshort#1#2{%
|
||||||
|
\mkbibyeardivision{\thefield{#2}}%
|
||||||
|
\iffieldundef{#1}{}{\space}%
|
||||||
|
\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
|
||||||
|
\protected\def\mkbibyeardivisiondatelong#1#2{%
|
||||||
|
\mkbibyeardivision{\thefield{#2}}%
|
||||||
|
\iffieldundef{#1}{}{\space}%
|
||||||
|
\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}%
|
||||||
|
\savecommand\mkdaterangecomp
|
||||||
|
\savecommand\mkdaterangecompextra
|
||||||
|
\savecommand\mkdaterangeterse
|
||||||
|
\savecommand\mkdaterangeterseextra
|
||||||
|
\protected\def\mkdaterangecomp{%
|
||||||
|
\lbx@us@mkdaterangetrunc@long{long}}%
|
||||||
|
\protected\def\mkdaterangeterse{%
|
||||||
|
\lbx@us@mkdaterangetrunc@short{short}}%
|
||||||
|
\protected\def\mkdaterangecompextra{%
|
||||||
|
\lbx@us@mkdaterangetruncextra@long{long}}%
|
||||||
|
\protected\def\mkdaterangeterseextra{%
|
||||||
|
\lbx@us@mkdaterangetruncextra@short{short}}%
|
||||||
|
}
|
||||||
|
|
||||||
|
\UndeclareBibliographyExtras{%
|
||||||
|
\restorecommand\mkdaterangecomp
|
||||||
|
\restorecommand\mkdaterangecompextra
|
||||||
|
\restorecommand\mkdaterangeterse
|
||||||
|
\restorecommand\mkdaterangeterseextra
|
||||||
|
}
|
||||||
|
|
||||||
|
\DeclareBibliographyStrings{%
|
||||||
|
bibliography = {{Daftar Pustaka}{Daftar Pustaka}},
|
||||||
|
references = {{Referensi}{Referensi}},
|
||||||
|
shorthands = {{Daftar Singkatan}{Singkatan}},
|
||||||
|
editor = {{editor}{Ed\adddot}},
|
||||||
|
editors = {{editor}{Ed\adddot}},
|
||||||
|
compiler = {{penyusun}{pnysn\adddot}},
|
||||||
|
compilers = {{penyusun}{pnysn\adddot}},
|
||||||
|
redactor = {{redaktur}{red\adddot}},
|
||||||
|
redactors = {{redaktur}{red\adddot}},
|
||||||
|
reviser = {{perevisi}{perev\adddot}},
|
||||||
|
revisers = {{perevisi}{perev\adddot}},
|
||||||
|
founder = {{pendiri}{pendiri}},
|
||||||
|
founders = {{pendiri}{pendiri}},
|
||||||
|
continuator = {{pelanjut}{pelanj\adddot}}, % FIXME: unsure
|
||||||
|
continuators = {{pelanjut}{pelanj\adddot}}, % FIXME: unsure
|
||||||
|
collaborator = {{kolaborator}{kol\adddot}},
|
||||||
|
collaborators = {{kolaborator}{kol\adddot}},
|
||||||
|
translator = {{penerjemah}{penerj\adddot}},
|
||||||
|
translators = {{penerjemah}{penerj\adddot}},
|
||||||
|
commentator = {{komentator}{kom\adddot}},
|
||||||
|
commentators = {{komentator}{kom\adddot}},
|
||||||
|
annotator = {{anotator}{anot\adddot}},
|
||||||
|
annotators = {{anotator}{anot\adddot}},
|
||||||
|
commentary = {{komentar}{kom\adddot}},
|
||||||
|
annotations = {{anotasi}{anot\adddot}},
|
||||||
|
introduction = {{pengantar}{peng\adddot}},
|
||||||
|
foreword = {{kata pengantar}{kata peng\adddot}}, % FIXME: unsure shorthands
|
||||||
|
afterword = {{kata penutup}{kata pen\adddot}}, % FIXME: unsure shorthands
|
||||||
|
editortr = {{penyunting dan penerjemah}%
|
||||||
|
{peny\adddot\ dan penerj\adddot}},
|
||||||
|
editorstr = {{penyunting dan penerjemah}%
|
||||||
|
{peny\adddot\ dan penerj\adddot}},
|
||||||
|
editorco = {{penyunting dan komentator}%
|
||||||
|
{peny\adddot\ dan kom\adddot}},
|
||||||
|
editorsco = {{penyunting dan komentator}%
|
||||||
|
{peny\adddot\ dan kom\adddot}},
|
||||||
|
editoran = {{penyunting dan anotator}%
|
||||||
|
{peny\adddot\ dan anot\adddot}},
|
||||||
|
editorsan = {{penyunting dan anotator}%
|
||||||
|
{peny\adddot\ dan anot\adddot}},
|
||||||
|
editorin = {{penyunting dan pengantar}%
|
||||||
|
{peny\adddot\ dan peng\adddot}},
|
||||||
|
editorsin = {{penyunting dan pengantar}%
|
||||||
|
{peny\adddot\ dan peng\adddot}},
|
||||||
|
editorfo = {{penyunting dan kata pengantar}%
|
||||||
|
{peny\adddot\ dan kata peng\adddot}},
|
||||||
|
editorsfo = {{penyunting dan kata pengantar}%
|
||||||
|
{peny\adddot\ dan kata peng\adddot}},
|
||||||
|
editoraf = {{penyunting dan kata penutup}%
|
||||||
|
{peny\adddot\ dan kata pen\adddot}},
|
||||||
|
editorsaf = {{penyunting dan kata penutup}%
|
||||||
|
{peny\adddot\ dan kata pen\adddot}},
|
||||||
|
editortrco = {{penyunting, penerjemah, dan komentator}%
|
||||||
|
{peny\adddot, penerj\adddot, dan kom\adddot}},
|
||||||
|
editorstrco = {{penyunting, penerjemah, dan komentator}%
|
||||||
|
{peny\adddot, penerj\adddot, dan kom\adddot}},
|
||||||
|
editortran = {{penyunting, penerjemah, dan anotator}%
|
||||||
|
{peny\adddot, penerj\adddot, dan anot\adddot}},
|
||||||
|
editorstran = {{penyunting, penerjemah, dan anotator}%
|
||||||
|
{peny\adddot, penerj\adddot, dan anot\adddot}},
|
||||||
|
editortrin = {{penyunting, penerjemah, dan pengantar}%
|
||||||
|
{peny\adddot, penerj\adddot, dan peng\adddot}},
|
||||||
|
editorstrin = {{penyunting, penerjemah, dan pengantar}%
|
||||||
|
{peny\adddot, penerj\adddot, dan peng\adddot}},
|
||||||
|
editortrfo = {{penyunting, penerjemah, dan kata pengantar}%
|
||||||
|
{peny\adddot, penerj\adddot, dan kata peng\adddot}},
|
||||||
|
editorstrfo = {{penyunting, penerjemah, dan kata pengantar}%
|
||||||
|
{peny\adddot, penerj\adddot, dan kata peng\adddot}},
|
||||||
|
editortraf = {{penyunting, penerjemah, dan kata penutup}%
|
||||||
|
{peny\adddot, penerj\adddot, dan kata pen\adddot}},
|
||||||
|
editorstraf = {{penyunting, penerjemah, dan kata penutup}%
|
||||||
|
{peny\adddot, penerj\adddot, dan kata pen\adddot}},
|
||||||
|
editorcoin = {{penyunting, komentator, dan pengantar}%
|
||||||
|
{peny\adddot, kom\adddot, dan peng\adddot}},
|
||||||
|
editorscoin = {{penyunting, komentator, dan pengantar}%
|
||||||
|
{peny\adddot, kom\adddot, dan peng\adddot}},
|
||||||
|
editorcofo = {{penyunting, komentator, dan kata pengantar}%
|
||||||
|
{peny\adddot, kom\adddot, dan kata peng\adddot}},
|
||||||
|
editorscofo = {{penyunting, komentator, dan kata pengantar}%
|
||||||
|
{peny\adddot, kom\adddot, dan kata peng\adddot}},
|
||||||
|
editorcoaf = {{penyunting, komentator, dan kata penutup}%
|
||||||
|
{peny\adddot, kom\adddot, dan kata pen\adddot}},
|
||||||
|
editorscoaf = {{penyunting, komentator, dan kata penutup}%
|
||||||
|
{peny\adddot, kom\adddot, dan kata pen\adddot}},
|
||||||
|
editoranin = {{penyunting, anotator, dan pengantar}%
|
||||||
|
{peny\adddot, anot\adddot, dan peng\adddot}},
|
||||||
|
editorsanin = {{penyunting, anotator, dan pengantar}%
|
||||||
|
{peny\adddot, anot\adddot, dan peng\adddot}},
|
||||||
|
editoranfo = {{penyunting, anotator, dan kata pengantar}%
|
||||||
|
{peny\adddot, anot\adddot, dan kata peng\adddot}},
|
||||||
|
editorsanfo = {{penyunting, anotator, dan kata pengantar}%
|
||||||
|
{peny\adddot, anot\adddot, dan kata peng\adddot}},
|
||||||
|
editoranaf = {{penyunting, anotator, dan kata penutup}%
|
||||||
|
{peny\adddot, anot\adddot, dan kata pen\adddot}},
|
||||||
|
editorsanaf = {{penyunting, anotator, dan kata penutup}%
|
||||||
|
{peny\adddot, anot\adddot, dan kata pen\adddot}},
|
||||||
|
editortrcoin = {{penyunting, penerjemah, komentator, dan pengantar}%
|
||||||
|
{peny\adddot, penerj\adddot, kom\adddot, dan peng\adddot}},
|
||||||
|
editorstrcoin = {{penyunting, penerjemah, komentator, dan pengantar}%
|
||||||
|
{peny\adddot, penerj\adddot, kom\adddot, dan peng\adddot}},
|
||||||
|
editortrcofo = {{penyunting, penerjemah, komentator, dan kata pengantar}%
|
||||||
|
{peny\adddot, penerj\adddot, kom\adddot, dan kata peng\adddot}},
|
||||||
|
editorstrcofo = {{penyunting, penerjemah, komentator, dan kata pengantar}%
|
||||||
|
{peny\adddot, penerj\adddot, kom\adddot, dan kata peng\adddot}},
|
||||||
|
editortrcoaf = {{penyunting, penerjemah, komentator, dan kata penutup}%
|
||||||
|
{peny\adddot, penerj\adddot, kom\adddot, dan kata pen\adddot}},
|
||||||
|
editorstrcoaf = {{penyunting, penerjemah, komentator, dan kata penutup}%
|
||||||
|
{peny\adddot, penerj\adddot, kom\adddot, dan kata pen\adddot}},
|
||||||
|
editortranin = {{penyunting, penerjemah, anotator, dan pengantar}%
|
||||||
|
{peny\adddot, penerj\adddot, anot\adddot, dan peng\adddot}},
|
||||||
|
editorstranin = {{penyunting, penerjemah, anotator, dan pengantar}%
|
||||||
|
{peny\adddot, penerj\adddot, anot\adddot, dan peng\adddot}},
|
||||||
|
editortranfo = {{penyunting, penerjemah, anotator, dan kata pengantar}%
|
||||||
|
{peny\adddot, penerj\adddot, anot\adddot, dan kata peng\adddot}},
|
||||||
|
editorstranfo = {{penyunting, penerjemah, anotator, dan kata pengantar}%
|
||||||
|
{peny\adddot, penerj\adddot, anot\adddot, dan kata peng\adddot}},
|
||||||
|
editortranaf = {{penyunting, penerjemah, anotator, dan kata penutup}%
|
||||||
|
{peny\adddot, penerj\adddot, anot\adddot, dan kata pen\adddot}},
|
||||||
|
editorstranaf = {{penyunting, penerjemah, anotator, dan kata penutup}%
|
||||||
|
{peny\adddot, penerj\adddot, anot\adddot, dan kata pen\adddot}},
|
||||||
|
translatorco = {{penerjemah dan komentator}%
|
||||||
|
{penerj\adddot\ dan kom\adddot}},
|
||||||
|
translatorsco = {{penerjemah dan komentator}%
|
||||||
|
{penerj\adddot\ dan kom\adddot}},
|
||||||
|
translatoran = {{penerjemah dan anotator}%
|
||||||
|
{penerj\adddot\ dan anot\adddot}},
|
||||||
|
translatorsan = {{penerjemah dan anotator}%
|
||||||
|
{penerj\adddot\ dan anot\adddot}},
|
||||||
|
translatorin = {{penerjemahan dan pengantar}%
|
||||||
|
{penerj\adddot\ dan peng\adddot}},
|
||||||
|
translatorsin = {{penerjemahan dan pengantar}%
|
||||||
|
{penerj\adddot\ dan peng\adddot}},
|
||||||
|
translatorfo = {{penerjemahan dan kata pengantar}%
|
||||||
|
{penerj\adddot\ dan kata peng\adddot}},
|
||||||
|
translatorsfo = {{penerjemahan dan kata pengantar}%
|
||||||
|
{penerj\adddot\ dan kata peng\adddot}},
|
||||||
|
translatoraf = {{penerjemahan dan kata penutup}%
|
||||||
|
{penerj\adddot\ dan kata pen\adddot}},
|
||||||
|
translatorsaf = {{penerjemahan dan kata penutup}%
|
||||||
|
{penerj\adddot\ dan kata pen\adddot}},
|
||||||
|
translatorcoin = {{penerjemahan, komentar, dan pengantar}%
|
||||||
|
{penerj\adddot, kom\adddot, dan peng\adddot}},
|
||||||
|
translatorscoin = {{penerjemahan, komentar, dan pengantar}%
|
||||||
|
{penerj\adddot, kom\adddot, dan peng\adddot}},
|
||||||
|
translatorcofo = {{penerjemahan, komentar, dan kata pengantar}%
|
||||||
|
{penerj\adddot, kom\adddot, dan kata peng\adddot}},
|
||||||
|
translatorscofo = {{penerjemahan, komentar, dan kata pengantar}%
|
||||||
|
{penerj\adddot, kom\adddot, dan kata peng\adddot}},
|
||||||
|
translatorcoaf = {{penerjemahan, komentar, dan kata penutup}%
|
||||||
|
{penerj\adddot, kom\adddot, dan kata pen\adddot}},
|
||||||
|
translatorscoaf = {{penerjemahan, komentar, dan kata penutup}%
|
||||||
|
{penerj\adddot, kom\adddot, dan kata pen\adddot}},
|
||||||
|
translatoranin = {{penerjemahan, anotasi, dan pengantar}%
|
||||||
|
{penerj\adddot, anot\adddot, dan peng\adddot}},
|
||||||
|
translatorsanin = {{penerjemahan, anotasi, dan pengantar}%
|
||||||
|
{penerj\adddot, anot\adddot, dan peng\adddot}},
|
||||||
|
translatoranfo = {{penerjemahan, anotasi, dan kata pengantar}%
|
||||||
|
{penerj\adddot, anot\adddot, dan kata peng\adddot}},
|
||||||
|
translatorsanfo = {{penerjemahan, anotasi, dan kata pengantar}%
|
||||||
|
{penerj\adddot, anot\adddot, dan kata peng\adddot}},
|
||||||
|
translatoranaf = {{penerjemahan, anotasi, dan kata penutup}%
|
||||||
|
{penerj\adddot, anot\adddot, dan kata pen\adddot}},
|
||||||
|
translatorsanaf = {{penerjemahan, anotasi, dan kata penutup}%
|
||||||
|
{penerj\adddot, anot\adddot, dan kata pen\adddot}},
|
||||||
|
organizer = {{penyelenggara}{penyelenggara}},
|
||||||
|
organizers = {{penyelenggara}{penyelenggara}},
|
||||||
|
byorganizer = {{diselenggarakan oleh}{diselenggarakan oleh}},
|
||||||
|
byauthor = {{oleh}{oleh}},
|
||||||
|
byeditor = {{disunting oleh}{sun\adddot\ oleh}},
|
||||||
|
bycompiler = {{disusun oleh}{disusun oleh}},
|
||||||
|
byredactor = {{diredaksi oleh}{red\adddot\ oleh}},
|
||||||
|
byreviser = {{direvisi oleh}{direvisi oleh}},
|
||||||
|
byreviewer = {{ditinjau oleh}{ditinjau oleh}},
|
||||||
|
byfounder = {{didirikan oleh}{didirikan oleh}},
|
||||||
|
bycontinuator = {{dilanjutkan oleh}{dilanjutkan oleh}},
|
||||||
|
bycollaborator = {{berkolaborasi dengan}{berkolaborasi dengan}},
|
||||||
|
bytranslator = {{diterjemahkan \lbx@lfromlang\ oleh}{terj\adddot\ \lbx@sfromlang\ oleh}},
|
||||||
|
bycommentator = {{diberi komentar oleh}{diberi kom\adddot\ oleh}},
|
||||||
|
byannotator = {{dianotasi oleh}{dianotasi oleh}},
|
||||||
|
withcommentator = {{dengan komentar oleh}{dgn\adddot\ kom\adddot\ oleh}},
|
||||||
|
withannotator = {{dengan anotasi oleh}{dgn\adddot\ anot\adddot\ oleh}},
|
||||||
|
withintroduction = {{dengan pengantar oleh}{dgn\adddot\ peng\adddot\ oleh}},
|
||||||
|
withforeword = {{dengan kata pengantar oleh}{dgn\adddot\ kata peng\adddot\ oleh}},
|
||||||
|
withafterword = {{dengan kata penutup oleh}{dgn\adddot\ kata pen\adddot\ oleh}},
|
||||||
|
byeditortr = {{disunting dan diterjemahkan \lbx@lfromlang\ oleh}%
|
||||||
|
{sun\adddot\ dan terj\adddot\ \lbx@sfromlang\ oleh}},
|
||||||
|
byeditorco = {{disunting dan diberi komentar oleh}%
|
||||||
|
{sun\adddot\ dan diberi kom\adddot\ oleh}},
|
||||||
|
byeditoran = {{disunting dan dianotasi oleh}%
|
||||||
|
{sun\adddot\ dan dianotasi oleh}},
|
||||||
|
byeditorin = {{disunting, dengan pengantar, oleh}%
|
||||||
|
{sun\adddot, dgn\adddot\ peng\adddot, oleh}},
|
||||||
|
byeditorfo = {{disunting, dengan kata pengantar, oleh}%
|
||||||
|
{sun\adddot, dgn\adddot\ kata peng\adddot, oleh}},
|
||||||
|
byeditoraf = {{disunting, dengan kata penutup, oleh}%
|
||||||
|
{sun\adddot, dgn\adddot\ kata pen\adddot, oleh}},
|
||||||
|
byeditortrco = {{disunting, diterjemahkan \lbx@lfromlang, dan diberi komentar oleh}%
|
||||||
|
{sun\adddot, terj\adddot\ \lbx@sfromlang, dan diberi kom\adddot\ oleh}},
|
||||||
|
byeditortran = {{disunting, diterjemahkan \lbx@lfromlang, dan dianotasi oleh}%
|
||||||
|
{sun\adddot, terj\adddot\ \lbx@sfromlang, dan dianotasi oleh}},
|
||||||
|
byeditortrin = {{disunting dan diterjemahkan \lbx@lfromlang, dengan pengantar, oleh}%
|
||||||
|
{sun\adddot\ dan terj\adddot\ \lbx@sfromlang, dgn\adddot\ peng\adddot, oleh}},
|
||||||
|
byeditortrfo = {{disunting dan diterjemahkan \lbx@lfromlang, dengan kata pengantar, oleh}%
|
||||||
|
{sun\adddot\ dan terj\adddot\ \lbx@sfromlang, dgn\adddot\ kata peng\adddot, oleh}},
|
||||||
|
byeditortraf = {{disunting dan diterjemahkan \lbx@lfromlang, dengan kata penutup, oleh}%
|
||||||
|
{sun\adddot\ dan terj\adddot\ \lbx@sfromlang, dgn\adddot\ kata pen\adddot, oleh}},
|
||||||
|
byeditorcoin = {{disunting dan diberi komentar, dengan pengantar, oleh}%
|
||||||
|
{sun\adddot\ dan diberi kom\adddot, dgn\adddot\ peng\adddot, oleh}},
|
||||||
|
byeditorcofo = {{disunting dan diberi komentar, dengan kata pengantar, oleh}%
|
||||||
|
{sun\adddot\ dan diberi kom\adddot, dgn\adddot\ kata peng\adddot, oleh}},
|
||||||
|
byeditorcoaf = {{disunting dan diberi komentar, dengan kata penutup, oleh}%
|
||||||
|
{sun\adddot\ dan diberi kom\adddot, dgn\adddot\ kata pen\adddot, oleh}},
|
||||||
|
byeditoranin = {{disunting dan dianotasi, dengan pengantar, oleh}%
|
||||||
|
{sun\adddot\ dan dianotasi, dgn\adddot\ peng\adddot, oleh}},
|
||||||
|
byeditoranfo = {{disunting dan dianotasi, dengan kata pengantar, oleh}%
|
||||||
|
{sun\adddot\ dan dianotasi, dgn\adddot\ kata peng\adddot, oleh}},
|
||||||
|
byeditoranaf = {{disunting dan dianotasi, dengan kata penutup, oleh}%
|
||||||
|
{sun\adddot\ dan dianotasi, dgn\adddot\ kata pen\adddot, oleh}},
|
||||||
|
byeditortrcoin = {{disunting, diterjemahkan \lbx@lfromlang, dan diberi komentar, dengan pengantar, oleh}%
|
||||||
|
{sun\adddot, terj\adddot\ \lbx@sfromlang, dan diberi kom\adddot, dgn\adddot\ peng\adddot, oleh}},
|
||||||
|
byeditortrcofo = {{disunting, diterjemahkan \lbx@lfromlang, dan diberi komentar, dengan kata pengantar, oleh}%
|
||||||
|
{sun\adddot, terj\adddot\ \lbx@sfromlang, dan diberi kom\adddot, dgn\adddot\ kata peng\adddot, oleh}},
|
||||||
|
byeditortrcoaf = {{disunting, diterjemahkan \lbx@lfromlang, dan diberi komentar, dengan kata penutup, oleh}%
|
||||||
|
{sun\adddot, terj\adddot\ \lbx@sfromlang, dan diberi kom\adddot, dgn\adddot\ kata pen\adddot, oleh}},
|
||||||
|
byeditortranin = {{disunting, diterjemahkan \lbx@lfromlang, dan dianotasi, dengan pengantar, oleh}%
|
||||||
|
{sun\adddot, terj\adddot\ \lbx@sfromlang, dan dianotasi, dgn\adddot\ peng\adddot, oleh}},
|
||||||
|
byeditortranfo = {{disunting, diterjemahkan \lbx@lfromlang, dan dianotasi, dengan kata pengantar, oleh}%
|
||||||
|
{sun\adddot, terj\adddot\ \lbx@sfromlang, dan dianotasi, dgn\adddot\ kata peng\adddot, oleh}},
|
||||||
|
byeditortranaf = {{disunting, diterjemahkan \lbx@lfromlang, dan dianotasi, dengan kata penutup, oleh}%
|
||||||
|
{sun\adddot, terj\adddot\ \lbx@sfromlang, dan dianotasi, dgn\adddot\ kata pen\adddot, oleh}},
|
||||||
|
bytranslatorco = {{diterjemahkan \lbx@lfromlang\ dan diberi komentar oleh}%
|
||||||
|
{terj\adddot\ \lbx@sfromlang\ dan diberi kom\adddot\ oleh}},
|
||||||
|
bytranslatoran = {{diterjemahkan \lbx@lfromlang\ dan dianotasi oleh}%
|
||||||
|
{terj\adddot\ \lbx@sfromlang\ dan dianotasi oleh}},
|
||||||
|
bytranslatorin = {{diterjemahkan \lbx@lfromlang, dengan pengantar, oleh}%
|
||||||
|
{terj\adddot\ \lbx@sfromlang, dgn\adddot\ peng\adddot, oleh}},
|
||||||
|
bytranslatorfo = {{diterjemahkan \lbx@lfromlang, dengan kata pengantar, oleh}%
|
||||||
|
{terj\adddot\ \lbx@sfromlang, dgn\adddot\ kata peng\adddot, oleh}},
|
||||||
|
bytranslatoraf = {{diterjemahkan \lbx@lfromlang, dengan kata penutup, oleh}%
|
||||||
|
{terj\adddot\ \lbx@sfromlang, dgn\adddot\ kata pen\adddot, oleh}},
|
||||||
|
bytranslatorcoin = {{diterjemahkan \lbx@lfromlang\ dan diberi komentar, dengan pengantar, oleh}%
|
||||||
|
{terj\adddot\ \lbx@sfromlang, dan diberi kom\adddot, dgn\adddot\ peng\adddot, oleh}},
|
||||||
|
bytranslatorcofo = {{diterjemahkan \lbx@lfromlang\ dan diberi komentar, dengan kata pengantar, oleh}%
|
||||||
|
{terj\adddot\ \lbx@sfromlang, dan diberi kom\adddot, dgn\adddot\ kata peng\adddot, oleh}},
|
||||||
|
bytranslatorcoaf = {{diterjemahkan \lbx@lfromlang\ dan diberi komentar, dengan kata penutup, oleh}%
|
||||||
|
{terj\adddot\ \lbx@sfromlang, dan diberi kom\adddot, dgn\adddot\ kata pen\adddot, oleh}},
|
||||||
|
bytranslatoranin = {{diterjemahkan \lbx@lfromlang\ dan dianotasi, dengan pengantar, oleh}%
|
||||||
|
{terj\adddot\ \lbx@sfromlang, dan dianotasi, dgn\adddot\ peng\adddot, oleh}},
|
||||||
|
bytranslatoranfo = {{diterjemahkan \lbx@lfromlang\ dan dianotasi, dengan kata pengantar, oleh}%
|
||||||
|
{terj\adddot\ \lbx@sfromlang, dan dianotasi, dgn\adddot\ kata peng\adddot, oleh}},
|
||||||
|
bytranslatoranaf = {{diterjemahkan \lbx@lfromlang\ dan dianotasi, dengan kata penutup, oleh}%
|
||||||
|
{terj\adddot\ \lbx@sfromlang, dan dianotasi, dgn\adddot\ kata pen\adddot, oleh}},
|
||||||
|
and = {{dan}{dan}},
|
||||||
|
andothers = {{dan kawan-kawan}{dkk\adddot}},
|
||||||
|
andmore = {{dan kawan-kawan}{dkk\adddot}},
|
||||||
|
volume = {{volume}{vol\adddot}},
|
||||||
|
volumes = {{volume}{vol\adddot}},
|
||||||
|
involumes = {{dalam}{dalam}},
|
||||||
|
jourvol = {{volume}{vol\adddot}},
|
||||||
|
jourser = {{seri}{ser\adddot}},
|
||||||
|
book = {{buku}{buku}},
|
||||||
|
part = {{bagian}{bag\adddot}},
|
||||||
|
issue = {{nomor}{no\adddot}},
|
||||||
|
newseries = {{seri baru}{ser\adddot\ baru}},
|
||||||
|
oldseries = {{seri lama}{ser\adddot\ lama}},
|
||||||
|
edition = {{edisi}{ed\adddot}},
|
||||||
|
reprint = {{cetak ulang}{cet\adddot\ ul\adddot}},
|
||||||
|
reprintof = {{cetakan ulang dari}{cet\adddot\ ul\adddot\ dari}},
|
||||||
|
reprintas = {{dicetak ulang sebagai}{dicetak ulang sbg\adddot}},
|
||||||
|
reprintfrom = {{dicetak ulang dari}{dicetak ulang dari}},
|
||||||
|
reviewof = {{tinjauan dari}{tinjauan dari}},
|
||||||
|
translationof = {{terjemahan dari}{terj\adddot\ dari}},
|
||||||
|
translationas = {{diterjemahkan sebagai}{diterj\adddot\ sbg\adddot}},
|
||||||
|
translationfrom = {{diterjemahkan dari}{diterj\adddot\ dari}},
|
||||||
|
origpubas = {{pertama kali terbit sebagai}{pertama terbit sbg\adddot}},
|
||||||
|
origpubin = {{pertama kali terbit dalam}{pertama terbit dlm\adddot}},
|
||||||
|
astitle = {{sebagai}{sbg\adddot}},
|
||||||
|
bypublisher = {{oleh}{oleh}},
|
||||||
|
nodate = {{tanpa tanggal}{t.t\adddot}},
|
||||||
|
page = {{halaman}{hlm\adddot}},
|
||||||
|
pages = {{halaman}{hlm\adddot}},
|
||||||
|
column = {{kolom}{kol\adddot}},
|
||||||
|
columns = {{kolom}{kol\adddot}},
|
||||||
|
line = {{baris}{brs\adddot}},
|
||||||
|
lines = {{baris}{brs\adddot}},
|
||||||
|
verse = {{ayat}{ayat}},
|
||||||
|
verses = {{ayat}{ayat}},
|
||||||
|
section = {{bagian}{\S}},
|
||||||
|
sections = {{bagian}{\S\S}},
|
||||||
|
paragraph = {{paragraf}{par\adddot}},
|
||||||
|
paragraphs = {{paragraf}{par\adddot}},
|
||||||
|
pagetotal = {{halaman}{hlm\adddot}},
|
||||||
|
pagetotals = {{halaman}{hlm\adddot}},
|
||||||
|
columntotal = {{kolom}{kol\adddot}},
|
||||||
|
columntotals = {{kolom}{kol\adddot}},
|
||||||
|
linetotal = {{baris}{brs\adddot}},
|
||||||
|
linetotals = {{baris}{brs\adddot}},
|
||||||
|
versetotal = {{ayat}{ayat}},
|
||||||
|
versetotals = {{ayat}{ayat}},
|
||||||
|
sectiontotal = {{bagian}{\S}},
|
||||||
|
sectiontotals = {{bagian}{\S\S}},
|
||||||
|
paragraphtotal = {{paragraf}{par\adddot}},
|
||||||
|
paragraphtotals = {{paragraf}{par\adddot}},
|
||||||
|
in = {{dalam}{dalam}},
|
||||||
|
inseries = {{dalam seri}{dalam seri}},
|
||||||
|
ofseries = {{dari seri}{dari seri}},
|
||||||
|
number = {{nomor}{no\adddot}},
|
||||||
|
chapter = {{bab}{bab}},
|
||||||
|
bathesis = {{skripsi}{skripsi}},
|
||||||
|
mathesis = {{tesis}{tesis}},
|
||||||
|
phdthesis = {{disertasi}{disertasi}},
|
||||||
|
candthesis = {{tesis kandidat}{tesis kand\adddot}},% FIXME: unsure
|
||||||
|
resreport = {{laporan penelitian}{lap\adddot\ pen\adddot}},
|
||||||
|
techreport = {{laporan teknis}{lap\adddot\ tek\adddot}},
|
||||||
|
software = {{perangkat lunak}{perangkat lunak}},
|
||||||
|
datacd = {{CD-ROM}{CD-ROM}},
|
||||||
|
audiocd = {{CD audio}{CD audio}},
|
||||||
|
version = {{versi}{ver}},
|
||||||
|
url = {{URL}{URL}},
|
||||||
|
urlfrom = {{tersedia dari}{tersedia dari}},
|
||||||
|
urlseen = {{diakses pada}{diakses pada}},
|
||||||
|
inpreparation = {{dalam persiapan}{dalam persiapan}},
|
||||||
|
submitted = {{diserahkan}{diserahkan}},
|
||||||
|
forthcoming = {{akan terbit}{akan terbit}},
|
||||||
|
inpress = {{dalam proses cetak}{dalam proses cetak}},
|
||||||
|
prepublished = {{praterbit}{praterbit}},
|
||||||
|
citedas = {{selanjutnya dikutip sebagai}{selanjutnya dikutip sbg\adddot}},
|
||||||
|
thiscite = {{khususnya}{khususnya}},
|
||||||
|
seenote = {{lihat catatan}{lih\adddot\ ctt\adddot}},
|
||||||
|
quotedin = {{dikutip dalam}{dikutip dlm\adddot}},
|
||||||
|
idem = {{idem}{idem}},
|
||||||
|
idemsm = {{idem}{idem}},
|
||||||
|
idemsf = {{eadem}{eadem}},
|
||||||
|
idemsn = {{idem}{idem}},
|
||||||
|
idempm = {{eidem}{eidem}},
|
||||||
|
idempf = {{eaedem}{eaedem}},
|
||||||
|
idempn = {{eadem}{eadem}},
|
||||||
|
idempp = {{eidem}{eidem}},
|
||||||
|
ibidem = {{ibidem}{ibid\adddot}},
|
||||||
|
opcit = {{op\adddotspace cit\adddot}{op\adddotspace cit\adddot}},
|
||||||
|
loccit = {{loc\adddotspace cit\adddot}{loc\adddotspace cit\adddot}},
|
||||||
|
confer = {{bandingkan}{bdk\adddot}},
|
||||||
|
sequens = {{sq\adddot}{sq\adddot}},
|
||||||
|
sequentes = {{sqq\adddot}{sqq\adddot}},
|
||||||
|
passim = {{passim}{passim}},
|
||||||
|
see = {{lihat}{lih\adddot}},
|
||||||
|
seealso = {{lihat juga}{lih\adddot\ juga}},
|
||||||
|
backrefpage = {{dikutip pada halaman}{dikutip hlm\adddot}},
|
||||||
|
backrefpages = {{dikutip pada halaman}{dikutip hlm\adddot}},
|
||||||
|
january = {{Januari}{Jan\adddot}},
|
||||||
|
february = {{Februari}{Feb\adddot}},
|
||||||
|
march = {{Maret}{Mar\adddot}},
|
||||||
|
april = {{April}{Apr\adddot}},
|
||||||
|
may = {{Mei}{Mei}},
|
||||||
|
june = {{Juni}{Jun\adddot}},
|
||||||
|
july = {{Juli}{Jul\adddot}},
|
||||||
|
august = {{Agustus}{Ags\adddot}},
|
||||||
|
september = {{September}{Sep\adddot}},
|
||||||
|
october = {{Oktober}{Okt\adddot}},
|
||||||
|
november = {{November}{Nov\adddot}},
|
||||||
|
december = {{Desember}{Des\adddot}},
|
||||||
|
langamerican = {{Amerika}{Amerika}},
|
||||||
|
langbasque = {{Bask}{Bask}},
|
||||||
|
langbrazilian = {{Brasil}{Brasil}},
|
||||||
|
langbulgarian = {{Bulgaria}{Bulgaria}},
|
||||||
|
langcatalan = {{Katala}{Katala}},
|
||||||
|
langcroatian = {{Kroasia}{Kroasia}},
|
||||||
|
langczech = {{Ceko}{Ceko}},
|
||||||
|
langdanish = {{Denmark}{Denmark}},
|
||||||
|
langdutch = {{Belanda}{Belanda}},
|
||||||
|
langenglish = {{Inggris}{Inggris}},
|
||||||
|
langestonian = {{Estonia}{Estonia}},
|
||||||
|
langfinnish = {{Finlandia}{Finlandia}},
|
||||||
|
langfrench = {{Prancis}{Prancis}},
|
||||||
|
langgalician = {{Galisia}{Galisia}},
|
||||||
|
langgerman = {{Jerman}{Jerman}},
|
||||||
|
langgreek = {{Yunani}{Yunani}},
|
||||||
|
langhungarian = {{Hungaria}{Hungaria}},
|
||||||
|
langitalian = {{Italia}{Italia}},
|
||||||
|
langjapanese = {{Jepang}{Jepang}},
|
||||||
|
langlatin = {{Latin}{Latin}},
|
||||||
|
langlatvian = {{Latvia}{Latvia}},
|
||||||
|
langlithuanian = {{Lituania}{Lituania}},
|
||||||
|
langmarathi = {{Marathi}{Marathi}},
|
||||||
|
langnorwegian = {{Norwegia}{Norwegia}},
|
||||||
|
langpolish = {{Polandia}{Polandia}},
|
||||||
|
langportuguese = {{Portugis}{Portugis}},
|
||||||
|
langromanian = {{Rumania}{Rumania}},
|
||||||
|
langrussian = {{Rusia}{Rusia}},
|
||||||
|
langserbian = {{Serbia}{Serbia}},
|
||||||
|
langslovak = {{Slowakia}{Slowakia}},
|
||||||
|
langslovene = {{Slovenia}{Slovenia}},
|
||||||
|
langspanish = {{Spanyol}{Spanyol}},
|
||||||
|
langswedish = {{Swedia}{Swedia}},
|
||||||
|
langturkish = {{Turki}{Turki}},
|
||||||
|
langukrainian = {{Ukraina}{Ukraina}},
|
||||||
|
fromamerican = {{dari bahasa Amerika}{dari bahasa Amerika}},
|
||||||
|
frombasque = {{dari bahasa Bask}{dari bahasa Bask}},
|
||||||
|
frombrazilian = {{dari bahasa Brasil}{dari bahasa Brasil}},
|
||||||
|
frombulgarian = {{dari bahasa Bulgaria}{dari bahasa Bulgaria}},
|
||||||
|
fromcatalan = {{dari bahasa Katala}{dari bahasa Katala}},
|
||||||
|
fromcroatian = {{dari bahasa Kroasia}{dari bahasa Kroasia}},
|
||||||
|
fromczech = {{dari bahasa Ceko}{dari bahasa Ceko}},
|
||||||
|
fromdanish = {{dari bahasa Denmark}{dari bahasa Denmark}},
|
||||||
|
fromdutch = {{dari bahasa Belanda}{dari bahasa Belanda}},
|
||||||
|
fromenglish = {{dari bahasa Inggris}{dari bahasa Inggris}},
|
||||||
|
fromestonian = {{dari bahasa Estonia}{dari bahasa Estonia}},
|
||||||
|
fromfinnish = {{dari bahasa Finlandia}{dari bahasa Finlandia}},
|
||||||
|
fromfrench = {{dari bahasa Prancis}{dari bahasa Prancis}},
|
||||||
|
fromgalician = {{dari bahasa Galisia}{dari bahasa Galisia}},
|
||||||
|
fromgerman = {{dari bahasa Jerman}{dari bahasa Jerman}},
|
||||||
|
fromgreek = {{dari bahasa Yunani}{dari bahasa Yunani}},
|
||||||
|
fromhungarian = {{dari bahasa Hungaria}{dari bahasa Hungaria}},
|
||||||
|
fromitalian = {{dari bahasa Italia}{dari bahasa Italia}},
|
||||||
|
fromjapanese = {{dari bahasa Jepang}{dari bahasa Jepang}},
|
||||||
|
fromlatin = {{dari bahasa Latin}{dari bahasa Latin}},
|
||||||
|
fromlatvian = {{dari bahasa Latvia}{dari bahasa Latvia}},
|
||||||
|
fromlithuanian = {{dari bahasa Lituania}{dari bahasa Lituania}},
|
||||||
|
frommarathi = {{dari bahasa Marathi}{dari bahasa Marathi}},
|
||||||
|
fromnorwegian = {{dari bahasa Norwegia}{dari bahasa Norwegia}},
|
||||||
|
frompolish = {{dari bahasa Polandia}{dari bahasa Polandia}},
|
||||||
|
fromportuguese = {{dari bahasa Portugis}{dari bahasa Portugis}},
|
||||||
|
fromromanian = {{dari bahasa Rumania}{dari bahasa Rumania}},
|
||||||
|
fromrussian = {{dari bahasa Rusia}{dari bahasa Rusia}},
|
||||||
|
fromserbian = {{dari bahasa Serbia}{dari bahasa Serbia}},
|
||||||
|
fromslovak = {{dari bahasa Slowakia}{dari bahasa Slowakia}},
|
||||||
|
fromslovene = {{dari bahasa Slovenia}{dari bahasa Slovenia}},
|
||||||
|
fromspanish = {{dari bahasa Spanyol}{dari bahasa Spanyol}},
|
||||||
|
fromswedish = {{dari bahasa Swedia}{dari bahasa Swedia}},
|
||||||
|
fromturkish = {{dari bahasa Turki}{dari bahasa Turki}},
|
||||||
|
fromukrainian = {{dari bahasa Ukraina}{dari bahasa Ukraina}},
|
||||||
|
countryde = {{Jerman}{DE}},
|
||||||
|
countryeu = {{Uni Eropa}{UE}},
|
||||||
|
countryep = {{Uni Eropa}{UE}},
|
||||||
|
countryfr = {{Prancis}{FR}},
|
||||||
|
countryuk = {{Britania Raya}{GB}},
|
||||||
|
countryus = {{Amerika Serikat}{AS}},
|
||||||
|
patent = {{paten}{pat\adddot}},
|
||||||
|
patentde = {{paten Jerman}{pat\adddot\ Jerman}},
|
||||||
|
patenteu = {{paten Eropa}{pat\adddot\ Eropa}},
|
||||||
|
patentfr = {{paten Prancis}{pat\adddot\ Prancis}},
|
||||||
|
patentuk = {{paten Britania}{pat\adddot\ Britania}},
|
||||||
|
patentus = {{paten A.S.}{pat\adddot\ A\adddot S\adddot}},
|
||||||
|
patreq = {{permohonan paten}{permohonan pat\adddot}},
|
||||||
|
patreqde = {{permohonan paten Jerman}{permohonan pat\adddot\ Jerman}},
|
||||||
|
patreqeu = {{permohonan paten Eropa}{permohonan pat\adddot\ Eropa}},
|
||||||
|
patreqfr = {{permohonan paten Prancis}{permohonan pat\adddot\ Prancis}},
|
||||||
|
patrequk = {{permohonan paten Britania}{permohonan pat\adddot\ Britania}},
|
||||||
|
patrequs = {{permohonan paten A.S.}{permohonan pat\adddot\ A\adddot S\adddot}},
|
||||||
|
file = {{berkas}{berkas}},
|
||||||
|
library = {{perpustakaan}{perpustakaan}},
|
||||||
|
abstract = {{abstrak}{abstrak}},
|
||||||
|
annotation = {{anotasi}{anotasi}},
|
||||||
|
commonera = {{era umum}{CE}}, % FIXME: inconsistent shorthands
|
||||||
|
beforecommonera = {{sebelum era umum}{BCE}}, % FIXME: inconsistent shorthands
|
||||||
|
annodomini = {{masehi}{M}},
|
||||||
|
beforechrist = {{sebelum masehi}{SM}},
|
||||||
|
circa = {{circa}{ca\adddot}},
|
||||||
|
spring = {{musim semi}{musim semi}},% FIXME: unsure
|
||||||
|
summer = {{musim panas}{musim panas}},% FIXME: unsure
|
||||||
|
autumn = {{musim gugur}{musim gugur}},% FIXME: unsure
|
||||||
|
winter = {{musim dingin}{musim dingin}},% FIXME: unsure
|
||||||
|
springN = {{musim semi (belahan utara)}{musim semi (BU)}},% FIXME: unsure
|
||||||
|
summerN = {{musim panas (belahan utara)}{musim panas (BU)}},% FIXME: unsure
|
||||||
|
autumnN = {{musim gugur (belahan utara)}{musim gugur (BU)}},% FIXME: unsure
|
||||||
|
winterN = {{musim dingin (belahan utara)}{musim dingin (BU)}},% FIXME: unsure
|
||||||
|
springS = {{musim semi (belahan selatan)}{musim semi (BS)}},% FIXME: unsure
|
||||||
|
summerS = {{musim panas (belahan selatan)}{musim panas (BS)}},% FIXME: unsure
|
||||||
|
autumnS = {{musim gugur (belahan selatan)}{musim gugur (BS)}},% FIXME: unsure
|
||||||
|
winterS = {{musim dingin (belahan selatan)}{musim dingin (BS)}},% FIXME: unsure
|
||||||
|
Q1 = {{kuartal 1}{K1}},
|
||||||
|
Q2 = {{kuartal 2}{K2}},
|
||||||
|
Q3 = {{kuartal 3}{K3}},
|
||||||
|
Q4 = {{kuartal 4}{K4}},
|
||||||
|
QD1 = {{caturwulan 1}{QD1}},% FIXME: unsure
|
||||||
|
QD2 = {{caturwulan 2}{QD2}},% FIXME: unsure
|
||||||
|
QD3 = {{caturwulan 3}{QD3}},% FIXME: unsure
|
||||||
|
S1 = {{semester 1}{S1}},
|
||||||
|
S2 = {{semester 2}{S2}},
|
||||||
|
am = {{AM}{AM}},
|
||||||
|
pm = {{PM}{PM}},
|
||||||
|
}
|
||||||
|
|
||||||
|
\protected\gdef\lbx@us@mkdaterangetrunc@long#1#2{%
|
||||||
|
\blx@if@printanytimes{#2}
|
||||||
|
{\mkdaterangefull{#1}{#2}}
|
||||||
|
{\lbx@us@mkdaterangetrunc@long@i{#1}{#2}}}
|
||||||
|
|
||||||
|
\protected\gdef\lbx@us@mkdaterangetrunc@long@i#1#2{%
|
||||||
|
\begingroup
|
||||||
|
\blx@metadateinfo{#2}%
|
||||||
|
\iffieldundef{#2year}
|
||||||
|
{\blx@nounit}
|
||||||
|
{\printtext[{#2date}]{%
|
||||||
|
\datecircaprint
|
||||||
|
\iffieldundef{#2yeardivision}
|
||||||
|
{\ifdateyearsequal{#2}{#2end}
|
||||||
|
{\csuse{mkbibdate#1}{}{#2month}{#2day}}
|
||||||
|
{\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
|
||||||
|
\dateeraprint{#2year}}}
|
||||||
|
{\ifdateyearsequal{#2}{#2end}
|
||||||
|
{\csuse{mkbibyeardivisiondate#1}{}{#2yeardivision}}
|
||||||
|
{\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}%
|
||||||
|
\dateeraprint{#2year}}}%
|
||||||
|
\dateuncertainprint
|
||||||
|
\iffieldundef{#2endyear}
|
||||||
|
{}
|
||||||
|
{\iffieldequalstr{#2endyear}{}
|
||||||
|
{\mbox{\bibdaterangesep}}
|
||||||
|
{\bibdaterangesep
|
||||||
|
\enddatecircaprint
|
||||||
|
\iffieldundef{#2endyeardivision}
|
||||||
|
{\ifdateyearsequal{#2}{#2end}
|
||||||
|
{\iffieldsequal{#2month}{#2endmonth}
|
||||||
|
{\csuse{mkbibdate#1}{#2endyear}{}{#2endday}}
|
||||||
|
{\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}}
|
||||||
|
{\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}}
|
||||||
|
{\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}%
|
||||||
|
\enddateuncertainprint
|
||||||
|
\dateeraprint{#2endyear}}}}}%
|
||||||
|
\endgroup}
|
||||||
|
|
||||||
|
\protected\gdef\lbx@us@mkdaterangetrunc@short#1#2{%
|
||||||
|
\blx@if@printanytimes{#2}
|
||||||
|
{\mkdaterangefull{#1}{#2}}
|
||||||
|
{\lbx@us@mkdaterangetrunc@short@i{#1}{#2}}}
|
||||||
|
|
||||||
|
\protected\gdef\lbx@us@mkdaterangetrunc@short@i#1#2{%
|
||||||
|
\begingroup
|
||||||
|
\blx@metadateinfo{#2}%
|
||||||
|
\iffieldundef{#2year}
|
||||||
|
{\blx@nounit}
|
||||||
|
{\printtext[{#2date}]{%
|
||||||
|
\datecircaprint
|
||||||
|
\iffieldundef{#2yeardivision}
|
||||||
|
{\ifdateyearsequal{#2}{#2end}
|
||||||
|
{\csuse{mkbibdate#1}{}{#2month}{#2day}}
|
||||||
|
{\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
|
||||||
|
\dateeraprint{#2year}}}
|
||||||
|
{\ifdateyearsequal{#2}{#2end}
|
||||||
|
{\csuse{mkbibyeardivisiondate#1}{}{#2yeardivision}}
|
||||||
|
{\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}%
|
||||||
|
\dateeraprint{#2year}}}%
|
||||||
|
\dateuncertainprint
|
||||||
|
\iffieldundef{#2endyear}
|
||||||
|
{}
|
||||||
|
{\iffieldequalstr{#2endyear}{}
|
||||||
|
{\mbox{\bibdaterangesep}}
|
||||||
|
{\bibdaterangesep
|
||||||
|
\enddatecircaprint
|
||||||
|
\iffieldundef{#2endyeardivision}
|
||||||
|
{\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}
|
||||||
|
{\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}%
|
||||||
|
\enddateuncertainprint
|
||||||
|
\dateeraprint{#2endyear}}}}}%
|
||||||
|
\endgroup}
|
||||||
|
|
||||||
|
\protected\gdef\lbx@us@mkdaterangetruncextra@long#1#2{%
|
||||||
|
\blx@if@printanytimes{#2}
|
||||||
|
{\mkdaterangefullextra{#1}{#2}}
|
||||||
|
{\lbx@us@mkdaterangetruncextra@long@i{#1}{#2}}}
|
||||||
|
|
||||||
|
\protected\gdef\lbx@us@mkdaterangetruncextra@long@i#1#2{%
|
||||||
|
\begingroup
|
||||||
|
\blx@metadateinfo{#2}%
|
||||||
|
\iffieldundef{#2year}
|
||||||
|
{\blx@nounit}
|
||||||
|
{\printtext[{#2date}]{%
|
||||||
|
\datecircaprint
|
||||||
|
\iffieldundef{#2yeardivision}
|
||||||
|
{\ifdateyearsequal{#2}{#2end}
|
||||||
|
{\csuse{mkbibdate#1}{}{#2month}{#2day}}
|
||||||
|
{\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
|
||||||
|
\dateeraprint{#2year}}}
|
||||||
|
{\ifdateyearsequal{#2}{#2end}
|
||||||
|
{\csuse{mkbibyeardivisiondate#1}{}{#2yeardivision}}
|
||||||
|
{\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}%
|
||||||
|
\dateeraprint{#2year}}}%
|
||||||
|
\dateuncertainprint
|
||||||
|
\iffieldundef{#2endyear}
|
||||||
|
{\printfield{extradate}}
|
||||||
|
{\iffieldequalstr{#2endyear}{}
|
||||||
|
{\printfield{extradate}%
|
||||||
|
\mbox{\bibdaterangesep}}
|
||||||
|
{\bibdaterangesep
|
||||||
|
\enddatecircaprint
|
||||||
|
\iffieldundef{#2endyeardivision}
|
||||||
|
{\ifdateyearsequal{#2}{#2end}
|
||||||
|
{\iffieldsequal{#2month}{#2endmonth}
|
||||||
|
{\csuse{mkbibdate#1}{#2endyear}{}{#2endday}}
|
||||||
|
{\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}}
|
||||||
|
{\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}}
|
||||||
|
{\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}%
|
||||||
|
\printfield{extradate}%
|
||||||
|
\enddateuncertainprint
|
||||||
|
\dateeraprint{#2endyear}}}}}%
|
||||||
|
\endgroup}
|
||||||
|
|
||||||
|
\protected\gdef\lbx@us@mkdaterangetruncextra@short#1#2{%
|
||||||
|
\blx@if@printanytimes{#2}
|
||||||
|
{\mkdaterangefullextra{#1}{#2}}
|
||||||
|
{\lbx@us@mkdaterangetruncextra@short@i{#1}{#2}}}
|
||||||
|
|
||||||
|
\protected\gdef\lbx@us@mkdaterangetruncextra@short@i#1#2{%
|
||||||
|
\begingroup
|
||||||
|
\blx@metadateinfo{#2}%
|
||||||
|
\iffieldundef{#2year}
|
||||||
|
{\blx@nounit}
|
||||||
|
{\printtext[{#2date}]{%
|
||||||
|
\datecircaprint
|
||||||
|
\iffieldundef{#2yeardivision}
|
||||||
|
{\ifdateyearsequal{#2}{#2end}
|
||||||
|
{\csuse{mkbibdate#1}{}{#2month}{#2day}}
|
||||||
|
{\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
|
||||||
|
\dateeraprint{#2year}}}
|
||||||
|
{\ifdateyearsequal{#2}{#2end}
|
||||||
|
{\csuse{mkbibyeardivisiondate#1}{}{#2yeardivision}}
|
||||||
|
{\csuse{mkbibyeardivisiondate#1}{#2year}{#2yeardivision}%
|
||||||
|
\dateeraprint{#2year}}}%
|
||||||
|
\dateuncertainprint
|
||||||
|
\iffieldundef{#2endyear}
|
||||||
|
{\printfield{extradate}}
|
||||||
|
{\iffieldequalstr{#2endyear}{}
|
||||||
|
{\printfield{extradate}%
|
||||||
|
\mbox{\bibdaterangesep}}
|
||||||
|
{\bibdaterangesep
|
||||||
|
\enddatecircaprint
|
||||||
|
\iffieldundef{#2endyeardivision}
|
||||||
|
{\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}
|
||||||
|
{\csuse{mkbibyeardivisiondate#1}{#2endyear}{#2endyeardivision}}%
|
||||||
|
\printfield{extradate}%
|
||||||
|
\enddateuncertainprint
|
||||||
|
\dateeraprint{#2endyear}}}}}%
|
||||||
|
\endgroup}
|
||||||
|
|
||||||
|
\endinput
|
||||||
File diff suppressed because it is too large
Load Diff
10
latex/chapters/en/02_literature_review/index.tex
Normal file
10
latex/chapters/en/02_literature_review/index.tex
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
\chapter{LITERATURE REVIEW AND THEORITICAL FOUNDATION}
|
||||||
|
\section{Literature Review}
|
||||||
|
\input{chapters/id/02_literature_review/literature_review/abdeljaber2017}
|
||||||
|
|
||||||
|
\section{Theoritical Foundation}
|
||||||
|
\input{chapters/id/02_literature_review/theoritical_foundation/stft}
|
||||||
|
\input{chapters/id/02_literature_review/theoritical_foundation/machine_learning}
|
||||||
|
|
||||||
|
\bigskip
|
||||||
|
These theoretical foundations provide the methodological framework for implementing and evaluating the proposed damage localization system in this research. The combination of time-frequency analysis using STFT and classical machine learning classifiers enables an efficient and interpretable approach to structural health monitoring.
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
Traditional structural health monitoring methods often rely on hand-crafted features and manually tuned classifiers, which pose challenges in terms of generalization, reliability, and computational efficiency. As highlighted by [Author(s), Year], these approaches frequently require a trial-and-error process for feature and classifier selection, which not only reduces their robustness across structures but also hinders their deployment in real-time applications due to the computational load of the feature extraction phase.
|
||||||
|
|
||||||
|
[Author(s), Year] introduced a CNN-based structural damage detection approach validated through a large-scale grandstand simulator at Qatar University. The structure, designed to replicate modern stadiums, was equipped with 30 accelerometers and subjected to controlled damage by loosening beam-to-girder bolts. Acceleration data, collected under band-limited white noise excitation and sampled at 1024 Hz, were segmented into 128-sample frames for training localized 1D CNNs—one per joint—creating a decentralized detection system. Across two experimental phases, involving both partial and full-structure monitoring, the method demonstrated high accuracy in damage localization, achieving a training classification error of just 0.54\%. While performance remained strong even under double-damage scenarios, some misclassifications occurred in symmetric or adjacent damage cases. Overall, the proposed method presents a highly efficient and accurate solution for real-time SHM applications.
|
||||||
|
|
||||||
|
In the context of this thesis, the dataset and experimental setup introduced by [Author(s), Year] form the foundation for comparative analysis and algorithm testing. The authors have not only demonstrated the efficacy of a compact 1D CNN-based system for vibration-based structural damage detection, but also highlighted the value of using output-only acceleration data—a constraint shared in this thesis’s methodology. The decentralized design of their system, which allows each CNN to process only locally available data, is particularly aligned with this thesis's focus on efficient, sensor-level data analysis without requiring full-system synchronization. Furthermore, since the authors indicate plans to publicly release their dataset and source code, this thesis leverages that open data for applying alternative analysis methods such as support vector machines (SVM) or frequency domain feature extraction techniques, allowing a direct performance comparison between classical and deep learning-based SHM approaches. Thus, this work serves as both a benchmark reference and a data source in the development and evaluation of more accessible, lower-complexity alternatives for structural health monitoring systems.
|
||||||
|
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
\subsection{Classification Algorithms}
|
||||||
|
|
||||||
|
This research evaluates five classical machine learning algorithms to perform the classification task of damage localization. Each algorithm has different strengths and limitations, and their performance is benchmarked to identify the most suitable one for the given dataset.
|
||||||
|
|
||||||
|
\subsubsection{Support Vector Machine (SVM)}
|
||||||
|
|
||||||
|
SVM is a supervised learning algorithm that seeks an optimal hyperplane that separates data into classes with maximum margin. SVM performs well in high-dimensional spaces and is robust to overfitting, especially in cases with a clear margin of separation.
|
||||||
|
|
||||||
|
SVM is appropriate for vibration signal classification due to its capability to handle nonlinear decision boundaries when equipped with kernel functions.
|
||||||
|
|
||||||
|
\subsubsection{K-Nearest Neighbors (KNN)}
|
||||||
|
|
||||||
|
KNN is a non-parametric, instance-based learning algorithm. It classifies a new data point based on the majority vote of its $k$ nearest neighbors in the feature space. Although simple, KNN can be effective when the data is well-distributed and class boundaries are smooth.
|
||||||
|
|
||||||
|
Its performance is sensitive to the choice of $k$ and distance metric. For high-dimensional data like STFT features, dimensionality reduction or careful scaling may be required.
|
||||||
|
|
||||||
|
\subsubsection{Decision Tree (DT)}
|
||||||
|
|
||||||
|
Decision Tree is a rule-based classifier that splits data into classes using feature thresholds. It builds a tree where each internal node represents a feature, each branch a decision rule, and each leaf a class label. DTs are easy to interpret and can capture non-linear relationships.
|
||||||
|
|
||||||
|
However, they are prone to overfitting, especially with noisy or small datasets.
|
||||||
|
|
||||||
|
\subsubsection{Random Forest (RF)}
|
||||||
|
|
||||||
|
Random Forest is an ensemble learning method based on constructing multiple decision trees during training and outputting the mode of the classes for classification. It improves the generalization capability of individual trees and reduces overfitting.
|
||||||
|
|
||||||
|
RF is suitable for damage detection as it provides robustness to noise and variance, making it ideal for real-world sensor data.
|
||||||
|
|
||||||
|
\subsubsection{Naïve Bayes (NB)}
|
||||||
|
|
||||||
|
Naïve Bayes is a probabilistic classifier based on Bayes' theorem, assuming feature independence. Despite its simplicity, it often performs well in high-dimensional problems and with small datasets.
|
||||||
|
|
||||||
|
NB is particularly effective when class-conditional independence holds approximately, which may occur when STFT features are well-separated in distribution.
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
\subsection{Short-Time Fourier Transform (STFT)}
|
||||||
|
|
||||||
|
The Short-Time Fourier Transform (STFT) is a fundamental technique used to analyze non-stationary signals, such as those generated by structures under dynamic load or white noise excitation. While the traditional Fourier Transform provides frequency-domain information, it lacks time resolution. STFT overcomes this limitation by applying the Fourier Transform over short overlapping segments of the signal, thereby producing a time-frequency representation.
|
||||||
|
|
||||||
|
Mathematically, the STFT of a signal $x(t)$ is given by:
|
||||||
|
\begin{equation}
|
||||||
|
X(t, \omega) = \int_{-\infty}^{\infty} x(\tau) w(\tau - t) e^{-j \omega \tau} d\tau
|
||||||
|
\end{equation}
|
||||||
|
where $w(\tau - t)$ is a window function centered at time $t$, and $\omega$ is the angular frequency.
|
||||||
|
|
||||||
|
In this study, the STFT is employed to extract the time-frequency features of the vibration signals collected from the structure. These features are then used as inputs to machine learning classifiers. This process captures localized frequency content over time, which is crucial in identifying structural changes due to damage.
|
||||||
80
latex/chapters/id/01_introduction.tex
Normal file
80
latex/chapters/id/01_introduction.tex
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
\chapter{Pendahuluan}
|
||||||
|
|
||||||
|
\section{Latar Belakang}
|
||||||
|
|
||||||
|
\indent Monitoring Kesehatan Struktur (\textit{Structural Health Monitoring} atau SHM) merupakan riset penting yang tersebar di berbagai disiplin ilmu, termasuk teknik dirgantara, teknik sipil, dan teknik mesin. Tujuan utama dari monitor kesehatan struktur adalah memastikan keamanan dan keandalan struktur dengan mendeteksi kerusakan sedini mungkin. Dengan mengombinasikan teknologi sensor yang canggih serta pengolahan data secara \textit{real-time}, sistem monitor kesehatan struktur menjadi kekuatan para insinyur untuk memonitor integritas struktur, strategi optimisasi \textit{maintenance}, dan memprediksi sisa umur struktur.
|
||||||
|
|
||||||
|
\indent Sistem SHM yang tangguh mengikuti \textit{framework} secara hierarkis untuk mengidentifikasi dan menilai kerusakan struktural. Menurut \textcite{rytter1993}, lima tahapan SHM tersebut adalah:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item (Tingkat 1) Keberadaan Kerusakan: Menentukan apakah ada kerusakan pada struktur. Pada tahap ini, pengukuran getaran cukup untuk memastikan adanya kerusakan.
|
||||||
|
\item (Tingkat 2) Lokasi Kerusakan: Mengidentifikasi lokasi geometris kerusakan, baik kerusakan tunggal maupun ganda.
|
||||||
|
\item (Tingkat 3) Tipe Kerusakan: Mencirikan sifat kerusakan, yang dapat meliputi retakan, perubahan pada kondisi tumpuan, atau perubahan dalam sambungan struktur.
|
||||||
|
\item (Tingkat 4) Tingkat Keparahan: Mengukur secara kuantitatif seberapa parah kerusakan terjadi. Biasanya melalui eksperimen atau model terkalibrasi yang menggambarkan efek kerusakan, seperti penurunan kekakuan atau panjang retakan.
|
||||||
|
\item (Tingkat 5): Memprediksi sisa umur pakai struktur dengan mengandalkan pemantauan secara \textit{real-time} dan komprehensif serta model dengan fidelitas tinggi yang menggambarkan perkembangan kerusakan seiring waktu.
|
||||||
|
\end{enumerate}
|
||||||
|
Semakin tinggi tingkat identifikasi kerusakan, semakin besar pula kebutuhan akan sensor yang presisi, algoritma yang kompleks, serta parameter model yang akurat. Jika pada Tingkat 1 hanya diperlukan data yang terbatas untuk mendeteksi adanya kerusakan, maka Tingkat 5 membutuhkan akuisisi data secara \textit{real-time} dan canggih serta model prediktif yang memiliki fidelitas tinggi.
|
||||||
|
|
||||||
|
\par Tantangan utama terletak pada pengembangan sistem \acrshort{shm} yang mampu mengakomodasi berbagai tahapan identifikasi kerusakan secara efektif, baik dalam kondisi operasional normal maupun dalam situasi ekstrem seperti gempa bumi.
|
||||||
|
|
||||||
|
% Penelitian ini difokuskan pada lima tahapan identifikasi kerusakan, dengan tujuan untuk mengembangkan pendekatan yang lebih komprehensif terhadap diagnosis kerusakan dan peningkatan akurasi pelokasian (Tingkat 2), sekaligus mengoptimalkan strategi penempatan sensor dan perancangan algoritma guna mencapai efisiensi biaya yang lebih tinggi.
|
||||||
|
\par Dalam konteks pengembangan sistem \acrshort{shm} yang efektif, perlu memperhatikan elemen struktural yang rentan terhadap kerusakan namun sering kali terabaikan dalam pemantauan konvensional. % <- Transition sentence
|
||||||
|
Salah satu komponen struktural yang umum digunakan dalam penyambungan adalah sambungan baut (\textit{bolt joint}), yang dikenal karena kemudahan dalam perakitan dan penggunaannya. Namun, sambungan berulir ini rentan mengalami kelonggaran akibat beban kejut atau getaran terus-menerus \parencite{chen2017}. Kelonggaran baut yang tidak terdeteksi sejak dini dapat menyebabkan kerusakan serius pada struktur, sehingga identifikasi dini terhadap kerusakan sambungan baut menjadi krusial dalam bidang teknik sipil, mesin, dan kedirgantaraan. % <- Target
|
||||||
|
Pemantauan kondisi sambungan ini tidak hanya relevan dalam konteks deteksi dini (Tingkat 1), tetapi juga sangat penting untuk diagnosis kerusakan dan penentuan lokasi secara akurat (Tingkat 2), seiring dengan meningkatnya kebutuhan akan sistem \gls{shm} yang responsif dan adaptif terhadap dinamika kerusakan struktural. % <- closing sentences
|
||||||
|
|
||||||
|
\indent Berbagai pendekatan telah dikembangkan untuk mendeteksi kelonggaran baut, mulai dari inspeksi manual hingga teknik otomatis berbasis sensor. Meskipun setiap metode memiliki keunggulan masing-masing, tantangan tetap ada dalam hal efisiensi, akurasi, dan implementasi praktis. Pendekatan berbasis getaran (\textit{vibration-based}) yang menjadi fokus penelitian ini telah terbukti efektif dalam mendeteksi kelonggaran baut pada tahap awal \parencite{nichols2004,razi2013}, dengan menganalisis data akselerasi struktur yang diperoleh dari sensor pada titik-titik strategis dalam sistem grid.
|
||||||
|
|
||||||
|
\indent Meskipun pendekatan \textit{deep learning} menunjukkan hasil yang menjanjikan dalam SHM, tantangan komputasi dan efisiensi implementasi masih menjadi perhatian utama. Penelitian ini mengusulkan pendekatan alternatif yang menekankan keseimbangan antara akurasi deteksi dan efisiensi komputasi melalui penggunaan sensor terbatas dan algoritma pembelajaran mesin klasik yang telah terbukti efektif.
|
||||||
|
|
||||||
|
\indent Penelitian ini mengadopsi strategi pengurangan jumlah sensor dengan tetap mempertahankan kemampuan deteksi yang akurat. Data getaran diproses menggunakan transformasi \gls{stft} untuk ekstraksi fitur domain waktu-frekuensi, yang kemudian diklasifikasikan menggunakan \gls{svm} dengan optimasi \textit{hyperparameter} sistematis. Pendekatan ini diharapkan dapat memberikan solusi praktis untuk implementasi SHM yang efisien dan ekonomis.
|
||||||
|
|
||||||
|
|
||||||
|
\section{Rumusan Masalah}
|
||||||
|
Untuk memandu arah penelitian ini, beberapa permasalahan utama yang akan dibahas adalah sebagai berikut:
|
||||||
|
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Apakah fitur domain waktu-frekuensi yang diekstraksi melalui transformasi \gls{stft} dari sinyal getaran sensor terbatas (hanya sensor-sensor atas dan bawah) masih mampu merepresentasikan karakteristik kerusakan struktur dengan akurasi yang memadai untuk klasifikasi tujuh kelas kondisi struktur (tanpa kerusakan dan enam lokasi kerusakan berbeda)?
|
||||||
|
|
||||||
|
\item Bagaimana mengoptimalkan parameter model \gls{svm} dengan kernel \gls{rbf} melalui strategi pencarian \textit{grid} dua tahap untuk mencapai keseimbangan optimal antara akurasi klasifikasi dan efisiensi komputasi, khususnya dalam hal kompleksitas model ditinjau dari ukuran model, waktu pelatihan, dan prediksi?
|
||||||
|
|
||||||
|
\item Apakah pendekatan reduksi dimensi menggunakan \gls{pca} dapat mempertahankan informasi diskriminatif yang cukup dari fitur \gls{stft} berdimensi tinggi untuk mendukung klasifikasi kerusakan secara akurat dengan model yang lebih efisien?
|
||||||
|
|
||||||
|
\item Seberapa efektif model yang dilatih pada satu dataset dapat digeneralisasi untuk mendeteksi kerusakan pada data uji independen?
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
\section{Lingkup Penelitian}
|
||||||
|
Studi ini berfokus pada dataset yang tersedia secara publik didapat dari Qatar University Grandstand Simulator (QUGS), sebuah kerangka besi level laboratorium yang dipasang dengan tiga puluh titik sensor akselerometer dan \textit{white shaker noise}. Dataset yang dipublikasi terdiri dari 31 kondisi struktur: satu kondisi tanpa kerusakan dan 30 kondisi dengan kerusakan tunggal pada masing-masing \textit{joint} yang berbeda, sehingga kerusakan ganda tidak termasuk dalam cakupan penelitian ini.
|
||||||
|
|
||||||
|
Parameter STFT yang digunakan tidak dioptimalkan secara menyeluruh, melainkan diadopsi dari studi sebelumnya \parencite{eraliev2022} serta nilai $k$ tetap pada \textit{stratified k-fold} yang diambil berdasarkan \textcite{Kohavi1995ASO}. Selain itu, penelitian ini membatasi penggunaan algoritma pembelajaran mesin pada satu model klasik \gls{svm} dengan kernel RBF tanpa membandingkannya dengan algoritma lain, untuk fokus pada optimasi \textit{hyperparameter} dan efisiensi komputasi berdasarkan waktu latih, waktu prediksi, dan jumlah fitur tanpa menganalisis waktu kompleksitas (\textit{time complexity}) algoritma secara mendalam.
|
||||||
|
|
||||||
|
\section{Tujuan Penelitian}
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Mengembangkan alur sistem (\textit{pipeline}) pemantauan \gls{shm} yang dilimitasi dengan hanya menggunakan sepasang sensor di ujung-ujung struktur agar mampu mengklasifikasikan tujuh kondisi struktur berbeda dengan akurasi tinggi.
|
||||||
|
|
||||||
|
\item Mengimplementasikan dan mengoptimalkan model \gls{svm} dengan kernel \gls{rbf} melalui strategi pencarian \textit{grid} dua tahap (\textit{coarse} dan \textit{fine grid-search}) untuk mencapai konfigurasi optimal parameter regularisasi ($C$), parameter kernel ($\gamma$), dan jumlah komponen PCA ($n_{components}$).
|
||||||
|
|
||||||
|
\item Mengevaluasi efektivitas transformasi STFT sebagai metode ekstraksi fitur domain waktu-frekuensi untuk menangkap karakteristik getaran yang relevan dengan kondisi kerusakan struktur, serta menganalisis kontribusi reduksi dimensi PCA terhadap efisiensi waktu komputasi model.
|
||||||
|
|
||||||
|
\item Menganalisis trade-off antara akurasi model dan efisiensi komputasi melalui metrik efisiensi yang mempertimbangkan waktu pelatihan, serta mengevaluasi kemampuan generalisasi model melalui validasi silang antar-dataset independen.
|
||||||
|
|
||||||
|
\item Memvalidasi bahwa pendekatan sensor terbatas dengan algoritma pembelajaran mesin klasik dapat mencapai performa klasifikasi yang kompetitif dibandingkan metode yang menggunakan instrumentasi sensor penuh, sehingga memberikan solusi yang lebih praktis dan ekonomis untuk implementasi SHM.
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
\section{Manfaat Penelitian}
|
||||||
|
|
||||||
|
Penelitian ini memberikan beberapa manfaat yang diharapkan dapat berkontribusi dalam pengembangan sistem deteksi kerusakan struktur, antara lain:
|
||||||
|
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Efisiensi Instrumentasi: Penelitian ini membuktikan bahwa pengurangan sensor dari 30 menjadi sepuluh sensor (lima sensor atas dan bawah) dapat mempertahankan akurasi klasifikasi di atas 99\%, sehingga memberikan solusi yang lebih ekonomis untuk implementasi SHM skala besar.
|
||||||
|
|
||||||
|
\item Optimasi Sistematis: Melalui pendekatan optimasi \textit{hyperparameter} dua tahap dan analisis metrik efisiensi, penelitian ini menyediakan metodologi sistematis untuk mencapai keseimbangan optimal antara akurasi model (>99\%) dan efisiensi komputasi (pengurangan waktu pelatihan hingga 75\%).
|
||||||
|
|
||||||
|
% \item Efektifitas Ekstraksi Fitur: Penelitian ini mendemonstrasikan bahwa transformasi STFT dengan parameter optimized (window Hanning 1024 sampel, hop size 512) mampu mengekstrak fitur domain waktu-frekuensi yang diskriminatif untuk klasifikasi kerusakan struktur tanpa kehilangan informasi signifikan.
|
||||||
|
|
||||||
|
% \item Validasi Generalisasi: Melalui evaluasi silang antar-dataset independen, penelitian ini memvalidasi kemampuan generalisasi model SVM-RBF yang dapat diterapkan pada kondisi struktur yang belum pernah dilihat sebelumnya, dengan tetap mempertahankan akurasi tinggi.
|
||||||
|
|
||||||
|
% \item Baseline Metodologis: Rangkaian eksperimen komprehensif dan analisis performa yang disajikan dapat dijadikan referensi atau \textit{baseline} untuk studi komparatif selanjutnya, khususnya dalam pengembangan sistem SHM dengan pendekatan sensor terbatas dan algoritma klasik yang efisien.
|
||||||
|
|
||||||
|
\item Kemudahan Implementasi \textit{Pipeline}: Hasil penelitian ini memberikan panduan untuk implementasi sistem SHM yang dinilai \textit{cost-effective}, dengan menyediakan parameter model optimal dan strategi deployment yang telah tervalidasi untuk struktur \textit{grid} skala kecil yang diharapkan dapat diadaptasi untuk aplikasi struktur di lapangan.
|
||||||
|
|
||||||
|
\item Kontribusi Akademis: Penelitian ini menambah khazanah ilmu pengetahuan dalam bidang teknik sipil khususnya pada \gls{shm} dan \textit{computer science} dengan fokus pada deteksi kerusakan sambungan baut menggunakan pendekatan sensor terbatas dan algoritma \gls{ml} klasik.
|
||||||
|
\end{enumerate}
|
||||||
91
latex/chapters/id/02_literature_review/index.tex
Normal file
91
latex/chapters/id/02_literature_review/index.tex
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
\chapter{Tinjauan Pustaka dan Landasan Teori}
|
||||||
|
\section{Tinjauan Pustaka}
|
||||||
|
|
||||||
|
\subsection{Kerangka Kerja Structural Health Monitoring}
|
||||||
|
|
||||||
|
\gls{shm} yang efektif mengikuti pendekatan hierarkis untuk mengidentifikasi dan menilai kerusakan struktural. Menurut \textcite{rytter1993}, lima tingkatan dalam kerangka kerja SHM adalah: (1) deteksi keberadaan kerusakan, (2) lokalisasi kerusakan, (3) identifikasi tipe kerusakan, (4) kuantifikasi tingkat keparahan, dan (5) prediksi sisa umur struktur. Setiap tingkatan memerlukan kompleksitas instrumentasi dan algoritma yang semakin tinggi, mulai dari deteksi sederhana hingga pemodelan prediktif yang komprehensif.
|
||||||
|
|
||||||
|
\subsection{Metode Deteksi Kelonggaran Baut}
|
||||||
|
|
||||||
|
\subsubsection{Metode Inspeksi Tradisional}
|
||||||
|
|
||||||
|
Deteksi kelonggaran baut telah dilakukan melalui berbagai pendekatan konvensional. Inspeksi visual dan penggunaan alat mekanis seperti kunci torsi dan palu merupakan metode yang paling sederhana dan ekonomis. Meskipun mudah diimplementasikan, metode ini memiliki keterbatasan signifikan dalam mendeteksi kerusakan pada tahap awal dan sangat bergantung pada pengalaman operator \parencite{j.h.park2015}.
|
||||||
|
|
||||||
|
Metode \textit{hammer testing} menunjukkan efektivitas yang lebih baik dibanding inspeksi visual untuk deteksi kelonggaran dini, namun akurasinya dapat terganggu oleh kebisingan lingkungan dan menjadi tidak praktis untuk struktur dengan banyak sambungan seperti jembatan \parencite{j.h.park2015,wang2013}. Keterbatasan ini mendorong pengembangan teknik deteksi yang lebih canggih dan otomatis.
|
||||||
|
|
||||||
|
\subsubsection{Pendekatan Berbasis \textit{Computer Vision}}
|
||||||
|
|
||||||
|
Teknik berbasis penglihatan komputer telah dikembangkan sebagai alternatif untuk mengatasi keterbatasan metode manual. Pendekatan ini menggunakan kamera dan pencitraan digital untuk mendeteksi perubahan visual pada sambungan baut. \textcite{zhang2020,zhao2019} mengembangkan sistem deteksi rotasi kepala baut menggunakan \gls{cnn} dan \textit{Faster} \gls{r-cnn} yang mampu mengidentifikasi kelonggaran berdasarkan perubahan orientasi visual.
|
||||||
|
|
||||||
|
Meskipun metode ini dapat mendeteksi kerusakan secara visual tanpa terpengaruh kebisingan akustik, tantangan implementasi tetap ada dalam hal akses visual ke sambungan, kondisi pencahayaan, dan beban komputasi tinggi dari model \textit{deep learning}, terutama dalam lingkungan terbatas seperti interior mesin atau struktur tertutup.
|
||||||
|
|
||||||
|
\subsection{Perkembangan Teknik SHM Berbasis Getaran}
|
||||||
|
|
||||||
|
\subsubsection{Pendekatan Deep Learning dalam SHM}
|
||||||
|
|
||||||
|
\textcite{abdeljaber2017} memperkenalkan pendekatan revolusioner dalam \gls{shm} dengan menerapkan 30 model \gls{1d-cnn} pada 30 sensor akselerometer dalam struktur grid \gls{qugs}. Struktur tersebut dirancang untuk mereplikasi stadion modern, dilengkapi dengan instrumentasi lengkap, dan dikenai kerusakan terkontrol melalui pelonggaran baut sambungan. Data percepatan dikumpulkan di bawah eksitasi \textit{band-limited white noise} dengan sampling rate 1024 Hz, kemudian dibagi menjadi frame berukuran 128 sampel untuk melatih \gls{cnn} yang dilokalkan pada setiap sambungan.
|
||||||
|
|
||||||
|
Pendekatan terdesentralisasi ini menunjukkan akurasi tinggi dalam pelokalisasian kerusakan dengan kesalahan klasifikasi hanya 0.54\% pada fase pelatihan. Meskipun performa tetap andal dalam skenario kerusakan ganda, beberapa salah klasifikasi terjadi pada kasus kerusakan simetris atau berdekatan. Keunggulan utama metode ini adalah kemampuan deteksi \textit{real-time} dan akurasi lokalisasi yang tinggi, namun memerlukan sumber daya komputasi besar karena pemrosesan paralel data mentah berdimensi tinggi dari seluruh sensor \parencite{yang2020, liu2022}.
|
||||||
|
|
||||||
|
\subsubsection{Pendekatan Ekstraksi Fitur untuk Efisiensi}
|
||||||
|
|
||||||
|
Menanggapi tantangan komputasi dari pendekatan \gls{cnn} murni, \textcite{shahid2022,diao2023} memperkenalkan pendekatan \gls{vmd}-\gls{ht}-\gls{cnn} yang menggabungkan teknik ekstraksi fitur berbasis \gls{vmd} dan \gls{ht} sebelum klasifikasi \gls{cnn}. Metode ini secara signifikan meningkatkan efisiensi pelatihan dan akurasi deteksi meskipun menggunakan jumlah sensor yang lebih sedikit, menunjukkan potensi optimasi melalui \textit{feature engineering} yang tepat.
|
||||||
|
|
||||||
|
\textcite{eraliev2022} mengembangkan teknik deteksi kelonggaran baut menggunakan transformasi \gls{stft} sebagai ekstraksi fitur pada motor dengan empat baut dalam kondisi operasi berbeda (800, 1000, dan 1200 rpm). Penelitian ini menghasilkan 513 fitur frekuensi dari sinyal getaran dan mengevaluasi berbagai pengklasifikasi pembelajaran mesin, menunjukkan performa memuaskan dalam deteksi dan identifikasi baut spesifik yang kehilangan \textit{preload}. Studi ini menekankan pentingnya penempatan sensor strategis dan potensi implementasi sistem pemantauan \textit{online} \parencite{pham2020}.
|
||||||
|
|
||||||
|
Penelitian yang dilakukan oleh \textcite{van2020} berfokus pada deteksi kerusakan \textit{gearbox} menggunakan sinyal getaran yang dianalisis melalui menggunakan \gls{ann}, \gls{lr}, dan \gls{svm}. Dalam studinya, data getaran dikonversi dari domain waktu ke domain frekuensi menggunakan \gls{fft}. Selanjutnya, dilakukan ekstraksi delapan ciri statistik seperti rata-rata, median, nilai maksimum, minimum, kurtosis, skewness, standar deviasi, dan rentang nilai, yang secara signifikan mengurangi dimensi data dari 800 menjadi 32 elemen per sampel tanpa kehilangan karakteristik penting sinyal. Hasil penelitian menunjukkan bahwa model \gls{ann} mampu mencapai akurasi deteksi sebesar 100\%, sedangkan \gls{lr} dan \gls{svm} menghasilkan performa yang sedikit lebih rendah. Temuan ini menegaskan bahwa penggunaan kombinasi antara transformasi \gls{fft} dan ekstraksi ciri statistik mampu meningkatkan efisiensi pemrosesan sekaligus mempertahankan tingkat akurasi yang tinggi. Meskipun, algoritma \gls{ann} paling unggul dalam mengklasifikasi fitur statistik yang didapat dari \gls{fft}, hal ini menunjukkan bahwa ekstraksi fitur berbasis \textit{fourier transform} cukup baik dalam menangkap karakteristik sinyal getaran untuk aplikasi deteksi kerusakan mekanis.
|
||||||
|
|
||||||
|
\subsection{Aplikasi Machine Learning Klasik dalam SHM}
|
||||||
|
|
||||||
|
\textcite{jang2023} memperluas penerapan \gls{ml} dalam diagnosis kegagalan mesin listrik melalui kombinasi \textit{denoising} \gls{ae} dan \gls{oc-svm}. Pendekatan ini tidak hanya meningkatkan kualitas data melalui proses \textit{denoising} otomatis, tetapi juga menghasilkan tingkat diagnosis yang lebih akurat, dengan skor F-1 lebih tinggi dibandingkan pra-pemrosesan berbasis \gls{wt}. Hal ini menunjukkan \gls{svm} cukup efektif dalam mengklasifikasikan kondisi normal dan abnormal pada mesin listrik, terutama ketika dipasangkan dengan teknik ekstraksi fitur yang tepat meskipun pada metode tersebut melibatkan \gls{ae} yang dasarnya berbasis \gls{nn}.
|
||||||
|
|
||||||
|
Penelitian oleh \textcite{vos2022} mengusulkan pendekatan deteksi anomali berbasis getaran dengan mengombinasikan \gls{lstm} dan \gls{oc-svm} dalam kerangka semi-supervised learning. Pendekatan ini dirancang untuk mengatasi keterbatasan ketersediaan data rusak dalam sistem pemantauan kondisi mesin. Dua arsitektur dikembangkan: \gls{lstm}-\gls{oc-svm} yang menghapus komponen deterministik dari sinyal sehat, dan \gls{lstm}-\gls{lstm}-\gls{oc-svm} yang menambahkan tahap kedua untuk mengisolasi komponen acak baru yang menandakan kerusakan \textit{bearing}. Hasil pengujian pada data uji ketahanan gearbox helikopter menunjukkan bahwa model dua langkah memberikan hasil klasifikasi yang lebih akurat dibandingkan arsitektur tunggal. Namun, pada data getaran helikopter Airbus yang tidak berurutan, pendekatan berbasis \gls{lstm} tidak menunjukkan peningkatan berarti, dan model \gls{oc-svm} berbasis fitur statistik yang berasal dari residual \gls{lstm} dan \textit{windowing} pada arsitektur pertama justru lebih unggul dengan akurasi 0,89. Temuan ini menegaskan bahwa kombinasi \textit{deep learning} dan metode statistik dapat meningkatkan deteksi dini kerusakan mesin, terutama ketika hanya tersedia data kondisi sehat untuk pelatihan.
|
||||||
|
|
||||||
|
\textcite{gui2017} mendemonstrasikan efektivitas \textit{Support Vector Machine} (SVM) yang dioptimalkan untuk deteksi kerusakan struktur sipil skala besar. Penelitian ini membandingkan tiga algoritma optimasi: \textit{grid-search}, \textit{particle swarm optimization}, dan \textit{genetic algorithm} untuk mengoptimalkan parameter penalti dan fungsi kernel Gaussian. Menggunakan fitur \gls{re} dari model \gls{ar}, semua metode optimasi menunjukkan peningkatan signifikan dalam sensitivitas, akurasi, dan efektivitas dibanding metode konvensional. \gls{ga}-based \gls{svm} memberikan prediksi terbaik, menekankan pentingnya pemilihan fitur yang tepat untuk meningkatkan sensitivitas deteksi kerusakan.
|
||||||
|
|
||||||
|
\textcite{katam2025} mengintegrasikan \gls{stft} dengan \gls{svm} untuk deteksi kerusakan pada \textit{cantilever beam} skala kecil, mencapai akurasi 98\%. Penelitian ini menyoroti keunggulan \gls{stft} dalam menangkap perubahan transien struktur yang krusial untuk deteksi dini, surpassing metode tradisional seperti \gls{fft} dan \gls{wt}. Pendekatan ini dirancang efektif dengan dataset terbatas, meskpun menggunakan \gls{ae} yang berbasis \gls{nn} sebagai reduksi dimensi \gls{stft} yang berdimensi tinggi sambil mempertahankan variasi frekuensi-magnitudo esensial.
|
||||||
|
|
||||||
|
% \subsection{Analisis Gap dan Posisi Penelitian}
|
||||||
|
|
||||||
|
% \subsubsection{Identifikasi Gap dalam Literatur}
|
||||||
|
|
||||||
|
% Berdasarkan tinjauan literatur yang komprehensif, beberapa gap penelitian teridentifikasi dalam bidang SHM:
|
||||||
|
|
||||||
|
% \begin{enumerate}
|
||||||
|
% \item \textbf{Trade-off Akurasi vs Efisiensi}: Meskipun pendekatan \textit{deep learning} menunjukkan akurasi tinggi, kebutuhan sumber daya komputasi yang besar membatasi implementasi praktis, terutama untuk sistem \textit{real-time} atau \textit{edge computing}.
|
||||||
|
|
||||||
|
% \item \textbf{Optimasi Jumlah Sensor}: Sebagian besar penelitian menggunakan instrumentasi penuh atau mengurangi sensor secara acak tanpa strategi sistematis untuk mempertahankan informasi kritis.
|
||||||
|
|
||||||
|
% \item \textbf{Validasi Generalisasi}: Kurangnya evaluasi kemampuan generalisasi model antar dataset independen, yang penting untuk implementasi praktis di lapangan.
|
||||||
|
|
||||||
|
% \item \textbf{Metrik Evaluasi Holistik}: Sebagian besar penelitian hanya fokus pada akurasi klasifikasi tanpa mempertimbangkan efisiensi komputasi, waktu pelatihan, dan praktikalitas implementasi.
|
||||||
|
% \end{enumerate}
|
||||||
|
|
||||||
|
% \subsubsection{Posisi dan Kontribusi Penelitian Ini}
|
||||||
|
|
||||||
|
% Penelitian ini memposisikan diri untuk mengisi gap yang teridentifikasi melalui pendekatan inovatif yang menggabungkan:
|
||||||
|
|
||||||
|
% \begin{itemize}
|
||||||
|
% \item \textbf{Strategi Sensor Terbatas Sistematis}: Penggunaan hanya sensor atas dan bawah per kolom (10 dari 30 sensor) berdasarkan analisis propagasi energi getaran dalam struktur grid.
|
||||||
|
|
||||||
|
% \item \textbf{Optimasi Multi-Objektif}: Keseimbangan antara akurasi klasifikasi dan efisiensi komputasi melalui optimasi \textit{hyperparameter} sistematis dan reduksi dimensi PCA.
|
||||||
|
|
||||||
|
% \item \textbf{Validasi Komprehensif}: Evaluasi kemampuan generalisasi melalui validasi silang antar dataset independen dan analisis metrik efisiensi yang komprehensif.
|
||||||
|
|
||||||
|
% \item \textbf{Pendekatan Praktis}: Fokus pada implementabilitas dengan menggunakan algoritma pembelajaran mesin klasik yang memerlukan sumber daya komputasi minimal namun tetap efektif.
|
||||||
|
% \end{itemize}
|
||||||
|
|
||||||
|
% Pendekatan ini menjembatani gap antara akurasi tinggi dari metode canggih dengan praktikalitas implementasi yang diperlukan untuk aplikasi SHM real-world.
|
||||||
|
|
||||||
|
% % Previous content continues...
|
||||||
|
% \indent Teknik deteksi berbasis getaran terbukti efektif dalam mengidentifikasi tanda-tanda awal anomali pada sambungan dengan menganalisis perubahan spektrum frekuensi atau energi getaran. Perubahan karakteristik getaran seperti penurunan amplitudo, pergeseran frekuensi dominan, atau pola spektral lainnya menjadi indikator keberadaan dan lokasi kerusakan. Kombinasi teknik transformasi sinyal seperti STFT dan algoritma pembelajaran mesin klasik menawarkan solusi yang efisien untuk implementasi SHM praktis.
|
||||||
|
|
||||||
|
\section{Dasar Teori}
|
||||||
|
\input{chapters/id/02_literature_review/theoritical_foundation/stft}
|
||||||
|
\input{chapters/id/02_literature_review/theoritical_foundation/role_windowing}
|
||||||
|
\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 komprehensif untuk mengimplementasi dan mengevaluasi sistem lokalisasi kerusakan yang diusulkan. Kombinasi analisis waktu-frekuensi menggunakan STFT dengan parameter optimal, reduksi dimensi PCA yang sistematis, dan klasifikasi SVM-RBF yang dioptimalkan secara multi-objektif memungkinkan tercapainya sistem monitor kesehatan struktur yang efisien, akurat, dan praktis untuk implementasi.
|
||||||
|
|
||||||
|
Integrasi metrik evaluasi holistik yang mempertimbangkan akurasi dan efisiensi komputasi memberikan framework evaluasi yang komprehensif untuk validasi pendekatan yang diusulkan. Landasan teori ini mendukung hipotesis bahwa pendekatan sensor terbatas dengan algoritma pembelajaran mesin klasik dapat mencapai performa yang kompetitif dengan metode yang lebih kompleks, sambil memberikan keunggulan dalam hal praktikalitas implementasi.
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
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 pengaplikasian secara \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}.
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
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 pengaplikasian secara \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}.
|
||||||
|
|
||||||
|
\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.
|
||||||
|
|
||||||
|
\indent Salah satu jenis kerusakan struktural yang umum dijumpai dalam sambungan mekanis adalah kelonggaran baut akibat beban dinamis berulang, seperti getaran atau kejutan. Kondisi ini dapat menyebabkan penurunan integritas struktur dan berujung pada kegagalan sistem jika tidak terdeteksi sejak dini. Oleh karena itu, deteksi kelonggaran baut secara dini telah menjadi perhatian utama dalam bidang teknik sipil, mesin, maupun dirgantara [1, 11].
|
||||||
|
|
||||||
|
\indent Teknik deteksi berbasis getaran terbukti efektif dalam mengidentifikasi tanda-tanda awal kelonggaran 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.
|
||||||
|
|
||||||
|
\indent Sejumlah penelitian telah menerapkan teknik ini dalam konteks struktur kompleks seperti sambungan multi-baut atau grid struktural. Misalnya, studi oleh Zhao et al. [10] 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 [12].
|
||||||
|
|
||||||
|
\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.
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
\subsubsection{Hann window}
|
||||||
|
Salah satu fungsi \textit{windowing} yang paling umum digunakan dalam STFT adalah \textit{Hann window}. Jendela ni adalah jenis jendela kosinus yang memberikan hasil yang baik antara resolusi frekuensi dan kebocoran spektral. \textit{Hann windowing} diskret dengan panjang $N$ didefinisikan sebagai:
|
||||||
|
|
||||||
|
\begin{equation}
|
||||||
|
w(n) = 0{.}5 \left(1 - \cos\left( \frac{2\pi n}{N - 1} \right) \right), \quad 0 \leq n \leq N - 1
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
Fungsi ini secara halus meruncingkan sinyal menjadi nol di kedua ujungnya, sehingga mengurangi \textit{side lobe} dalam domain frekuensi sambil mempertahankan lebar \textit{lobe} utama yang relatif sempit. Dibandingkan dengan jendela persegi (rectangular window) yang memiliki tepi tajam, jendela Hann mengurangi fenomena Gibbs dan sangat cocok untuk aplikasi yang melibatkan estimasi spektral.
|
||||||
|
|
||||||
|
% \subsubsection*{Alasan Penggunaan dalam STFT}
|
||||||
|
|
||||||
|
% Jendela Hann sangat efektif digunakan dalam STFT karena keseimbangannya antara pelokalan waktu dan frekuensi:
|
||||||
|
|
||||||
|
% \begin{itemize}
|
||||||
|
% \item \textbf{Lebar lobe utama}: Menentukan resolusi frekuensi. Jendela Hann memiliki lobe utama yang sedikit lebih lebar dibandingkan beberapa alternatif, yang berarti resolusinya sedikit berkurang namun kebocoran spektralnya lebih baik ditekan.
|
||||||
|
% \item \textbf{Redaman side lobe}: Side lobe pertama sekitar -31 dB, yang secara signifikan mengurangi kebocoran dibandingkan jendela persegi.
|
||||||
|
% \item \textbf{Kelembutan dalam domain waktu}: Turunan pertama yang kontinu mengurangi transisi mendadak pada tepi segmen sinyal yang dijendela.
|
||||||
|
% \end{itemize}
|
||||||
|
|
||||||
|
% Hal ini membuat jendela Hann cocok untuk menganalisis sinyal dengan konten frekuensi yang berubah secara halus, seperti sinyal getaran, suara, atau sinyal biomedis.
|
||||||
@@ -0,0 +1,133 @@
|
|||||||
|
% \subsection{Algoritma Klasifikasi}
|
||||||
|
|
||||||
|
% Penelitian ini mengevaluasi lima algoritma pemelajaran mesin klasik untuk melakukan tugas pengklasifikasian terhadap lokalisasi kerusakan. Setiap algoritma memiliki keunggulan dan limitasi masing-masing, dan performa untuk setiap algoritma dijadikan tolok ukur untuk mengidentifikasi manakah algoritma yang paling sesuai untuk setiap \textit{dataset} yang diberikan.
|
||||||
|
|
||||||
|
\subsection{Support Vector Machine (SVM)}
|
||||||
|
|
||||||
|
\subsubsection{Formulasi Matematis SVM}
|
||||||
|
|
||||||
|
Mesin vektor pendukung (SVM) adalah algoritma pemelajaran mesin terarah yang bertujuan menemukan \textit{hyperplane} optimal untuk memisahkan data ke dalam kelas-kelas yang berbeda. Untuk dataset yang dapat dipisahkan secara linear, SVM mencari \textit{hyperplane} yang memaksimalkan margin antara kelas-kelas tersebut.
|
||||||
|
|
||||||
|
Diberikan dataset pelatihan $\{(\mathbf{x}_i, y_i)\}_{i=1}^{n}$ dimana $\mathbf{x}_i \in \mathbb{R}^d$ adalah vektor fitur dan $y_i \in \{-1, +1\}$ adalah label kelas, masalah optimasi SVM dapat diformulasikan sebagai:
|
||||||
|
|
||||||
|
\begin{align}
|
||||||
|
\min_{\mathbf{w}, b} &\quad \frac{1}{2} \|\mathbf{w}\|^2 \\
|
||||||
|
\text{subject to} &\quad y_i(\mathbf{w}^T \mathbf{x}_i + b) \geq 1, \quad i = 1, 2, \ldots, n
|
||||||
|
\end{align}
|
||||||
|
|
||||||
|
dimana $\mathbf{w}$ adalah vektor bobot dan $b$ adalah bias. Untuk data yang tidak dapat dipisahkan secara linear sempurna, digunakan \textit{soft margin} dengan menambahkan variabel slack $\xi_i$:
|
||||||
|
|
||||||
|
\begin{align}
|
||||||
|
\min_{\mathbf{w}, b, \xi} &\quad \frac{1}{2} \|\mathbf{w}\|^2 + C \sum_{i=1}^{n} \xi_i \\
|
||||||
|
\text{subject to} &\quad y_i(\mathbf{w}^T \mathbf{x}_i + b) \geq 1 - \xi_i, \quad \xi_i \geq 0
|
||||||
|
\end{align}
|
||||||
|
|
||||||
|
Parameter $C$ mengontrol trade-off antara maksimalisasi margin dan minimisasi kesalahan klasifikasi.
|
||||||
|
|
||||||
|
\subsubsection{Kernel RBF (Radial Basis Function)}
|
||||||
|
|
||||||
|
Untuk menangani data non-linear, SVM menggunakan \textit{kernel trick} yang memetakan data ke ruang berdimensi lebih tinggi tanpa komputasi eksplisit. Kernel RBF yang digunakan dalam penelitian ini didefinisikan sebagai:
|
||||||
|
|
||||||
|
\begin{equation}
|
||||||
|
K(\mathbf{x}_i, \mathbf{x}_j) = \exp\left(-\gamma \|\mathbf{x}_i - \mathbf{x}_j\|^2\right)
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
dimana $\gamma > 0$ adalah parameter yang mengontrol \textit{bandwidth} kernel. Parameter ini memengaruhi kompleksitas model: nilai $\gamma$ yang kecil menghasilkan batas keputusan yang halus (model sederhana), sementara nilai besar menghasilkan batas yang lebih kompleks namun rentan terhadap \textit{overfitting}.
|
||||||
|
|
||||||
|
Fungsi keputusan SVM dengan kernel RBF menjadi:
|
||||||
|
\begin{equation}
|
||||||
|
f(\mathbf{x}) = \text{sign}\left(\sum_{i=1}^{n} \alpha_i y_i K(\mathbf{x}_i, \mathbf{x}) + b\right)
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
dimana $\alpha_i$ adalah pengali Lagrange yang diperoleh dari optimasi dual.
|
||||||
|
|
||||||
|
\subsubsection{Optimasi Hyperparameter}
|
||||||
|
|
||||||
|
Performa SVM sangat bergantung pada pemilihan parameter $C$ dan $\gamma$ yang optimal. Penelitian ini menggunakan strategi pencarian grid dua tahap:
|
||||||
|
|
||||||
|
\begin{enumerate}
|
||||||
|
\item \textbf{Coarse Grid Search}: Pencarian kasar pada rentang parameter yang luas dengan langkah eksponensial untuk mengidentifikasi region optimal.
|
||||||
|
\item \textbf{Fine Grid Search}: Pencarian halus di sekitar region optimal yang ditemukan pada tahap pertama dengan resolusi yang lebih tinggi.
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
Validasi silang stratified k-fold digunakan untuk mengevaluasi setiap kombinasi parameter dan menghindari \textit{overfitting} pada data pelatihan.
|
||||||
|
|
||||||
|
\subsection{Principal Component Analysis (PCA)}
|
||||||
|
|
||||||
|
\subsubsection{Formulasi Matematis PCA}
|
||||||
|
|
||||||
|
PCA adalah teknik reduksi dimensi yang mentransformasi data ke ruang berdimensi lebih rendah sambil mempertahankan varians maksimal. Diberikan matriks data $\mathbf{X} \in \mathbb{R}^{n \times d}$ dengan $n$ sampel dan $d$ fitur, PCA mencari proyeksi linear $\mathbf{Y} = \mathbf{X}\mathbf{W}$ dimana $\mathbf{W} \in \mathbb{R}^{d \times k}$ adalah matriks transformasi dan $k < d$ adalah dimensi target.
|
||||||
|
|
||||||
|
Langkah-langkah PCA:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Sentralisasi data: $\mathbf{X}_{centered} = \mathbf{X} - \boldsymbol{\mu}$
|
||||||
|
\item Hitung matriks kovarians: $\mathbf{C} = \frac{1}{n-1}\mathbf{X}_{centered}^T\mathbf{X}_{centered}$
|
||||||
|
\item Dekomposisi eigen: $\mathbf{C} = \mathbf{V}\mathbf{\Lambda}\mathbf{V}^T$
|
||||||
|
\item Pilih $k$ eigenvector dengan eigenvalue terbesar sebagai komponen utama
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
\subsubsection{Kriteria Pemilihan Komponen}
|
||||||
|
|
||||||
|
Jumlah komponen PCA optimal dipilih berdasarkan:
|
||||||
|
\begin{itemize}
|
||||||
|
\item \textbf{Explained Variance Ratio}: Mempertahankan minimal 95\% varians total
|
||||||
|
\item \textbf{Elbow Method}: Mengidentifikasi titik diminishing returns dalam explained variance
|
||||||
|
\item \textbf{Cross-validation Performance}: Evaluasi performa klasifikasi pada berbagai jumlah komponen
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\subsection{Metrik Evaluasi}
|
||||||
|
|
||||||
|
\subsubsection{Metrik Klasifikasi}
|
||||||
|
|
||||||
|
Evaluasi performa model menggunakan metrik standar:
|
||||||
|
\begin{itemize}
|
||||||
|
\item \textbf{Akurasi}: $\text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN}$
|
||||||
|
\item \textbf{Precision}: $\text{Precision} = \frac{TP}{TP + FP}$
|
||||||
|
\item \textbf{Recall}: $\text{Recall} = \frac{TP}{TP + FN}$
|
||||||
|
\item \textbf{F1-Score}: $\text{F1} = 2 \cdot \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}}$
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\subsubsection{Metrik Efisiensi}
|
||||||
|
|
||||||
|
Penelitian ini memperkenalkan metrik efisiensi yang mempertimbangkan trade-off antara akurasi dan waktu komputasi:
|
||||||
|
\begin{equation}
|
||||||
|
\text{Efficiency Score} = \frac{\text{Accuracy}^2}{\text{Training Time (normalized)}}
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
Metrik ini memberikan skor tinggi untuk model yang mencapai akurasi tinggi dengan waktu pelatihan minimal.
|
||||||
|
|
||||||
|
% \subsubsection{K-Nearest Neighbors (KNN)}
|
||||||
|
|
||||||
|
% KNN merupakan sebuah algoritma pemelajaran non-parametrik, berbasis contoh. Algoritma ini mengklasifikasi titik data yang berbasis pada pungutan suara terbanyak dari tetangga terdekat $k$ pada ruang fitur. Meskipun dinilai sederhana, KNN dapat dinilai efektif ketika datanya terdistribusi dengan baik dan batasan-batasan pada kelasnya merata.
|
||||||
|
|
||||||
|
% Performa algoritma ini sensitif pada pemilihan $k$ dan jarak metriknya. Untuk data dengan dimensi tinggi seperti fitur STFT, mungkin diperlukan optimalisasi atau penskalaan dimensi.
|
||||||
|
|
||||||
|
% \subsubsection{Decision Tree (DT)}
|
||||||
|
|
||||||
|
% Decision Tree adalah algoritma pemelajaran terarah (\textit{supervised learning}) berbasis struktur pohon, di mana setiap \textit{node} internal mewakili suatu keputusan berdasarkan atribut tertentu, setiap cabang mewakili hasil dari keputusan tersebut, dan setiap daun (leaf node) mewakili label kelas. Algoritma ini secara rekursif membagi data ke dalam subset berdasarkan fitur yang memberikan informasi paling tinggi, seperti diukur dengan Gini index atau entropi (information gain).
|
||||||
|
|
||||||
|
% Kelebihan dari Decision Tree adalah interpretabilitasnya yang tinggi dan kemampuannya menangani data numerik maupun kategorikal. Namun, pohon keputusan rentan terhadap \textit{overfitting}, terutama jika kedalaman pohon tidak dikontrol.
|
||||||
|
|
||||||
|
% \subsubsection{Random Forest (RF)}
|
||||||
|
|
||||||
|
% Random Forest adalah metode ensemble yang terdiri dari banyak Decision Tree yang dilatih pada subset data dan subset fitur yang diacak. Setiap pohon dalam hutan memberikan prediksi, dan hasil akhir ditentukan melalui agregasi (misalnya, voting mayoritas untuk klasifikasi).
|
||||||
|
|
||||||
|
% Dengan menggabungkan banyak pohon, Random Forest mengurangi varian model dan meningkatkan generalisasi. Teknik ini efektif untuk dataset yang kompleks dan sangat cocok untuk menghindari \textit{overfitting} yang umum terjadi pada satu pohon keputusan tunggal.
|
||||||
|
|
||||||
|
% \subsubsection{Bagged Trees (BT)}
|
||||||
|
|
||||||
|
% \textit{Bagged Trees} atau \textit{Bootstrap Aggregated Trees} adalah pendekatan \textit{ensemble} yang mirip dengan Random Forest, namun perbedaannya terletak pada pemilihan fitur. Dalam \textit{Bagged Trees}, pohon-pohon dibangun dari sampel acak \textit{bootstrap} dari dataset pelatihan, tetapi tanpa pengacakan subset fitur seperti pada Random Forest.
|
||||||
|
|
||||||
|
% \subsubsection{XGBoost (Extreme Gradient Boosting)}
|
||||||
|
|
||||||
|
% XGBoost adalah algoritma pemelajaran mesin berbasis \textit{gradient boosting} yang dirancang untuk efisiensi dan performa tinggi. Algoritma ini bekerja dengan membangun model secara bertahap, di mana setiap pohon selanjutnya mencoba memperbaiki kesalahan dari pohon sebelumnya dengan mengoptimasi fungsi kerugian (\textit{loss function}) menggunakan metode gradien.
|
||||||
|
|
||||||
|
% XGBoost menggabungkan beberapa teknik seperti regularisasi $L1$ dan $L2$, pemangkasan pohon (\textit{pruning}), dan pemrosesan paralel, sehingga menghindari terjadinya \textit{overfitting} dan unggul dalam akurasi prediksi dibanding metode pohon lainnya. Algoritma ini sangat populer dalam kompetisi data karena kemampuannya menangani data besar, fitur multivariat, dan klasifikasi multi-kelas secara efisien.
|
||||||
|
|
||||||
|
% \subsubsection{Linear Discriminant Analysis (LDA)}
|
||||||
|
|
||||||
|
% Linear Discriminant Analysis (LDA) adalah teknik klasifikasi dan reduksi dimensi yang mengasumsikan bahwa data berasal dari distribusi normal multivariat dan memiliki kovarians yang seragam untuk setiap kelas. LDA bertujuan untuk memproyeksikan data ke ruang berdimensi lebih rendah yang memaksimalkan pemisahan antar kelas (rasio varians antar kelas terhadap varians dalam kelas).
|
||||||
|
|
||||||
|
% LDA sangat cocok ketika distribusi data mendekati normal dan jumlah fitur tidak terlalu besar dibanding jumlah sampel. Selain sebagai klasifikator, LDA juga sering digunakan sebagai teknik prapemrosesan untuk ekstraksi fitur sebelum digunakan dalam algoritma lain.
|
||||||
|
|
||||||
|
% \bigskip
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
\subsubsection{Fungsi \textit{Windowing}}
|
||||||
|
Fungsi jendela $w(n)$ berfungsi untuk melokalisasi sinyal dalam domain waktu, dengan meruncingkan sinyal di kedua ujungnya guna meminimalkan diskontinuitas. Hal ini sangat penting untuk mengurangi kebocoran spektral—sebuah fenomena di mana energi sinyal menyebar ke bin frekuensi di sekitarnya akibat pemotongan sinyal secara tiba-tiba. Pemilihan jenis jendela sangat memengaruhi resolusi dan akurasi representasi waktu-frekuensi.
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
\subsection{Short-Time Fourier Transform (STFT)}
|
||||||
|
|
||||||
|
\subsubsection{Formulasi Matematis STFT}
|
||||||
|
|
||||||
|
Short-Time Fourier Transform (STFT) adalah teknik fundamental untuk menganalisis sinyal non-stasioner dengan menyediakan representasi waktu-frekuensi yang simultan. Berbeda dengan transformasi Fourier konvensional yang hanya memberikan informasi domain frekuensi global, STFT menerapkan transformasi Fourier pada segmen-segmen sinyal pendek yang bertumpang tindih.
|
||||||
|
|
||||||
|
Secara matematis, STFT dari sinyal diskrit $x[n]$ didefinisikan \textcite{oppenheim2010} sebagai:
|
||||||
|
\begin{equation}
|
||||||
|
X(m, \omega) = \sum_{n=-\infty}^{\infty} x[n] \cdot w[n - m] \cdot e^{-j \omega n}
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
dimana:
|
||||||
|
\begin{itemize}
|
||||||
|
\item $x[n]$ adalah sinyal input diskrit
|
||||||
|
\item $w[n]$ adalah fungsi windowing
|
||||||
|
\item $m$ adalah indeks waktu (hop)
|
||||||
|
\item $\omega$ adalah frekuensi angular diskrit
|
||||||
|
\item $X(m, \omega)$ adalah koefisien STFT kompleks
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\subsubsection{Parameter STFT dan Trade-off Resolusi}
|
||||||
|
|
||||||
|
Kualitas representasi waktu-frekuensi STFT ditentukan oleh pemilihan parameter window dan hop size:
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item \textbf{Window Size ($N$)}: Menentukan resolusi frekuensi. Window yang lebih panjang memberikan resolusi frekuensi yang lebih baik namun resolusi waktu yang lebih buruk.
|
||||||
|
\item \textbf{Hop Size ($H$)}: Jarak antar window yang berurutan. Hop size yang lebih kecil memberikan resolusi waktu yang lebih baik namun meningkatkan redundansi dan beban komputasi.
|
||||||
|
\item \textbf{Overlap}: Biasanya dipilih 50-75\% untuk mencegah kehilangan informasi di transisi antar window.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\subsubsection{Spektrogram dan Ekstraksi Fitur}
|
||||||
|
|
||||||
|
Spektrogram adalah representasi visual STFT yang menunjukkan distribusi energi sinyal dalam domain waktu-frekuensi:
|
||||||
|
\begin{equation}
|
||||||
|
S(m, \omega) = |X(m, \omega)|^2
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
Untuk aplikasi pembelajaran mesin, spektrogram dapat digunakan langsung sebagai fitur 2D atau dikonversi menjadi vektor fitur 1D melalui:
|
||||||
|
\begin{itemize}
|
||||||
|
\item \textbf{Flattening}: Mengubah matriks spektrogram menjadi vektor fitur
|
||||||
|
\item \textbf{Statistical Features}: Ekstraksi statistik seperti mean, variance, skewness, kurtosis per bin frekuensi
|
||||||
|
\item \textbf{Magnitude Spectrum}: Menggunakan hanya magnitudo tanpa informasi fase
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\subsubsection{Keunggulan STFT untuk Deteksi Kerusakan}
|
||||||
|
|
||||||
|
STFT sangat sesuai untuk deteksi kerusakan struktur karena:
|
||||||
|
|
||||||
|
\begin{enumerate}
|
||||||
|
\item \textbf{Analisis Transien}: Mampu menangkap perubahan frekuensi lokal yang disebabkan oleh kerusakan
|
||||||
|
\item \textbf{Deteksi Harmonik}: Mengidentifikasi komponen harmonik baru yang muncul akibat kelonggaran baut
|
||||||
|
\item \textbf{Temporal Resolution}: Mempertahankan informasi waktu terjadinya perubahan spektral
|
||||||
|
\item \textbf{Robustness}: Relatif tahan terhadap noise dibanding analisis time-domain murni
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
Dalam konteks kelonggaran baut, STFT dapat mendeteksi:
|
||||||
|
\begin{itemize}
|
||||||
|
\item Pergeseran frekuensi natural akibat perubahan kekakuan sambungan
|
||||||
|
\item Munculnya frekuensi beat akibat coupling yang berubah
|
||||||
|
\item Modulasi amplitudo yang mengindikasikan kontak intermiten
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\subsubsection{Implementasi STFT untuk Dataset QUGS}
|
||||||
|
|
||||||
|
Dalam penelitian ini, parameter STFT dioptimalkan untuk karakteristik data QUGS:
|
||||||
|
\begin{itemize}
|
||||||
|
\item \textbf{Window Function}: Hann window untuk meminimalkan spectral leakage
|
||||||
|
\item \textbf{Window Size}: 1024 sampel (≈1 detik pada 1024 Hz sampling rate)
|
||||||
|
\item \textbf{Hop Size}: 512 sampel (50\% overlap)
|
||||||
|
\item \textbf{Frequency Bins}: 513 bin frekuensi (0 - 512 Hz)
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
Konfigurasi ini menghasilkan spektrogram berukuran 513×513 yang kemudian di-flatten menjadi vektor fitur 263,169 dimensi untuk input ke algoritma pembelajaran mesin.
|
||||||
128
latex/chapters/id/03_methodology/index.tex
Normal file
128
latex/chapters/id/03_methodology/index.tex
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
\chapter{Metode Penelitian}
|
||||||
|
\section{Benda Uji}
|
||||||
|
\input{chapters/id/03_methodology/materials}
|
||||||
|
|
||||||
|
\section{Alat}
|
||||||
|
\input{chapters/id/03_methodology/tools}
|
||||||
|
|
||||||
|
\clearpage
|
||||||
|
|
||||||
|
\section{Tahapan Penelitian}
|
||||||
|
\input{chapters/id/03_methodology/steps/index}
|
||||||
|
|
||||||
|
\section{Akuisisi Data}
|
||||||
|
\input{chapters/id/03_methodology/steps/data_acquisition}
|
||||||
|
|
||||||
|
\section{Ekstraksi Fitur}
|
||||||
|
\input{chapters/id/03_methodology/steps/feature_extraction}
|
||||||
|
|
||||||
|
\section{Analisis Data}
|
||||||
|
Sebelum pelatihan model dan optimasi \textit{hyperparameter}, dilakukan analisis eksplorasi pada data untuk memahami karakteristik dan struktur fitur-fitur yang telah diproses. Pada langkah ini, reduksi dimensi dengan \gls{pca} digunakan untuk mengevaluasi seberapa besar varian yang dapat dijelaskan oleh setiap komponen utama menggunakan diagram \textit{scree}. Kemudian visualisasi data dilakukan dengan teknik reduksi dimensi non-linear \gls{tsne} \parencite{JMLR:v9:vandermaaten08a} dan \gls{pacmap} \parencite{JMLR:v22:20-1061} untuk mengamati ruang fitur (ruang berdimensi tinggi) pada ruang dua dimensi.
|
||||||
|
|
||||||
|
Visualisasi non-linear ini bertujuan untuk menilai seberapa baik fitur-fitur getaran yang diekstraksi dapat merepresentasikan kondisi struktur yang berbeda dan mengidentifikasi rentang parameter yang sesuai untuk optimasi model selanjutnya. Pemahaman ini penting dalam merancang strategi pencarian \textit{grid} yang efisien, sehingga dapat menyeimbangkan kompleksitas model dengan interpretabilitas, terutama dalam menentukan jumlah komponen utama \gls{pca} yang optimal untuk dipertahankan dalam pipeline klasifikasi.
|
||||||
|
|
||||||
|
\section{Pengembangan Model}
|
||||||
|
Model klasifikasi \gls{svm} dengan kernel \gls{rbf} digunakan untuk mengklasifikasikan lokasi kerusakan struktur. Model ini dipilih karena kemampuannya dalam menangani data non-linear dan efektivitasnya dalam berbagai aplikasi klasifikasi dengan bantuan kernel \gls{rbf} yang memungkinkan pemetaan data ke ruang fitur berdimensi lebih tinggi, sehingga memudahkan pemisahan kelas yang kompleks.
|
||||||
|
|
||||||
|
\section{Optimasi Hyperparameter}
|
||||||
|
Model \gls{svm} memiliki beberapa \textit{hyperparameter} penting yang perlu dioptimalkan untuk mencapai kinerja terbaik, yaitu parameter regulasi $C$ dan parameter kernel $\gamma$. Parameter $C$ mengontrol keseimbangan antara memaksimalkan margin dan meminimalkan kesalahan klasifikasi pada data pelatihan, sedangkan parameter $\gamma$ menentukan jangkauan pengaruh dari setiap titik pelatihan, dengan nilai kecil menghasilkan pengaruh yang luas dan nilai besar menghasilkan pengaruh yang sempit.
|
||||||
|
|
||||||
|
Dalam penelitian ini, optimasi \textit{hyperparameter} dilakukan melalui pencarian \textit{grid} dengan dua tahap: \textit{coarse grid-search} dan \textit{fine grid-search}. Nilai $C$ dan $\gamma$ yang digunakan mengikuti rentang logaritma basis 2 yang direkomendasikan oleh \textcite{Hsu2009APG, CC01a} dan diadopsi oleh beberapa penelitian populer sebelumnya \textcite{hsu2002, JMLR:v18:16-174} dengan penyesuaian interval untuk mengurangi komputasi yang dibutuhkan yang semula $C \in \{ 2^{-5}, 2^{-3}, \dots, 2^{15} \}$ dan $\gamma \in \{ 2^{-15}, 2^{-13}, \dots, 2^{3} \}$ menjadi $C \in \{ 2^{-5}, 2^{0}, 2^{5}, 2^{10}, 2^{15} \}$ dan $\gamma \in \{ 2^{-15}, 2^{-10}, 2^{-5}, 2^{0}, 2^{5} \}$.
|
||||||
|
|
||||||
|
% Before using another Machine Learning algorithm, it's beneficial to apply a dimensionality reduction technique to your training data. This can lead to faster processing, reduced storage requirements, and potentially improved performance.
|
||||||
|
|
||||||
|
Reduksi dimensi ditambahkan sebagai parameter ketiga dalam pencarian \textit{grid} untuk menentukan jumlah komponen utama \gls{pca} guna mengoptimasi waktu komputasi, performa \textit{inference}, kompleksitas model, dan ukuran model \parencite{geron2019}. Nilai-nilai komponen yang diuji adalah $n_{components} \in \{512, 256, 128, 64, 32, 16, 8, 4, 2\}$. Rentang nilai tetap ini dipilih dibandingkan rentang \textit{fractional threshold} $(0 < x < 1)$ variansi kumulatif untuk memastikan konsistensi, meningkatkan reprodusibilitas, dan memudahkan interpretasi jumlah komponen utama yang dipilih di setiap iterasi pencarian \textit{grid}.
|
||||||
|
|
||||||
|
Kemudian, \textit{cross-validation} dengan skema \textit{stratified k-fold} digunakan untuk menilai kinerja model pada setiap kombinasi \textit{hyperparameter}. Skema ini memastikan bahwa setiap lipatan memiliki proporsi kelas yang seimbang, sehingga mengurangi bias dalam penilaian model \parencite{Kohavi1995ASO}. Nilai $k$ yang digunakan pada penelitian ini adalah 5 yang berarti data pelatihan dibagi menjadi 5 bagian: 4 bagian digunakan untuk pelatihan dan 1 bagian untuk validasi secara bergantian. Nilai ini dianggap sudah cukup untuk memastikan validitas hasil melihat jumlah sampel yang digunakan \parencite{JMLR:v18:16-174}. Proses ini diulang untuk seluruh kombinasi \textit{hyperparameter} yang berjumlah 200 kombinasi pada tahap \textit{coarse grid-search}, sehingga total pelatihan model yang dilakukan adalah 1000 kali.
|
||||||
|
% table showing the grid search parameters
|
||||||
|
Tabel \ref{tab:grid_search_parameters} merangkum parameter-parameter yang digunakan dalam pencarian \textit{grid} tahap pertama (\textit{coarse grid-search}).
|
||||||
|
\begin{table}[H]
|
||||||
|
\centering
|
||||||
|
\caption{Parameter-parameter dalam pencarian \textit{grid} tahap pertama (\textit{coarse grid-search}) untuk optimasi \textit{hyperparameter} model \gls{svm}.}
|
||||||
|
\label{tab:grid_search_parameters}
|
||||||
|
\begin{tabular}{lll}
|
||||||
|
\toprule
|
||||||
|
Parameter & Nilai yang Diuji & Jumlah Nilai \\
|
||||||
|
\midrule
|
||||||
|
% kernel
|
||||||
|
kernel & \gls{rbf} & 1 \\
|
||||||
|
% regularization parameter
|
||||||
|
$C$ & $\left\{ 2^{\,x} \,\middle|\, x \in \{-5, 0, 5, 10, 15\} \right\}$ & 5 \\
|
||||||
|
$\gamma$ & $\left\{ 2^{\,x} \,\middle|\, x \in \{-15, -10, -5, 0, 5\} \right\}$ & 5 \\
|
||||||
|
$n_{components}$ & $\{512, 256, 128, 64, 32, 16, 8, 4\}$ & 8 \\
|
||||||
|
\midrule
|
||||||
|
Total Kombinasi & & 200 \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
% \section{Strategi Pembagian Data}
|
||||||
|
% Dataset yang telah diekstraksi fitur dan diberi label kemudian dibagi menjadi dua bagian untuk menilai kemampuan generalisasi model:
|
||||||
|
% \begin{enumerate}
|
||||||
|
% \item \textbf{Dataset A}: Digunakan untuk pelatihan model dan validasi silang selama optimasi \textit{hyperparameter}
|
||||||
|
% \item \textbf{Dataset B}: Disimpan sebagai data uji independen untuk evaluasi akhir model yang telah dioptimalkan
|
||||||
|
% \end{enumerate}
|
||||||
|
|
||||||
|
% Pembagian ini dilakukan secara \textit{stratified} untuk memastikan proporsi setiap kelas kerusakan ($d_0$ hingga $d_6$) terjaga pada kedua dataset. Pendekatan ini memungkinkan evaluasi yang lebih objektif terhadap kemampuan model dalam mengklasifikasikan kondisi struktur yang belum pernah dilihat sebelumnya.
|
||||||
|
|
||||||
|
\section{Strategi Optimasi \textit{Hyperparameter} Dua Tahap}
|
||||||
|
Untuk meningkatkan efisiensi pencarian parameter optimal, optimasi dilakukan dalam dua tahap:
|
||||||
|
|
||||||
|
\subsection{\textit{Coarse Grid-Search}}
|
||||||
|
Tahap pertama menggunakan rentang parameter yang luas dengan interval yang lebih besar untuk mengidentifikasi wilayah parameter yang menjanjikan. Parameter yang dioptimalkan telah dijelaskan pada Tabel~\ref{tab:grid_search_parameters}.
|
||||||
|
|
||||||
|
\subsection{\textit{Fine Grid-Search}}
|
||||||
|
Berdasarkan hasil \textit{coarse grid-search}, dilakukan pencarian lebih detail di sekitar parameter terbaik dengan interval yang lebih kecil. Rentang parameter pada tahap ini disesuaikan dengan:
|
||||||
|
\begin{itemize}
|
||||||
|
\item Nilai $C$ dan $\gamma$ terbaik dari tahap pertama menjadi pusat pencarian
|
||||||
|
\item Interval dikurangi menjadi 0.5 dalam skala logaritma basis 2
|
||||||
|
\item Jumlah komponen PCA tetap menggunakan nilai optimal dari tahap pertama
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\section{Metrik Evaluasi}
|
||||||
|
\subsection{Metrik Klasifikasi Standar}
|
||||||
|
Kinerja model dievaluasi menggunakan beberapa metrik standar:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item \textbf{Akurasi}: Proporsi prediksi yang benar dari total prediksi
|
||||||
|
\item \textbf{Precision}: Proporsi prediksi positif yang benar untuk setiap kelas
|
||||||
|
\item \textbf{Recall}: Proporsi sampel positif yang berhasil diidentifikasi untuk setiap kelas
|
||||||
|
\item \textbf{F1-score}: Rata-rata harmonik antara precision dan recall
|
||||||
|
\item \textbf{Confusion Matrix}: Matriks yang menunjukkan distribusi prediksi vs label sebenarnya
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
\subsection{Metrik Efisiensi}
|
||||||
|
Untuk menilai trade-off antara akurasi dan kompleksitas komputasi, didefinisikan metrik efisiensi:
|
||||||
|
\begin{equation}
|
||||||
|
E_i = \frac{S_i}{T_i},
|
||||||
|
\end{equation}
|
||||||
|
dengan:
|
||||||
|
\begin{itemize}
|
||||||
|
\item $S_i$ = rata-rata skor akurasi hasil 5-\textit{fold cross-validation})
|
||||||
|
\item $T_i$ = rata-rata waktu pelatihan per iterasi (dalam detik)
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
Metrik ini memungkinkan identifikasi konfigurasi model yang memberikan keseimbangan optimal antara performa dan efisiensi komputasi.
|
||||||
|
|
||||||
|
\section{Pemilihan Model \textit{Baseline}}
|
||||||
|
Dari hasil \textit{coarse grid-search}, dipilih konfigurasi model \textit{baseline} berdasarkan kriteria gabungan:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Akurasi validasi silang yang tinggi
|
||||||
|
\item Metrik efisiensi ($E_i$) yang optimal
|
||||||
|
\item Waktu pelatihan yang reasonable untuk implementasi praktis
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
Model \textit{baseline} ini kemudian dievaluasi pada data uji independen untuk mengukur performa awal sebelum optimasi lanjutan melalui \textit{fine grid-search}.
|
||||||
|
|
||||||
|
\section{Proses \textit{Inference} dan Visualisasi}
|
||||||
|
Setelah model dilatih dan dioptimalkan, dilakukan proses \textit{inference} pada data uji untuk:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Menghasilkan prediksi probabilitas untuk setiap kelas kerusakan
|
||||||
|
\item Memvisualisasikan distribusi probabilitas dalam bentuk \textit{heatmap} struktur
|
||||||
|
\item Menganalisis pola kesalahan klasifikasi melalui \textit{confusion matrix}
|
||||||
|
\item Menilai kemampuan deteksi kerusakan pada lokasi spesifik
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
Visualisasi \textit{heatmap} dilakukan dengan memetakan probabilitas prediksi kembali ke struktur grid asli, sehingga memberikan interpretasi spasial terhadap hasil klasifikasi.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
39
latex/chapters/id/03_methodology/materials.tex
Normal file
39
latex/chapters/id/03_methodology/materials.tex
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
Penelitian ini menggunakan data sekunder dari \textcite{abdeljaber2017}, yang tersedia secara publik dan diperoleh melalui eksperimen menggunakan \textit{Qatar University Grandstand Simulator}. Adapun rincian data yang digunakan adalah sebagai berikut:
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item Dataset terdiri atas rekaman respons getaran dari struktur rangka baja berukuran $6 \times 5$ yang dilengkapi dengan 30 akselerometer.
|
||||||
|
\item Setiap skenario dalam dataset mencakup satu kasus struktur tanpa kerusakan (healthy) dan 30 kasus kerusakan tunggal pada masing-masing sambungan (\textit{single-joint damage}).
|
||||||
|
\item Sinyal getaran direkam dengan frekuensi pengambilan sampel sebesar 1024 Hz selama durasi 256 detik untuk tiap skenario.
|
||||||
|
\item Kerusakan struktur disimulasikan dengan cara mengendurkan baut pada sambungan-sambungan tertentu.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
Struktur dataset yang digunakan ditampilkan pada Gambar~\ref{fig:specimen-photo}.
|
||||||
|
|
||||||
|
% \begin{figure}[!ht]
|
||||||
|
% \centering
|
||||||
|
% \includegraphics[width=0.5\textwidth]{chapters/img/original_data.png}
|
||||||
|
% \caption{Overview of the original data used from Abdeljaber et al. (2017)}
|
||||||
|
% \label{fig:original-data}
|
||||||
|
% \end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[ht]
|
||||||
|
\centering
|
||||||
|
\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}
|
||||||
64
latex/chapters/id/03_methodology/steps/data_acquisition.tex
Normal file
64
latex/chapters/id/03_methodology/steps/data_acquisition.tex
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
Dataset yang digunakan dalam penelitian ini bersumber dari basis data getaran yang dipublikasi oleh \textcite{abdeljaber2017}.
|
||||||
|
|
||||||
|
Dataset terdiri dari dua folder:
|
||||||
|
\begin{itemize}
|
||||||
|
\item \texttt{Dataset A} – digunakan untuk pelatihan (training)
|
||||||
|
\item \texttt{Dataset B} – digunakan untuk pengujian (testing)
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
Setiap dataset berisi 31 berkas yang merepresentasikan 31 kasus:
|
||||||
|
\begin{itemize}
|
||||||
|
\item Berkas pertama: struktur tanpa kerusakan ($\mathbf{U}$)
|
||||||
|
\item Berkas kedua hingga ke-31: kerusakan pada sambungan 1–30 ($\mathbf{D}^{(n)} , n = 1, \dots, 30$)
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
Sepuluh baris pertama dari setiap berkas berisi metadata yang menjelaskan konfigurasi pengujian, laju sampling, dan informasi kanal. Oleh karena itu, data deret waktu percepatan dimulai dari baris ke-11 yang berisi 31 kolom:
|
||||||
|
\begin{itemize}
|
||||||
|
\item \textbf{Kolom 1:} Waktu dalam detik
|
||||||
|
\item \textbf{Kolom 2–31:} Magnitudo percepatan dari \textit{joint} 1 hingga 30
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
Setiap sinyal di-\textit{sampling} pada frekuensi $f_s = 1024$ Hz dan direkam selama $t = 256$ detik, sehingga menghasilkan:
|
||||||
|
\begin{align}
|
||||||
|
\gls{not:signal} &= \gls{not:sampling_freq} \cdot \gls{not:time_length} \nonumber \\
|
||||||
|
&= 1024 \cdot 256 \nonumber \\
|
||||||
|
&= 262144 \quad \text{sampel per kanal} \label{eq:sample}
|
||||||
|
\end{align}
|
||||||
|
|
||||||
|
Dengan demikian, setiap berkas dapat direpresentasikan sebagai matriks:
|
||||||
|
\begin{equation}
|
||||||
|
\mathbf{D}^{(n)} \in \mathbb{R}^{262144 \times 30}, \quad n = 1, \dots, 30
|
||||||
|
\end{equation}
|
||||||
|
di mana $n$ mengacu pada indeks kasus (1–30 = kerusakan pada \textit{joint} ke-$n$) berisi rekaman getaran untuk seluruh tiga puluh \textit{joint}, dan berkas tanpa kerusakan (\textit{undamaged}) pada seluruh \textit{joint} direpresentasikan dengan matriks:
|
||||||
|
\begin{equation}
|
||||||
|
\mathbf{U} \in \mathbb{R}^{262144 \times 30}
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
|
||||||
|
Kemudian \textit{dataset} A dapat direpresentasikan sebagai matriks:
|
||||||
|
\begin{equation}
|
||||||
|
\gls{not:dataset_A}
|
||||||
|
=
|
||||||
|
\Bigl\{
|
||||||
|
\mathbf{U} \in \mathbb{R}^{262144 \times 30}
|
||||||
|
\Bigr\}
|
||||||
|
\;\cup\;
|
||||||
|
\Bigl\{
|
||||||
|
\mathbf{D}^{(n)} \in \mathbb{R}^{262144 \times 30}
|
||||||
|
\;\bigm|\;
|
||||||
|
n = 1, \dots, 30
|
||||||
|
\Bigr\}.
|
||||||
|
\end{equation}
|
||||||
|
\begin{equation}
|
||||||
|
\gls{not:dataset_B}
|
||||||
|
=
|
||||||
|
\Bigl\{
|
||||||
|
\mathbf{U} \in \mathbb{R}^{262144 \times 30}
|
||||||
|
\Bigr\}
|
||||||
|
\;\cup\;
|
||||||
|
\Bigl\{
|
||||||
|
\mathbf{D}^{(n)} \in \mathbb{R}^{262144 \times 30}
|
||||||
|
\;\bigm|\;
|
||||||
|
n = 1, \dots, 30
|
||||||
|
\Bigr\}.
|
||||||
|
\end{equation}
|
||||||
402
latex/chapters/id/03_methodology/steps/feature_extraction.tex
Normal file
402
latex/chapters/id/03_methodology/steps/feature_extraction.tex
Normal file
@@ -0,0 +1,402 @@
|
|||||||
|
Sebelum melakukan ekstraksi fitur menggunakan \gls{not:calT}, persiapan data dilakukan agar tujuan penelitian dapat tercapai.
|
||||||
|
|
||||||
|
\subsection{Grid, Kode \textit{Joint}, dan Nama File}
|
||||||
|
|
||||||
|
Setiap berkas pada \textit{dataset} merekam respons getaran dari seluruh tiga puluh \textit{joint} yang dipasangi sensor akselerometer.
|
||||||
|
Berkas tanpa kerusakan direpresentasikan dengan matriks \gls{not:U}, sedangkan berkas dengan kerusakan pada \textit{joint} ke-$n$ dinotasikan sebagai \gls{not:Dn} untuk $n = 1, \dots, 30$.
|
||||||
|
|
||||||
|
Setiap kolom pada matriks \gls{not:U} maupun \gls{not:Dn} merepresentasikan sinyal percepatan dari satu sensor (satu \textit{joint}), sehingga kolom ke-$j$ dapat ditulis sebagai vektor:
|
||||||
|
\begin{equation}
|
||||||
|
\gls{not:aj} =
|
||||||
|
\begin{bmatrix}
|
||||||
|
a_{1}^{(n,j)} \\
|
||||||
|
a_{2}^{(n,j)} \\
|
||||||
|
\vdots \\
|
||||||
|
a_{262144}^{(n,j)}
|
||||||
|
\end{bmatrix}
|
||||||
|
\in \gls{not:R}^{262144},
|
||||||
|
\quad
|
||||||
|
j = 1, \dots, 30,
|
||||||
|
\quad
|
||||||
|
n = 0, \dots, 30.
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
Vektor \gls{not:aj} menunjukkan deret waktu percepatan yang diukur oleh sensor pada \textit{joint} ke-$j$ untuk kasus ke-$n$.
|
||||||
|
Dengan demikian, satu berkas \gls{not:Dn} dapat ditulis sebagai himpunan dari seluruh vektor kolomnya:
|
||||||
|
\begin{equation}
|
||||||
|
\gls{not:Dn} = \bigl\{\,\gls{not:aj}\,\bigr\}.
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
Untuk kasus tanpa kerusakan, \gls{not:U} dapat dinotasikan secara serupa dengan $n=0$ secara tunggal:
|
||||||
|
\begin{equation}
|
||||||
|
\gls{not:U} = \bigl\{\,\gls{not:aj}\,\bigr\}.
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
Pada setiap kasus kerusakan, \textit{joint} yang rusak berkorespondensi langsung dengan indeks berkas, yaitu:
|
||||||
|
\begin{equation}
|
||||||
|
\text{Kerusakan pada } \gls{not:Dn} \text{ terjadi di } \gls{not:aj},
|
||||||
|
\quad n = 1, \dots, 30.
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
% Secara ringkas, \textit{dataset} dapat dinyatakan sebagai himpunan seluruh sinyal akselerometer:
|
||||||
|
% \begin{equation}
|
||||||
|
% \mathcal{A}
|
||||||
|
% =
|
||||||
|
% \Bigl\{
|
||||||
|
% \mathbf{a}_{j}^{(n)} \in \mathbb{R}^{262144}
|
||||||
|
% \;\bigm|\;
|
||||||
|
% j = 1,\dots,30; \;
|
||||||
|
% n = 0,\dots,30
|
||||||
|
% \Bigr\}.
|
||||||
|
% \end{equation}
|
||||||
|
|
||||||
|
% Hubungan antara \textit{joint} ($j$), indeks berkas ($n$), dan kondisi kerusakan inilah yang menjadi dasar pembentukan \textit{grid} sensor serta penentuan label kelas kerusakan pada bagian selanjutnya (\autoref{sec:pemetaan-sensor}).
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Kelas Kerusakan}
|
||||||
|
\label{sec:kelas-kerusakan}
|
||||||
|
|
||||||
|
Enam kelas pertama (\gls{not:di}–\gls{not:di}) merepresentasikan kondisi struktur dengan kerusakan pada lima \textit{joint} berturut-turut.
|
||||||
|
Setiap kelas \gls{not:di} berisi lima sinyal percepatan satu dimensi \gls{not:aj},
|
||||||
|
masing-masing berasal dari berkas \gls{not:Dn} yang merekam kondisi kerusakan pada \textit{joint} ke-$n$.
|
||||||
|
|
||||||
|
Secara umum, setiap kelas \gls{not:di} ($i = 1, \dots, 6$) terdiri atas lima sinyal percepatan
|
||||||
|
\gls{not:aj} yang diambil dari lima berkas berturut-turut
|
||||||
|
pada rentang indeks $n = 5(i-1)+1$ hingga $5i$:
|
||||||
|
\begin{equation}\label{eq:d_i}
|
||||||
|
\gls{not:di} = \bigl\{\,\gls{not:aj}\,\bigr\}_{n = 5(i-1)+1}^{5i}\ ,
|
||||||
|
\quad i = 1, \dots, 6.
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
Masing-masing \gls{not:aj} merupakan vektor berukuran $262144 \times 1$ yang memuat deret waktu percepatan dari
|
||||||
|
sensor akselerometer pada \textit{joint} ke-$n$ di berkas \gls{not:Dn}.
|
||||||
|
|
||||||
|
Sebagai contoh konkret:
|
||||||
|
\begin{align*}
|
||||||
|
d_1 &= \{\mathbf{a}_{1}^{(1)},\,\mathbf{a}_{2}^{(2)},\,\mathbf{a}_{3}^{(3)},\,\mathbf{a}_{4}^{(4)},\,\mathbf{a}_{5}^{(5)}\},\\
|
||||||
|
d_2 &= \{\mathbf{a}_{6}^{(6)},\,\mathbf{a}_{7}^{(7)},\,\mathbf{a}_{8}^{(8)},\,\mathbf{a}_{9}^{(9)},\,\mathbf{a}_{10}^{(10)}\},\\
|
||||||
|
&\;\;\vdots\\
|
||||||
|
d_6 &= \{\mathbf{a}_{26}^{(26)},\,\mathbf{a}_{27}^{(27)},\,\mathbf{a}_{28}^{(28)},\,\mathbf{a}_{29}^{(29)},\,\mathbf{a}_{30}^{(30)}\}.
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
Dengan demikian, setiap kelas $d_i$ ($i \geq 1$) beranggotakan lima sinyal percepatan dari lima \textit{joint} yang berbeda,
|
||||||
|
masing-masing mencerminkan satu skenario kerusakan pada posisi yang berurutan di sepanjang struktur.
|
||||||
|
|
||||||
|
\subsection{Simulasi dengan Desain Sensor Terbatas}
|
||||||
|
|
||||||
|
Setiap posisi kolom pada struktur dipasangi dua sensor akselerometer,
|
||||||
|
yaitu satu di bagian atas dan satu di bagian bawah.
|
||||||
|
Hubungan antara indeks sensor atas dan bawah ditentukan berdasarkan
|
||||||
|
indeks \textit{joint} $n$ menggunakan operasi \textit{modulo} sebagai berikut:
|
||||||
|
\begin{equation}
|
||||||
|
r = ((n - 1) \bmod 5) + 1.
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
Nilai $r$ menentukan posisi kolom (1–5), sehingga pasangan sensor
|
||||||
|
atas–bawah dapat direpresentasikan dengan:
|
||||||
|
\begin{equation}
|
||||||
|
\bigl(
|
||||||
|
\mathbf{a}_{r}^{(n)},\;
|
||||||
|
\mathbf{a}_{r+25}^{(n)}
|
||||||
|
\bigr),
|
||||||
|
\quad r = ((n - 1) \bmod 5) + 1.
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
Sebagai contoh, untuk $n=1$ hingga $5$ diperoleh pasangan
|
||||||
|
$(\mathbf{a}_{1}^{(1)}, \mathbf{a}_{26}^{(1)}), \dots, (\mathbf{a}_{5}^{(5)}, \mathbf{a}_{30}^{(5)})$;
|
||||||
|
sedangkan untuk $n=6$ hingga $10$ pasangan tersebut berulang
|
||||||
|
$(\mathbf{a}_{1}^{(6)}, \mathbf{a}_{26}^{(6)}), \dots, (\mathbf{a}_{5}^{(10)}, \mathbf{a}_{30}^{(10)})$, dan seterusnya.
|
||||||
|
|
||||||
|
Dengan demikian, definisi~\ref{eq:d_i} dapat dimodifikasi untuk memasukkan
|
||||||
|
hanya pasangan sensor atas–bawah pada setiap kelas $d_i$ menjadi:
|
||||||
|
\begin{equation}
|
||||||
|
d_i =
|
||||||
|
\bigl\{
|
||||||
|
(\mathbf{a}_{r}^{(n)},\, \mathbf{a}_{r+25}^{(n)})
|
||||||
|
\bigr\}^{5i}_{n = 5(i-1)+1}, \quad i = 1, \dots, 6.
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
Secara eksplisit:
|
||||||
|
\begin{align*}
|
||||||
|
d_1 &= \{(\mathbf{a}_{1}^{(1)}, \mathbf{a}_{26}^{(1)}),\,
|
||||||
|
(\mathbf{a}_{2}^{(2)}, \mathbf{a}_{27}^{(2)}),\,
|
||||||
|
(\mathbf{a}_{3}^{(3)}, \mathbf{a}_{28}^{(3)}),\,
|
||||||
|
(\mathbf{a}_{4}^{(4)}, \mathbf{a}_{29}^{(4)}),\,
|
||||||
|
(\mathbf{a}_{5}^{(5)}, \mathbf{a}_{30}^{(5)})\},\\
|
||||||
|
d_2 &= \{(\mathbf{a}_{1}^{(6)}, \mathbf{a}_{26}^{(6)}),\,
|
||||||
|
(\mathbf{a}_{2}^{(7)}, \mathbf{a}_{27}^{(7)}),\,\dots,\,
|
||||||
|
(\mathbf{a}_{5}^{(10)}, \mathbf{a}_{30}^{(10)})\},\\
|
||||||
|
&\;\;\vdots\\
|
||||||
|
d_6 &= \{(\mathbf{a}_{1}^{(26)}, \mathbf{a}_{26}^{(26)}),\,
|
||||||
|
(\mathbf{a}_{2}^{(27)}, \mathbf{a}_{27}^{(27)}),\,\dots,\,
|
||||||
|
(\mathbf{a}_{5}^{(30)}, \mathbf{a}_{30}^{(30)})\}.
|
||||||
|
\end{align*}
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Konstruksi Kelas Tanpa Kerusakan}
|
||||||
|
\label{sec:konstruksi-d0}
|
||||||
|
|
||||||
|
Untuk membentuk kelas tanpa kerusakan ($d_0$), pada setiap berkas kerusakan \gls{not:Dn}
|
||||||
|
ditentukan indeks kolom yang rusak
|
||||||
|
\begin{equation}
|
||||||
|
r_n = ((n - 1) \bmod 5) + 1, \qquad n=1,\dots,30.
|
||||||
|
\end{equation}
|
||||||
|
Selanjutnya, himpunan indeks kolom komplemen (sehat) didefinisikan sebagai
|
||||||
|
\begin{equation}
|
||||||
|
\mathcal{R}_c(n) = \{1,2,3,4,5\}\setminus\{r_n\}.
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
|
||||||
|
Empat \textit{pasangan komplemen sehat} pada berkas \gls{not:Dn} kemudian dibentuk sebagai
|
||||||
|
\begin{equation}
|
||||||
|
\mathcal{C}(n) =
|
||||||
|
\Bigl\{
|
||||||
|
\bigl(\mathbf{a}_{r}^{(n)},\,\mathbf{a}_{r+25}^{(n)}\bigr)
|
||||||
|
\;\Bigm|\;
|
||||||
|
r \in \mathcal{R}_c(n)
|
||||||
|
\Bigr\}, \qquad \left|\mathcal{C}(n)\right| = 4.
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
|
||||||
|
Akhirnya, kelas tanpa kerusakan dihimpun dari seluruh berkas kerusakan:
|
||||||
|
\begin{align}
|
||||||
|
d_0 &= \bigcup_{n=1}^{30}\mathcal{C}(n) \\
|
||||||
|
&= \bigcup_{n=1}^{30}
|
||||||
|
\Bigl\{
|
||||||
|
\bigl(
|
||||||
|
\mathbf{a}_{r}^{(n)},\,\mathbf{a}_{r+25}^{(n)}
|
||||||
|
\bigr)
|
||||||
|
\;\Bigm|\;
|
||||||
|
r \in \mathcal{R}_c(n)
|
||||||
|
\Bigr\}. \\
|
||||||
|
&= \bigcup_{n=1}^{30}
|
||||||
|
\Bigl\{
|
||||||
|
\bigl(
|
||||||
|
\mathbf{a}_{r}^{(n)},\,\mathbf{a}_{r+25}^{(n)}
|
||||||
|
\bigr)
|
||||||
|
\;\Bigm|\;
|
||||||
|
r \in \{1,\dots,5\}\setminus\{r_n\}
|
||||||
|
\Bigr\}.
|
||||||
|
\end{align}
|
||||||
|
Setiap elemen $d_0$ merupakan pasangan sinyal satu dimensi berukuran
|
||||||
|
$\mathbb{R}^{262144}\times\mathbb{R}^{262144}$, dan secara keseluruhan
|
||||||
|
$|d_0| = 30 \times 4 = 120$ pasangan.
|
||||||
|
|
||||||
|
Kemudian, selain pasangan komplemen sehat dari seluruh berkas kerusakan,
|
||||||
|
kelas tanpa kerusakan juga mencakup kelima pasangan sensor atas–bawah
|
||||||
|
yang berasal dari berkas \(\mathbf{U}\):
|
||||||
|
\begin{equation}
|
||||||
|
\mathcal{C}_{\mathbf{U}} \;=\;
|
||||||
|
\Bigl\{
|
||||||
|
\bigl(\mathbf{a}_{r}^{(0)},\,\mathbf{a}_{r+25}^{(0)}\bigr)
|
||||||
|
\;\Bigm|\;
|
||||||
|
r \in \{1,2,3,4,5\}
|
||||||
|
\Bigr\}.
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
Dengan demikian, definisi akhir kelas tanpa kerusakan adalah
|
||||||
|
\begin{equation}
|
||||||
|
d_0
|
||||||
|
\;=\;
|
||||||
|
\Bigl(\,\bigcup_{n=1}^{30}\mathcal{C}(n)\Bigr)
|
||||||
|
\;\cup\;
|
||||||
|
\mathcal{C}_{\mathbf{U}}.
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
Karena setiap \(\mathcal{C}(n)\) berisi empat pasangan (kolom komplemen
|
||||||
|
terhadap kolom rusak pada berkas \(\mathbf{D}^{(n)}\)) dan
|
||||||
|
\(\mathcal{C}_{\mathbf{U}}\) berisi lima pasangan dari \(\mathbf{U}\),
|
||||||
|
maka kardinalitasnya adalah
|
||||||
|
\begin{equation}
|
||||||
|
\bigl|d_0\bigr|
|
||||||
|
\;=\;
|
||||||
|
\underbrace{30 \times 4}_{\text{komplemen dari } \mathbf{D}^{(n)}}
|
||||||
|
\;+\;
|
||||||
|
\underbrace{5}_{\text{pasangan dari } \mathbf{U}}
|
||||||
|
\;=\; 125.
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
\subsection{Ekstraksi Fitur dengan STFT}
|
||||||
|
\label{sec:stft-feature}
|
||||||
|
|
||||||
|
Setiap elemen pada himpunan $d_i$ ($i=0,\dots,6$) direpresentasikan sebagai pasangan sinyal percepatan
|
||||||
|
\((\mathbf{a}_{r}^{(n)}, \mathbf{a}_{r+25}^{(n)})\),
|
||||||
|
masing-masing berukuran $\mathbb{R}^{262144}$.
|
||||||
|
Transformasi Fourier Waktu-Pendek (\textit{Short-Time Fourier Transform}, STFT) diterapkan
|
||||||
|
pada kedua sinyal dalam setiap pasangan untuk memperoleh representasi domain-frekuensi–waktu
|
||||||
|
yang selanjutnya digunakan sebagai fitur model.
|
||||||
|
|
||||||
|
Kemudian, didefinisikan operator STFT \(\mathcal{S}\) untuk memetakan sinyal domain waktu mentah dengan panjang \(L=262144\) sampel menjadi sebuah spektrogram berukuran \(513\times513\). Kemudian digunakan \textit{Hanning window} dengan panjang \(N_{w}=1024\) dan hop size \(N_{h}=512\). Bentuk kompleks dari STFT adalah:
|
||||||
|
\begin{equation*}
|
||||||
|
\begin{aligned}
|
||||||
|
\text{(1) Window function:}\quad
|
||||||
|
w[n] &= \frac12\Bigl(1 - \cos\frac{2\pi n}{N_w - 1}\Bigr),
|
||||||
|
\quad n=0,\ldots,N_w-1; \\[1ex]
|
||||||
|
\text{(2) STFT:}\quad
|
||||||
|
S_k(p,t)
|
||||||
|
&= \sum_{n=0}^{N_w-1}
|
||||||
|
x_k\bigl[t\,N_h + n\bigr]
|
||||||
|
\;w[n]\;
|
||||||
|
e^{-j2\pi p n / N_w},\\
|
||||||
|
&\quad
|
||||||
|
p = 0,\ldots,512,\quad t = 0,\ldots,512.
|
||||||
|
\end{aligned}
|
||||||
|
\end{equation*}
|
||||||
|
|
||||||
|
Dengan demikian operatornya adalah
|
||||||
|
\begin{equation*}
|
||||||
|
\mathcal{S}:\; \mathbf{a}\in\mathbb{R}^{262144}
|
||||||
|
\;\longmapsto\;
|
||||||
|
\mathbf{\widetilde{a}}\in\mathbb{R}^{513\times513}.
|
||||||
|
\end{equation*}
|
||||||
|
|
||||||
|
Operator STFT diterapkan pada seluruh komponen sensor atas dan bawah
|
||||||
|
dari setiap pasangan \((\mathbf{a}_{r}^{(n)}, \mathbf{a}_{r+25}^{(n)})\)
|
||||||
|
yang terdapat pada himpunan $d_i$, untuk seluruh $i = 0, \dots, 6$:
|
||||||
|
\begin{equation}
|
||||||
|
\begin{aligned}
|
||||||
|
\mathcal{D}_A &= \bigl\{
|
||||||
|
\mathcal{S}\{\mathbf{a}_{r}^{(n)}\}
|
||||||
|
\;\bigm|\;
|
||||||
|
(\mathbf{a}_{r}^{(n)}, \mathbf{a}_{r+25}^{(n)}) \in d_i,\;
|
||||||
|
i = 0, \dots, 6
|
||||||
|
\bigr\}. \\
|
||||||
|
\mathcal{D}_B &= \bigl\{
|
||||||
|
\mathcal{S}\{\mathbf{a}_{r+25}^{(n)}\}
|
||||||
|
\;\bigm|\;
|
||||||
|
(\mathbf{a}_{r}^{(n)}, \mathbf{a}_{r+25}^{(n)}) \in d_i,\;
|
||||||
|
i = 0, \dots, 6
|
||||||
|
\bigr\}.
|
||||||
|
\end{aligned}
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
Kedua himpunan \(\mathcal{D}_A\) dan \(\mathcal{D}_B\)
|
||||||
|
masing-masing menjadi \textit{model data} untuk dua kanal sensor
|
||||||
|
(atas dan bawah) yang digunakan pada tahap pemodelan berikutnya.
|
||||||
|
|
||||||
|
Untuk setiap pasangan \((\mathbf{a}_{r}^{(n)},\mathbf{a}_{r+25}^{(n)})\) hasil STFT adalah
|
||||||
|
\(\widetilde{\mathbf{a}}_{r}^{(n)}=\mathcal{S}\{\mathbf{a}_{r}^{(n)}\}\in\mathbb{R}^{513\times513}\),
|
||||||
|
dengan indeks waktu \(t=0,\dots,512\) dan frekuensi \(p=0,\dots,512\).
|
||||||
|
Setiap baris \(\widetilde{\mathbf{a}}_{r}^{(n)}[t]\) adalah vektor frekuensi berdimensi \(513\).
|
||||||
|
|
||||||
|
Untuk kelas kerusakan $d_i$ ($i\ge1$) seluruh \(513\) \textit{frame} dari kelima pasangan diambil, sehingga setiap $d_i$ menghasilkan
|
||||||
|
\begin{equation}\label{eq:concat_stft_di}
|
||||||
|
\operatorname{concat}_{\text{time}}\bigl(\{\widetilde{\mathbf{a}}_{r}^{(n)}\}_{n=5(i-1)+1}^{5i}\bigr)\in\mathbb{R}^{5\cdot513\times513}=\mathbb{R}^{2565\times513}.
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
Agar dimensi pada kelas tanpa kerusakan \(d_0\) sama dengan dimensi kelas kerusakan lain (lihat~\ref{eq:concat_stft_di}), hanya beberapa \textit{frame} dari masing-masing pasangan di \(d_0\). Dengan \(|d_0|=125\) pasangan, diperlukan pembagian:
|
||||||
|
\begin{align}
|
||||||
|
\frac{2565}{125} &= 20.52
|
||||||
|
\begin{cases}
|
||||||
|
20 \, \text{or} \\
|
||||||
|
21
|
||||||
|
\end{cases}\\
|
||||||
|
20x + 21y &= 2565,\qquad x+y=125,
|
||||||
|
\end{align}
|
||||||
|
yang memberikan \(x=60\) pasangan mengambil 20 \textit{frame} dan \(y=65\) pasangan mengambil 21 \textit{frame}.
|
||||||
|
Setelah mengurutkan pasangan \(d_0\) secara deterministik (mis. leksikografis menurut \((n,r)\)), kita ambil
|
||||||
|
\begin{itemize}
|
||||||
|
\item untuk pasangan ke-$1$ sampai ke-$60$: frame $t=0,\dots,19$ (20 baris),
|
||||||
|
\item untuk pasangan ke-$61$ sampai ke-$125$: frame $t=0,\dots,20$ (21 baris).
|
||||||
|
\end{itemize}
|
||||||
|
Maka setelah konkatenasi menurut urutan tersebut diperoleh
|
||||||
|
\(\operatorname{concat}_{\text{time}}(\mathcal{F}_{d_0})\in\mathbb{R}^{2565\times513}\),
|
||||||
|
menghasilkan dimensi yang sama dengan kelas \(d_i\).
|
||||||
|
|
||||||
|
% Pengambilan magnitudo menghasilkan matriks spektrogram pada bilah frekuensi $p$ dan \textit{frame} waktu $t$ untuk \textit{node} $k$
|
||||||
|
% \begin{equation*}
|
||||||
|
% \widetilde n_{k}^{F_{k}}(p,t) \;=\; \bigl|S_{k}(p,t)\bigr|
|
||||||
|
% \;\in\;\mathbb{R}^{513\times513}.
|
||||||
|
% \end{equation*}
|
||||||
|
|
||||||
|
% Sensor-sensor ujung bagian bawah dilabeli sebagai Sensor A dan Sensor-sensor ujung bagian atas dilabeli sebagai Sensor B. Semua enam kasus kerusakan dikumpulkan menjadi satu menghasilkan dua himpunan spektrogram, masing-masing berisi enam (kasus kerusakan):
|
||||||
|
% \begin{equation*}
|
||||||
|
% \text{Sensor A}
|
||||||
|
% =
|
||||||
|
% \bigl\{\,
|
||||||
|
% \widetilde n_{0}^{F_{0}},\,
|
||||||
|
% \widetilde n_{5}^{F_{5}},\,
|
||||||
|
% \dots,\,
|
||||||
|
% \widetilde n_{25}^{F_{25}}
|
||||||
|
% \bigr\},
|
||||||
|
% \quad
|
||||||
|
% \text{Sensor B}
|
||||||
|
% =
|
||||||
|
% \bigl\{\,
|
||||||
|
% \widetilde n_{4}^{F_{4}},\,
|
||||||
|
% \widetilde n_{9}^{F_{9}},\,
|
||||||
|
% \dots,\,
|
||||||
|
% \widetilde n_{29}^{F_{29}}
|
||||||
|
% \bigr\}.
|
||||||
|
% \end{equation*}
|
||||||
|
|
||||||
|
\subsection{Pemberian Label Data}
|
||||||
|
Seluruh vektor fitur hasil STFT pada setiap kelas $d_i$
|
||||||
|
dikonkat menjadi satu matriks fitur $\mathcal{D}\in\mathbb{R}^{17955\times513}$.
|
||||||
|
Selanjutnya, setiap baris pada $\mathcal{D}$ diberi label kelas $y_i$
|
||||||
|
sesuai asalnya:
|
||||||
|
\[
|
||||||
|
y_i =
|
||||||
|
\begin{cases}
|
||||||
|
0, & \text{jika berasal dari } d_0,\\
|
||||||
|
1, & \text{jika berasal dari } d_1,\\
|
||||||
|
\vdots\\
|
||||||
|
6, & \text{jika berasal dari } d_6.
|
||||||
|
\end{cases}
|
||||||
|
\]
|
||||||
|
Sehingga dataset berlabel dapat dituliskan sebagai:
|
||||||
|
\begin{align}
|
||||||
|
\mathcal{D}_{A,\text{labeled}}
|
||||||
|
&= \bigl\{\,(\mathbf{x}_k, y_k)\;\bigm|\;
|
||||||
|
\mathbf{x}_k \in \mathbb{R}^{513},~
|
||||||
|
y_k \in \{0,\dots,6\}
|
||||||
|
\bigr\} \\
|
||||||
|
\mathcal{D}_{B,\text{labeled}}
|
||||||
|
&= \bigl\{\,(\mathbf{x}_k, y_k)\;\bigm|\;
|
||||||
|
\mathbf{x}_k \in \mathbb{R}^{513},~
|
||||||
|
y_k \in \{0,\dots,6\}
|
||||||
|
\bigr\},
|
||||||
|
\end{align}
|
||||||
|
|
||||||
|
dengan representasi dalam bentuk \textit{dataframe} berdimensi
|
||||||
|
$\mathbb{R}^{17955\times514}$ (513 kolom fitur dan 1 kolom label).
|
||||||
|
|
||||||
|
% \subsection{Perakitan Baris dan Pelabelan}
|
||||||
|
|
||||||
|
% Setiap spektrogram berukuran \(513\times513\) diartikan sebagai 513 vektor fitur berdimensi 513. Kemudian diberikan indeks pengulangan dalam satu kasus kerusakan dengan \(r\in\{0,\dots,4\}\) dan potongan waktu dengan \(t\in\{0,\dots,512\}\). Misalkan
|
||||||
|
% \begin{equation*}
|
||||||
|
% \mathbf{x}_{i,s,r,t}\in\mathbb{R}^{513}
|
||||||
|
% \end{equation*}
|
||||||
|
% menunjukkan baris (atau kolom) ke-\(t\) dari spektrogram ke-\(r\) untuk kasus kerusakan \(i\) dan sensor \(s\). Label skalar untuk kasus kerusakan tersebut adalah
|
||||||
|
% \begin{equation*}
|
||||||
|
% y_{i} = i,\quad i=0,\dots,5.
|
||||||
|
% \end{equation*}
|
||||||
|
% Kemudian didefinisikan fungsi \textit{slicing} sebagai
|
||||||
|
% \begin{equation*}
|
||||||
|
% \Lambda(i,s,r,t)
|
||||||
|
% \;=\;
|
||||||
|
% \bigl[\,
|
||||||
|
% \mathbf{x}_{i,s,r,t},
|
||||||
|
% \;y_{i}
|
||||||
|
% \bigr]
|
||||||
|
% \;\in\;\mathbb{R}^{513+1}.
|
||||||
|
% \end{equation*}
|
||||||
|
|
||||||
|
% \subsection{Bentuk Akhir Data untuk Pelatihan}
|
||||||
|
|
||||||
|
% Seluruh baris dari enam kasus kerusakan, lima pengulangan, dan 513 potongan waktu dikumpulkan menghasilkan \textit{dataset} untuk satu sisi sensor:
|
||||||
|
% \begin{equation*}
|
||||||
|
% \mathcal{D}^{(s)}
|
||||||
|
% =
|
||||||
|
% \bigl\{
|
||||||
|
% \Lambda(i,s,r,t)
|
||||||
|
% \;\big|\;
|
||||||
|
% i=0,\dots,5,\;
|
||||||
|
% r=0,\dots,4,\;
|
||||||
|
% t=0,\dots,512
|
||||||
|
% \bigr\}.
|
||||||
|
% \end{equation*}
|
||||||
|
% Karena terdapat total \(6\times5\times513=15{,}390\) baris dan setiap baris memiliki \(513\) fitur ditambah satu kolom label, maka bentuk akhir dari data untuk satu sisi sensor yang siap digunakan untuk pelatihan adalah
|
||||||
|
% \begin{equation*}
|
||||||
|
% |\mathcal{D}^{(s)}| = 15\,390 \times 514.
|
||||||
|
% \end{equation*}
|
||||||
29
latex/chapters/id/03_methodology/steps/index.tex
Normal file
29
latex/chapters/id/03_methodology/steps/index.tex
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
Alur keseluruhan penelitian ini dilakukan melalui tahapan-tahapan sebagai berikut:
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=0.3\linewidth]{chapters/img/flow.png}
|
||||||
|
\caption{Diagram alir tahapan penelitian}
|
||||||
|
\label{fig:flowchart}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{enumerate}
|
||||||
|
\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 Seleksi Sensor: Memilih sinyal dari sejumlah sensor terbatas pada garis vertikal tertentu (misalnya, node 1 dan 26) untuk mensimulasikan konfigurasi sensor yang direduksi.
|
||||||
|
|
||||||
|
\item Ekstraksi fitur: melakukan normalisasi dan mengubah sinyal domain waktu mentah menjadi domain waktu-frekuensi menggunakan metode \gls{stft}.
|
||||||
|
|
||||||
|
\item \textit{Pre-processing} fitur: \textit{feature scaling} digunakan untuk menormalisasi data pada setiap fitur agar semua nilai berada dalam skala yang sama.
|
||||||
|
|
||||||
|
\item Reduksi dimensi: \gls{pca} digunakan untuk mengurangi kompleksitas komputasi dan menghilangkan fitur yang kurang informatif.
|
||||||
|
|
||||||
|
\item Pengembangan model: algoritma \acrshort{svm} digunakan untuk mengklasifikasikan lokasi kerusakan struktur.
|
||||||
|
|
||||||
|
\item Optimasi \textit{hyperparameter}: pencarian \textit{grid} dilakukan dengan \textit{coarse} dan \textit{fine grid-search} dan validasi silang \textit{stratified K-Fold} untuk setiap model guna meningkatkan kinerja klasifikasi.
|
||||||
|
|
||||||
|
\item Evaluasi: mengevaluasi kinerja model menggunakan metrik akurasi, presisi, dan \gls{cm} 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}
|
||||||
|
|
||||||
|
|
||||||
|
% \section{Prapemrosesan Data dan Ekstraksi Fitur}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
We now introduce a simple “data‐augmentation” logic across repeated tests as:
|
||||||
|
\[
|
||||||
|
\mathbf{c}_{j}^{(i)}
|
||||||
|
\;=\;
|
||||||
|
\Bigl[S_{0+j}^{(i)},\,S_{5+j}^{(i)},\,S_{10+j}^{(i)},\,S_{15+j}^{(i)},\,S_{20+j}^{(i)},\,S_{25+j}^{(i)}\Bigr]^{T}
|
||||||
|
\;\in\mathbb{R}^{6}\!,
|
||||||
|
\]
|
||||||
|
where \(S_{k}^{(i)}\) is the \(k\)th sensor’s time‐frequency feature vector (after STFT+log‐scaling) from the \(i\)-th replicate of scenario \(j\).
|
||||||
|
|
||||||
|
For each fixed scenario \(j\), collect the five replicates into the set
|
||||||
|
\[
|
||||||
|
\mathcal{D}^{(j)}
|
||||||
|
=\bigl\{\mathbf{c}_{j}^{(1)},\,\mathbf{c}_{j}^{(2)},\,\mathbf{c}_{j}^{(3)},\,\mathbf{c}_{j}^{(4)},\,\mathbf{c}_{j}^{(5)}\bigr\},
|
||||||
|
\]
|
||||||
|
so \(|\mathcal{D}^{(j)}|=5\). Across all six scenarios, the total augmented dataset is
|
||||||
|
\[
|
||||||
|
\mathcal{D}
|
||||||
|
=\bigcup_{j=0}^{5}\mathcal{D}^{(j)}
|
||||||
|
=\bigl\{\mathbf{c}_{j}^{(i)}: j=0,\dots,5,\;i=1,\dots,5\bigr\},
|
||||||
|
\]
|
||||||
|
with \(\lvert\mathcal{D}\rvert = 6 \times 5 = 30\) samples.
|
||||||
|
|
||||||
|
Each \(\mathbf{c}_{j}^{(i)}\) hence represents one ``column‐based’’ damage sample,
|
||||||
|
and the collection \(\mathcal{D}\) serves as the input set for subsequent classification.
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
Let $\mathcal{G}$ represent the $6 \times 5$ structural grid, where each node is denoted with row and column as $N_{r,c}$ with $r \in \{1,2,...,6\}$ and $c \in \{1,2,...,5\}$.\\
|
||||||
|
|
||||||
|
\begin{figure}[ht]
|
||||||
|
\centering
|
||||||
|
% \includegraphics[width=\textwidth]{}
|
||||||
|
\input{chapters/img/specimen}
|
||||||
|
\caption{Diagram joint and sensors placement}
|
||||||
|
\label{fig:specimen}
|
||||||
|
\end{figure}
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
\subsection{Signal Normalization}
|
||||||
|
Each raw acceleration time series
|
||||||
|
\(\mathbf{a}_{k}(n)\), \(n = 0,1,\dots,N-1\) with \(N=262144\) samples (collected at \(f_s=1024\) Hz over 256 s) :contentReference[oaicite:0]{index=0} is first standardized to zero mean and unit variance:
|
||||||
|
\[
|
||||||
|
\tilde a_{k}(n)
|
||||||
|
=\frac{a_{k}(n)-\mu_{k}}{\sigma_{k}},
|
||||||
|
\quad
|
||||||
|
\mu_{k}=\frac{1}{N}\sum_{n=0}^{N-1}a_{k}(n),
|
||||||
|
\quad
|
||||||
|
\sigma_{k}=\sqrt{\frac{1}{N}\sum_{n=0}^{N-1}\bigl(a_{k}(n)-\mu_{k}\bigr)^{2}}.
|
||||||
|
\]
|
||||||
|
|
||||||
|
\subsection{Framing and Windowing}
|
||||||
|
The normalized signal \(\tilde a_{k}(n)\) is chopped into overlapping frames of length \(W\) samples with hop size \(H\). The \(p\)-th frame is
|
||||||
|
\[
|
||||||
|
x_{k,p}[m]
|
||||||
|
=\tilde a_{k}(pH + m)\,w[m],
|
||||||
|
\quad
|
||||||
|
m=0,1,\dots,W-1,
|
||||||
|
\]
|
||||||
|
where \(w[m]\) is a chosen window function (e.g., Hamming).
|
||||||
|
|
||||||
|
\subsection{Short-Time Fourier Transform (STFT)}
|
||||||
|
For each frame \(x_{k,p}[m]\), compute its STFT:
|
||||||
|
\[
|
||||||
|
S_{k}(f,p)
|
||||||
|
=\sum_{m=0}^{W-1}x_{k,p}[m]\;e^{-j2\pi\,f\,m/W},
|
||||||
|
\]
|
||||||
|
where \(f=0,1,\dots,W-1\) indexes frequency bins :contentReference[oaicite:1]{index=1}.
|
||||||
|
|
||||||
|
\subsection{Spectrogram and Log-Magnitude}
|
||||||
|
Form the magnitude spectrogram
|
||||||
|
\[
|
||||||
|
M_{k}(f,p)
|
||||||
|
=\bigl|S_{k}(f,p)\bigr|,
|
||||||
|
\]
|
||||||
|
and apply log scaling for numerical stability:
|
||||||
|
\[
|
||||||
|
L_{k}(f,p)
|
||||||
|
=\log\bigl(1 + M_{k}(f,p)^{2}\bigr).
|
||||||
|
\]
|
||||||
|
This yields a time–frequency representation
|
||||||
|
\(\mathbf{L}_{k}\in\mathbb{R}^{F\times P}\), with \(F\) frequency bins and \(P\) frames.
|
||||||
|
|
||||||
|
\subsection{Feature Matrix Assembly}
|
||||||
|
For each column \(j\in\{1,\dots,5\}\), select only the two endpoint sensors:
|
||||||
|
\[
|
||||||
|
\mathbf{L}_{\text{bot},j} = \mathbf{L}_{(j)},\quad
|
||||||
|
\mathbf{L}_{\text{top},j} = \mathbf{L}_{(25+j)},
|
||||||
|
\]
|
||||||
|
and stack them:
|
||||||
|
\[
|
||||||
|
\mathbf{F}_{j}
|
||||||
|
=
|
||||||
|
\begin{bmatrix}
|
||||||
|
\mathbf{L}_{\text{bot},j} \\[6pt]
|
||||||
|
\mathbf{L}_{\text{top},j}
|
||||||
|
\end{bmatrix}
|
||||||
|
\;\in\mathbb{R}^{2F\times P}.
|
||||||
|
\]
|
||||||
|
Finally, flatten into a feature vector:
|
||||||
|
\[
|
||||||
|
\mathbf{f}_{j}
|
||||||
|
=\operatorname{vec}\bigl(\mathbf{F}_{j}\bigr)
|
||||||
|
\;\in\mathbb{R}^{2FP}.
|
||||||
|
\]
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
For the vertical column approach with limited sensors
|
||||||
|
% we
|
||||||
|
are defined as column vector $\mathbf{c}_j$:
|
||||||
|
|
||||||
|
\begin{equation}
|
||||||
|
\mathbf{c}_j^{(i,d)} = [S_{0+j}^{(i+d)}, S_{5+j}^{(i+d)}, S_{10+j}^{(i+d)}, S_{15+j}^{(i+d)}, S_{20+j}^{(i+d)}, S_{25+j}^{(i+d)}]^T
|
||||||
|
\end{equation}
|
||||||
|
\begin{equation}
|
||||||
|
\mathbf{D}^{(i)} = [\mathbf{c}_0^{(i,i+1)}, \mathbf{c}_1^{(i,i+6)}, \mathbf{c}_2^{(i,i+11)}, \mathbf{c}_3^{(i,i+16)}, \mathbf{c}_4^{(i,i+21)}]^T
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
where $j \in \{0, 1,2,3,4\}$ represents the column index.
|
||||||
|
|
||||||
|
For the limited sensor case focusing on endpoints only, we use:
|
||||||
|
|
||||||
|
\begin{equation}
|
||||||
|
\mathbf{c}^{\text{limited}}_j = [S_{0+(j-1)}, S_{25+(j-1)}]^T
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
representing only the lower sensor (sensor A) and upper sensor (sensor B) of column $j$.
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
Untuk setiap sensor $S_k$ dengan $k \in \{0,1,2,...,29\}$ diletakkan pada \textit{node} $N_{k}$, deret deret akselerasi waktu didefinisikan sebagai:
|
||||||
|
|
||||||
|
\begin{equation}
|
||||||
|
\mathbf{a}_{k}(t) = [a_{k}(t_1), a_{k}(t_2), \ldots, a_{k}(t_{262144})]
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
% where $N = 262144$ samples at a sampling frequency of 1024 Hz over 256 seconds.
|
||||||
|
% $k \in \{i,(i+1),...,(i+(r\times j))\}$
|
||||||
|
|
||||||
|
Satu dataset utuh untuk setiap skenario ($A|B$) dapat direpresentasikan sebagai matrix $\mathbf{X}_d \in \mathbb{R}^{30 \times 262144}$:
|
||||||
|
|
||||||
|
\begin{equation}
|
||||||
|
\mathbf{{X}_d}^\intercal =
|
||||||
|
\begin{bmatrix}
|
||||||
|
\mathbf{a}_{0}(t) \\
|
||||||
|
\mathbf{a}_{1}(t) \\
|
||||||
|
\mathbf{a}_{2}(t) \\
|
||||||
|
\vdots \\
|
||||||
|
\mathbf{a}_{29}(t)
|
||||||
|
\end{bmatrix}
|
||||||
|
\end{equation}
|
||||||
|
|
||||||
|
di mana $d \in \{0, 1, 2, \ldots, 30\}$ merepresentasikan skenario kerusakan, dengan $d=0$ mengindikasikan tanpa kasus kerusakan.
|
||||||
55
latex/chapters/id/03_methodology/tools.tex
Normal file
55
latex/chapters/id/03_methodology/tools.tex
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
\subsection{Alat Perangkat Keras}
|
||||||
|
\label{sec:hardware}
|
||||||
|
Data getaran struktur yang digunakan dalam penelitian ini diperoleh dari penelitian oleh \textcite{abdeljaber2017}, yang dilakukan menggunakan simulator struktur baja Grandstand di Queen’s 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}
|
||||||
|
\item \textbf{27 akselerometer PCB model 393B04} (Gambar~\ref{fig:accel393}) untuk merekam respons percepatan pada sebagian besar titik pengukuran.
|
||||||
|
\item \textbf{3 akselerometer B\&K model 8344} (Gambar~\ref{fig:accel393}) digunakan pada beberapa lokasi untuk validasi tambahan.
|
||||||
|
\item \textbf{Mounting magnetic PCB model 080A121} digunakan untuk menempelkan akselerometer secara aman pada struktur baja.
|
||||||
|
\item \textbf{Modal shaker (Model 2100E11)} digunakan untuk memberikan eksitasi getaran terkontrol pada struktur (Gambar~\ref{fig:shaker}). Sinyal input untuk shaker dihasilkan melalui \textbf{penguat daya SmartAmp 2100E21-400}.
|
||||||
|
\item \textbf{Dua perangkat akuisisi data 16-kanal (DT9857E-16)} digunakan secara simultan: satu untuk menghasilkan sinyal input ke shaker dan satu lagi untuk merekam data keluaran dari akselerometer (Gambar~\ref{fig:datalogger}).
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
Seluruh perangkat ini memungkinkan pengambilan data getaran dengan fidelitas tinggi, dengan laju pengambilan sampel sebesar 1024 Hz per kanal selama 256 detik untuk setiap skenario pengujian.
|
||||||
|
|
||||||
|
Adapun sumberdaya komputasi yang digunakan untuk pemrosesan semua data dan pemodelan pada skripsi ini, yaitu:
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item \textbf{\textit{Processor}:} Intel Core i7 11th-gen @ 2.8 GHz
|
||||||
|
\item \textbf{RAM:} 2$\times$8 GB LPDDR4X
|
||||||
|
% \item \textbf{GPU:} Intel iris Xe Graphics (16 GB VRAM \textit{shared})
|
||||||
|
\item \textbf{Sistem Operasi:} Windows 10 64-bit
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=\textwidth]{chapters/img/accel393.png}
|
||||||
|
\caption{Akselerometer yang digunakan: (a) PCB 393B04, (b) B\&K 8344}
|
||||||
|
\label{fig:accel393}
|
||||||
|
\end{figure}
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=0.4\textwidth]{chapters/img/shaker.png}
|
||||||
|
\caption{Modal shaker (TMS 2100E11) yang dipasang pada struktur uji}
|
||||||
|
\label{fig:shaker}
|
||||||
|
\end{figure}
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\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}
|
||||||
610
latex/chapters/id/04_results.tex
Normal file
610
latex/chapters/id/04_results.tex
Normal file
@@ -0,0 +1,610 @@
|
|||||||
|
\chapter{Hasil Penelitian dan Pembahasan}
|
||||||
|
Bab ini menyajikan hasil dari proses ekstraksi fitur, analisis eksplorasi data,
|
||||||
|
pengembangan model klasifikasi, serta evaluasi kinerja model.
|
||||||
|
Hasil yang diperoleh selanjutnya dianalisis untuk menilai kemampuan model dengan fitur yang telah diekstraksi
|
||||||
|
dalam mendeteksi dan mengklasifikasikan lokasi kerusakan struktur \textit{grid}.
|
||||||
|
% \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{Hasil Ekstraksi Fitur STFT}
|
||||||
|
Bagian ini menyajikan contoh hasil transformasi \gls{stft} yang diterapkan
|
||||||
|
pada sinyal percepatan dari sensor atas dan bawah.
|
||||||
|
Analisis dilakukan untuk memastikan konsistensi pola spektral
|
||||||
|
dan kesetaraan ukuran data antar kelas sebelum proses pelatihan model.
|
||||||
|
|
||||||
|
Gambar~\ref{fig:stft-undamaged} memperlihatkan hasil \gls{stft} gabungan (\textit{aggregated}) untuk seluruh titik join tanpa kerusakan (kelas 0).
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\begin{minipage}{0.48\textwidth}
|
||||||
|
\centering
|
||||||
|
\includesvg[width=\textwidth, pretex=\tiny]{chapters/img/sensor1/stft-undamaged-1}
|
||||||
|
% \caption{Caption for the first image.}
|
||||||
|
% \label{fig:image1}
|
||||||
|
\end{minipage}\hfill
|
||||||
|
\begin{minipage}{0.48\textwidth}
|
||||||
|
\centering
|
||||||
|
\includesvg[width=\textwidth, pretex=\tiny]{chapters/img/sensor2/stft-undamaged-2}
|
||||||
|
% \caption{Caption for the second image.}
|
||||||
|
% \label{fig:image2}
|
||||||
|
\end{minipage}
|
||||||
|
\caption{\gls{stft} tanpa kerusakan (undamaged). Sensor A (kiri) dan Sensor B (kanan)}
|
||||||
|
\label{fig:stft-undamaged}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Gambar~\ref{fig:stft-damaged-multiple-a} dan Gambar~\ref{fig:stft-damaged-multiple-b} memperlihatkan hasil \gls{stft} gabungan (\textit{aggregated}) untuk seluruh titik join dengan kerusakan (kelas 1--6). Setiap 513 segmen waktu merepresentasikan kolom sensor yang ditinjau.
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includesvg[width=\textwidth, pretex=\tiny, inkscapelatex=true]{chapters/img/sensor1/stft-damaged-multiple-1.svg}
|
||||||
|
\caption{\gls{stft} sensor A dengan kerusakan (damaged $d_1$\textemdash $d_6$).}
|
||||||
|
\label{fig:stft-damaged-multiple-a}
|
||||||
|
\end{figure}
|
||||||
|
\begin{figure}[htbp]
|
||||||
|
\centering
|
||||||
|
\includesvg[width=1\textwidth, pretex=\tiny, inkscapelatex=true]{chapters/img/sensor2/stft-damaged-multiple-2.svg}
|
||||||
|
\caption{\gls{stft} sensor B dengan kerusakan (damaged $d_1$\textemdash $d_6$).}
|
||||||
|
\label{fig:stft-damaged-multiple-b}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
|
||||||
|
\section{Analisis Eksplorasi Data}
|
||||||
|
\label{sec:eda}
|
||||||
|
|
||||||
|
Sebelum tahap pelatihan model dilakukan, diperlukan analisis eksplorasi
|
||||||
|
untuk memahami distribusi dan karakteristik data fitur hasil ekstraksi
|
||||||
|
\gls{stft} pada himpunan $\mathcal{D}_A$ dan $\mathcal{D}_B$.
|
||||||
|
Analisis ini bertujuan untuk menilai sejauh mana fitur yang diperoleh
|
||||||
|
mampu merepresentasikan perbedaan kondisi struktur
|
||||||
|
serta menentukan parameter reduksi dimensi yang sesuai
|
||||||
|
pada tahap pemodelan berikutnya.
|
||||||
|
|
||||||
|
\subsection{Analisis Komponen Utama (PCA)}
|
||||||
|
Transformasi \gls{pca} diterapkan terhadap data fitur berdimensi
|
||||||
|
$513$ untuk mengevaluasi proporsi variansi yang dapat dijelaskan
|
||||||
|
oleh setiap komponen utama.
|
||||||
|
Dengan menghitung \textit{\gls{explained-variance-ratio}}, diperoleh
|
||||||
|
diagram \textit{scree} seperti pada Gambar~\ref{fig:scree_plot},
|
||||||
|
yang menunjukkan kontribusi masing-masing komponen terhadap
|
||||||
|
total variansi data.
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=.75\textwidth]{chapters/img/scree_plot.png}
|
||||||
|
\caption{Diagram \textit{scree} hasil analisis \gls{pca} pada dataset $\mathcal{D}_A$ dan $\mathcal{D}_B$.}
|
||||||
|
\label{fig:scree_plot}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Dari Gambar~\ref{fig:scree_plot} terlihat bahwa \textit{explained ratio cumulative} 0.95 dicapai pada sekitar 300 komponen utama,
|
||||||
|
% Sebagai contoh, sepuluh komponen pertama menjelaskan sekitar
|
||||||
|
% $\alpha\%$ variansi kumulatif pada kanal sensor~A
|
||||||
|
% dan $\beta\%$ pada kanal sensor~B.
|
||||||
|
% Hasil ini menunjukkan bahwa terdapat redundansi di antara fitur-fitur
|
||||||
|
% frekuensi yang diekstraksi, sehingga reduksi dimensi
|
||||||
|
% dapat dilakukan tanpa kehilangan informasi signifikan.
|
||||||
|
|
||||||
|
\subsection{Reduksi Dimensi Sebelum Visualisasi}
|
||||||
|
Sebelum diterapkan metode reduksi dimensi non-linear seperti \gls{tsne}
|
||||||
|
dan \gls{pacmap}, \text{\gls{standard-scaler}} terlebih dahulu dilakukan pada data \textit{train-split} yang kemudian reduksi dimensi linear diterapkan
|
||||||
|
menggunakan \gls{pca} untuk menghilangkan derau (\textit{noise}) dan mengurangi kompleksitas
|
||||||
|
fitur \gls{stft} yang berdimensi tinggi ($513$ dimensi).
|
||||||
|
Langkah ini umum digunakan untuk meningkatkan stabilitas dan efisiensi
|
||||||
|
proses embedding \parencite{JMLR:v9:vandermaaten08a}.
|
||||||
|
|
||||||
|
Pada penelitian ini, beberapa nilai komponen \gls{pca} digunakan \\
|
||||||
|
($n_\text{components}\in\{512,128,32,8\}$)
|
||||||
|
untuk menilai pengaruh tingkat reduksi terhadap hasil proyeksi \gls{tsne}
|
||||||
|
dan \gls{pacmap}.
|
||||||
|
Gambar~\ref{fig:pca_tsne_pacmap_A} dan~\ref{fig:pca_tsne_pacmap_B} memperlihatkan contoh visualisasi
|
||||||
|
dua dimensi hasil reduksi berurutan \gls{pca} $\rightarrow$ \gls{tsne} dan
|
||||||
|
\gls{pca} $\rightarrow$ \gls{pacmap} pada Sensor A dan B
|
||||||
|
% $\mathcal{D}_A$.
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\subfloat[PCA=512]{\includegraphics[width=.24\textwidth]{chapters/img/sensor1/tsne_original.png}}
|
||||||
|
\subfloat[PCA=16]{\includegraphics[width=.24\textwidth]{chapters/img/sensor1/tsne_pca16.png}}
|
||||||
|
\subfloat[PCA=8]{\includegraphics[width=.24\textwidth]{chapters/img/sensor1/tsne_pca8.png}}
|
||||||
|
\subfloat[PCA=4]{\includegraphics[width=.24\textwidth]{chapters/img/sensor1/tsne_pca4.png}} \\[1ex]
|
||||||
|
\subfloat[PCA=512]{\includegraphics[width=.24\textwidth]{chapters/img/sensor1/pacmap_original.png}}
|
||||||
|
\subfloat[PCA=16]{\includegraphics[width=.24\textwidth]{chapters/img/sensor1/pacmap_pca16.png}}
|
||||||
|
\subfloat[PCA=8]{\includegraphics[width=.24\textwidth]{chapters/img/sensor1/pacmap_pca8.png}}
|
||||||
|
\subfloat[PCA=4]{\includegraphics[width=.24\textwidth]{chapters/img/sensor1/pacmap_pca4.png}}
|
||||||
|
\caption{Visualisasi hasil reduksi bertahap pada $\mathcal{D}_A$ dengan \gls{pca} $\rightarrow$ \gls{tsne} (baris atas) dan \gls{pca} $\rightarrow$ \gls{pacmap} (baris bawah).}
|
||||||
|
\label{fig:pca_tsne_pacmap_A}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\subfloat[PCA=512]{\includegraphics[width=.24\textwidth]{chapters/img/sensor2/tsne_original.png}}
|
||||||
|
\subfloat[PCA=16]{\includegraphics[width=.24\textwidth]{chapters/img/sensor2/tsne_pca16.png}}
|
||||||
|
\subfloat[PCA=8]{\includegraphics[width=.24\textwidth]{chapters/img/sensor2/tsne_pca8.png}}
|
||||||
|
\subfloat[PCA=4]{\includegraphics[width=.24\textwidth]{chapters/img/sensor2/tsne_pca4.png}} \\[1ex]
|
||||||
|
\subfloat[PCA=512]{\includegraphics[width=.24\textwidth]{chapters/img/sensor2/pacmap_original.png}}
|
||||||
|
\subfloat[PCA=16]{\includegraphics[width=.24\textwidth]{chapters/img/sensor2/pacmap_pca16.png}}
|
||||||
|
\subfloat[PCA=8]{\includegraphics[width=.24\textwidth]{chapters/img/sensor2/pacmap_pca8.png}}
|
||||||
|
\subfloat[PCA=4]{\includegraphics[width=.24\textwidth]{chapters/img/sensor2/pacmap_pca4.png}}
|
||||||
|
\caption{Visualisasi hasil reduksi bertahap pada $\mathcal{D}_B$ dengan \gls{pca} $\rightarrow$ \gls{tsne} (baris atas)
|
||||||
|
dan \gls{pca} $\rightarrow$ \gls{pacmap} (baris bawah).}
|
||||||
|
\label{fig:pca_tsne_pacmap_B}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Hasil pada Gambar~\ref{fig:pca_tsne_pacmap_A} dan~\ref{fig:pca_tsne_pacmap_B} menunjukkan bahwa
|
||||||
|
pengurangan jumlah komponen \gls{pca} hingga 8 dimensi
|
||||||
|
masih mempertahankan pemisahan antar kelas secara visual,
|
||||||
|
sedangkan reduksi lebih jauh (misalnya $n_\text{components}=4$)
|
||||||
|
menyebabkan beberapa klaster saling tumpang tindih (\textit{overlap}).
|
||||||
|
|
||||||
|
Eksplorasi data ini mendukung pemilihan nilai $n_\text{components}$
|
||||||
|
sebagai salah satu parameter penting yang diuji dalam
|
||||||
|
\textit{\gls{grid-search}} pada tahap optimasi model untuk mengurangi kompleksitas model dan efisiensi komputasi.
|
||||||
|
|
||||||
|
% \subsection{Visualisasi Ruang Fitur Non-Linear}
|
||||||
|
% Selain PCA, digunakan dua metode reduksi dimensi non-linear,
|
||||||
|
% yaitu \gls{tsne} dan \gls{pacmap},
|
||||||
|
% untuk memvisualisasikan struktur data dalam ruang dua dimensi.
|
||||||
|
% Kedua metode ini memproyeksikan vektor fitur berukuran $513$
|
||||||
|
% ke bidang dua dimensi dengan mempertahankan hubungan jarak
|
||||||
|
% antar sampel secara lokal.
|
||||||
|
|
||||||
|
% \begin{figure}[H]
|
||||||
|
% \centering
|
||||||
|
% % \subfloat[t-SNE pada $\mathcal{D}_A$]{%
|
||||||
|
% % \includegraphics[width=.48\textwidth]{chapters/img/sensor1/tsne_A.png}
|
||||||
|
% % }\hfill
|
||||||
|
% \subfloat[t-SNE pada $\mathcal{D}_B$]{%
|
||||||
|
% \includegraphics[width=.48\textwidth]{chapters/img/sensor1/tsne_B.png}
|
||||||
|
% }\\[1ex]
|
||||||
|
% \subfloat[PaCMAP pada $\mathcal{D}_A$]{%
|
||||||
|
% \includegraphics[width=.48\textwidth]{chapters/img/sensor1/pacmap_A.png}
|
||||||
|
% }\hfill
|
||||||
|
% \subfloat[PaCMAP pada $\mathcal{D}_B$]{%
|
||||||
|
% \includegraphics[width=.48\textwidth]{chapters/img/sensor1/pacmap_B.png}
|
||||||
|
% }
|
||||||
|
% \caption{Visualisasi dua dimensi hasil reduksi dimensi non-linear
|
||||||
|
% menggunakan t-SNE dan PaCMAP pada fitur STFT sensor A dan B.
|
||||||
|
% .}
|
||||||
|
% \label{fig:tsne_pacmap}
|
||||||
|
% \end{figure}
|
||||||
|
|
||||||
|
% Pada Gambar~\ref{fig:tsne_pacmap} tampak bahwa setiap kelas
|
||||||
|
% ($d_0$--$d_6$) membentuk klaster yang relatif terpisah,
|
||||||
|
% menandakan bahwa fitur hasil STFT memiliki kemampuan diskriminatif
|
||||||
|
% terhadap kondisi struktur.
|
||||||
|
% Beberapa tumpang tindih antar klaster (khususnya antara $d_i$ yang berdekatan)
|
||||||
|
% masih muncul akibat kemiripan respons getaran pada lokasi
|
||||||
|
% yang berdekatan, namun pola pemisahan antar kelompok
|
||||||
|
% masih terlihat jelas.
|
||||||
|
|
||||||
|
\subsection{Interpretasi dan Implikasi}
|
||||||
|
Hasil eksplorasi ini menunjukkan bahwa:
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Variansi utama data dapat dijelaskan oleh sejumlah kecil komponen \gls{pca}, sehingga reduksi dimensi berpotensi meningkatkan efisiensi komputasi tanpa kehilangan informasi penting.
|
||||||
|
\item Visualisasi \gls{tsne} dan \gls{pacmap} memperlihatkan bahwa fitur \gls{stft} mampu mengelompokkan kondisi struktur yang cukup baik sesuai label kerusakan, mendukung validitas pemilihan \gls{stft} sebagai metode ekstraksi fitur.
|
||||||
|
\item Perbedaan antara kanal sensor~A ($\mathcal{D}_A$) dan sensor~B ($\mathcal{D}_B$) tidak signifikan,
|
||||||
|
sehingga keduanya dapat diperlakukan sebagai dua sumber informasi
|
||||||
|
komplementer pada tahap pelatihan model.
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
Temuan ini menjadi dasar untuk menentukan potensi jumlah komponen \gls{pca} yang akan digunakan pada \textit{grid search} saat optimasi \textit{hyperparameter} model \gls{svm}.
|
||||||
|
|
||||||
|
\section{Hasil \textit{Coarse Grid-Search}}
|
||||||
|
\label{sec:grid-results}
|
||||||
|
|
||||||
|
Setelah proses ekstraksi fitur dan pembentukan dataset berlabel,
|
||||||
|
tahap berikutnya adalah melakukan \textit{\gls{grid-search}}
|
||||||
|
untuk mengoptimalkan \textit{hyperparameter} model \gls{svm}
|
||||||
|
dengan kernel \gls{rbf} seperti yang disajikan dalam Tabel~\ref{tab:grid_search_parameters}.
|
||||||
|
|
||||||
|
Total kombinasi parameter yang diuji berjumlah \(5\times5\times8 = 200\) kandidat model
|
||||||
|
dengan skema \textit{\gls{stratified-k-fold} \gls{cross-validation}} $k=5$ menghasilkan total 1000 kali \textit{fitting}.
|
||||||
|
Setiap kombinasi dievaluasi menggunakan metrik akurasi rata-rata
|
||||||
|
pada data validasi. Proses ini memakan waktu hingga 1 jam 38 detik untuk Sensor A dan 1 jam 34 detik untuk Sensor B pada spesifikasi perangkat keras seperti pada Subbab~\ref{sec:hardware}.
|
||||||
|
|
||||||
|
\begin{table}[H]
|
||||||
|
\centering
|
||||||
|
\caption{Hasil ringkasan \textit{coarse grid-search} pada Sensor A ($\mathcal{D}_A$).}
|
||||||
|
\label{tab:coarse_summary_A}
|
||||||
|
\input{chapters/id/tables/coarse_summary_A}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\begin{table}[H]
|
||||||
|
\centering
|
||||||
|
\caption{Hasil ringkasan \textit{coarse grid-search} pada Sensor B ($\mathcal{D}_B$).}
|
||||||
|
\label{tab:coarse_summary_B}
|
||||||
|
\input{chapters/id/tables/coarse_summary_B}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
Tabel~\ref{tab:coarse_summary_A} dan~\ref{tab:coarse_summary_B} menunjukkan hasil ringkasan \textit{coarse grid-search} dengan nilai maksimum \textit{mean test score} untuk setiap konfigurasi $n_{\text{components}}$ pada Sensor A ($\mathcal{D}_A$) dan Sensor B ($\mathcal{D}_B$). Kolom \gls{not:S_i} menunjukkan akurasi tertinggi yang dicapai, sedangkan kolom \gls{not:T_i} mencatat waktu rata-rata (dalam detik) yang dibutuhkan untuk melatih model (\textit{mean fit time}) pada setiap kombinasi parameter.
|
||||||
|
|
||||||
|
Dari hasil tersebut, terlihat bahwa $n_{\text{components}}=64$ sudah mencapa akurasi yang cukup tinggi untuk kedua kanal sensor, dengan akurasi $\pm 99.7\%$, dengan peningkatan yang semakin kecil pada jumlah komponen yang lebih besar yaitu kurang dari 0.001\%. Hal ini menunjukkan bahwa data getaran struktur yang diekstraksi dengan \gls{stft} memiliki daya klasifikasi yang kuat terhadap kondisi struktur, dan penggunaan lebih dari 64 komponen utama memberikan peningkatan akurasi yang marginal.
|
||||||
|
|
||||||
|
% \subsection{Evaluasi Keseluruhan}
|
||||||
|
% Distribusi akurasi seluruh kandidat model ditunjukkan pada
|
||||||
|
% Gambar~\ref{fig:grid_hist}.
|
||||||
|
% Sebagian besar kombinasi menghasilkan akurasi di atas~95\%,
|
||||||
|
% menunjukkan bahwa fitur STFT memiliki daya klasifikasi yang kuat
|
||||||
|
% terhadap kondisi struktur.
|
||||||
|
|
||||||
|
% \begin{figure}[H]
|
||||||
|
% \centering
|
||||||
|
% % \includegraphics[width=.65\textwidth]{figures/grid_hist.pdf}
|
||||||
|
% \caption{Distribusi akurasi validasi silang dari 225 kombinasi parameter $(C,\gamma,n_{\text{components}})$.}
|
||||||
|
% \label{fig:grid_hist}
|
||||||
|
% \end{figure}
|
||||||
|
|
||||||
|
% \subsection{Pengaruh Jumlah Komponen PCA}
|
||||||
|
% Rata-rata akurasi tertinggi untuk setiap nilai $n_{\text{components}}$
|
||||||
|
% ditampilkan pada Gambar~\ref{fig:pca_acc_overall}.
|
||||||
|
% Terlihat bahwa akurasi meningkat hingga mencapai puncak pada rentang
|
||||||
|
% $n_{\text{components}} = 64$--$128$, kemudian menurun ketika jumlah komponen
|
||||||
|
% dikurangi secara agresif.
|
||||||
|
% Hal ini menunjukkan bahwa sekitar 10–25\% komponen utama sudah cukup
|
||||||
|
% merepresentasikan informasi penting dari fitur STFT.
|
||||||
|
|
||||||
|
% \begin{figure}[H]
|
||||||
|
% \centering
|
||||||
|
% % \includegraphics[width=.7\textwidth]{figures/pca_acc_overall.pdf}
|
||||||
|
% \caption{Rata-rata akurasi terhadap jumlah komponen PCA berdasarkan hasil pencarian \textit{grid}.}
|
||||||
|
% \label{fig:pca_acc_overall}
|
||||||
|
% \end{figure}
|
||||||
|
|
||||||
|
\subsection{Peta Akurasi terhadap Parameter SVM}
|
||||||
|
Untuk setiap kanal sensor, peta akurasi terhadap parameter \gls{not:C}dan~\gls{not:gamma}
|
||||||
|
pada konfigurasi \gls{pca} terbaik ($n_{\text{components}}=128$)
|
||||||
|
ditunjukkan pada Gambar~\ref{fig:svm_heatmap_A} dan~\ref{fig:svm_heatmap_B}. Terlihat bahwa area akurasi tinggi terbentuk pada
|
||||||
|
nilai \gls{not:C} menengah dan \gls{not:gamma} kecil,
|
||||||
|
yang menandakan keseimbangan antara margin yang cukup lebar
|
||||||
|
dan kompleksitas model yang moderat.
|
||||||
|
|
||||||
|
\begin{figure}
|
||||||
|
\centering
|
||||||
|
\subfloat[Baseline]{\includegraphics[width=.48\textwidth]{chapters/img/sensor1/grid_original.png}}\hfill
|
||||||
|
\subfloat[PCA=256]{\includegraphics[width=.48\textwidth]{chapters/img/sensor1/grid_pca256.png}}\hfill \\[1ex]
|
||||||
|
\subfloat[PCA=128]{\includegraphics[width=.48\textwidth]{chapters/img/sensor1/grid_pca128.png}}\hfill
|
||||||
|
\subfloat[PCA=64]{\includegraphics[width=.48\textwidth]{chapters/img/sensor1/grid_pca64.png}}\hfill \\[1ex]
|
||||||
|
\subfloat[PCA=32]{\includegraphics[width=.48\textwidth]{chapters/img/sensor1/grid_pca32.png}}\hfill
|
||||||
|
\subfloat[PCA=16]{\includegraphics[width=.48\textwidth]{chapters/img/sensor1/grid_pca16.png}}\hfill \\[1ex]
|
||||||
|
\subfloat[PCA=8]{\includegraphics[width=.48\textwidth]{chapters/img/sensor1/grid_pca8.png}}\hfill
|
||||||
|
\subfloat[PCA=4]{\includegraphics[width=.48\textwidth]{chapters/img/sensor1/grid_pca4.png}}\hfill
|
||||||
|
\caption{\textit{Heatmap mean test score} terhadap parameter \gls{not:C}dan~\gls{not:gamma} untuk setiap komponen utama PCA pada Sensor A ($\mathcal{D}_A$).}
|
||||||
|
\label{fig:svm_heatmap_A}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}
|
||||||
|
\centering
|
||||||
|
\subfloat[Baseline]{\includegraphics[width=.48\textwidth]{chapters/img/sensor2/grid_original.png}}\hfill
|
||||||
|
\subfloat[PCA=256]{\includegraphics[width=.48\textwidth]{chapters/img/sensor2/grid_pca256.png}}\hfill \\[1ex]
|
||||||
|
\subfloat[PCA=128]{\includegraphics[width=.48\textwidth]{chapters/img/sensor2/grid_pca128.png}}\hfill
|
||||||
|
\subfloat[PCA=64]{\includegraphics[width=.48\textwidth]{chapters/img/sensor2/grid_pca64.png}}\hfill \\[1ex]
|
||||||
|
\subfloat[PCA=32]{\includegraphics[width=.48\textwidth]{chapters/img/sensor2/grid_pca32.png}}\hfill
|
||||||
|
\subfloat[PCA=16]{\includegraphics[width=.48\textwidth]{chapters/img/sensor2/grid_pca16.png}}\hfill \\[1ex]
|
||||||
|
\subfloat[PCA=8]{\includegraphics[width=.48\textwidth]{chapters/img/sensor2/grid_pca8.png}}\hfill
|
||||||
|
\subfloat[PCA=4]{\includegraphics[width=.48\textwidth]{chapters/img/sensor2/grid_pca4.png}}\hfill
|
||||||
|
\caption{\textit{Heatmap mean test score} terhadap parameter \gls{not:C}dan~\gls{not:gamma} untuk setiap komponen utama PCA pada Sensor B ($\mathcal{D}_B$).}
|
||||||
|
\label{fig:svm_heatmap_B}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\subsection{Analisis Efisiensi Model pada \textit{Coarse Grid-Search}}
|
||||||
|
\label{sec:efficiency_analysis}
|
||||||
|
Selain mempertimbangkan akurasi rata-rata (\textit{mean test score})
|
||||||
|
sebagai satu-satunya metrik evaluasi, penelitian ini juga memperhitungkan
|
||||||
|
waktu pelatihan rata-rata (\textit{mean fit time}) untuk menilai efisiensi komputasi.
|
||||||
|
Hal ini penting karena peningkatan akurasi sering kali diikuti dengan
|
||||||
|
kenaikan waktu pelatihan yang tidak proporsional.
|
||||||
|
|
||||||
|
Metrik \gls{not:E_i} menggambarkan rasio akurasi terhadap biaya waktu pelatihan.
|
||||||
|
Semakin besar nilai \gls{not:E_i}, semakin efisien model tersebut atau
|
||||||
|
model mampu mencapai akurasi tinggi dengan waktu pelatihan yang relatif singkat.
|
||||||
|
|
||||||
|
% \begin{figure}[H]
|
||||||
|
% \centering
|
||||||
|
% % \includegraphics[width=.7\textwidth]{figures/efficiency_score.pdf}
|
||||||
|
% \caption{Perbandingan metrik efisiensi (\gls{not:E_i}$$) dan akurasi rata-rata (\gls{not:S_i})
|
||||||
|
% terhadap jumlah komponen PCA.}
|
||||||
|
% \label{fig:efficiency_score}
|
||||||
|
% \end{figure}
|
||||||
|
|
||||||
|
\begin{table}[H]
|
||||||
|
\centering
|
||||||
|
\caption{Hasil ringkasan nilai maksimum \textit{mean test score} untuk setiap konfigurasi $n_{\text{components}}$ pada Sensor A ($\mathcal{D}_A$).}
|
||||||
|
\label{tab:efficiency_summary_A}
|
||||||
|
\input{chapters/id/tables/efficiency_summary_A}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\begin{table}[H]
|
||||||
|
\centering
|
||||||
|
\caption{Hasil ringkasan nilai maksimum \textit{mean test score} untuk setiap konfigurasi $n_{\text{components}}$ pada Sensor B ($\mathcal{D}_B$).}
|
||||||
|
\label{tab:efficiency_summary_B}
|
||||||
|
\input{chapters/id/tables/efficiency_summary_B}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
Hasil pada Tabel~\ref{tab:efficiency_summary_A} dan Tabel~\ref{tab:efficiency_summary_B} menunjukkan bahwa,
|
||||||
|
meskipun nilai akurasi tertinggi dicapai pada
|
||||||
|
$n_{\text{components}} = 512$ untuk kedua kanal sensor,
|
||||||
|
puncak nilai metrik efisiensi dicapai pada
|
||||||
|
$n_{\text{components}} = 32$ dengan $E = 0.9504$ untuk Sensor A ($\mathcal{D}_A$) dan $n_{\text{components}} = 16$ dengan $E = 0.9116$ untuk Sensor B ($\mathcal{D}_B$).
|
||||||
|
Artinya, pengurangan dimensi hingga 32 komponen untuk Sensor A dan 16 komponen untuk Sensor B
|
||||||
|
menghasilkan model yang hampir seakurat konfigurasi berdimensi penuh,
|
||||||
|
namun dengan waktu pelatihan yang berkurang lebih dari 75\%.
|
||||||
|
% Kompromi ini dianggap sebagai titik optimum antara performa dan efisiensi.
|
||||||
|
|
||||||
|
Berdasarkan kombinasi akurasi, waktu pelatihan, dan metrik efisiensi,
|
||||||
|
konfigurasi dengan $n_{\text{components}}=32$ untuk Sensor A dan $n_{\text{components}}=16$ untuk Sensor B dipilih sebagai
|
||||||
|
\textit{baseline} optimal untuk model akhir.
|
||||||
|
Model \textit{baseline} ini akan digunakan sebagai acuan pada tahap evaluasi model dan pencarian \textit{hyperparameter} lanjutan (\textit{fine grid-search})
|
||||||
|
yang dibahas pada subbab berikutnya.
|
||||||
|
|
||||||
|
|
||||||
|
\section{Evaluasi Model \textit{Baseline}}
|
||||||
|
\label{sec:baseline_performance}
|
||||||
|
Model \textit{baseline} yang digunakan diperoleh dari \textit{coarse \gls{grid-search}} pada Subbab~\ref{sec:efficiency_analysis} adalah \gls{svm} dengan kernel \gls{rbf}, 32 komponen \gls{pca}, dan \textit{hyperparameter} $C=2^{10}$, $\gamma=2^{-10}$ untuk Sensor A, sedangkan untuk Sensor B adalah SVM dengan kernel RBF, 16 komponen PCA, dan \textit{hyperparameter} $C=2^{5}$, $\gamma=2^{-5}$. Pada bagian ini, dilakukan evaluasi performa model \textit{baseline} dengan data uji yang berbeda (\textit{Dataset} B).
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Metrik Klasifikasi}
|
||||||
|
Metrik klasifikasi model \textit{baseline} pada dataset pengujian disajikan pada Tabel~\ref{tab:metrics-baseline_A} dan~\ref{tab:metrics-baseline_B}.
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\caption{\textit{Classification report} model \textit{baseline} pada Sensor A}
|
||||||
|
\label{tab:metrics-baseline_A}
|
||||||
|
\input{chapters/id/tables/metrics-baseline_A.tex}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\begin{table}[htbp]
|
||||||
|
\centering
|
||||||
|
\caption{\textit{Classification report} model \textit{baseline} pada Sensor B}
|
||||||
|
\label{tab:metrics-baseline_B}
|
||||||
|
\input{chapters/id/tables/metrics-baseline_B.tex}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
Hasil ini menunjukkan bahwa model \textit{baseline} kedua sensor mencapai akurasi 99\%. Nilai \textit{recall} yang relatif tinggi (99.0\%) menunjukkan bahwa model lebih sensitif untuk mendeteksi kelas kerusakan, meskipun nilai \textit{precision} yang sedikit lebih rendah, menunjukkan bahwa ada beberapa \textit{false-positive} yang dihasilkan.
|
||||||
|
|
||||||
|
\subsection{\textit{Confusion Matrix}}
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=0.8\textwidth]{chapters/img/sensor1/cm_baseline_s1a_eval.png}
|
||||||
|
\caption{\textit{Confusion matrix} model \textit{baseline} SVM (RBF) pada Sensor A}
|
||||||
|
\label{fig:confusion-matrix-baseline_A}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=0.8\textwidth]{chapters/img/sensor2/cm_baseline_s2a_eval.png}
|
||||||
|
\caption{\textit{Confusion matrix} model \textit{baseline} SVM (RBF) pada Sensor B}
|
||||||
|
\label{fig:confusion-matrix-baseline_B}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Dari Gambar~\ref{fig:confusion-matrix-baseline_A} dan~\ref{fig:confusion-matrix-baseline_B}, terlihat bahwa kedua model minim kesalahan klasifikasi, dengan sebagian besar prediksi berada di diagonal utama. Beberapa kesalahan klasifikasi minor terjadi paling banyak antara kelas 0 dengan kelas 1 dan kelas 6.
|
||||||
|
|
||||||
|
|
||||||
|
\section{\textit{Fine Grid-Search}}
|
||||||
|
Optimasi model yang dilakukan yaitu dengan melakukan \textit{fine \gls{grid-search}} pada rentang \textit{hyperparameter} model \textit{baseline} yang digunakan pada Subbab~\ref{sec:baseline_performance}. Untuk Sensor A dengan $n_{\text{components}} = 32$ rentang \textit{hyperparameter} yang dicari adalah
|
||||||
|
\begin{align*}
|
||||||
|
C &= \{\, 2^8,\, 2^{8.5},\, \ldots,\, 2^{12} \,\} \\
|
||||||
|
\gamma &= \{\, 2^{-12},\, 2^{-11.5},\, \ldots ,\, 2^{-8} \,\},
|
||||||
|
\end{align*}sedangkan Sensor B dengan $n_{\text{components}} = 16$ rentang \textit{hyperparameter} yang dicari adalah
|
||||||
|
\begin{align*}
|
||||||
|
C &= \{\, 2^3,\, 2^{3.5},\, \ldots,\, 2^{7} \,\} \\
|
||||||
|
\gamma &= \{\, 2^{-7},\, 2^{-6.5},\, \ldots ,\, 2^{-3} \,\}.
|
||||||
|
\end{align*}. Pada proses ini, \textit{\gls{standard-scaler}} dan \textit{\gls{stratified-k-fold} \gls{cross-validation}} dengan $k=5$ tetap digunakan untuk menjaga konsistensi evaluasi model, sehingga total kombinasi parameter yang diuji adalah \(9\times9 = 81\) kandidat model dengan total 405 kali \textit{fitting}.
|
||||||
|
|
||||||
|
\subsection{Diagram \textit{Fine Grid-Search Heatmap}}
|
||||||
|
Gambar~\ref{fig:svm_fine_heatmap} menunjukkan diagram \textit{heatmap} terhadap parameter \textit{fine grid-search} \gls{not:C}dan~\gls{not:gamma} untuk masing-masing sensor. Akurasi tertinggi pada Sensor A diperoleh pada $C= \{\,2^{8}, \,2^{8.5}, \,2^{9}, \,2^{9.5}, \,2^{10}, \,2^{10.5},\,2^{11}, \,2^{11.5}, \,2^{12} \,\}$ dan $\gamma=2^{-8}$ dengan akurasi meningkat 0.15\% menjadi 99.54\%, sedangkan pada Sensor B diperoleh pada $\gamma = \{\,2^{-5},\,2^{-5.5} \,\}$ dan $C= \{\, 2^{3},\, 2^{3.5},\, 2^{4}\,\}$ dengan akurasi meningkat 0.05\% menjadi 99.49\%. Hasil ini menunjukkan bahwa optimasi \textit{hyperparameter} lebih lanjut dapat meningkatkan performa model meskipun peningkatannya relatif kecil dibandingkan dengan model \textit{baseline}.
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\subfloat[Sensor A (PCA 32)]{\includegraphics[width=.48\textwidth]{chapters/img/sensor1/grid_fine_pca32.png}}
|
||||||
|
\centering
|
||||||
|
\subfloat[Sensor B (PCA 16)]{\includegraphics[width=.48\textwidth]{chapters/img/sensor2/grid_fine_pca16.png}}
|
||||||
|
\caption{\textit{Heatmap mean test score} terhadap \textit{fine grid-search parameter} \gls{not:C}dan~\gls{not:gamma}}
|
||||||
|
\label{fig:svm_fine_heatmap}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\section{Evaluasi Model \textit{Fine Grid-Search}}
|
||||||
|
Model \textit{fine \gls{grid-search}} dilatih pada \textit{dataset} A dan perlu dievaluasi performanya dengan data uji yang berbeda (\textit{dataset} B) untuk mengukur peningkatan performa dibandingkan model \textit{baseline}.
|
||||||
|
\subsection{Metrik Klasifikasi}
|
||||||
|
Hasil performa model \textit{fine \gls{grid-search}} pada data uji disajikan pada Tabel~\ref{tab:metrics-fine-a} dan~\ref{tab:metrics-fine-b}.
|
||||||
|
|
||||||
|
\begin{table}
|
||||||
|
\centering
|
||||||
|
\caption{\textit{Classification report} model Sensor A}
|
||||||
|
\label{tab:metrics-fine-a}
|
||||||
|
\input{chapters/id/tables/metrics-fine-a.tex}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\begin{table}
|
||||||
|
\centering
|
||||||
|
\caption{\textit{Classification report} model Sensor B}
|
||||||
|
\label{tab:metrics-fine-b}
|
||||||
|
\input{chapters/id/tables/metrics-fine-b.tex}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\subsection{\textit{Confusion Matrix}}
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=.8\textwidth]{chapters/img/sensor1/cm_fine_s1a_eval.png}
|
||||||
|
\caption{\textit{Confusion matrix} model \textit{fine \gls{grid-search}} pada Sensor A}
|
||||||
|
\label{fig:cm_fine_s1a_eval}
|
||||||
|
\end{figure}
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=.8\textwidth]{chapters/img/sensor2/cm_fine_s2a_eval.png}
|
||||||
|
\caption{\textit{Confusion matrix} model \textit{fine \gls{grid-search}} pada Sensor B}
|
||||||
|
\label{fig:cm_fine_s2a_eval}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\section{Model \textit{Inference} dan Visualisasi Prediksi}
|
||||||
|
Setelah model \textit{fine \gls{grid-search}} dievaluasi, dilakukan proses \textit{inference} pada data uji untuk memvisualisasikan prediksi model. Gambar~\ref{fig:inference_undamaged}, \ref{fig:inference_damaged_17}, dan~\ref{fig:inference_damaged_30} menunjukkan beberapa hasil prediksi model pada Sensor A dan Sensor B dalam \textit{heatmap} dan grafik probabilitasnya.
|
||||||
|
|
||||||
|
Pada kasus struktur tanpa kerusakan (Gambar~\ref{fig:inference_undamaged}), model memberikan prediksi \textit{false-positive}, sehingga beberapa titik pada \textit{heatmap} menunjukkan probabilitas kerusakan hingga 50\% meskipun struktur sebenarnya dalam kondisi baik, sedangkan pada kasus kerusakan \textit{joint} 17 (Gambar~\ref{fig:inference_damaged_17}) dan \textit{joint} 30 (Gambar~\ref{fig:inference_damaged_30}), model berhasil mengidentifikasi lokasi kerusakan dengan probabilitas tinggi ($\approx 100\%$) pada area yang sesuai. Hal ini menunjukkan bahwa model memiliki kemampuan deteksi kerusakan yang baik, meskipun masih terdapat beberapa \textit{false-positive} pada kondisi tanpa kerusakan.
|
||||||
|
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\subfloat[Grafik probabilitas prediksi model pada Sensor A]{\includegraphics[width=.48\textwidth]{chapters/img/sensor1/pod_fine_s1a_undamaged.png}}\hfill
|
||||||
|
\subfloat[\textit{Heatmap} prediksi model pada Sensor A]{\includegraphics[width=.48\textwidth]{chapters/img/sensor1/inference_fine_s1a_undamaged.png}} \\[1ex]
|
||||||
|
\centering
|
||||||
|
\subfloat[Grafik probabilitas prediksi model pada Sensor B]{\includegraphics[width=.48\textwidth]{chapters/img/sensor2/pod_fine_s2a_undamaged.png}}\hfill
|
||||||
|
\subfloat[\textit{Heatmap} prediksi model pada Sensor B]{\includegraphics[width=.48\textwidth]{chapters/img/sensor2/inference_fine_s2a_undamaged.png}}
|
||||||
|
\caption{Hasil \textit{inference} model \textit{fine \gls{grid-search}} pada data uji (\textit{Dataset} B) kasus struktur tidak rusak.}
|
||||||
|
\label{fig:inference_undamaged}
|
||||||
|
\end{figure}
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\subfloat[Grafik probabilitas prediksi model pada Sensor A]{\includegraphics[width=.48\textwidth]{chapters/img/sensor1/pod_fine_s1a_damaged17.png}}\hfill
|
||||||
|
\subfloat[\textit{Heatmap} prediksi model pada Sensor A]{\includegraphics[width=.48\textwidth]{chapters/img/sensor1/inference_fine_s1a_damaged17.png}} \\[1ex]
|
||||||
|
\centering
|
||||||
|
\subfloat[Grafik probabilitas prediksi model pada Sensor B]{\includegraphics[width=.48\textwidth]{chapters/img/sensor2/pod_fine_s2a_damaged17.png}}\hfill
|
||||||
|
\subfloat[\textit{Heatmap} prediksi model pada Sensor B]{\includegraphics[width=.48\textwidth]{chapters/img/sensor2/inference_fine_s2a_damaged17.png}}
|
||||||
|
\caption{Hasil \textit{inference} model \textit{fine \gls{grid-search}} pada data uji (\textit{Dataset} B) kasus kerusakan \textit{joint} 17.}
|
||||||
|
\label{fig:inference_damaged_17}
|
||||||
|
\end{figure}
|
||||||
|
\begin{figure}[H]
|
||||||
|
\centering
|
||||||
|
\subfloat[Grafik probabilitas prediksi model pada Sensor A]{\includegraphics[width=.48\textwidth]{chapters/img/sensor1/pod_fine_s1a_damaged30.png}}\hfill
|
||||||
|
\subfloat[\textit{Heatmap} prediksi model pada Sensor A]{\includegraphics[width=.48\textwidth]{chapters/img/sensor1/inference_fine_s1a_damaged30.png}} \\[1ex]
|
||||||
|
\centering
|
||||||
|
\subfloat[Grafik probabilitas prediksi model pada Sensor B]{\includegraphics[width=.48\textwidth]{chapters/img/sensor2/pod_fine_s2a_damaged30.png}}\hfill
|
||||||
|
\subfloat[\textit{Heatmap} prediksi model pada Sensor B]{\includegraphics[width=.48\textwidth]{chapters/img/sensor2/inference_fine_s2a_damaged30.png}}
|
||||||
|
\caption{Hasil \textit{inference} model \textit{fine \gls{grid-search}} pada data uji (\textit{Dataset} B) kasus kerusakan \textit{joint} 30.}
|
||||||
|
\label{fig:inference_damaged_30}
|
||||||
|
\end{figure}
|
||||||
|
% \section{Efisiensi Komputasi}
|
||||||
|
|
||||||
|
% \subsection{Perbandingan Waktu Latih}
|
||||||
|
% \subsection{Perbandingan Waktu \textit{Inference}}
|
||||||
|
% \begin{table}[htbp]
|
||||||
|
% \centering
|
||||||
|
% \caption{Perbandingan waktu inference model \textit{baseline} dan \textit{preprocessing pipeline}}
|
||||||
|
% \label{tab:training-time}
|
||||||
|
% \begin{tabular}{lrr}
|
||||||
|
% \hline
|
||||||
|
% Iterasi & \textit{Baseline} (detik) & \textit{preprocessing pipeline} (detik)\\
|
||||||
|
% 1 & & 6.53 \\
|
||||||
|
% 2 & & 6.08 \\
|
||||||
|
% 3 & & 6.08 \\
|
||||||
|
% 4 & & 6.10 \\
|
||||||
|
% 5 & & 6.20 \\
|
||||||
|
% Rata-rata & & 6.20 \\
|
||||||
|
% \hline
|
||||||
|
% \end{tabular}
|
||||||
|
% \end{table}
|
||||||
|
|
||||||
|
% \section{}
|
||||||
|
% Model \textit{baseline} yang dilakukan dengan \textit{preprocessing pipeline} mengurangi waktu latih sekitar x \%, sedangkan waktu \textit{inference} tiap sampel berkurang sekitar x \%. Hal ini menunjukkan keefektifan PCA dalam mereduksi dimensi fitur dan \textit{standard scaler}, dengan begitu dapat mengurangi beban komputasi tanpa mengorbankan akurasi.
|
||||||
|
|
||||||
|
% 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}
|
||||||
20
latex/chapters/id/05_conclusion.tex
Normal file
20
latex/chapters/id/05_conclusion.tex
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
\chapter{Kesimpulan dan Saran}
|
||||||
|
|
||||||
|
\section{Kesimpulan}
|
||||||
|
\begin{enumerate}
|
||||||
|
\item Sistem \gls{shm} berbasis sensor terbatas dengan ekstraksi fitur \gls{stft} dan algoritma \gls{svm} kernel \gls{rbf} mampu mendeteksi tujuh kondisi struktur dengan akurasi di atas 99\%.
|
||||||
|
|
||||||
|
\item Strategi \textit{grid-search} untuk optimasi \textit{hyperparameter} model \gls{svm} hanya memberikan peningkatan paling besar sekitar 0,001\% pada model Sensor A.
|
||||||
|
|
||||||
|
\item Reduksi dimensi \gls{pca} pada fitur-fitur \gls{stft} hingga 16 komponen utama mengurangi waktu pelatihan model secara signifikan hingga 75\% dan ukuran model hingga 99\% dengan pengurangan akurasi hanya 0,003\%.
|
||||||
|
|
||||||
|
\item Model Sensor A dan Sensor B dengan reduksi dimensi hingga enam belas komponen utama \gls{pca} memiliki metrik efisiensi terbaik hingga 91\% dengan waktu latih hanya 10 detik dan pengurangan akurasi 0,003\% dibandingkan model dengan fitur penuh yang memerlukan waktu latih 40 detik.
|
||||||
|
|
||||||
|
\item Hasil visualisasi pada \textit{inference} menunjukkan bahwa pendekatan ini hampir sama efektifnya dengan penelitian sebelumnya yang dapat mengidentifikasi lokalisasi 30 kerusakan meskipun jumlah sensor terbatas.
|
||||||
|
\end{enumerate}
|
||||||
|
|
||||||
|
% \section{Keterbatasan Penelitian}
|
||||||
|
% Penelitian ini dibatasi oleh ruang lingkup dataset QUGS yang hanya mencakup kerusakan tunggal, serta belum mencakup variasi kondisi lingkungan dan algoritma pembanding lainnya.
|
||||||
|
|
||||||
|
\section{Saran}
|
||||||
|
Penelitian lanjutan disarankan untuk memperluas variasi kondisi kerusakan, menguji performa model di lapangan, serta mengembangkan versi \textit{real-time} berbasis perangkat tepi.
|
||||||
15
latex/chapters/id/tables/coarse_summary_A.tex
Normal file
15
latex/chapters/id/tables/coarse_summary_A.tex
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
\centering
|
||||||
|
\begin{tabular}{rrrrr}
|
||||||
|
\toprule
|
||||||
|
$n_{\text{components}}$ & $C (\log_2)$ & $\gamma (\log_2)$ & \gls{not:S_i} & \gls{not:T_i} \\
|
||||||
|
\midrule
|
||||||
|
4 & 5 & -5 & 0.80764 & 11.22306 \\
|
||||||
|
8 & 5 & -5 & 0.97076 & 10.88293 \\
|
||||||
|
16 & 5 & -5 & 0.99116 & 10.53770 \\
|
||||||
|
32 & 10 & -10 & 0.99394 & 10.45783 \\
|
||||||
|
64 & 10 & -10 & 0.99631 & 13.46819 \\
|
||||||
|
128 & 5 & -10 & 0.99728 & 13.43715 \\
|
||||||
|
256 & 5 & -10 & 0.99756 & 17.84189 \\
|
||||||
|
512 & 5 & -10 & 0.99763 & 31.24036 \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
15
latex/chapters/id/tables/coarse_summary_B.tex
Normal file
15
latex/chapters/id/tables/coarse_summary_B.tex
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
\centering
|
||||||
|
\begin{tabular}{rrrrr}
|
||||||
|
\toprule
|
||||||
|
$n_{\text{components}}$ & $C (\log_2)$ & $\gamma (\log_2)$ & \gls{not:S_i} & \gls{not:T_i} \\
|
||||||
|
\midrule
|
||||||
|
4 & 5 & -5 & 0.87845 & 13.77282 \\
|
||||||
|
8 & 0 & -5 & 0.98051 & 12.51643 \\
|
||||||
|
16 & 5 & -5 & 0.99443 & 10.90890 \\
|
||||||
|
32 & 5 & -10 & 0.99596 & 13.42619 \\
|
||||||
|
64 & 5 & -10 & 0.99735 & 11.40759 \\
|
||||||
|
128 & 5 & -10 & 0.99728 & 14.54694 \\
|
||||||
|
256 & 5 & -10 & 0.99777 & 20.27980 \\
|
||||||
|
512 & 5 & -10 & 0.99791 & 39.63068 \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
15
latex/chapters/id/tables/efficiency_summary_A.tex
Normal file
15
latex/chapters/id/tables/efficiency_summary_A.tex
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
\centering
|
||||||
|
\begin{tabular}{rrrrrr}
|
||||||
|
\toprule
|
||||||
|
$n_{\text{components}}$ & $C (\log_2)$ & $\gamma (\log_2)$ & \gls{not:S_i} & \gls{not:T_i} & \gls{not:E_i} $(\times10^{-3})$ \\
|
||||||
|
\midrule
|
||||||
|
4 & 5 & -5 & 0.80764 & 11.22306 & 71.96291 \\
|
||||||
|
8 & 5 & -5 & 0.97076 & 10.88293 & 89.20027 \\
|
||||||
|
16 & 5 & -5 & 0.99116 & 10.53770 & 94.05832 \\
|
||||||
|
32 & 10 & -10 & 0.99394 & 10.45783 & 95.04296 \\
|
||||||
|
64 & 10 & -10 & 0.99631 & 13.46819 & 73.97505 \\
|
||||||
|
128 & 5 & -10 & 0.99728 & 13.43715 & 74.21849 \\
|
||||||
|
256 & 5 & -10 & 0.99756 & 17.84189 & 55.91131 \\
|
||||||
|
512 & 5 & -10 & 0.99763 & 31.24036 & 31.93410 \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
15
latex/chapters/id/tables/efficiency_summary_B.tex
Normal file
15
latex/chapters/id/tables/efficiency_summary_B.tex
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
\centering
|
||||||
|
\begin{tabular}{rrrrrr}
|
||||||
|
\toprule
|
||||||
|
$n_{\text{components}}$ & $C (\log_2)$ & $\gamma (\log_2)$ & \gls{not:S_i} & \gls{not:T_i} & \gls{not:E_i} $(\times10^{-3})$ \\
|
||||||
|
\midrule
|
||||||
|
4 & 5 & -5 & 0.87845 & 13.77282 & 63.78107 \\
|
||||||
|
8 & 0 & -5 & 0.98051 & 12.51643 & 78.33758 \\
|
||||||
|
16 & 5 & -5 & 0.99443 & 10.90890 & 91.15776 \\
|
||||||
|
32 & 5 & -10 & 0.99596 & 13.42619 & 74.18057 \\
|
||||||
|
64 & 5 & -10 & 0.99735 & 11.40759 & 87.42906 \\
|
||||||
|
128 & 5 & -10 & 0.99728 & 14.54694 & 68.55632 \\
|
||||||
|
256 & 5 & -10 & 0.99777 & 20.27980 & 49.20029 \\
|
||||||
|
512 & 5 & -10 & 0.99791 & 39.63068 & 25.18027 \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
16
latex/chapters/id/tables/metrics-baseline_A.tex
Normal file
16
latex/chapters/id/tables/metrics-baseline_A.tex
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
\begin{tabular}{lrrrr}
|
||||||
|
\toprule
|
||||||
|
& precision & recall & f1-score & support \\
|
||||||
|
\midrule
|
||||||
|
0 & 0.99 & 0.98 & 0.99 & 2565.00 \\
|
||||||
|
1 & 0.99 & 1.00 & 1.00 & 2565.00 \\
|
||||||
|
2 & 1.00 & 1.00 & 1.00 & 2565.00 \\
|
||||||
|
3 & 1.00 & 1.00 & 1.00 & 2565.00 \\
|
||||||
|
4 & 1.00 & 1.00 & 1.00 & 2565.00 \\
|
||||||
|
5 & 1.00 & 1.00 & 1.00 & 2565.00 \\
|
||||||
|
6 & 0.99 & 1.00 & 0.99 & 2565.00 \\
|
||||||
|
accuracy & 1.00 & 1.00 & 1.00 & 1.00 \\
|
||||||
|
macro avg & 1.00 & 1.00 & 1.00 & 17955.00 \\
|
||||||
|
weighted avg & 1.00 & 1.00 & 1.00 & 17955.00 \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
17
latex/chapters/id/tables/metrics-baseline_B.tex
Normal file
17
latex/chapters/id/tables/metrics-baseline_B.tex
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
\centering
|
||||||
|
\begin{tabular}{lrrrr}
|
||||||
|
\toprule
|
||||||
|
& precision & recall & f1-score & support \\
|
||||||
|
\midrule
|
||||||
|
0 & 0.99 & 0.98 & 0.99 & 2565.00 \\
|
||||||
|
1 & 0.99 & 1.00 & 1.00 & 2565.00 \\
|
||||||
|
2 & 1.00 & 1.00 & 1.00 & 2565.00 \\
|
||||||
|
3 & 1.00 & 1.00 & 1.00 & 2565.00 \\
|
||||||
|
4 & 1.00 & 1.00 & 1.00 & 2565.00 \\
|
||||||
|
5 & 1.00 & 1.00 & 1.00 & 2565.00 \\
|
||||||
|
6 & 0.99 & 1.00 & 0.99 & 2565.00 \\
|
||||||
|
accuracy & 1.00 & 1.00 & 1.00 & 1.00 \\
|
||||||
|
macro avg & 1.00 & 1.00 & 1.00 & 17955.00 \\
|
||||||
|
weighted avg & 1.00 & 1.00 & 1.00 & 17955.00 \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
16
latex/chapters/id/tables/metrics-fine-a.tex
Normal file
16
latex/chapters/id/tables/metrics-fine-a.tex
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
\begin{tabular}{lrrrr}
|
||||||
|
\toprule
|
||||||
|
& precision & recall & f1-score & support \\
|
||||||
|
\midrule
|
||||||
|
0 & 0.99 & 0.99 & 0.99 & 2565.00 \\
|
||||||
|
1 & 0.99 & 1.00 & 0.99 & 2565.00 \\
|
||||||
|
2 & 1.00 & 1.00 & 1.00 & 2565.00 \\
|
||||||
|
3 & 1.00 & 1.00 & 1.00 & 2565.00 \\
|
||||||
|
4 & 1.00 & 1.00 & 1.00 & 2565.00 \\
|
||||||
|
5 & 1.00 & 1.00 & 1.00 & 2565.00 \\
|
||||||
|
6 & 1.00 & 1.00 & 1.00 & 2565.00 \\
|
||||||
|
accuracy & 1.00 & 1.00 & 1.00 & 1.00 \\
|
||||||
|
macro avg & 1.00 & 1.00 & 1.00 & 17955.00 \\
|
||||||
|
weighted avg & 1.00 & 1.00 & 1.00 & 17955.00 \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
17
latex/chapters/id/tables/metrics-fine-b.tex
Normal file
17
latex/chapters/id/tables/metrics-fine-b.tex
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
\centering
|
||||||
|
\begin{tabular}{lrrrr}
|
||||||
|
\toprule
|
||||||
|
& precision & recall & f1-score & support \\
|
||||||
|
\midrule
|
||||||
|
0 & 0.99 & 0.99 & 0.99 & 2565.00 \\
|
||||||
|
1 & 0.99 & 1.00 & 0.99 & 2565.00 \\
|
||||||
|
2 & 1.00 & 1.00 & 1.00 & 2565.00 \\
|
||||||
|
3 & 1.00 & 1.00 & 1.00 & 2565.00 \\
|
||||||
|
4 & 1.00 & 1.00 & 1.00 & 2565.00 \\
|
||||||
|
5 & 1.00 & 1.00 & 1.00 & 2565.00 \\
|
||||||
|
6 & 1.00 & 1.00 & 1.00 & 2565.00 \\
|
||||||
|
accuracy & 1.00 & 1.00 & 1.00 & 1.00 \\
|
||||||
|
macro avg & 1.00 & 1.00 & 1.00 & 17955.00 \\
|
||||||
|
weighted avg & 1.00 & 1.00 & 1.00 & 17955.00 \\
|
||||||
|
\bottomrule
|
||||||
|
\end{tabular}
|
||||||
3
latex/chapters/img/accel393.png
Normal file
3
latex/chapters/img/accel393.png
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:6b0c3b4d5be18ffc10c7e94a8caf16cbae2aad7928a6c3676bc62fd42de3b041
|
||||||
|
size 332874
|
||||||
3
latex/chapters/img/cm-pipeline.svg
Normal file
3
latex/chapters/img/cm-pipeline.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:a2b429e2b45db4752eaaa769f35d9de0455f67a3c540b22fe40940bfb09847fb
|
||||||
|
size 69364
|
||||||
3
latex/chapters/img/datalogger.jpg
Normal file
3
latex/chapters/img/datalogger.jpg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:231eecf31113cb6e602ef94d0316dccc2da11a0843fc0cf1c07fae280931dd43
|
||||||
|
size 370078
|
||||||
3
latex/chapters/img/datalogger.png
Normal file
3
latex/chapters/img/datalogger.png
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:b9c0aa8274d4b7bd9095598e9e3b9853d461de18837fab2fe459a3e68f43cc9e
|
||||||
|
size 1196576
|
||||||
3
latex/chapters/img/flow.png
Normal file
3
latex/chapters/img/flow.png
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:548a9a4341392b7823c94fde42cadda8487b96fa1926da0b72ebbdf5ab20ec17
|
||||||
|
size 221991
|
||||||
3
latex/chapters/img/i3-a-output.jpg
Normal file
3
latex/chapters/img/i3-a-output.jpg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:976b59a668753aa5526f1f535d41cc1f8d14b2bd3f7af0cad79367e4c0bd056b
|
||||||
|
size 101919
|
||||||
3
latex/chapters/img/i3-b-output.jpg
Normal file
3
latex/chapters/img/i3-b-output.jpg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:0db69ce2a557747b859a529273c14c542030f7cebb99aa0e3c0286f2dee2625b
|
||||||
|
size 103958
|
||||||
3
latex/chapters/img/original_data.png
Normal file
3
latex/chapters/img/original_data.png
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:613ae345ff79f1f2c408e0359c65e86ffdc32c93d22e84d92b2582207104202c
|
||||||
|
size 812268
|
||||||
3
latex/chapters/img/original_data.svg
Normal file
3
latex/chapters/img/original_data.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:3da444278956145c48a4d81b5b48d363e5e8cfe15826ffd34fc597b83b8d6d0f
|
||||||
|
size 2244908
|
||||||
3
latex/chapters/img/scree_plot.png
Normal file
3
latex/chapters/img/scree_plot.png
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:8b58eb82f20438a1c077cad27cc59adc411466dddd89ab76add0fcc9ea8bba6c
|
||||||
|
size 50180
|
||||||
3
latex/chapters/img/sensor1/cm_baseline_s1a_eval.png
Normal file
3
latex/chapters/img/sensor1/cm_baseline_s1a_eval.png
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:a797b23032f469942623ee5f3c0e63c5c617f479813f38b9b42a2f45a9402a44
|
||||||
|
size 82443
|
||||||
3
latex/chapters/img/sensor1/cm_fine_s1a_eval.png
Normal file
3
latex/chapters/img/sensor1/cm_fine_s1a_eval.png
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:a9000564e224fb539aaf6248ce51d50ae0723e2b54b898d0168e168d097ca8b7
|
||||||
|
size 84759
|
||||||
3
latex/chapters/img/sensor1/grid_fine_pca32.png
Normal file
3
latex/chapters/img/sensor1/grid_fine_pca32.png
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:f508d537ef40e1c5f96c0aa962be6279072e0971c064f398bbde8834b7745ff3
|
||||||
|
size 258668
|
||||||
3
latex/chapters/img/sensor1/grid_original.png
Normal file
3
latex/chapters/img/sensor1/grid_original.png
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:8066c6a0bcfdca8cbb3e8a2bf45f008da269d3a27a00d7f5b819ae0b0722ffe8
|
||||||
|
size 106637
|
||||||
3
latex/chapters/img/sensor1/grid_pca128.png
Normal file
3
latex/chapters/img/sensor1/grid_pca128.png
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:9ebcc8e82e82118dacbebcd8a65ddeb24aaae5d785b91d51ea5627072e46d1df
|
||||||
|
size 107256
|
||||||
3
latex/chapters/img/sensor1/grid_pca16.png
Normal file
3
latex/chapters/img/sensor1/grid_pca16.png
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:d47abef46dd76a8295245d97e142130cbe2611adf0c680cbda00141d4bb2ec66
|
||||||
|
size 122507
|
||||||
3
latex/chapters/img/sensor1/grid_pca256.png
Normal file
3
latex/chapters/img/sensor1/grid_pca256.png
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:0b391cca56d8bfdbf92d0728dc1beed74d15919d0a1083cdda9094a4994d63eb
|
||||||
|
size 105020
|
||||||
3
latex/chapters/img/sensor1/grid_pca32.png
Normal file
3
latex/chapters/img/sensor1/grid_pca32.png
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:c834d24b9ec043adc18f83e00bac718fe10e7bdcfefc926c68a7e1b5013a417c
|
||||||
|
size 116388
|
||||||
3
latex/chapters/img/sensor1/grid_pca4.png
Normal file
3
latex/chapters/img/sensor1/grid_pca4.png
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:a25fee61921224f4c0e12f935b5886d063ab7c5d379ed5e2f969e6887297053b
|
||||||
|
size 139087
|
||||||
3
latex/chapters/img/sensor1/grid_pca64.png
Normal file
3
latex/chapters/img/sensor1/grid_pca64.png
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:6ec29314beeb4ee90a696b404cf6a1759435988832311aa4a14a15da2beeebb5
|
||||||
|
size 117619
|
||||||
3
latex/chapters/img/sensor1/grid_pca8.png
Normal file
3
latex/chapters/img/sensor1/grid_pca8.png
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:ccbeabc5d2b40a1a94925541ea1c51b28eed47fa8e7d2405af517bec1293403a
|
||||||
|
size 133276
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:d5dd62c872dc8a565978adb314d68bb287d7040810aba3e5bab7d50350c9eabf
|
||||||
|
size 43736
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:d39566ab980b9b997b2a049720a8d0eb28370aa0b30363eed34cc2f742b3921e
|
||||||
|
size 29653
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:dcdd9d9f6402363f79aa3d7e9d607112003be6afd079f459f5474dbb87b3a129
|
||||||
|
size 28074
|
||||||
3
latex/chapters/img/sensor1/pacmap_A.png
Normal file
3
latex/chapters/img/sensor1/pacmap_A.png
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:d25f5e991ef79828a2f87c8c640d4117d942a182224d95c903a15f64bc0e9ddd
|
||||||
|
size 126291
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user