Skip to the content
PCBKitNew board
4 layers320 × 320 mmMic array, the printed circuit board in 3D

Low-cost, High-performance, Acoustic Camera

Size
320 × 320 mm
Copper layers
4
Thickness
1.6 mm
Parts
321
Nets
182
Pads
1,368
Tracks, vias
5,287, 679
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
8 May 2025
Updated
4 Nov 2026

Overview

Mic array is an open-source printed circuit board by jduanen, from the jduanen/Acoustic-Camera repository on GitHub, published under the MIT licence. It is a 4-layer board of 320 × 320 mm with 321 parts on 182 nets, routed with 5,287 tracks and 679 vias.

It is built around the LMK1C1108PW, CDCLVC1112PW and IM72D128V01XTMA1, with the MCP1700T-3302E/TT(MS), ASFL1-12.288MHZ-L-T and AXK6S80637YG among its other parts. Its parts include 182 capacitors, 109 ICs, 14 resistors, 1 connector and 1 crystal.

Main components

6

README

README.md

Acoustic Camera — Project Summary

This project involves the design and implementation of a low-cost, high-performance acoustic camera: i.e., a microphone array computes a power map of the sound sources in a video camera's field of view and overlays it on the video in real time.

Uses of such a device include locating vibration, gas leaks and electrical breakdown, and as a hearing aid for people who can no longer localize sound with one functional ear.

One of the top-level objectives for this project is to explore the use of deep-learning models for this application and compare the performance and cost with that of traditional DSP-based beamforming algorithms.

A full technical overview of the project can be found in OVERVIEW.md; see the linked documents for more detail.

The Phase 3 prototype (4x4-mic array) unit looks like this:

This is an animation of the current state of the Phase 4 (96-mic spiral array) version's PCBs: P4 PCBs

See an example of a commercial product here Fluke and a low-cost consumer product here Fotric

How it works

The microphone array samples the sound field at every mic at once. For each candidate direction (azimuth, elevation), a steering vector describes the expected phase pattern across the mics; a beamformer scores each direction against the measured cross-spectral matrix (CSM) and the scores form the energy map overlaid on the video.

Three array properties set performance:

PropertyControlsRule
Aperture DBeam width (resolution) and low-frequency limitHPBW ≈ 58° × λ/D; useful directionality needs f > c/D
Minimum mic spacing dHigh-frequency limit (grating lobes above it)fNyq = c / (2d)
Mic layout and countSidelobe level (MSL), SNRIrregular spacing suppresses aliasing; more mics lower sidelobes

Other key ideas: far field begins at r > 2D²/λ; the point spread function is how the array smears a point source; commercial cameras average power incoherently across an octave band to cut noise. Details: BACKGROUND.md, MIC_ARRAYS.md.

Algorithms explored (one per family): Delay-and-Sum (simple, robust, wide beam), MVDR (adaptive, suppresses interferers), CLEAN-SC (deconvolution, removes PSF artifacts), MUSIC (subspace, super-resolution when the source count is known). ML methods come in Phase 5.

Requirements and key design choices

ParameterTarget
Frequency range200 Hz: 8 kHz (useful imaging from ~2 kHz)
Resolution (HPBW)~9.4° @ 8 kHz, ~19° @ 4 kHz, ~82° @ 1 kHz (simulated, Phase 4 array)
Distance~0.5 m (far-field limit) to ~10 m
Field of view±45° H, ±30° V, matched to the camera
Array~300 mm aperture, 96 MEMS mics, Underbrink 12 × 8 log-spiral, 12.94 mm min spacing (Nyquist ≈ 13.3 kHz)

Why these numbers (TRADEOFFS.md):

  • 300 mm aperture is the practical sweet spot: portable, yet ~9° at 8 kHz. 5° at 1 kHz would need a ~4 m aperture.
  • 96 mics matches commercial practice (gfai Mikado uses 96 in the same pattern). Mic count grows as (aperture/spacing)², so going much smaller in spacing costs ~400+ mics.
  • Underbrink spiral gave the best sidelobe suppression of all patterns simulated (−24.4 dB @ 4 kHz), with circular symmetry.
  • Beamforming grid: 2–3 points per HPBW is enough. Finer grids cost memory and time (the steering matrix dominates) without improving resolution; the 96-mic array needs a finer grid than the UMA-16's 0.5°–1°.

Development phases

Each phase delivers a working end-to-end system (PLAN.md).

PhaseHardwareGoalStatus
1SimulationValidate algorithms and array geometryComplete
2ReSpeaker XVF3800 (4 mics, 90 mm)First end-to-end pipeline: capture → beamform → overlayComplete
3miniDSP UMA-16 v2 (16 mics, 126 mm)2D (az × el) beamforming, calibration, touch UIComplete
4Custom PCBs (96 mics, 300 mm, FPGA)Full-performance systemIn progress
5Phase 3/4 hardwareML beamformer (PILOT / CRNN) vs CLEAN-SCNot started

Phase 1 — simulation (PHASE1.md)

  • Recommended array: Underbrink 12 × 8, α = 22°, 96 mics, 300 mm, 12.9 mm minimum spacing, alias-free to ~13 kHz.
  • HPBW: >180° below 500 Hz, ~82° @ 1 kHz, ~37° @ 2 kHz, ~19° @ 4 kHz, ~9° @ 8 kHz.
  • Algorithm choice: CLEAN-SC for real-time single-source display; MVDR for multiple or weak sources; MUSIC for closely spaced sources with known count; D&S for lowest latency. 256 snapshots per CSM.
  • Works well: industrial source hunting at 2–8 kHz, multi-source scenes, normal rooms, near field at 0.5–3 m. Not suited: below 1 kHz, very reverberant spaces (DRR < 3 dB), separating sources on the same bearing, MUSIC at SNR < 10 dB.

Phase 2 — ReSpeaker smoke test (PHASE2.md)

  • Raw mics are USB channels 2–5; gain imbalance up to ~3.6× motivated calibration.
  • D&S, MVDR and CLEAN-SC agreed within 5°. Live script: src/acoustic_camera_p2.py.

Phase 3 — UMA-16 (PHASE3.md)

  • 16 channels at 48 kHz, 2D beamforming with full-frame overlay on webcam or Pi camera.
  • Live script src/acoustic_camera_p3.py with a touch UI: frequency sliders and spectrum pan, energy threshold (auto/manual), zoom/recenter/dwell, power indicator, saved settings.
  • Shared math in src/beamforming.py (pytest suite in tests/); src/benchmark_algos.py measures per-algorithm cost. A 1°/pt grid brings all four algorithms within 20 fps.
  • Lesson: the UMA-16's usable window is only ~2–4 kHz, bounded by aperture below and spatial Nyquist above.

Phase 4 — custom hardware (PHASE4.md)

96-mic Underbrink spiral, 12 arms × 8 mics, with PDM → CIC/FIR decimation in an FPGA and data streamed to a host (96 ch × 48 kHz × 24 bit ≈ 110 Mbit/s, within 1 GbE). A Pi Camera Module 3 Wide mounts through the centre of the array.

  • Single-FPGA design (primary). One ALINX AC7200 module (Xilinx XC7A200T) runs all 96 channels plus a GbE/UDP link. RTL is done and fits (43.5% LUTs for the pipeline, 48.1% with the GbE MAC and packetizer). Two boards:
    • mic_array: Ø320 mm, 96 Infineon IM72D128 mics, TCXO and clock tree, local 3.3 V LDOs.
    • front_end: AC7200 module, power regulation, DP83867 GbE PHY.
    • Joined by Panasonic P5KS board-to-board connectors (9 mm mated height).
    • Status: the current Phase 4 design; PCBs being laid out and prepared for fabrication. See pcb/SCHEMATIC_NOTES.md for the current schematic, power and connector details.
  • Multi-FPGA alternate. Four Cmod A7-35T cluster boards (24 mics each) feed a hub board over a shared-clock spoke bus; the hub relays to a Raspberry Pi 5 over USB. Breadboarded and laid out as PCBs, but the boards were never built.

Phase 5 — ML

Needs real Phase 3/4 data to train and validate models.

Landscape

  • Commercial products (PRODUCTS.md): 64–96 MEMS mics is the sweet spot for handheld far-field use; USB for portable, PoE for fixed installs; a co-located video camera at the array centre is universal.
  • Open-source projects (PROJECTS.md): FPGA → GbE → GPU host is the established pattern above ~96 mics; cross-correlation calibration with GPU gradient descent (Ben Wang) recovers mic positions and speed of sound. This project uses Acoular (Python) for parts of its beamforming work.

Open questions and TODOs

  • Match camera optics to the array's FOV and resolution
  • Partition processing between FPGA and host; choose final processing/display hardware
  • Packaging; low-noise audio front-end layout
  • Add-on arms to extend the aperture for better low-frequency resolution

Parts

321
QtyValueFootprintReferences
176100nFCapacitor_SMD:C_0603_1608MetricC1, C10, C11, C105, C106, C107, C108, C109, C110, C111, C112, C113, C114, C115, C116, C117 +160
96IM72D128V01XTMA1IM72D128:IFX-PG-LLGA-5-4U1, U2, U10, U11, U12, U13, U14, U15, U16, U17, U18, U19, U20, U21, U22, U23 +80
1310kPCM_SparkFun-Resistor:R_0603_1608MetricR1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13
12LMK1C1108PWCDCLVC1108:PW0016A_NU97, U98, U99, U100, U101, U102, U103, U104, U105, U106, U107, U108
41uFCapacitor_SMD:C_1206_3216MetricC98, C99, C100, C101
4MountingHole_2.2mm_M2MountingHole_2.2mm_M2HCAM1, HCAM2, HCAM3, HCAM4
4MountingHole_4.3mm_M4MountingHole_4.3mm_M4HENC1, HENC2, HENC3, HENC4
2100nFCapacitor_SMD:C_0402_1005MetricC184, C185
2MCP1700T-3302E/TTPackage_TO_SOT_SMD:SOT-23VR1, VR2
133PCM_SparkFun-Resistor:R_0603_1608MetricR15
13V6TestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mmTP3
1ASFL1-12.288MHZOscillator:Oscillator_SMD_SeikoEpson_SG8002LB-4Pin_5.0x3.2mmY1
1AXK6S80637YGAXK6S80637YG:AXK6S80637YGJ1
1CDCLVC1112PWCDCLVC1112:PW24U110
1CLK 3V3TestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mmTP4
1GNDTestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mmTP1
1MIC 3V3TestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mmTP2

Questions

How big is the Mic array PCB?

It measures 320 × 320 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Mic array use?

321 parts, built around the LMK1C1108PW, CDCLVC1112PW, IM72D128V01XTMA1 and MCP1700T-3302E/TT(MS). The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Mic array KiCad files?

From the jduanen/Acoustic-Camera repository on GitHub, at the commit this page was made from: the board is pcb/single_fpga/mic_array.kicad_pcb and its schematic pcb/mic_array/arm_00.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Mic array design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

More from jduanen/Acoustic-Camera

4
  • 4 layers120 × 120 mmMic test, the printed circuit board in 3D

    Mic test

    jduanen/Acoustic-Camera

    Low-cost, High-performance, Acoustic Camera

    187 parts20MIT
  • 4 layers120 × 120 mmFront end, the printed circuit board in 3D

    Front end

    jduanen/Acoustic-Camera

    Low-cost, High-performance, Acoustic Camera

    89 parts20MIT
  • 4 layers208.8 × 161.7 mmCluster 00, the printed circuit board in 3D

    Cluster 00

    jduanen/Acoustic-Camera

    Low-cost, High-performance, Acoustic Camera

    58 parts20MIT
  • 4 layers131.8 × 128.5 mmHub, the printed circuit board in 3D

    Hub

    jduanen/Acoustic-Camera

    Low-cost, High-performance, Acoustic Camera

    24 parts20MIT

Similar boards

  • 2 layers70.7 × 70.7 mmWhistler mic array, the printed circuit board in 3D

    Whistler mic array

    ccc909/Whistler

    Open-source 16-channel USB MEMS microphone array: KiCad PCB design, XMOS XU316 (xcore.ai) USB Audio Class 2 firmware with DFU, BOM and JLCPCB-ready production files. CERN-OHL-S.

    96 parts1CERN-OHL-S-2.0
  • 4 layers28 × 63.8 mmWave, the printed circuit board in 3D

    Wave

    spawnID0001/allpeople-wave-pcb

    This repository will contain all the pcb design files for the wave product.

    78 parts1
  • 4 layers58 × 19.5 mmAam bom pcb, the printed circuit board in 3D

    Aam bom pcb

    antonavhmx/AAM-PCB-

    Este repositorio contiene el diseño de hardware y los archivos de manufactura industrial para una tarjeta de circuito impreso de 4 capas.

    39 parts
  • 2 layers208.8 × 396.9 mmFerris, the printed circuit board in 3D

    Ferris

    pierrechevalier83/ferris

    A low profile split keyboard designed to satisfy one single use case elegantly

    145 parts1.3k
  • 2 layers17.8 × 34 mmLinUSBConverter, the printed circuit board in 3D

    LinUSBConverter

    uCAN-LIN/LinUSBConverter

    Open source USB ↔ LIN bus dongle. LIN 2.1 master / slave / monitor, optically isolated, SLCAN compatible — no proprietary drivers.

    29 parts93GPL-3.0
  • 2 layers89.8 × 10.2 mmODGIRON v1.0-F4x1-0412, the printed circuit board in 3D

    ODGIRON v1.0-F4x1-0412

    oldgerman/ODGIRON

    基于 ironOS 的 PD T12 电烙铁

    125 parts34GPL-3.0
  • 2 layers79.2 × 59.2 mmGpstracker, the printed circuit board in 3D

    Gpstracker

    blemasle/gpstracker-pcb

    Connected GPS tracker PCB

    205 parts33MIT
  • 2 layers85 × 54 mmGps mezzanine, the printed circuit board in 3D

    Gps mezzanine

    96boards/mezzanine-community

    Repository for community designed mezzanine boards for the 96boards specification.

    182 parts32