docs: explain full-band activity workflow

This commit is contained in:
2026-08-29 14:03:38 +09:00
parent 51e346a477
commit 764cf28cf8
9 changed files with 252 additions and 19 deletions
+50 -1
View File
@@ -6,7 +6,56 @@
- 자유음장 직접음과 선택적 저비용 shoebox multipath
- zero-padded FFT 전달함수 기반 fractional sample delay와 마이크 주파수 응답
- radix-2 FFT, Hann STFT와 선택 bin 추출
- scan grid 거리 cache 및 DAS·DAS-PHAT·GCC-PHAT 위치 추정
- scan grid 거리 cache 및 DAS·DAS-PHAT·GCC-PHAT·MUSIC 위치 추정
## 단일 채널 활동 검출 API
전 대역 후보 검출은 위치추정기와 분리된 무의존성 ES module입니다.
<code>analyzeCfarActivity()</code>는 한 채널의 모든 complete Hann frame에 CA-CFAR 또는
OS-CFAR를 적용하고, <code>computeDixonSpectralFlux()</code>는 Dixon 2006의 Hamming,
linear-magnitude, half-wave, full-DFT L1 onset novelty를 계산합니다.
~~~js
import {
analyzeCfarActivity,
computeDixonSpectralFlux,
pickCausalSpectralFluxPeaks,
} from "./packages/acoustics-core/index.js";
const cfar = await analyzeCfarActivity({
samples: onePhysicalAdcChannel,
sampleRate: 48_000,
fftSize: 512,
hopSize: 256,
window: "hann",
channelId: "mic-001",
detector: "os-cfar",
trainingCellsPerSide: 8,
guardCellsPerSide: 2,
rank: 12,
nominalFalseAlarmProbability: 0.001,
});
const flux = computeDixonSpectralFlux({
samples: onePhysicalAdcChannel,
sampleRate: 48_000,
fftSize: 512,
hopSize: 256,
channelId: "mic-001",
});
~~~
두 함수는 여러 마이크, frame 또는 detector를 합치지 않으며 위치·음원 수·아날로그 alias order를
추론하지 않습니다. CFAR 결과는 DC와 Nyquist를 포함한 모든 ADC bin record를 보존하고,
full symmetric reference가 없는 edge를 <code>untested</code>로 남깁니다. Pfa는 IID
exponential 모델의 tested CUT 하나당 명목값입니다. Spectral flux는 모든 frame×full-DFT-bin
양의 차이와 raw ODF를 보존하며 peak picker는 별도 명시 호출입니다.
<code>estimateCfarActivityWorkload()</code>와
<code>estimateDixonSpectralFluxWorkload()</code>로 할당 전에 frame/bin/FFT 연산과 raw output
byte를 검사할 수 있습니다. 기본 상한을 넘으면 일부 frame, top-K bin 또는 축소 결과를
만들지 않고 실패합니다. 상세 수식과 문헌은
[전 대역 활동 검출 모델](../../docs/activity-detection.md)에 있습니다.
## Nyquist 초과 입력