Files
2026-09-29 22:41:29 +08:00

37 lines
1.3 KiB
Markdown

# Standalone C++ DOA and MVDR
This directory contains a dependency-free C++17 implementation of SRP-PHAT
(the historical `SRP-PATH` spelling is accepted as an alias), NormMUSIC, and
frequency-domain MVDR. It includes its own radix-2 FFT, complex Hermitian
Jacobi eigensolver, and Gaussian elimination. The resulting binary does not
require Eigen, FFTW, BLAS, Python, or Pyroomacoustics at runtime.
Build from the repository root:
```powershell
cmake -S . -B build
cmake --build build --config Release
```
The CLI input format is a whitespace-separated matrix. The first line is
`<sample_count> <channel_count>`, followed by one row per sample:
```powershell
build\cpp\Release\doa_cli.exe srp input.txt 48000 512
build\cpp\Release\doa_cli.exe normmusic input.txt 48000 512
build\cpp\Release\doa_cli.exe mvdr input.txt 73 48000 512 > output.txt
```
`compare_with_pyroomacoustics.py` generates a deterministic plane wave and
compares both DOA angles and MVDR samples against the repository's Python
reference. Run it after building with:
```powershell
uv run python cpp/compare_with_pyroomacoustics.py
```
The implementation uses the same microphone coordinates, Hann window,
frequency-bin convention (`500 <= f < 4000 Hz`), steering-vector sign,
frequency-normalized NormMUSIC spectrum, diagonal loading, and overlap-add
normalization as the Python path.