Skip to content
github-actions[bot] edited this page Apr 17, 2026 · 19 revisions

FastSense Home Page

Ultra-fast time series plotting for MATLAB and GNU Octave with dynamic downsampling, sensor monitoring, and dashboard layouts.

Why FastSense?

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
Loading

Key Metrics

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+

What's Included

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
Loading
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

Feature Highlights

🎯 Smart Downsampling

  • 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

📊 Dashboard Layouts

  • 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

🔔 Sensor Monitoring

  • 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

📈 Event Detection

  • 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

🎨 Themes & Customization

  • 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

💿 Disk-Backed Storage

  • SQLite-backed FastSenseDataStore for 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

⚡ MEX Acceleration (Optional)

  • 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

Quick Start

% 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();

Navigation

Requirements

  • MATLAB R2020b+ or GNU Octave 7+
  • C compiler (optional) for MEX acceleration
  • No toolbox dependencies — pure MATLAB/Octave

License & Support

FastSense is open source. See the GitHub repository for source, examples, benchmarks, and issue tracking.

Clone this wiki locally