-
Notifications
You must be signed in to change notification settings - Fork 0
Home
github-actions[bot] edited this page Apr 17, 2026
·
19 revisions
Ultra-fast time series plotting for MATLAB and GNU Octave with dynamic downsampling, sensor monitoring, and dashboard layouts.
MATLAB's plot() struggles with large datasets. FastSense solves this with smart downsampling and caching, enabling smooth interactive exploration of 100M+ point datasets without toolbox dependencies.
graph LR
A["Raw Data<br/>(100M points)"] -->|Dynamic<br/>Downsampling| B["Visible Points<br/>(~4K)"]
B -->|Pyramid Cache| C["Multi-Resolution<br/>Levels"]
C -->|Binary Search| D["Instant Zoom<br/>4.7ms cycle"]
style A fill:#e1f5ff
style D fill:#c8e6c9
| Metric | Value |
|---|---|
| 10M point zoom cycle | 4.7 ms (212 FPS) |
| Point reduction | 99.96% (10M → ~4K displayed) |
| GPU memory (10M pts) | 0.06 MB vs 153 MB for plot()
|
| Speedup vs MATLAB | 50–100× at extreme scales |
| Implementation | Pure MATLAB + optional C MEX (AVX2/NEON SIMD) |
| MATLAB versions | R2020b+ or GNU Octave 7+ |
FastSense comprises five integrated libraries:
graph TB
A["FastSense<br/>Core Plotting"] -->|"renders"| B["Dashboard<br/>Widgets & Layouts"]
A -->|"monitors"| C["SensorThreshold<br/>State-Dependent Limits"]
C -->|"detects"| D["EventDetection<br/>Violation Events"]
B -->|"exposes via"| E["WebBridge<br/>TCP/Web API"]
style A fill:#fff9c4
style B fill:#f0f4c3
style C fill:#e1bee7
style D fill:#ffccbc
style E fill:#b3e5fc
| Library | Purpose | Key Classes |
|---|---|---|
| FastSense | Core time-series plotting with downsampling & caching | FastSense, FastSenseGrid, FastSenseToolbar |
| Dashboard | Widget-based dashboards with responsive grid layouts | DashboardEngine, 8 widget types, JSON serialization |
| SensorThreshold | Sensor data with state-dependent thresholds & violation detection | Tag (base), SensorTag, StateTag, MonitorTag, CompositeTag, TagRegistry |
| EventDetection | Threshold violation event detection with Gantt timeline viewer | EventDetector, EventStore, LiveEventPipeline, EventViewer |
| WebBridge | REST API and WebSocket server for web-based visualization | WebBridge, Python bridge components |
- Per-pixel MinMax and LTTB algorithms preserve peaks and valleys
- Auto-selected per zoom level for optimal visual fidelity
- O(log N) binary search for instant zoom cycles
- Responsive 24-column grid with drag-and-drop edit mode
- 8 widget types (time-series, KPI, gauges, status, table, events, heatmap, scatter)
- Multi-page navigation with tabbed pages and collapsible groups
- JSON save/load and .m script export for reproducibility
- State-dependent thresholds that adapt to operating mode or recipe phase
- Tag-based domain model (SensorTag, MonitorTag, CompositeTag)
- Lazy-evaluated derived signals with debounce and hysteresis
- Violation markers with customizable styling and colors
- Automatic threshold violation grouping into events with statistics (peak, mean, RMS, std)
- Gantt timeline viewer with click-to-plot sensor data inspection
- Live event pipeline for real-time monitoring with email notifications
- Event snapshots with detail + context plots
- 6 built-in presets (default, dark, light, industrial, scientific, ocean)
- 3 color palettes (vibrant, muted, colorblind)
- Per-widget and per-tile theme overrides
- Adaptive tick label formatting for datetime axes
-
SQLite-backed
FastSenseDataStorefor 100M+ point datasets - Chunked binary BLOB storage with indexed X-range queries
- Multi-resolution pyramid for instant zoom-out
- Transparent memory/disk switching based on size limits
- SIMD-optimized C implementations (AVX2 x86_64, NEON ARM64)
- 3–50× speedup on downsampling, binary search, violation detection
- Automatic fallback to pure MATLAB if MEX unavailable
% Install and compile MEX
install;
% Basic 10M-point plot
fp = FastSense('Theme', 'dark');
x = linspace(0, 100, 1e7);
y = sin(x) + 0.1 * randn(size(x));
fp.addLine(x, y, 'DisplayName', 'Sensor Data');
fp.addThreshold(0.8, 'Direction', 'upper', 'ShowViolations', true, 'Label', 'High Alarm');
fp.render();% Responsive grid dashboard
fig = FastSenseGrid(2, 2, 'Theme', 'dark');
fp1 = fig.tile(1);
fp1.addLine(x, sin(x), 'DisplayName', 'Pressure');
fp1.addBand(0.8, 1.0, 'FaceColor', [1 0.3 0.3], 'FaceAlpha', 0.15);
fig.setTileTitle(1, 'Pressure Monitor');
fp2 = fig.tile(2);
fp2.addLine(x, cos(x), 'DisplayName', 'Temperature');
fig.setTileTitle(2, 'Temperature Trend');
fig.renderAll();% Sensor with state-dependent thresholds
s = SensorTag('chamber_p', 'X', linspace(0, 100, 1e6), ...
'Y', randn(1, 1e6) * 10 + 50, 'Units', 'psi');
mon = MonitorTag('chamber_hi', s, @(x,y) y > 70, ...
'MinDuration', 5, 'AlarmOffConditionFn', @(x,y) y < 65);
events = mon.eventStore.getEvents();
fprintf('Detected %d high-pressure events\n', numel(events));
fp = FastSense('Theme', 'industrial');
fp.addTag(s);
fp.addTag(mon);
fp.render();- Installation — Setup and MEX compilation
- Getting-Started — Step-by-step tutorial
- Examples — 80+ categorized runnable examples
- API-Reference:-FastSense — Core plotting API
- API-Reference:-Dashboard — Dashboard engine and widgets
- API-Reference:-Sensors — Tag-based sensor model
- API-Reference:-Event-Detection — Event detection pipeline
- Live-Mode-Guide — File polling and live dashboards
- Architecture — Internal design and optimization techniques
- Performance — Benchmarks and tuning guidance
- MEX-Acceleration — Compiled C/SIMD details
- MATLAB R2020b+ or GNU Octave 7+
- C compiler (optional) for MEX acceleration
- No toolbox dependencies — pure MATLAB/Octave
FastSense is open source. See the GitHub repository for source, examples, benchmarks, and issue tracking.
FastSense Wiki
API Reference
Guides
Use Cases
Internals
Resources