TrueNoise.org
Aircraft Noise Tracker — Technical Brief
iOS measurement application · community acoustic instrument
UPDATED · OCT 2026

Aircraft Noise Tracker

Technical Brief — the iOS instrument behind the TrueNoise community measurement effort
Prepared for the MAA Roundtable Technical Committee · August 2026; revised 2026-10-20 (OpenSky migration, altitude-reference fix, ground-traffic log)
Companion document

This brief covers how each overflight is measured. For how those measurements become the per-home noise comparison on the sensitivity map, see the peak-dBA model methodology.

1Project Goals

Aircraft Noise Tracker is an iOS application designed to produce community-grade acoustic measurements of aircraft overflights that are defensible, reproducible, and linked to specific flight operations. The core thesis is that aviation-noise regulation depends almost entirely on modeled, averaged Leq metrics (DNL, CNEL) that systematically undercount event exposure. The app addresses this by generating per-event, per-aircraft observational records correlated with ADS-B flight data.

The specific objectives are:

2Code Architecture

The app is written in Swift using the SwiftUI framework for iOS. It follows an ObservableObject architecture with six principal components that communicate through shared state:

ComponentFileRole
AudioManagerContentView.swiftAudio session, signal processing, A/C weighting, psychoacoustics
AircraftServiceAircraftService.swiftADS-B polling, geometry computation, aircraft identification
NoiseEventLoggerNoiseEventLogger.swiftEvent correlation, persistence, CSV/JSON export, baseline statistics
PsychoacousticAnalyzerPsychoacousticAnalyzer.swiftFFT, 1/3-octave band decomposition, Zwicker loudness, sharpness
SeatLoggerSeatLogger.swiftSubjective Effects Assessment Tool — annoyance taps and survey
UploadServiceUploadService.swiftSession and SEAT event upload to the truenoise.org backend
Data flow

AudioManager produces SPL readings every 2 s → AircraftService produces aircraft position fixes every 10 s → NoiseEventLogger correlates them and writes structured observations → UploadService posts data to the backend.

3Audio Processing1

Footnote 1 · On the legitimacy of a smartphone as an acoustic front end Skepticism that a phone could yield defensible acoustic data is reasonable but dated. Modern iPhones carry a dedicated audio subsystem that has matured over more than a decade: purpose-built analog-to-digital conversion, multiple MEMS microphones with characterized frequency response, and a signal path engineered for low self-noise and wide dynamic range to serve professional audio and video capture. Critically, sound processing runs on a dedicated low-power audio digital-signal-processor and the device's Neural/DSP blocks rather than contending for the main CPU, so continuous real-time filtering (weighting cascades, FFTs) executes deterministically without dropouts. Apple's Core Audio and AVAudioEngine frameworks expose this hardware with sample-accurate buffer delivery and documented latency. The result is a front end whose raw acoustic capture is well within the fidelity needed for A-weighted level metering — the discipline that remains is calibration and uncertainty characterization (Section 5), not raw hardware capability. This application does not claim IEC 61672 certification; it claims a validated, uncertainty-bounded measurement built on a hardware path that is, by any reasonable engineering standard, acoustically capable.

Signal Chain

The app uses AVAudioEngine with a tap installed on the audio input node. The tap delivers 1024-frame PCM buffers continuously at the device's native sample rate (typically 44,100 Hz or 48,000 Hz). The signal is processed in real time, with peak values accumulated over 2-second windows before being recorded as a single SPL sample.

Figure 1 · Signal Chain — microphone to logged SPL sample
Microphone int / ext / lav AVAudioEngine input tap 1024-frame PCM A / C weighting biquad IIR cascade per-sample RMS → dB + calibration offset 2-s peak window → SPL sample logged

A-Weighting (IEC 61672)

A-weighting is implemented as three cascaded biquad IIR filter sections, derived from the analog IEC 61672 prototype via bilinear transform. The poles correspond to the four standard A-weighting characteristic frequencies (f₁ = 20.6 Hz, f₂ = 107.7 Hz, f₃ = 737.9 Hz, f₄ = 12,194 Hz). The cascade is normalized so the gain at 1 kHz equals 0 dB — the digital equivalent of a hardware A-weighting network, computed sample-by-sample in the audio callback.

C-weighting uses the same architecture but with only two biquad sections (the f₁ and f₄ poles, omitting the mid-band section), giving the characteristic flat response with low- and high-frequency rolloff.

Figure 2 · A-weighting and C-weighting filter cascades (IEC 61672)
PCM in bilinear xform A-WEIGHTING — 3 cascaded biquad sections Section 1 f₁=20.6 · f₄=12194 Hz Section 2 f₂=107.7 Hz Section 3 f₃=737.9 Hz Normalize 0 dB @ 1 kHz → dBA C-WEIGHTING — 2 biquad sections (mid-band omitted) Section 1 f₁=20.6 · f₄=12194 Hz Normalize → dBC flat mid, LF/HF rolloff

SPL Computation

For each buffer, the RMS amplitude is computed across the frame:

dBA = 20 · log₁₀(RMS) + calibration offset

The 2-second peak window captures the maximum instantaneous reading across all buffers within the window. This is conservative — it represents the highest sound level heard during the window rather than an energy average. The C–A delta (difference between C-weighted and A-weighted readings) is tracked simultaneously as a wind-contamination indicator.

Psychoacoustic Analysis2

Independently of the SPL chain, raw PCM samples accumulate in a 4096-sample buffer. When full, the buffer is dispatched to a background analysis queue running PsychoacousticAnalyzer:

Figure 3 · Psychoacoustic analysis sequence — PCM buffer to perceptual metrics
4096-sample buffer background queue Hann FFT vDSP radix-2 28 1/3-octave bands 25 Hz – 12.5 kHz Bark critical bands Zwicker Loudness ISO 532-1 · threshold model specific loudness / Bark → sone, phon Sharpness DIN 45692 · upper-Bark weighting → acum Psychoacoustic Annoyance Zwicker & Fastl composite sharpness penalty > 1.75 acum Onset Rate from last five 2-s SPL samples max dB/s rise (parallel path, from SPL series)
Footnote 2 · Why psychoacoustics matters for noise assessment Psychoacoustics emerged in the twentieth century from a simple observation: the ear is not a sound-level meter. Two sounds of identical A-weighted level can be experienced very differently depending on their spectral content, temporal structure, and tonal character. The field was built to quantify that gap — Fletcher and Munson's equal-loudness contours, Zwicker and Fastl's models of loudness, sharpness, roughness, and fluctuation strength, and the ISO/DIN standards that followed — precisely because single-number energy metrics such as Leq and DNL were found to correlate only loosely with how communities actually rate noise as disturbing. Aviation is a case in point: modern high-bypass turbofans can be lower in dBA than the engines they replaced while introducing tonal or high-frequency "sharp" components that listeners find more intrusive. Psychoacoustic descriptors capture that character. It is important to state the epistemic status plainly: the relationships between these descriptors and human outcomes are an active research area, and this application treats them as hypotheses — for example, that sharper or more rapidly-onset events may be more strongly associated with self-reported annoyance and stress-response measures than dBA alone would predict. The app measures the descriptors and pairs them with subjective reports (the SEAT survey) so those hypotheses can be examined against real data; it does not assert a causal health effect.

4Interface Overview

The app is organized into four tabs plus settings:

5Calibration and Offsets

The app applies a single SPL offset (dBA) to all readings, converting raw ADC-scaled dB to approximate absolute SPL. The offset is stored per microphone profile in UserDefaults and applied throughout the signal chain.

Manual Calibration Offset

The offset is set by comparing the app reading against a known source (calibrated tone, reference meter, or known aircraft). The user enters the target SPL and the app computes the correction. An initial +96 dBA offset was established for the Pop lavalier microphone, derived from known-level test signals and validated against overflights.

Auto-Calibration (Two-Phase Transfer)

Auto-calibration uses the iPhone's built-in microphone as a stable transfer reference to characterize an external microphone's offset relative to it. Phase 1 (90 s) captures the internal mic's LA50 in ambient conditions; Phase 2 (60 s, after switching to the external mic in the same acoustic environment) captures the external mic's LA50. The difference determines the offset correction. This procedure needs no calibration source; it assumes the internal mic's response is consistent across sessions, confirmed across multiple test sessions.

Windshield Correction

Three windshield types are supported — none, foam ball, and fur windscreen — each applying an additive correction to logged values, compensating for the acoustic insertion loss of the material. This is logged to every CSV row for traceability.

C–A Delta Wind-Contamination Detection

The C–A delta (dBC − dBA) is computed in real time alongside the A-weighted reading. High C–A values indicate disproportionate low-frequency energy — the acoustic signature of wind turbulence at the diaphragm rather than aircraft noise. The app flags observations as "possible" or "likely" wind-contaminated when dBA ≥ 55 and C–A ≥ 15 or ≥ 25 respectively. Flags are written to the CSV, but values are not auto-excluded; the observer makes the final call.

Altitude Reference

Aircraft altitude drives the slant-range geometry, so its vertical datum matters. As of 2026-10-20 the app resolves altitude to height above mean sea level: GNSS altitude from the position feed is corrected to MSL using the geoid offset the iPhone measures at the observer's location (removing a roughly 100 ft error near BWI), and where only barometric altitude is available it is corrected with the local air pressure (QNH) from Open-Meteo. A new Altitude Source field records the method per row — GNSS, Baro+QNH, Baro (uncorrected), or GNSS (no geoid corr.) when the device lacks a good altitude fix.

Data continuity. Logs from 2026-10-20 onward read about 100 ft higher for the same aircraft than earlier logs, and near-field slant ranges are slightly longer. Rows before that date carry a blank Altitude Source, so old and new data stay distinguishable and must not be pooled without accounting for the shift. The GNSS datum is taken as the WGS-84 ellipsoid (the ADS-B standard); final confirmation is pending a live measurement checked against a reference flight track.

Measurement Typology

Every session is tagged with a measurement type from a five-category framework:

TypeDescription
Standardized Receptor1.5 m microphone height, ≥ 1 m from reflective surfaces
Community ReceptorFixed residential location, labeled position
Façade ReceptorWithin 1 m of building face
Field ReceptorField setup with documented geometry
Hand-heldFree-hand measurement, highest uncertainty

The type and a free-text position description are logged to every CSV row, allowing downstream analysis to group or weight observations by receptor methodology.

Field Validation

Multiple validation sessions against a calibrated AZ8930 Type 2 sound-level meter:

Stated precision

±1.76 dB SD, zero mean bias for departure overflights. Approach phase pending additional validation data. Honest uncertainty label: ±5 dB for all displayed estimates.

6Data Sharing and Upload

On-Device Persistence

Observations are stored in two formats simultaneously:

The CSV includes: timestamp, observation type (entry/track), dBA level, all psychoacoustic metrics with plain-language health labels, complete aircraft geometry (callsign, ICAO24, type code, type name, registration, operator, flight phase, ground distance, slant range, altitude, bearing, elevation angle, speed, vertical rate), observer GPS coordinates, windshield configuration and correction, measurement type, position description, C–A delta, wind speed and direction, temperature, relative humidity, altitude source, and an exclusion flag.

A companion reference file (aircraft_noise_reference.txt) is generated alongside the CSV with column definitions, health-scale descriptions, and source citations — suitable for submission alongside data to regulators or researchers.

Ground-Traffic Log

At near-field sites within about 1.5 mi of the airport, taxiing and parked aircraft are logged separately to aircraft_ground_log_YYYY-MM-DD.csv — one row per second while an airborne aircraft is being tracked, each carrying the measured dBA at that instant, so a ground-source peak (a taxiing jet) can be told apart from an overflight peak. It is isolated: it is not uploaded to truenoise.org, and it does not affect the on-screen aircraft list, SEAT prompts, the N65/N70/N80 counts, the charts, or the website data. At receptors farther from the field (such as the porch monitor) the file is normally not created. It is included in Export when present and removed by Clear Log along with the main log.

Upload to truenoise.org

The user initiates upload from the app. UploadService packages the current day's CSV as a multipart/form-data POST to the truenoise.org API (/api/v1/upload-session), authenticated with an API key. Before upload, a preprocessing step:

  1. Strips the summary-statistics section (sends only observation rows).
  2. Removes any rows flagged Excluded=Yes.

The backend responds with a summary: session ID, observation count inserted, N65/N70/N80 event counts, recovery-deficit count, and unique aircraft count. Failed uploads are queued locally and retried on the next attempt.

SEAT Data Upload

When a user completes a subjective-effects survey, SeatLogger passes the completed event to UploadService.uploadSeatEvent(), which POSTs a JSON payload to /api/v1/seat/assessment. The payload includes source identifier (ios_app), timestamp, annoyance level, callsign, observer GPS coordinates, and the three survey responses. Upload is fire-and-forget — a failure is logged but does not surface to the user, since the primary record is already in the local SEAT CSV.

External Data Sources

7Summary of Measurement Capabilities

MetricStandardStatus
A-weighted SPLIEC 61672Implemented; validated
C-weighted SPLIEC 61672Implemented
Zwicker LoudnessISO 532-1Implemented (simplified)
SharpnessDIN 45692Implemented
Psychoacoustic AnnoyanceZwicker & FastlImplemented
N65 / N70 / N80 event countsFAA standardImplemented
LA10 / LA50 / LA90 / LA95 baselinesUK standardImplemented
LAeq approximationIEC / ISOImplemented
ADS-B flight correlation—Implemented
ISO 15666-aligned annoyance surveyInformativeImplemented
Absolute accuracy (validated)—±1.76 dB SD (departure); ±5 dB stated
Instrument status. Aircraft Noise Tracker is an independent community measurement tool. It is not a Type 1 or Type 2 certified sound-level meter under IEC 61672. Results are suitable for community monitoring, trend analysis, and regulatory advocacy. All measurements should be reported with the uncertainty figures stated above.
TrueNoise.org · Aircraft Noise Tracker technical brief · companion to the calibrated community aircraft-noise observatory. Prepared for the MAA Roundtable Technical Committee, August 2026; revised 2026-10-20. See also the peak-dBA model methodology — how these measurements become the per-home noise map.