- Jupyter Notebook 98.4%
- Python 1.6%
| .opencode/plans | ||
| docs | ||
| examples/structd | ||
| notebooks | ||
| results | ||
| scripts | ||
| src | ||
| tests | ||
| .cookiecutter.json | ||
| .editorconfig | ||
| .gitattributes | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| AGENTS.md | ||
| CHANGELOG.md | ||
| CODE_OF_CONDUCT.md | ||
| coverage.json | ||
| LICENSE | ||
| Makefile | ||
| mkdocs.yml | ||
| package-lock.json | ||
| package.json | ||
| pyproject.toml | ||
| README.md | ||
| test.toml | ||
| test_beam_analytical_verification.png | ||
| test_data.db | ||
| uv.lock | ||
phdsan — Weird Structural Responses of Offshore Wind Turbines under Installation conditions
phdsan is a Python monorepo for my (Aljoscha Sander) PhD research on structural structural dynamics and fluid-strucutre interaction of offshore wind turbines during installation. It provides tools for processing sensor data, performing advanced signal analysis and extracting structural parameters from vibration measurements collected during installation operations.
Features
- Data Management — DuckDB-based storage with multi-sensor support and reproducibility tracking
- Signal Processing — Butterworth filtering, double integration with drift correction, coordinate transformations
- Advanced Analysis — Stochastic methods, nonlinear dynamics, fatigue analysis, time-frequency analysis
- Structural Dynamics — 2-DOF and 3-DOF eccentric mass oscillator models with FEM beam solver (
structd) - AIS Tracking — Vessel-track clustering, windfarm matching, installation-event extraction to estimate real-world installation performance(
ispy) - Environmental Correlation — ERA5 integration, wave / wind / structure correlation
Quick start
# Clone and install
git clone https://github.com/flucto-gmbh/phdsan.git
cd phdsan
make install
# Run tests
uv run pytest
# Start Jupyter Lab
uv run jupyter lab
Library-first workflow
phdsan is a library, not a CLI. Batch tasks are run via small
tyro-based scripts under scripts/ and interactive analyses live
in notebooks/.
Example: rebuild a twbii database from raw data
uv run python -m scripts.db.rebuild \
--data-dir data_twbii \
--primary databases/data.db \
--installation-excel data_twbii/installation_log.xlsx \
--workers 8 --verbose
Example: use the library directly
from twbii.db.connection import DatabaseConnection
from twbii.processing.pipeline import process_acceleration_data
from twbii.db.models import get_tom_data
from analysis.config import FilterConfig, IntegrationConfig
from analysis.fatigue.rainflow import analyze_rainflow
with DatabaseConnection("turbine_data.db", read_only=True) as conn:
raw = get_tom_data(conn, turbine_id="20_BW27", location="helihoist-1")
deflection_df = process_acceleration_data(
raw,
resample_interval="40ms",
filter_config=FilterConfig(lowcut_hz=0.05, highcut_hz=1.0),
integration_config=IntegrationConfig(),
)
rainflow = analyze_rainflow(deflection_df["deflection"])
See docs/user-guide/scripts-reference.md for the full list of batch scripts.
Documentation
Full documentation is available at the documentation site or can be built locally:
uv run mkdocs serve
Package layout
Six packages, no CLI entry points:
core— Shared infrastructure (config, types, exceptions, validation, DDL fragments)analysis— Generic analysis algorithms (filters, fatigue, nonlinear, stochastic, wavelets, DTW)twbii— Offshore wind installation-monitoring toolkit (database, I/O, processing pipelines, analysis)ispy— AIS vessel tracking & windfarm matchingstructd— Beam FEM solver and reduced-order oscillator modelsdroptower— Drop-tower experiment skeleton (work-in-progress)
phdsan/
├── src/
│ ├── core/ # Shared infrastructure
│ ├── analysis/ # Generic analysis algorithms
│ ├── twbii/ # Installation-monitoring toolkit
│ ├── ispy/ # AIS vessel tracking
│ ├── structd/ # Beam FEM solver
│ └── droptower/ # Drop-tower experiment (skeleton)
├── tests/ # Test suite (mirrors src/)
├── scripts/ # tyro-based batch entry points
├── notebooks/ # Jupyter notebooks
└── docs/ # MkDocs documentation
Per-experiment database split: each package owns its own DuckDB file(s); no cross-database joins. See docs/architecture/database-schema.md.
Development
# Install with dev dependencies
make install
# Run tests
make test
# Code quality
uv run ruff check --fix
uv run ty check src/
# Build documentation
make docs
License
MIT License — see LICENSE for details.
Citation
@software{phdsan2026,
title = {phdsan: Structural Health Monitoring of Offshore Wind Turbine Installations},
author = {Sander, Aljoscha},
year = {2026},
url = {https://git.flucto.tech/aljoscha/phdsan}
}
Project Status: Active development