Desktop application for interactive analysis of CSV time-series data and WAV signals.
Built with Qt 6 (Widgets + Charts + Concurrent) and powered by a custom C++ analysis library (process-data-toolkit).
This project consists of:
- Process Data Toolkit (core C++ library)
- Process Data Viewer (Qt desktop application)
- analysis of industrial logs
- diagnostics of sensor data
- anomaly detection in control systems
- Time-series filtering:
- by sensor
- by time range (from / to)
- Anomaly detection:
- Z-score
- IQR
- MAD
- Top-N anomaly selection without full recomputation
- Statistics:
- min / max / mean / stddev
- Data table view with filtering
- Plot with anomaly markers
- Export:
- JSON report (global or per-sensor)
- filtered CSV with anomaly markers
- PNG plot
- Signal segment selection (windowed analysis)
- Spectrum computation:
- FFT / DFT / Auto
- Window functions:
- Hann
- Hamming
- None
- Peak detection:
- local maxima
- threshold-based
- Top-N peak selection without recomputation
- Statistics:
- signal min / max / mean / stddev
- Plots:
- signal waveform
- frequency spectrum
- Export:
- PNG plots
- spectrum CSV
- text report
- Asynchronous analysis using QtConcurrent
- UI remains responsive during computation
- Busy state feedback ("Wait for it.")
- Smart recomputation:
- avoids full recompute when only Top-N changes
This application is built on top of a separate C++20 library:
👉 https://github.com/r-lapins/Process-Data-Toolkit
The toolkit provides all core data processing and signal analysis functionality, including:
- CSV parsing and time-series filtering
- Statistical analysis (mean, stddev, quartiles)
- Anomaly detection (Z-score, IQR, MAD)
- WAV signal processing (DFT, FFT, windowing)
- Spectrum computation and peak detection
- CLI tools for batch processing and benchmarking
The project is intentionally split into:
- PDT (library) → reusable, testable, CLI-capable core
- PDV (this app) → interactive Qt UI on top of the library
This design:
- enforces clean architecture
- enables reuse outside GUI applications
- improves testability and maintainability
The application is split into three layers:
PDV (Qt UI)
├── Core
│ ├── MainWindow
│ ├── FileLoaderService
│ └── AnalysisTab (factory)
│
├── CSV module
│ ├── CsvAnalysisTab
│ ├── CsvAnalysisControlsWidget
│ ├── CsvAnalysisController
│ ├── CsvAnalysisEngine
│ └── CsvAnalysisResultsPanel
│
├── WAV module
│ ├── WavAnalysisTab
│ ├── WavAnalysisControlsWidget
│ ├── WavAnalysisController
│ ├── WavAnalysisEngine
│ └── WavAnalysisResultsPanel
│
└── PDT (process-data-toolkit)
├── csv/
├── wav/
└── core algorithms
-
Controller pattern
- UI (Tab) does not run analysis directly
- Controllers handle orchestration + async execution
-
Engine layer
- pure computation (no Qt)
- easy to test / reuse
-
Separation CSV vs WAV
- similar flow, independent modules
-
SessionData
- unified data entry point
- contains:
- CsvData
- WavData
- C++20
- Qt 6 (Widgets, Charts, Concurrent)
- CMake ≥ 3.21
git clone https://github.com/r-lapins/Process-Data-Viewer-Qt/
cd process_data_viewer_qt
git submodule update --init --recursive
mkdir build
cd build
cmake ..
cmake --build .Run:
./process_data_viewer- File → Open
- or Quick Open (predefined examples folder)
- Load CSV
- Adjust:
- sensor filter
- time range
- anomaly method + threshold
- Toggle:
- auto update / manual recompute
- Inspect:
- table
- plot
- alerts
- Export results
- Load WAV
- Select:
- segment (from, window size)
- algorithm (FFT / DFT)
- window function
- Tune:
- threshold
- peak mode
- Toggle plots:
- signal
- spectrum
- Export:
- PNG
- CSV
- report
- CSV anomaly report (JSON)
- CSV with anomaly markers
- Spectrum CSV (frequency vs magnitude)
- Spectrum report (text)
- Plot PNG exports
- Uses QFutureWatcher + QtConcurrent::run
- Avoids blocking UI thread
- Partial recomputation optimization:
- tryUpdateTopAnomaliesOnly()
- tryUpdateDominantPeaksOnly()
- Plot downsampling (performance-safe rendering)
- Clean separation of:
- UI
- orchestration
- computation
app/
├── core/
├── csv/
├── wav/
include/pdv/
external/process-data-toolkit/
- Shared base interface for CSV/WAV analysis
- Plugin-style analysis modules
- Unit tests for controllers
- Drag & drop file loading
MIT (or your chosen license)

