491 IEEE Acoustic Drone Detector

491 : IEEE Acoustic Drone Detector

Design render

How it works

This project is a self-contained acoustic drone detector. A one-bit PDM microphone stream enters on ui[0]; an active-high detection signal appears on uo[1], uo[2], and uo[3]. The complete model is fixed in the logic, with no processor, firmware, RAM, or external weight storage.

The multiplier-free integer pipeline is:

  1. Divide the 50 MHz input clock by 32 and output the resulting 1.5625 MHz PDM microphone clock on uo[0].
  2. Feed microphone samples through a nine-stage dyadic one-pole cascade. One shared subtract/shift/add datapath services the rotating state ring.
  3. Difference adjacent stages to obtain five octave bands, then encode their magnitudes as four-bit logarithmic features.
  4. Keep each band's maximum over a 41.9 ms frame. Sixteen frames form a 671 ms classifier window.
  5. Accumulate four 16×5 ternary templates in signed six-bit saturating accumulators. Two staggered windows reduce boundary sensitivity.
  6. Requantize the hidden activations, apply the ternary output layer, compare against the trimmed threshold, and hold a detection for one 41.9 ms frame. The hold is deliberately short: a drone is a steady source that is still there on the next window, so the output tracks it instead of latching. An earlier build held for 629 ms, which lagged the aircraft and ran two passes together into one.

The shipped drone_dads_lvl12_s4 weights were trained on DADS with every clip re-levelled across a −12…0 dB span, so the template is not tied to one recording level. Scored with the bit-exact chip model they reach 99.15 % AUC on the validation split and 98.98 % on the held-out test split; the seed was chosen on validation only. The RTL subtracts the header's own feature centre (FEAT_OFF = WW_CENTRE = 8) and asserts the equality at elaboration, and the classifier dot product is computed exactly before the six-bit saturation -- both are fixes to the earlier drone_4 build, which ran a different model from the one it was measured on. Hardening of this build completed in one IHP sg13g2 1×1 tile at 93.78% final core utilization with zero DRC, LVS, antenna, max-fanout, setup and hold violations at all three corners.

Reference drone_4 layout

How to test

  1. Connect a compatible PDM microphone's data pin to ui[0] and clock pin to uo[0], together with the appropriate board power and ground.
  2. Apply the specified 50 MHz system clock and release reset.
  3. Start with the neutral threshold trim ui[7:1] = 7'd64, which gives the shipped threshold of 5, the validation max-accuracy point. Detection appears on uo[3:1].
  4. For fewer false triggers, use trim 65 (threshold 9). For higher recall, use trim 63 (threshold 1).
  5. Check uo[7:4] for a changing band-level value to confirm that microphone data is reaching the front end.

Each trim increment changes the decision threshold by four score units. On the held-out test split the operating points were 96.6% recall / 4.4% negative clips firing at threshold 5 (trim 64), 74.8% / 1.1% at threshold 9 (trim 65) and 99.7% / 13.9% at threshold 1 (trim 63). Synthetic room tone never fires at threshold 5. These clip-level figures do not predict alarms per hour in a real deployment.

External hardware

  • One PDM MEMS microphone compatible with the TinyTapeout board's I/O voltage.
  • Two signal connections: microphone data to ui[0] and microphone clock from uo[0].
  • DIP switches or another seven-bit source on ui[7:1] for threshold trim.
  • An LED or logic input on any of uo[1], uo[2], or uo[3].

All uio pins are debug outputs: uio[3:0] is the frame index, uio[4] is detection, uio[6:5] is the internal FSM state, and uio[7] is the microphone tick.

Limitations

The detector was evaluated on DADS clips, not long-duration recordings at a deployed site. Detection range is unknown. Rotorcraft, engines, lawn equipment, and other sustained low-frequency sounds are plausible confusers. Treat the output as a sensor indication that requires deployment-specific validation, not as an authenticated identification of an aircraft.

IO

#InputOutputBidirectional
0PDM microphone data inputPDM microphone clock (1.5625 MHz)Frame index bit 0
1Threshold trim bit 0 (LSB)Drone detectedFrame index bit 1
2Threshold trim bit 1Drone detected (mirror)Frame index bit 2
3Threshold trim bit 2Drone detected (mirror)Frame index bit 3
4Threshold trim bit 3Band level bit 0Drone detected (debug)
5Threshold trim bit 4Band level bit 1FSM state bit 0
6Threshold trim bit 5Band level bit 2FSM state bit 1
7Threshold trim bit 6 (MSB)Band level bit 3Microphone tick

Chip location

Controller Mux Mux Mux Mux Mux Mux Mux Mux Mux Mux Analog Mux Mux Mux Mux Mux Mux Mux Mux tt_um_chip_rom (Chip ROM) tt_um_factory_test (Tiny Tapeout Factory Test) tt_um_ieee_LDO (LDO) tt_um_chip_ieee_analog (IEEE Bandgap Reference) tt_um_snn_voice_calculator_mauro_ciccone (snn-voice-calculator) tt_um_hx2003_delay (4 Channel - 32 Tap Programmable Delay with Delay Locked Loop Calibration) tt_um_adxl362_test (tt_um_adxl362_test) tt_um_larsnit_cfar (1D CA/GO/SO CFAR radar detector) tt_um_abeccari_swsynth (Sine Wave Synthesizer) tt_um_dpi_adexp (AdExp DPI Neuron ) tt_um_140oo041_fpu130 (FPU-130) tt_um_blonghi_uart (uart) tt_um_directsgg_mini_proceo_8bit (Mini 8-bit Processor) tt_um_umaece1982_lfsr (Low-Power LFSR-Based Test Pattern Generator) tt_um_deploy_timer (launch deployment timer) tt_um_urish_simon (Simon Says memory game) tt_um_nimelli_kinematic_wave_engine (Kinematic Wave Engine) tt_um_multi_seg_monitor (Multi Segment Monitor) tt_um_UART_TX (project) tt_um_crc8_lfsr (CRC-8 Serial LFSR) tt_um_tinynpu4 (TinyNPU4) tt_um_alu_bns (6-bit multi function ALU ( eldawly_V2) ) tt_um_echoworld424_tpv (Timing-Prediction Test Vehicle) tt_um_gyro_lockin (Laser Gyro Lock-in Readout Core) tt_um_josue_olivos_sar_adc (4-Bit Charge-Redistribution SAR ADC Controller) tt_um_flower (VGA Flower) tt_um_vperumal_l1_fabric (Scalable Banked L1 Memory Fabric for Edge AI) tt_um_preinception_top (Preinception: Simple Compute Accelerator) tt_um_italu (iTALU: Interactive Testable Arithmetic Logic Unit) tt_um_neuron (4-Input Signed Neuron / Perceptron) tt_um_4tap_mac (4-Tap Signed MAC Unit) tt_um_mac_engine (DSP MAC Engine) tt_um_crypto_led_demo (QAMER CryptoUART: Encrypted UART with LED Status) tt_um_layernorm (LayerNorm) tt_um_ez130_8t_mystery (EZ130 8T Mystery Circuit) tt_um_sent2spi (SENT Receiver with SPI Interface) tt_um_llr_hepiarisc (Hepiarisc with SPI flash) tt_um_rebeccargb_vga_pride (VGA Pride) tt_um_hasi_ising (Oscillator Ising Machine) tt_um_c061618g2 (Circuitli C061618G2) tt_um_tiny_dram_pim (Tiny Dual-Channel DRAM-PIM Controller + PU) tt_um_Tbilisi_CORDIC_Engine (Tbilisi CORDIC Engine) tt_um_rahulmascarenhas_folded_nn (Frozen ternary backbone + loadable head) tt_um_miniMAC (miniMAC_IHP26b) tt_um_rumcajs (IEEE DOORSH) tt_um_sg13g2_mystery (SG13G2 Mystery Circuit) tt_um_ULSR88 (ULSR demo) tt_um_ez130_7t_mystery (EZ130 7T Mystery Circuit) tt_um_tinyopt4 (ieee_tt_tinyopt4) tt_um_vga_example (IEEE VGA Animated Beach) tt_um_hyphen133_drone_detection (IEEE Acoustic Drone Detector) tt_um_nuatlabs_fifo_pwm (Async FIFO with CDC + PWM Peripheral) tt_um_nuatlabs_uart (8N1 UART Transceiver) tt_um_eeg_threshold_detector (IEEE Digital EEG Threshold Event Detector) tt_um_smart_traffic (Smart Traffic Light Controller) tt_um_94442024_mini_cpu (Mini 8-bit Accumulator CPU) tt_um_wokwi_475369131246576641 (IEEE_UPB_TT_1) tt_um_aion (AION) tt_um_rebeccargb_hardware_utf8 (Hardware UTF Encoder/Decoder) tt_um_rebeccargb_universal_decoder (Universal Binary to Segment Decoder) tt_um_rebeccargb_intercal_alu (INTERCAL ALU) tt_um_flappy_bird (IEEE Flappy Bird VGA Game) tt_um_oryan01_alu (ALU CASS PUCV) tt_um_S4xU4 (S4xU4) tt_um_vga_ca (Space CA) tt_um_llr_simplenpu (simple SPI flash streaming NPU) tt_um_pucv_pspwm (3LFCC PS-PWM Modulator) tt_um_yuri_fpga (Tiny FPGA) tt_um_mikailgedik_inverted_inverters (Inverted inverters) tt_um_esauqch_hamming74 (Hamming(7,4) encoder/decoder (IEEE)) tt_um_hackin7_analog_experiments (TinyAnalogExperiments) tt_um_snake (snake game) tt_um_mini_kraken (Kraken IO Subprocessor) tt_um_fabien_pio (AstraPIO) tt_um_chiplab (ChipLab) tt_um_wokwi_475490677474407425 (Tiny_Divider) tt_um_c061618g2tr (Circuitli C061618G2TR) tt_um_catalinlazar_nanopio (nanoPIO) tt_um_catalinlazar_uart_spi_i2c_bridge (UART-SPI-I2C Bridge) tt_um_enzonappi_sent_i2c (SENT to I2C bridge) tt_um_kush1434_proof (Proof) tt_um_schwallsunk_signal_discriminator (Highspeed voltage discriminator) tt_um_tiarinix_ttihp_verilog_template (8-bit educational SAP-style CPU) tt_um_vga_glyph_mode (BOOTCAMP) tt_um_GiulioGirelli_packet_processor (Configurable Low-Latency Match-Action Packet Processor) tt_um_vga_tictactoe (Tic Tac Toe) tt_um_vga_dvd_player (DVD player) tt_um_clea_katseye_rain (KATSEYE) tt_um_romd_uart_hello (UART Hello World) tt_um_vga_snake (CDM PYTHON GAME) tt_um_vga_slot_machine (tt_um_vga_slot_machine) tt_um_jet_seq8b (SEQ8 Programmable Sequencer) tt_um_kibo_leak_inspect (KIBO Leak-Inspection Target Controller (VGA)) tt_um_endless_runner (Endless Runner) tt_um_omega_infinity_kaoru (OMEGA INFINITY KAORU 3D Metal Grid Processor) tt_um_nikleberg_mixer (Mixer) tt_um_lahnb_sgdma (TinyDMA: A Descriptor-Based Dual-PSRAM Memory Mover) tt_um_gstj_lockin (Digital IQ Lock-in (IEEE)) tt_um_benpayne_ps2_decoder (PS/2 Keyboard Decoder for 68k) tt_um_cass_s_ui_neuron_lif (Neurona LIF con Aprendizaje STDP Dinamico (IEEE)) tt_um_vga_glyph_mode_CDM_Matrix (CDM Matrix) tt_um_qd39l_xor_stream (Fixed-ROM XOR Stream Engine) tt_um_conv3x3 (3x3 Clock Rate Streaming Input Convolution Engine) tt_um_mc14500b_soc_extended (MC14500B Extended 1-bit Microcontroller SoC) tt_um_vga_hypno_spiral (tt_um_vga_hypno_spiral) tt_um_mattizen_morse_tree (Morse Tree LED Decoder) tt_um_CDM (Colegio de Muntinlupa DVD-like Display) tt_um_romd_uart_loader (UART SPI RAM Loader) tt_um_TscherterJunior_stapel_geraet (stapel gerät) tt_um_das2225_dna_accel (DNA_Accel) tt_um_tinysoc (TinySoC) tt_um_barrel_shifter (Barrel Shifter) tt_um_approx_mac_coprocessor (Approximate DSP: Time-Multiplexed MAC Coprocessor) tt_um_joesagents_market_split_oracle (Market-split oracle) tt_um_mgpauly1458_ringmeter (Ring oscillator frequency meter) tt_um_pettit_prism_lite (PRISM with Risc-V (TinyQV) SoC) tt_um_workshop_cpu (IEEE Workshop Simple CPU) tt_um_algofoogle_analog_junk (Simple comparator + 2 DACs analog layout in a 1x1 tile) tt_um_lkhanh_cordic (TinyQV SoC (Dual Memory Backend)) tt_um_4x4npu (4x4NPU: Dual-Lane INT4 Neural Accelerator) tt_um_abiaselli_izh_bridge_3x2 (Izhikevich event bridge (4 contexts)) tt_um_fabulous_ihp_26b (Tiny FABulous FPGA) tt_um_zanderivo_voronoi (Four-Metric VGA Nearest-Prototype Visualizer)