-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Welcome to FastSense Advanced Dashboard, the home page for the v1.0 milestone release. This guide introduces the five core libraries and the new features released in phases 01–08.
FastSense is an ultra-fast MATLAB/Octave time series plotting and monitoring library optimized for 100M+ point datasets. It combines:
- Smart downsampling (MinMax + LTTB algorithms with SIMD acceleration)
- Interactive dashboards (responsive grid layouts, multi-page navigation, widget composition)
- Sensor monitoring (state-dependent threshold rules, live event detection)
- Real-time visualization (file polling, 5s live refresh, WebBridge web integration)
It requires MATLAB R2020b+ or Octave 7+ with no toolbox dependencies.
Plotting 10M+ points in MATLAB is traditionally slow: plot() must render every pixel, causing zoom latency, high GPU memory, and CPU spikes. FastSense solves this by:
- Down-sampling intelligently — reduces 10M points to ~4K visible points per zoom level
- Pre-computing multi-resolution pyramids — enables instant zoom-out on 50M+ datasets
-
Updating incrementally —
updateData()re-downsamples without full rebuild - Accelerating with MEX+SIMD — optional C kernels with AVX2/NEON intrinsics
Result: 4.7ms zoom cycles (212 FPS) on 10M points, 99.96% point reduction, 0.06MB GPU memory vs 153MB for plot().
| Library | Purpose | Key Classes |
|---|---|---|
| FastSense | Time-series plotting with dynamic downsampling, dashboard layouts, interactive toolbar, themes |
FastSense, FastSenseGrid, FastSenseDock, FastSenseToolbar, FastSenseDataStore
|
| Dashboard | Widget-based dashboards with 24-column responsive grid, multi-page navigation, JSON persistence |
DashboardEngine, DashboardWidget, GroupWidget, FastSenseWidget, NumberWidget, GaugeWidget, StatusWidget
|
| SensorThreshold | Sensor data containers with state-dependent threshold rules, violation detection |
Sensor, StateChannel, ThresholdRule, SensorRegistry, ExternalSensorRegistry
|
| EventDetection | Threshold violation detection, event clustering, Gantt-style visualization, live pipelines |
EventDetector, IncrementalEventDetector, EventViewer, EventStore, LiveEventPipeline
|
| WebBridge | TCP server for web-based dashboards with NDJSON protocol, REST API, WebSocket support |
WebBridge, WebBridgeProtocol, Python FastAPI bridge |
- ✅ Timer error handling (
DashboardEngine.LiveTimerhasErrorFcnthat keeps timer running on errors) - ✅ Fixed
GroupWidget.m export that was dropping children - ✅ Unified jsondecode struct-to-cell normalization across serialization paths
- ✅ Collapsible GroupWidget — collapse/expand triggers layout reflow, reclaiming vertical space
- ✅ Tab persistence — active tab in GroupWidget persists through save/load
- ✅ Tab contrast validation — all 6 theme presets have sufficient tab color contrast
- ✅ Info icons — every widget with a non-empty
Descriptionshows an(i)icon - ✅ Markdown-rendered popups — clicking info icon displays description text rendered as plain text (via
MarkdownRenderer) - ✅ Dismissible popups — close via Escape key or click outside
- ✅ Universal coverage — all 20+ widget types inherit the feature via
DashboardLayout.realizeWidget()
- ✅
DashboardPagemodel — define multiple named pages within one dashboard - ✅ Page navigation UI — toolbar buttons switch between pages
- ✅ Page scoping — only active page widgets are rendered and refreshed (inactive pages hidden)
- ✅ Persistence — page structure + active page index survive JSON save/load and .m export
- ✅ Backward compatibility — pre-existing single-page dashboards load without errors
- ✅ Detach buttons — every widget header has a detach button for pop-out to standalone figure
- ✅ Live sync — detached widgets receive data updates from the engine's timer (no extra timers)
- ✅ Independent zoom — detached
FastSenseWidgethasUseGlobalTime=falsefor independent panning - ✅ Cleanup on close — closing a detached window removes it from the registry
- ✅ Read-only mirrors — detached widgets don't edit the original (one-way sync)
- ✅ Multi-page JSON round-trip — pages + active index preserved through save/load
- ✅ Multi-page .m export — MATLAB function script exports reconstruct multi-page layouts
- ✅ Collapsed state persistence —
GroupWidget.Collapsedsurvives JSON round-trip - ✅ Detached exclusion — detached widget state not persisted (session-only)
- ✅ Legacy JSON compatibility — pre-v1.0 single-page JSON imports without error
- ✅ Multi-page time controls — time panel methods scope to active page only
- ✅ Test label corrections — LAYOUT-05/06 requirement references fixed
- ✅ DividerWidget — new horizontal separator widget for visual section breaks
- ✅ addCollapsible() convenience API — shorthand for creating collapsible GroupWidget
- ✅ Y-axis limits —
FastSenseWidget.YLimitsproperty for fixed or auto-scaled Y ranges
- 24-column responsive grid — widgets auto-position with overlap resolution
- Grid reflow — collapsing/expanding sections automatically re-compact grid
- Multi-page layouts — organize dashboards into navigable sections with active-page filtering
- Detachable widgets — pop any widget into a standalone monitored figure
-
Edit mode — drag-to-move, resize-to-grid, widget palette (via
DashboardBuilder) - Theme inheritance — cascading theme override from element → tile → figure → preset
- FastSenseWidget — time-series plots with thresholds, violation markers, zoom/pan
- NumberWidget — large formatted value with trend (up/flat/down) and units
- GaugeWidget — arc/donut/bar/thermometer styles with auto-scaled ranges
- StatusWidget — color-coded status dot (ok/warn/alarm) with label
- TextWidget — static text/labels for section headers
- TableWidget — tabular data from sensors or callbacks
-
RawAxesWidget — custom MATLAB plots via user-supplied
PlotFcn - EventTimelineWidget — Gantt-style event bar timeline with optional sensor overlay
-
Sensor-first model — widgets automatically derive value, units, range, colors from bound
Sensor - State-dependent thresholds — rules activate/deactivate based on system state channels
- Violation tracking — threshold crossings pre-computed and cached per sensor
- Event detection — violations clustered into events with statistics (peak, duration, mean, RMS)
- File polling — dashboard auto-refreshes from live .mat files at configurable intervals
- View modes — preserve (fixed viewport), follow (scroll to new data), reset (auto-scale)
- Incremental updates — only changed widgets refresh (dirty-flag optimization)
- Multi-sensor sync — all sensors update on single timer tick (no drift)
- JSON format — compact config with widget definitions, sensor bindings, page structure
- MATLAB export — pure .m function scripts that reconstruct dashboards programmatically
- Round-trip fidelity — save/load and .m export preserve all properties, state, relationships
- Backward compat — pre-v1.0 configurations load without errors (warnings on unknown fields)
%% Install FastSense
install;
%% Create a dashboard with multiple pages
d = DashboardEngine('Name', 'Motor Health Monitor', 'Theme', 'dark');
%% Page 1: Overview
d.addPage('Overview');
% Create sensors with state-dependent thresholds
motor_rpm = Sensor('rpm', 'X', (0:1000)', 'Y', randi([500 3500], 1, 1001), 'Units', 'RPM');
motor_rpm.addThresholdRule(struct(), 2500, 'upper', 'Label', 'Max Speed');
motor_rpm.resolve();
% Add widgets to Overview page
d.addWidget('fastsense', 'Title', 'Motor RPM', 'Sensor', motor_rpm, 'Position', [1, 1, 12, 3]);
d.addWidget('number', 'Title', 'Current', 'ValueFcn', @() motor_rpm.Y(end), 'Position', [13, 1, 6, 1]);
%% Page 2: Diagnostics
d.addPage('Diagnostics');
% Add detailed analysis widgets
d.addWidget('gauge', 'Title', 'Speed %', 'ValueFcn', @() 100*motor_rpm.Y(end)/3500, ...
'Range', [0 100], 'Position', [1, 1, 6, 2]);
%% Render and display
d.render();
%% Save for later
d.save('motor_dashboard.json');
%% Load from file
d2 = DashboardEngine.load('motor_dashboard.json');Getting Started
- Installation — setup instructions and MEX compilation
- Getting Started — step-by-step tutorials (basic plots, dashboards, sensors, live mode)
Feature Guides
- Dashboard Engine Guide — DashboardEngine with 8 widget types
- Event Detection Guide — threshold violations, event detection, live pipelines
- Live Mode Guide — file polling and live refresh
- Datetime Guide — working with datetime X-axes
Internals & Performance
- Architecture — render pipeline, downsampling, pyramid caching, data flows
- MEX Acceleration — optional C kernels with SIMD (AVX2/NEON)
- Performance — benchmarks, tuning, profiling
API Reference
- API Reference: FastPlot — main plotting engine
- API Reference: Dashboard — DashboardEngine, widgets, layout
- API Reference: Sensors — Sensor, StateChannel, ThresholdRule
- API Reference: Event Detection — EventDetector, EventViewer, LiveEventPipeline
- API Reference: Themes — theme presets, color palettes, customization
- API Reference: Utilities — ConsoleProgressBar, FastSenseDefaults
Examples & Use Cases
- Examples — 80+ categorized runnable examples (basic, layouts, data handling, sensors, events, dashboards, stress tests)
- Use Case: Multi-Sensor Shared Threshold — monitoring multiple sensors with a shared threshold
| Component | Stack |
|---|---|
| Core | MATLAB R2020b+ / Octave 7+ (pure MATLAB) |
| Rendering | Native MATLAB figure/uipanel/uicontrol (no App Designer, no toolboxes) |
| Acceleration | Optional C MEX with SIMD (AVX2 x86_64, NEON ARM64) |
| Data | SQLite3 (bundled) for disk-backed storage |
| Web | Python FastAPI + JavaScript uPlot for WebBridge (optional) |
- GitHub Issues — bug reports, feature requests
- Discussions — Q&A, usage patterns, performance tuning
- Wiki — reference documentation, guides, examples
FastSense Wiki
API Reference
Guides
Use Cases
Internals
Resources