Files
micarrsim/packages/acoustics-core

Acoustics Core

두 앱이 공유하는 무의존성 수치 기준 구현입니다.

  • 결정적 tone/white/pink noise 및 오디오 asset resampling
  • 자유음장 점 음원의 delay = r / c, amplitude = 1 / r 구면 전파
  • zero-padded FFT phase shift 기반 fractional sample delay
  • radix-2 FFT, Hann STFT와 선택 bin 추출
  • scan grid 거리 cache 및 conventional frequency-domain DAS

이동 음원과 분석 시간창

sourcePositionAtTime은 scene 시작 기준의 절대 시각에서 trajectory keyframe 사이를 선형 보간하며, 경로 범위 밖에서는 가장 가까운 끝점 위치를 유지합니다. sampleQuasiStaticWindow는 요청 경계를 sample 경계로 올림 정렬하고, 시간창 중앙의 위치에서 이동 음원을 정지한 것으로 근사합니다.

시간창은 활성 source만 잘라 짧은 Scene으로 만들지만 signalOffsets에 원래 scene/source의 절대 sample offset을 보존합니다. 이를 synthesizeMicrophoneSignals에 전달하면 각 창을 따로 합성해도 tone phase, seed 기반 noise index, audio asset 재생 위치와 ambient가 전체 timeline 합성과 연속됩니다.

Beam spread 의미

Peak의 beamSpread는 half-power 연결 성분을 power 가중한 공간 covariance(covarianceM2, m²)와 그 RMS 주축 ellipse로 요약한 빔 폭입니다. 가우시안 확률 모델, 위치 확률 또는 신뢰구간으로 보정된 값이 아니며 calibrated: false를 유지합니다.

FFT는 X[k] = Σ x[n] exp(-j2πkn/N) 규약을 사용합니다. 마이크 신호의 전파 phase exp(-j2πfr/c)를 정렬하기 위해 DAS steering은 exp(+j2πfr/c)를 곱합니다. 단일 tone의 ground-truth 위치에서 peak가 생기는 회귀 테스트로 이 부호를 고정합니다.

마이크 sensitivityDb와 phaseOffsetDeg는 수신 channel에 편차로 적용하고, DAS에서는 알려진 calibration 값의 역 gain/phase로 보정합니다. raw power map과 표시용 normalized map은 서로 다른 buffer로 보존합니다. bin spectrum은 제한된 batch로 처리하며 point batch 사이에서 event loop를 양보해 진행 callback과 AbortSignal 취소가 동작합니다.

현재 전파 모델은 자유음장·무지향성 점 음원이며 잔향은 포함하지 않습니다. 전체 signal을 메모리에 보관하는 CPU 기준 구현이므로 source/channel과 delay FFT working set을 512 MiB로 제한합니다. 장시간 입력은 이후 chunk/STFT streaming backend에서 지원합니다.

192채널·50×50 fixture는 브라우저 통합 테스트에서 실제 합성부터 DAS peak 검출까지 실행합니다.