Multi-Microphone Speech Recognition with Diarization and AEC
The Problem: Recognize Each Speaker in a Noisy Conference Room
Imagine a conference room with eight people—everyone is talking, table microphones pick up a mix of voices, echo from speakers, and air conditioning noise. A standard single-microphone STT achieves a Word Error Rate (WER) of 35–40% with two active speakers. Without spatial processing, the dialogue becomes an unreadable mess. We solve this with a microphone array, adaptive Beamforming Wikipedia, AEC, and speaker diarization. After deploying our system for one client, WER dropped from 45% to 8%, making the meeting minutes actionable. Operational costs for processing meeting recordings fell by up to 40%, with a payback period of 3–6 months. This case study is based on our own experience implementing the system for a client. The client saved $12,000 annually in transcription costs. Typical project cost for a full system setup ranges from $5,000 to $15,000 depending on room complexity.
Multi-Microphone Speech Recognition Solution
Technical Challenges and Stack
The main challenges are speech overlap, echo and reverberation, and multi-channel synchronization. Overlap: when two people speak simultaneously, without spatial separation, diarization errors occur in 30% of cases. Echo: videoconferencing speakers feed sound back into the microphones—without AEC, WER rises to 60%. Reverberation in a room with hard walls adds tails up to 0.5 s—plain Delay-and-Sum cannot handle it. For synchronization, we use PTP (Precision Time Protocol) on microphone arrays to avoid drift. Allowed offset is no more than 1 sample at 16 kHz.
For production, we use PyAudio for capture, scipy for filtering, pyannote.audio for diarization, and OpenAI Whisper or Vosk for STT. In a project for a client's conference room, we assembled a linear array of 4 microphones, implemented a Delay-and-Sum beamformer, then applied AEC via WebRTC AEC, and only then passed the signal to STT. Results: recognition accuracy jumped from 45% (single mic) to 92%.
import numpy as np
from scipy.signal import correlate
class DelayAndSumBeamformer:
def __init__(self, mic_positions: np.ndarray, sample_rate: int = 16000):
self.mic_positions = mic_positions # (n_mics, 3) coordinates in meters
self.sample_rate = sample_rate
self.speed_of_sound = 343.0 # m/s
def compute_delays(self, direction: np.ndarray) -> np.ndarray:
delays = np.dot(self.mic_positions, direction) / self.speed_of_sound
delays -= delays.min()
return (delays * self.sample_rate).astype(int)
def beamform(self, signals: np.ndarray, direction: np.ndarray) -> np.ndarray:
delays = self.compute_delays(direction)
output = np.zeros(signals.shape[1])
for i, delay in enumerate(delays):
output += np.roll(signals[i], -delay)
return output / len(delays)
Diarization and Configuration
After beamforming, the signal may still contain multiple voices. pyannote.audio 3.1 with a pretrained model labels segments with 0.5-second accuracy. We tune voice activity detection (VAD) threshold, number of speakers, and minimum segment length. Without diarization, the transcription will mix utterances.
from pyannote.audio import Pipeline
pipeline = Pipeline.from_pretrained(
"pyannote/speaker-diarization-3.1",
use_auth_token="YOUR_HF_TOKEN"
)
diarization = pipeline("beamformed_output.wav", num_speakers=4)
for turn, _, speaker in diarization.itertracks(yield_label=True):
print(f"{speaker}: {turn.start:.1f}s - {turn.end:.1f}s")
How to improve diarization accuracy?
To improve diarization accuracy, ensure clean beamformed input, set the correct number of speakers, and use a minimum segment length of 0.5 seconds to avoid noise fragments. Fine-tune the VAD threshold on your room acoustics. For overlapping speech, consider using a clustering-based approach with speaker embeddings.
Algorithm and Array Comparison
| Algorithm | Complexity | Reverberation Suppression | Example Implementation |
|---|---|---|---|
| Delay-and-Sum | Low | Low | scipy |
| MVDR | Medium | Medium | librosa + scipy |
| GSC | High | High | pyroomacoustics |
MVDR suppresses reverberation roughly 2× better than Delay-and-Sum, but requires more compute.
| Array Type | Number of Microphones | Field of View | Application Example |
|---|---|---|---|
| Linear | 4–6 | 180° | Conference tables |
| Circular | 6–8 | 360° | Conference halls |
| Random | ≥8 | Depends | Specialized acoustic tasks |
A linear array is easier to calibrate; a circular array provides better separation of speakers around the table.
Step-by-Step Setup and AEC Implementation
- Measure room acoustics: RT60 reverberation time and noise source locations.
- Choose microphone array: linear 4–6 microphones for a standard room.
- Implement audio capture with synchronization via PTP or software correlation.
- Apply Delay-and-Sum for initial beamforming, then MVDR if reverberation is high.
- Add AEC to cancel echo from videoconferencing speakers.
- Use VAD and diarization to separate speakers, then feed each segment into STT.
More on adaptive filters
The adaptive echo canceller (AEC) uses the NLMS algorithm to estimate the acoustic path's impulse response. Typical filter length is 512–2048 samples at 16 kHz, covering up to 128 ms of echo. For stability, step size is chosen between 0.1 and 0.5. After filtering, residual echo suppression (RES) is applied.
Project Overview
Estimated Timeframes
- Basic prototype with beamforming and STT: from 1 week—if room acoustics are simple.
- Adding AEC and noise reduction: another 1 week.
- Full system with diarization, dereverberation, and array calibration: 3–4 weeks.
- Timeline depends on number of speakers and reverberation level.
What’s Included in Our Work (Deliverables)
- Microphone array architecture design and specifications.
- Implementation of beamforming, AEC, noise reduction, and diarization.
- Integration with STT (Whisper, Vosk, Azure Speech).
- API development for integration into your system.
- Setup and operation documentation (PDF).
- Training for your engineers (2 days on-site or remote).
- 1-month warranty support with bug fixes and tuning.
- Source code and configuration files delivered.
Common Implementation Mistakes
- Using WebRTC AEC without prior calibration—echo remains.
- Placing microphones closer than 5 cm to speakers—AEC fails.
- Forgetting clock synchronization—timestamp drift breaks beamforming.
- Disabling Voice Activity Detection—extra noise pollutes diarization.
Get a Consultation on Equipping Your Conference Room
Contact us—we will analyze your conference room acoustics, recommend a microphone array and algorithms. We'll assess your project within 1–2 days. Our engineers are certified in speech analysis and have completed over 50 projects in speech processing. Request a consultation—we'll tell you how to reduce WER and streamline meeting transcription.







