Work in progress This site is under construction — content, figures and specifications are provisional.
J — Joran AHRS & ADC

The instrument does
the flying math.

Joran is FlySys's own Attitude & Heading Reference System and Air Data Computer — a proprietary, self-contained instrument developed entirely in-house. Named after the sudden wind that sweeps down from the Jura across Lake Geneva. Joran computes the whole flight picture on board; the FlySys PFD is pure glass.

Flight data§1 — Everything, on board.

Attitude, heading, turn rate, slip, load factor, barometric altitude against the pilot's QNH, vertical speed and GNSS position — all computed on the instrument and streamed to the display as one atomic frame, sixty times a second. No phone sensor takes part: the picture is the same on any device, propped at any angle.

The attitude travels as a complete quaternion — all four components on the wire. A display that rebuilds the fourth component from the other three loses precision exactly at 180° from its reference, and the horizon trembles there from quantization noise alone. Nothing is reconstructed display-side: every attitude renders with the same precision, the instrument upside-down included.

PFD stream60 Hz (30 Hz selectable) — attitude as a full quaternion, heading, turn rate, slip, load factor, baro altitude vs QNH, VSI, status flags
GNSSdual-band receiver on the instrument, 5 or 10 Hz — position, ground speed, track; the phone's GPS is not used
Alignone button: the instrument levels itself, zeroes the slip ball and remembers the mounting — persisted across power cycles
Telemetrybattery, temperatures, CPU, storage and integrity counters at 1 Hz — the health of the instrument, on the display
The panel§2 — The instrument owns its face.

A mechanical altimeter keeps its QNH when you swap the glass in front of it. Joran extends that idea to the whole panel: the altimeter setting, display units, auxiliary field and alarm thresholds are stored on the instrument. Any display that connects adopts them within a second — swap the tablet for a phone mid-flight and the cockpit looks exactly the same. Change a unit on one display and every display follows, because the instrument is the single source of truth.

QNHset from the PFD knob, persisted on the instrument — yesterday's setting is the pilot's business
Unitsspeed, altitude, vertical speed and pressure units travel with the instrument
Recordingsflight recordings carry the panel and the mounting they were flown with, so a replay shows what the pilot saw
Alarms§3 — Born on the instrument.

Alarms originate on Joran, not in an app — a display that happens to connect can neither miss them nor silence them by accident. Two levels, aviation-style: an amber caution (a soft double note, no acknowledgement owed) and a red alarm that stays until the pilot explicitly acknowledges it. Battery warning and critical voltages are the pilot's to set, and they persist on the instrument.

Recording & service§4 — The black box and the workshop.

Joran records its raw sensor stream on board and replays it faithfully — the same filter, the same numbers, the same display, every time. Calibrations (magnetometer, accelerometer, installation) run on the instrument with guided maneuvers and audible cues, straight from the PFD's settings panel — including the gyro measurement range, selectable 1000 or 2000°/s and stored on the instrument. The app's two-pane file manager moves recordings between the instrument's card, the tablet and flysys.ch, every hop checksum-verified. Firmware updates arrive over Bluetooth, in the field, with integrity checks end to end.

ArchitectureThe system, end to end.

How the Primary Flight System fits together: the instrument, the link, and the screen.

System§1 — How it fits together.

Joran — our own AHRS & Air Data Computer — computes everything on board: attitude, heading, turn rate, slip, load factor, barometric altitude against QNH, vertical speed and GNSS position. It streams ready-made flight data over Bluetooth LE; the Android device is a pure display. Joran is a proprietary FlySys instrument, developed in-house.

Fig.01 — System block diagramIMU → BLE → Android
JORAN AHRS & ADC Attitude, heading, turn Slip, load factor Baro altitude, VSI GNSS position ANDROID DEVICE Pure display (OpenGL) Panel adopted from the instrument QNH knob, alarms & telemetry CSV flight logging Replay & analysis BLE
Main path: Joran ↔ BLE ↔ Android. The instrument computes; the display draws.
CalibrationOn the instrument, at the pilot’s command.

Every calibration below runs on Joran — started from the PFD’s settings panel (CAL MAG, CAL 2D, CAL ACC, ALIGN), guided with audible cues, judged by the instrument and persisted on board. Swap the display: the calibrations stay.

Where it actsInjection points.

The three calibrations enter Joran's signal chain at different points — the accelerometer fix is applied to the raw signal before the filter, the gyro alignment happens inside the filter, and the magnetometer fix feeds heading. All of it on the instrument; the display only presses the buttons.

Fig.01 — Calibration injection pointssignal chain
ACCEL GYRO MAG 6-FACE CAL offset & scale ALIGN zero-rate bias MAG CAL hard & soft-iron ATTITUDE FILTER ESKF, on board gyro align here ATTITUDE
Accel correction is applied to the raw signal before the filter; the gyro is aligned inside it; the magnetometer fix feeds heading.
Magnetometer§1 — Heading.

Metal and avionics distort the local magnetic field in two ways. Hard-iron comes from permanently magnetised material — speakers, screws, magnets — and adds a fixed offset that shifts the whole field; it moves the centre c. Soft-iron comes from ferromagnetic material that bends and re-scales the field differently with heading; it stretches the sphere of readings into a tilted ellipsoid — the shape W. Calibration maps both and corrects them, so magnetic heading reads true in the installed environment — not just on the bench.

01

Rotate

Turn the unit through many orientations so it samples the field from all directions.

02

Fit

A 3D fit (or 2D when motion is limited) recovers the hard- and soft-iron correction.

03

Apply

The correction is stored and applied continuously to incoming data.

The fit. Started with CAL MAG, the instrument collects while you turn it slowly through all orientations; the raw samples trace an off-centre, squashed sphere. A full ellipsoid fit — linear least-squares (Merayo-style) on the quadric — recovers the hard-iron centre c and a soft-iron 3×3 shape W that maps the ellipsoid back to a sphere. Installed in the aircraft, where you can't tumble the airframe, CAL 2D fits a 2D ellipse from one level turn instead. A residual-RMS (root-mean-square) and an axis-ratio check reject a bad fit — the instrument announces the verdict.

Fig.02 — 3D ellipsoid fitall orientations
RAW off-centre & tilted ellipsoid xyz c mcal = W (m − c) subtract c, reshape by W CALIBRATED centred sphere xyz ‖B‖
Swept through all orientations — by hand or on a non-magnetic calibration platform (a gimbal with no magnetic motors near the sensor) — the readings trace an off-centre, tilted ellipsoid. Hard-iron offsets the centre c; soft-iron tilts and stretches the shape W. The fit recovers both; applying m_{\text{cal}} = W\,(m - c) recentres and reshapes the cloud onto a sphere of radius \lVert B \rVert. The accelerometer uses the same idea (6-face fit), but its ellipsoid is axis-aligned (S diagonal — per-axis offset and scale, no tilt) onto a sphere of radius g.
Fig.03 — In-aircraft 2D fithorizontal plane
RAW off-centre & tilted ellipse xy c mcal = W (m − c) subtract c, reshape by W CALIBRATED centred circle xy ‖B‖
Installed in the aircraft you can't tumble the airframe, so the field is sampled in the horizontal plane only and a 2D ellipse is fitted — the same correction m_{\text{cal}} = W\,(m - c), reduced to the plane. A residual-RMS (root-mean-square) and an axis-ratio check reject a bad fit.
Correction (same affine form as the accelerometer's)
m_{\text{cal}} = W\,(m - c)

Continuous calibration in flight. Hard-iron is not constant: the battery's nickel re-magnetises with its state of charge, and the centre c drifts within one or two hours of a fresh calibration — enough to bend the heading by several degrees. The instrument therefore keeps a background estimator running (on by default): a recursive least-squares sphere fit (Kása method, with exponential forgetting) re-solves the hard-iron centre every two seconds from the samples the flight itself provides, gated by gyro rate and heading diversity — a thermal circle is all it needs. Because near-level flight cannot observe the vertical centre, the solve is Tikhonov-regularised (ridge) toward the stored calibration: the horizontal centre — the part that steers heading — follows the data, the vertical stays anchored. The correction rides as a bounded overlay on top of the stored fit, is slew-limited so the heading never jumps, persists across reboots, and latches a SATURATED alarm if the drift exceeds what an overlay should absorb — the sign to redo CAL MAG. The switch and its live state are on the app's settings panel; a deliberate off persists on the instrument.

The sensor clock audits itself. Every rotation is an integral of rate over time, so the IMU's sample clock is measured continuously against the MCU's crystal timebase and the measured period — not the nominal one — drives the integration. At every lock the live measurement is cross-checked against the sensor's own factory trim of its oscillator, read back from the silicon: two independent witnesses that must agree. A disagreement beyond what post-factory drift can explain raises the sensor-configuration alarm — the check that reduced a field case of a wrongly-inherited sample-rate register (a clean 6/5 clock error, invisible to every downstream consistency test) from a day of diagnosis to one status line. At boot the instrument also resets the sensors' configuration registers, so nothing survives from any firmware the hardware ran before.

Fast when it matters, quiet when it doesn't. The heading correction runs on one curve with three regimes: softened during rotation (map disagreement is paid slowly, the horizon flows), fast for two seconds after the rotation stops (right after a maneuver the residual is real by construction — the last degrees settle in under a second), then innovation-gated at rest (field noise below half a degree does not move the needle; a genuine drift above two degrees does). Measured on the turntable: within 0.4° of the final heading 1.1 s after a 90° step, with an at-rest band of ±0.15°.

Re-run when the environment changes — a new mounting, added avionics or a different airframe all shift the field. Recalibrate to keep the map current; the continuous estimator absorbs slow drift, not a re-arranged cockpit.

Keyed by what actually affects it — the 3D calibrations (the accelerometer 6-face fit and the magnetometer sensor fit) characterise the sensor itself, so they are stored per IMU (by its address) and stay valid at any mounting. Only the in-aircraft 2D magnetometer fit depends on the install orientation, so it is stored per IMU and per mounting preset. Swap IMUs or change the mounting and the app loads the matching calibrations automatically — and a 3D calibration is never re-run just because the mounting changed.

Accelerometer§2 — The 6-face fit.

A small per-axis offset or scale error tilts the measured gravity vector and shows up as a bank error growing toward 45°. A classic six-point fit removes it. Hold the unit still on each of its six faces in turn:

+X

Face +X up

Hold steady until captured.

−X

Face −X up

Flip to the opposite face.

+Y

Face +Y up

Rotate to the next axis.

−Y

Face −Y up

Opposite face, hold still.

+Z

Face +Z up

Level, hold still.

−Z

Face −Z up

Inverted, hold still.

Each axis is bracketed by its + and − faces, giving a per-axis offset and scale — an axis-aligned ellipsoid mapped to a sphere whose radius is the mean of the three axis radii, with no absolute-gravity assumption. The result is applied to the raw accelerometer before the filters, so every estimator benefits.

Per-axis offset & scale, then the correction
c_i = \tfrac{a_i^{+} + a_i^{-}}{2} \qquad r_i = \tfrac{a_i^{+} - a_i^{-}}{2} \qquad s_i = \frac{\bar{r}}{r_i}
a_{\text{cal}} = S\,(a - c), \quad S = \operatorname{diag}(s_x,\, s_y,\, s_z)
Gyro offset§3 — Drift.

Every gyro has a small zero-rate bias that, uncorrected, would drift heading and attitude. A short static "Align" window at power-up — held still on the ground — measures and removes it automatically.

Whenat power-up, on the ground
Conditionaircraft held still
Windowa few seconds, automatic
Resultzero-rate bias removed
EngineeringWhat keeps the picture honest.

The discipline behind the numbers — vibration, manoeuvre load, dropped links, stale data — running at 240 Hz on the instrument, with a zero-loss acquisition and one rule for live and replay.

Signal conditioning§1 — Kill the vibration.

Airframe and engine vibration ride on the raw accelerometer and gyro. The instrument fights it at the source: every rate cascade step is a windowed mean — anti-aliased by construction, no phase surprises — and the fusion filter adds trust gates that reject measurements taken while the sensor is being shaken or saturated. The display applies its own final smoothing to what it renders. Vibration that cannot be filtered is engineered away: the mounting isolation is chosen with the on-board spectral monitor (microphone PSD) pointing at the offending frequencies.

Fig.01 — Signal-conditioning chainon the instrument
RAW IMU accel, gyro 960 Hz WINDOWED MEANS anti-aliased by construction FUSION ESKF + trust gates DISPLAY
Adaptive fusion§2 — Trust gravity only when it's real.

The accelerometer only tells you "down" when it's measuring pure gravity. In a turn, under braking, in turbulence, it isn't — so its correction is gated. And the reference gravity magnitude is learned per device (a slow exponential moving average (EMA), τ≈16 s) rather than assumed to be 9.81 m/s² — MEMS (Micro-Electro-Mechanical Systems) units often read ~10.2 — so a scale bias can't quietly tilt the horizon.

Fig.02 — Accelerometer trust gatew ∈ [0,1]
ACCEL measured "down" TRUST GATES |a| ≈ learned g ? gyro rate low ? noise (σ) low ? any fails → w → 0 FUSION correction × w ATTITUDE true bank
The trust weight is the product of the gates — fail any one and the filter coasts on the gyro until gravity is trustworthy again. A latch with self-release rides out a sustained manoeuvre.
Gated correction
w = w_{|a|}\, w_{\omega}\, w_{\sigma} \in [0,1] \qquad \dot{q} = \tfrac{1}{2}\, q \otimes \bigl(\omega + w \cdot K\, e\bigr)

Gating the accelerometer would leave the filter blind through a long turn — so it is never the only correction. The ESKF (Error-State Kalman Filter) runs a set of independent measurement updates, each watching a different observable and weighted by its own σ. When gravity can't be trusted, these are what hold a true attitude.

Gravity directionaccelerometer, pitch & roll (gated in turns)
Load-factor bankbank = acos(1 / N) (no GPS needed)
Headingmagnetometer, phase-aligned and plausibility-gated
Gyro biaslearned online, temperature-tracked b_eff(T)

With the GPS receiver now on board, the next updates on the roadmap bring its observables into the same set: coordinated-turn bank from track rate, flight-path pitch from vertical speed, and GPS track as a heading fallback.

The load-factor bank is the quiet workhorse: acos(1/N) reads the bank straight off the g-load with no GPS at all — so a coordinated turn stays true even with no satellites and the accelerometer gated off.

Display robustness§3 — Calm and honest.

Small touches that matter in the cockpit: the tape digits roll over with hysteresis so they never flicker on the boundary, and if the data goes quiet the display tells you — it doesn't pretend.

01

Rollover hysteresis

Tape digits only change past a small margin, so a value sitting on a boundary stays put instead of stuttering.

02

Stale-data caution

If samples stop arriving, an amber caution latches after a few seconds blind — the picture never silently freezes as if all were well.

Connectivity§4 — Survive the link.

Bluetooth in a metal cockpit drops. When it does, the reader reconnects on its own and re-seeds the attitude from the current orientation, so the horizon snaps back upright instead of tumbling.

BLE

Auto-reconnect & re-seed

A dropped Inertial Measurement Unit (IMU) link is re-established automatically; attitude is re-initialised from gravity so there's no long settle.

PLAN

Network path (in development)

A TCP gateway source with zero-config mDNS discovery is planned; today the live path is BLE.

Reference frames§5 — ENU in, NED out.

The IMU module fuses natively in ENU (East-North-Up); the PFD's attitude pipeline works in NED (North-East-Down). The app re-expresses the solution ENU→NED at ingestion, so every filter, the horizon and the slip ball share one consistent frame.

Fig.03 — Earth-frame conventionsNED & ENU
NED IMU x: North y: East z: Down ENU IMU y: North x: East z: Up
Two right-handed earth frames. NED orders the axes North-East-Down, ENU orders them East-North-Up — x and y swap and the vertical flips. The IMU delivers ENU; the app re-expresses it as NED for the filters.
Flight records§6 — Move the evidence.

Every session can be recorded on the instrument's own card — the raw sensors and the filter's answers, two halves of one recording. The app's file manager moves those records over the air: card → tablet → flysys.ch → another card. A flight recorded in one city replays on a bench in another the same evening, through the same filter, sample for sample.

01

Verified, not hoped

Every hop is measured: transfers carry a running checksum and a byte count, and a mismatch deletes the bad copy and says so. Nothing arrives “probably intact”.

02

Loss is assumed

The radio file link runs a real retransmission protocol: cumulative acknowledgements, a keepalive that repeats them, and a sender that rewinds and resends whatever the radio dropped. A transfer finishes correct — or fails loudly, never silently short.

03

Replay is the bench

A recorded flight replays deterministically through the instrument's own filter. The flight's answers and the replay's answers go side by side; for deeper investigations the input journals can be armed too.

The device§3 — Any modern Android.
Android7.0 or newer
GraphicsOpenGL ES 3.0
RadiosBluetooth LE for the Joran link
Fallbackinternal accel, gyro, mag, baro

No Bluetooth hardware? The internal-sensor, simulator and replay paths run on an emulator, so you can try the full display before wiring anything up.