feat: add varied microphone array presets
This commit is contained in:
@@ -1,40 +1,46 @@
|
||||
# Array Geometries
|
||||
|
||||
Camera에서 즉시 사용하고 테스트에서 재현할 수 있는 계약 버전 `1.0.0`의 192채널 Array JSON
|
||||
fixture입니다. 좌표 단위는 m이고 모든 microphone은 배열 평면 `z = 0`에 있습니다. `+x`는 오른쪽,
|
||||
`+y`는 위, `+z`는 scene 방향입니다.
|
||||
Acoustic Camera에서 즉시 선택하고 같은 Scene/Experiment로 비교할 수 있는 Array JSON 예제입니다.
|
||||
모든 파일은 계약 버전 `1.0.0`을 따르며 좌표 단위는 m입니다. microphone은 배열 평면
|
||||
`z = 0`에 있고, `+x`는 오른쪽, `+y`는 위, `+z`는 scene 방향입니다.
|
||||
|
||||
## 포함된 배열
|
||||
## 비교용 preset
|
||||
|
||||
### `rectangular-16x12.array.json`
|
||||
| 비교 축 | 파일 | 채널 | aperture | x × y pitch |
|
||||
| --- | --- | ---: | ---: | ---: |
|
||||
| 채널 수 · 최소 | `rectangular-2x2-450mm.array.json` | 4 | 0.45 × 0.45 m | 450 × 450 mm |
|
||||
| 채널 수 · 적음 | `rectangular-4x3-450mm.array.json` | 12 | 0.45 × 0.45 m | 150 × 225 mm |
|
||||
| 채널 수 · 중간 | `rectangular-8x6-450mm.array.json` | 48 | 0.45 × 0.45 m | 64.286 × 90 mm |
|
||||
| 채널 수·크기 기준 | `rectangular-16x12.array.json` | 192 | 0.45 × 0.45 m | 30 × 40.909 mm |
|
||||
| 채널 수 · 많음 | `rectangular-24x16-450mm.array.json` | 384 | 0.45 × 0.45 m | 19.565 × 30 mm |
|
||||
| 물리 크기 · 소형 | `rectangular-16x12-compact.array.json` | 192 | 0.12 × 0.12 m | 8 × 10.909 mm |
|
||||
| 물리 크기 · 대형 | `rectangular-16x12-large.array.json` | 192 | 1.20 × 1.20 m | 80 × 109.091 mm |
|
||||
| 배치 패턴 | `fermat-spiral-192.array.json` | 192 | Ø 0.45 m | 비균일 |
|
||||
|
||||
- 16 columns × 12 rows = 192 microphones
|
||||
- 폭과 높이가 각각 0.45 m인 정사각 aperture
|
||||
- x/y 양 끝을 포함해 균일한 간격으로 배치
|
||||
- 기본 single-tone experiment와 CPU/WebGPU 기준 fixture가 참조하는 baseline
|
||||
Camera의 **배열 선택**은 비교 목적에 맞춰 preset을 그룹으로 나눕니다.
|
||||
|
||||
### `fermat-spiral-192.array.json`
|
||||
- 채널 수 효과는 aperture가 모두 0.45 m인 4·12·48·192·384채널 rectangular 배열끼리 비교합니다.
|
||||
- 물리 크기 효과는 topology와 채널 수가 같은 192채널 compact·baseline·large 배열끼리 비교합니다.
|
||||
- 배치 패턴 효과는 192채널 0.45 m rectangular baseline과 Fermat spiral을 비교합니다.
|
||||
|
||||
- 192 microphones
|
||||
- 반지름 0.225 m, 지름 0.45 m인 원형 aperture
|
||||
- golden angle과 면적 균등 반지름으로 만든 Fermat spiral
|
||||
- rectangular baseline과 sidelobe·집중도·위치 오차를 비교하기 위한 preset
|
||||
|
||||
Acoustic Camera의 **비교 배열**에서 두 배열을 선택해 같은 Scene/Experiment 결과를 세션 기록에
|
||||
나란히 추가할 수 있습니다.
|
||||
이 preset들은 정확도를 보장하는 제품 사양이 아니라 trade-off를 관찰하기 위한 입력입니다. 채널 간격이
|
||||
넓은 저채널·대형 배열에서 고주파 spatial aliasing과 grating lobe가 나타나거나, compact 배열에서
|
||||
main lobe가 넓어지는 것은 예상 가능한 결과입니다. 384채널 배열은 같은 grid에서 계산량과 메모리 사용량도
|
||||
가장 큽니다. 빠른 동작 확인은 4채널이나 12채널부터 시작하세요.
|
||||
|
||||
## fixture 다시 생성하기
|
||||
|
||||
저장소 최상위에서 다음 명령을 실행하면 두 JSON을 결정론적으로 다시 생성합니다.
|
||||
저장소 최상위에서 다음 명령을 실행하면 위 8개 JSON을 결정론적으로 다시 생성합니다.
|
||||
|
||||
```powershell
|
||||
powershell.exe -NoLogo -NoProfile -ExecutionPolicy Bypass -File .\scripts\generate-array-fixture.ps1
|
||||
```
|
||||
|
||||
이 스크립트는 기존 `rectangular-16x12.array.json`과 `fermat-spiral-192.array.json`을 덮어씁니다.
|
||||
`ExecutionPolicy Bypass`는 이 PowerShell 프로세스에만 적용됩니다. 생성 뒤
|
||||
<http://127.0.0.1:4173/tests/>에서 schema와 192채널 배치 검증을 실행하세요.
|
||||
`ExecutionPolicy Bypass`는 해당 PowerShell 프로세스에만 적용됩니다. 생성 뒤
|
||||
`test.cmd`로 schema, 채널 수, 좌표 중복, 평면성, grid 행·열 수와 aperture 경계를 검증할 수
|
||||
있습니다.
|
||||
|
||||
사용자 배열은 [`../../schemas/array.schema.json`](../../schemas/array.schema.json) 구조를 따르고
|
||||
고유한 `id`, aperture와 microphone별 `[x, y, z]`를 가져야 합니다. 선택적인 `sensitivityDb`와
|
||||
`phaseOffsetDeg`는 합성 channel 편차와 beamforming 역 calibration에 사용됩니다.
|
||||
사용자 배열은 [array schema](../../schemas/array.schema.json) 구조를 따르고 고유한 `id`,
|
||||
aperture와 microphone별 `[x, y, z]`를 가져야 합니다. 선택적인 `sensitivityDb`와
|
||||
`phaseOffsetDeg`는 합성 channel 편차와 beamforming 역 calibration에 사용됩니다. geometry
|
||||
효과와 calibration 효과를 분리하기 위해 기본 preset에는 이 값을 넣지 않았습니다.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"schemaVersion": "1.0.0",
|
||||
"kind": "micarrsim.array",
|
||||
"id": "rectangular-2x2-450mm",
|
||||
"name": "2x2 sparse rectangular",
|
||||
"description": "4-channel uniform rectangular layout on the 0.45 m reference aperture",
|
||||
"units": "m",
|
||||
"coordinateSystem": {
|
||||
"handedness": "right",
|
||||
"xAxis": "right",
|
||||
"yAxis": "up",
|
||||
"zAxis": "toward-scene"
|
||||
},
|
||||
"aperture": {
|
||||
"width": 0.45,
|
||||
"height": 0.45
|
||||
},
|
||||
"microphones": [
|
||||
{
|
||||
"id": "mic-001",
|
||||
"position": [
|
||||
-0.225,
|
||||
-0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-002",
|
||||
"position": [
|
||||
0.225,
|
||||
-0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-003",
|
||||
"position": [
|
||||
-0.225,
|
||||
0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-004",
|
||||
"position": [
|
||||
0.225,
|
||||
0.225,
|
||||
0
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
{
|
||||
"schemaVersion": "1.0.0",
|
||||
"kind": "micarrsim.array",
|
||||
"id": "rectangular-4x3-450mm",
|
||||
"name": "4x3 sparse rectangular",
|
||||
"description": "12-channel uniform rectangular layout on the 0.45 m reference aperture",
|
||||
"units": "m",
|
||||
"coordinateSystem": {
|
||||
"handedness": "right",
|
||||
"xAxis": "right",
|
||||
"yAxis": "up",
|
||||
"zAxis": "toward-scene"
|
||||
},
|
||||
"aperture": {
|
||||
"width": 0.45,
|
||||
"height": 0.45
|
||||
},
|
||||
"microphones": [
|
||||
{
|
||||
"id": "mic-001",
|
||||
"position": [
|
||||
-0.225,
|
||||
-0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-002",
|
||||
"position": [
|
||||
-0.075,
|
||||
-0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-003",
|
||||
"position": [
|
||||
0.075,
|
||||
-0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-004",
|
||||
"position": [
|
||||
0.225,
|
||||
-0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-005",
|
||||
"position": [
|
||||
-0.225,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-006",
|
||||
"position": [
|
||||
-0.075,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-007",
|
||||
"position": [
|
||||
0.075,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-008",
|
||||
"position": [
|
||||
0.225,
|
||||
0,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-009",
|
||||
"position": [
|
||||
-0.225,
|
||||
0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-010",
|
||||
"position": [
|
||||
-0.075,
|
||||
0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-011",
|
||||
"position": [
|
||||
0.075,
|
||||
0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-012",
|
||||
"position": [
|
||||
0.225,
|
||||
0.225,
|
||||
0
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,404 @@
|
||||
{
|
||||
"schemaVersion": "1.0.0",
|
||||
"kind": "micarrsim.array",
|
||||
"id": "rectangular-8x6-450mm",
|
||||
"name": "8x6 rectangular",
|
||||
"description": "48-channel uniform rectangular layout on the 0.45 m reference aperture",
|
||||
"units": "m",
|
||||
"coordinateSystem": {
|
||||
"handedness": "right",
|
||||
"xAxis": "right",
|
||||
"yAxis": "up",
|
||||
"zAxis": "toward-scene"
|
||||
},
|
||||
"aperture": {
|
||||
"width": 0.45,
|
||||
"height": 0.45
|
||||
},
|
||||
"microphones": [
|
||||
{
|
||||
"id": "mic-001",
|
||||
"position": [
|
||||
-0.225,
|
||||
-0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-002",
|
||||
"position": [
|
||||
-0.160714,
|
||||
-0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-003",
|
||||
"position": [
|
||||
-0.096429,
|
||||
-0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-004",
|
||||
"position": [
|
||||
-0.032143,
|
||||
-0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-005",
|
||||
"position": [
|
||||
0.032143,
|
||||
-0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-006",
|
||||
"position": [
|
||||
0.096429,
|
||||
-0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-007",
|
||||
"position": [
|
||||
0.160714,
|
||||
-0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-008",
|
||||
"position": [
|
||||
0.225,
|
||||
-0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-009",
|
||||
"position": [
|
||||
-0.225,
|
||||
-0.135,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-010",
|
||||
"position": [
|
||||
-0.160714,
|
||||
-0.135,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-011",
|
||||
"position": [
|
||||
-0.096429,
|
||||
-0.135,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-012",
|
||||
"position": [
|
||||
-0.032143,
|
||||
-0.135,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-013",
|
||||
"position": [
|
||||
0.032143,
|
||||
-0.135,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-014",
|
||||
"position": [
|
||||
0.096429,
|
||||
-0.135,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-015",
|
||||
"position": [
|
||||
0.160714,
|
||||
-0.135,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-016",
|
||||
"position": [
|
||||
0.225,
|
||||
-0.135,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-017",
|
||||
"position": [
|
||||
-0.225,
|
||||
-0.045,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-018",
|
||||
"position": [
|
||||
-0.160714,
|
||||
-0.045,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-019",
|
||||
"position": [
|
||||
-0.096429,
|
||||
-0.045,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-020",
|
||||
"position": [
|
||||
-0.032143,
|
||||
-0.045,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-021",
|
||||
"position": [
|
||||
0.032143,
|
||||
-0.045,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-022",
|
||||
"position": [
|
||||
0.096429,
|
||||
-0.045,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-023",
|
||||
"position": [
|
||||
0.160714,
|
||||
-0.045,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-024",
|
||||
"position": [
|
||||
0.225,
|
||||
-0.045,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-025",
|
||||
"position": [
|
||||
-0.225,
|
||||
0.045,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-026",
|
||||
"position": [
|
||||
-0.160714,
|
||||
0.045,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-027",
|
||||
"position": [
|
||||
-0.096429,
|
||||
0.045,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-028",
|
||||
"position": [
|
||||
-0.032143,
|
||||
0.045,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-029",
|
||||
"position": [
|
||||
0.032143,
|
||||
0.045,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-030",
|
||||
"position": [
|
||||
0.096429,
|
||||
0.045,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-031",
|
||||
"position": [
|
||||
0.160714,
|
||||
0.045,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-032",
|
||||
"position": [
|
||||
0.225,
|
||||
0.045,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-033",
|
||||
"position": [
|
||||
-0.225,
|
||||
0.135,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-034",
|
||||
"position": [
|
||||
-0.160714,
|
||||
0.135,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-035",
|
||||
"position": [
|
||||
-0.096429,
|
||||
0.135,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-036",
|
||||
"position": [
|
||||
-0.032143,
|
||||
0.135,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-037",
|
||||
"position": [
|
||||
0.032143,
|
||||
0.135,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-038",
|
||||
"position": [
|
||||
0.096429,
|
||||
0.135,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-039",
|
||||
"position": [
|
||||
0.160714,
|
||||
0.135,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-040",
|
||||
"position": [
|
||||
0.225,
|
||||
0.135,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-041",
|
||||
"position": [
|
||||
-0.225,
|
||||
0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-042",
|
||||
"position": [
|
||||
-0.160714,
|
||||
0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-043",
|
||||
"position": [
|
||||
-0.096429,
|
||||
0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-044",
|
||||
"position": [
|
||||
-0.032143,
|
||||
0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-045",
|
||||
"position": [
|
||||
0.032143,
|
||||
0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-046",
|
||||
"position": [
|
||||
0.096429,
|
||||
0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-047",
|
||||
"position": [
|
||||
0.160714,
|
||||
0.225,
|
||||
0
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mic-048",
|
||||
"position": [
|
||||
0.225,
|
||||
0.225,
|
||||
0
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user