SoundFlow Mesh 튜닝 분석 및 실행 계획
현재 결정: 제품 기준점은
Mesh Default로 유지한다. 이번Mesh Custom에 적용한 Template A는 제품 후보에서 제외하고, 다음 시험에서는 작은 volume 복원과 두 개의 완화 BELL을 묶은MBR1 · Mesh Balanced Recovery를 검증한다.
4개 장 요약 SVG · 입력 레벨별 성능 추이 SVG · MBR1 property · MBR1 시험 계획
이 문서는 다음 자료를 함께 사용했다.
EQ.pdf: Kardome SK v1.1.17 Release Notes & Output Band Enhancement Guide, p.2–7.PO-2.7 - Equalizer-160726-041105.pdf: Equalizer 인터페이스·필터 타입· 파라미터 범위, p.2–6.- 2026-07-29 4조건 실측: 16 kHz WAV 180개와 KWS 호출 80회.
두 PDF는 내부 참고자료이므로 원본 파일은 공개 Wiki에 첨부하지 않고, 설계 판단에 필요한 정의와 범위만 요약했다.
1. 튜닝 파라미터 목록과 근거 이유
1.1 이번 시험에서 변경한 Template A
Custom 조건에는 아래 네 property를 동시에 적용했다.
persist.vendor.audio.sndflow.vol=0.4
persist.vendor.audio.sndflow.krdm.kws.sensitivity=3
persist.vendor.audio.sndflow.krdm.pre_filter=5,120,0,0
persist.vendor.audio.sndflow.krdm.eq_filter=0,1800,2,1;0,3000,1,1
이 조건은 EQ만 바꾼 시험이 아니라 출력 volume, KWS 감도, 입력 pre-filter, 출력 EQ를 함께 바꾼 4-property 묶음 시험이다.
1.2 파라미터 해석과 MBR1 변경값
| 파라미터 | Template A 적용값 | 다음 MBR1 값 | 변경 여부 | 근거와 검증 지표 |
|---|---|---|---|---|
sndflow.vol |
0.4 |
0.35 |
변경 | 서비스 기본 0.30과 Template A 0.40의 중간값이다. 55 dB 반응만 소폭 복원하고 70 dB headroom 위험을 제한한다. |
kws.sensitivity |
3 |
B0의 실제 Default/미설정 유지 | 변경 안 함 | KWS 임계값으로 FRR/FAR에는 영향을 주지만 STT 음질이나 noise reduction 문제를 직접 해결하지 않는다. B2에서 단독 검증한다. |
pre_filter |
5,120,0,0 |
B0의 실제 Default/미설정 유지 | 변경 안 함 | 5=FILTER_HP2, cutoff 120 Hz, gain 무시, Q≤0이면 기본 Butterworth Q다. 입력 전처리이므로 실제 wind 자료 없이 먼저 바꾸지 않는다. B3에서 단독 검증한다. |
eq_filter |
0,1800,2,1;0,3000,1,1 |
0,1800,0.75,1.4;0,3000,0.35,1.8 |
변경 | 두 개의 넓고 강한 BELL을 낮고 좁은 BELL 두 개로 완화한다. KWS, SBR, 1 kHz 제거력, 출력 floor, VAD/dropout으로 판정한다. |
서비스 코드는 sndflow.vol이 미설정이면 AGC_MAX_GAIN_ZONE=0.3을
적용한다. kws.sensitivity와 pre_filter는 MBR1에서 강제 설정하지
않고 B0의 미설정 상태까지 그대로 유지한다. 적용 전 getprop과
SoundFlow 로그로 B0 상태를 저장해야 한다.
1.3 EQ 배열 해석
두 PDF가 설명하는 필터 직렬화 형식은 다음과 같다.
type, center_frequency_hz, gain_db, q
BELL이란?
BELL은 지정한 중심 주파수 주변만 산 모양으로 올리거나 내리는
필터다. 벨 또는 피킹 EQ라고도 부른다. 전체 주파수나 전체 음량을
동일하게 올리는 volume과는 다르다.
gain(+)
▲
│ 중심 주파수
│ /\
원래 응답 ──────────┼─────────/ \─────────
│ 주변 대역만 변화
└──────────────────────▶ 주파수
center_frequency_hz: 산의 중심 위치다.gain_db: 산의 높이다. 양수면 주변 대역을 키우고 음수면 줄인다.Q: 산의 폭이다. Q가 낮으면 넓게, Q가 높으면 좁게 영향을 준다.- BELL을 여러 개 사용하면 겹치는 주파수의 gain이 dB 단위로 합산된다.
예를 들어 0,1800,2,1은 1.8 kHz 한 점만 2 dB 올리는 것이 아니라,
1.8 kHz를 최고점으로 주변 음성 대역까지 넓게 올린다. Template A의
Q=1 BELL 두 개가 1.8 kHz와 3 kHz에서 겹치면 예상보다 넓은 중고역이
강조될 수 있다.
MBR1은 1.8 kHz BELL을 +2/Q1→+0.75/Q1.4, 3 kHz BELL을
+1/Q1→+0.35/Q1.8로 낮추고 좁힌다. 두 BELL을 유지해 단일 필터보다
적극적으로 명료도 대역을 복원하되 Template A의 광대역 강조는 피한다.
이번 값은 다음 의미다.
| 직렬화 값 | 해석 |
|---|---|
0,1800,2,1 |
FILTER_BELL, 1.8 kHz 중심, 주변 대역 +2 dB, Q=1(넓음) |
0,3000,1,1 |
FILTER_BELL, 3 kHz 중심, 주변 대역 +1 dB, Q=1(넓음) |
0,1800,0.5,1.2 |
FILTER_BELL, 1.8 kHz 중심, 주변 대역 +0.5 dB, Q=1.2(상대적으로 좁음) |
0,1800,0.75,1.4 |
MBR1 1.8 kHz BELL, 주변 대역 +0.75 dB, Q=1.4 |
0,3000,0.35,1.8 |
MBR1 3 kHz BELL, 주변 대역 +0.35 dB, Q=1.8 |
PDF 근거에 따르면:
- Q가 낮으면 넓은 대역에 영향을 주고, Q가 높으면 중심 주파수 주변으로 영향이 좁아진다.
- 여러 필터가 겹치면 전체 응답은 주파수 영역에서 dB 단위로 합산된다.
EQ_FILTER_ARRAY는 zone별 코어 처리 이후 출력에 적용되는 zero-phase magnitude shaping이다. upstream echo cancellation과 source separation은 이 출력 EQ가 적용되기 전 신호에서 동작한다.PRE_FILTER_ARRAY는 global 입력 전처리이므로 출력 EQ와 신호 경로가 다르다.- Bell의 중심과 Q를 대역
[f1, f2]에서 설계할 때 PDF는center=√(f1×f2),Q=center/(f2-f1)를 제시한다.
16 kHz 표준 peaking-EQ biquad로 계산한 합성 응답의 예상 최대 boost는
Template A 약 2.42 dB, MBR1 약 0.81 dB다. 1 kHz 예상 boost도
약 0.83→0.18 dB로 줄어 기존 tone 제거력 열화 위험을 낮춘다.
실제 Kardome 응답은 다음 WAV에서 다시 측정한다.
1.4 필터 타입 번호
| 값 | 필터 | 용도 |
|---|---|---|
| -1 | FILTER_NONE |
필터 없음 |
| 0 | FILTER_BELL |
중심 주파수 주변만 산 모양으로 boost/cut하는 벨/피킹 EQ |
| 1 | FILTER_SHELF_LOW |
기준점 아래 전체 조정 |
| 2 | FILTER_SHELF_HIGH |
기준점 위 전체 조정 |
| 3 | FILTER_NOTCH |
특정 협대역 톤 제거 |
| 4 / 5 | FILTER_HP1 / FILTER_HP2 |
저역 제거, 6/12 dB per octave |
| 6 / 7 | FILTER_LP1 / FILTER_LP2 |
고역 제거, 6/12 dB per octave |
2. 현재 성능 및 테스트 현황
2.1 시험 범위
| 항목 | 현재 상태 |
|---|---|
| 비교 조건 | Original Default / Original Custom / Mesh Default / Mesh Custom |
| 입력 레벨 | 55 / 60 / 65 / 70 dB |
| 분석 파일 | 16 kHz WAV 180개 |
| KWS | 총 80회, 조건·레벨별 5회 |
| STT | 200–4,000 Hz 음성/배경 분리도(SBR) 파형 분석 |
| 노이즈 | 폴더명 1Hz, 실측 주성분 약 1 kHz의 stationary tone proxy |
2.2 4조건 정량 결과
| 조건 | KWS | SBR | 처리 이득 | Mic noise RMS | 출력 noise floor | 1 kHz 제거력 |
|---|---|---|---|---|---|---|
| Original Default | 19/20 | 23.03 dB | 3.37 dB | -61.03 dBFS | -89.44 dBFS | 50.53 dB |
| Original Custom | 20/20 | 24.72 dB | 3.45 dB | -61.57 dBFS | -90.39 dBFS | 47.84 dB |
| Mesh Default | 20/20 | 25.13 dB | 5.60 dB | -62.80 dBFS | -89.87 dBFS | 49.70 dB |
| Mesh Custom | 18/20 | 23.22 dB | 3.85 dB | -60.68 dBFS | -86.49 dBFS | 40.01 dB |
Mic noise RMS와 출력 noise floor는 낮을수록 조용하다. SBR, 처리
이득, 1 kHz 제거력은 높을수록 좋다.
2.3 완료·미완료 현황
| 시험 | 상태 | 현재 근거 | 남은 항목 |
|---|---|---|---|
| 4조건 KWS | 완료, 표본 작음 | 80회 실제 로그 검출 | 레벨·후보별 30회로 확대 |
| STT 파형 품질 | 완료 | SBR, active RMS, VAD, dropout | 동일 PCM decoder WER/CER |
| Mesh 물리 효과 | 1차 완료 | Default에서 Mic noise -1.78 dB, SBR +2.11 dB | 반복 수집과 mesh 개체 편차 |
| 1 kHz 톤 | 1차 완료 | Mesh Custom 제거력 -9.69 dB | 실제 motor RPM sweep |
| 실제 motor/fan/wind | 미완료 | 현재 자료로 확정 불가 | 조건별 300초와 false accept |
| Template A 구성요소 분리 | 미완료 | 네 property 동시 변경 | B1–B4 단일 변수 A/B |
| MBR1 | 미실행 | 다중 파라미터 시험 설계 완료 | ABBA KWS/STT/noise 실행 |
2.4 SBR 읽는 법
SBR은 Signal-to-Background Ratio, 즉 배경 대비 음성 에너지의 분리
정도다.
SBR(dB) = 10 × log10(발화 구간 에너지 / 배경 구간 에너지)
- 값이 높을수록 음성이 배경에서 선명하게 분리된다.
+3 dB는 음성/배경 에너지 비가 약 2배 차이 난다는 뜻이다.- Mesh Default
25.13 dB는 약326:1, Mesh Custom23.22 dB는 약210:1이다. Template A 적용 후 Mesh의 분리 비율이 약 36% 감소했다. - SBR은 STT 입력 파형 proxy이며 실제 인식 정확도인 WER/CER와는 다르다.
3. 테스트 결과에 따른 시사점
3.1 Mesh 자체는 유효하다
Default끼리 비교하면 Original→Mesh에서 KWS는 19/20→20/20, 평균
SBR은 +2.11 dB, 처리 이득은 +2.23 dB, Mic noise RMS는 1.78 dB
조용해졌다. 현재 데이터에서 제품 기준점은 Mesh Default다.
다만 55 dB에서는 Mesh Default SBR이 Original Default보다 1.94 dB
낮고 dropout 4.89%가 관찰됐다. 저레벨·원거리 조건은 별도 보완
대상이다.
3.2 Template A 묶음은 Mesh에서 적용 제외다
| Mesh Default → Mesh Custom | 변화 | 판정 |
|---|---|---|
| KWS | 20/20 → 18/20 | 55·65 dB에서 각 1회 누락 |
| 평균 SBR | -1.91 dB | 음성/배경 분리 악화 |
| 처리 이득 | -1.75 dB | STT 입력 품질 악화 |
| 출력 noise floor | +3.38 dB | 잔류 노이즈 증가 |
| 1 kHz 제거력 | -9.69 dB | 모터성 톤 proxy 억제 약화 |
| 70 dB VAD/dropout | +256 ms / 7.44% | 끝점·게이팅 불안정 징후 |
따라서 Template A를 Mesh 제품 preset으로 승격하지 않는다.
3.3 EQ 단독 열화로 표현하면 안 된다
Template A는 네 property가 동시에 바뀌었다. PDF의 신호 경로 설명까지 반영하면 원인 후보는 다음처럼 나뉜다.
| 원인 후보 | 신호 경로 | 확인 방법 |
|---|---|---|
vol=0.4 |
전체 출력 gain | B1 단독 A/B에서 RMS·floor·headroom 확인 |
kws.sensitivity=3 |
KWS 판정 임계값 | B2에서 FRR/FAR만 분리 |
HP2 120 Hz |
global 입력 pre-filter | B3에서 55 dB STT와 실제 wind 확인 |
| 두 BELL(벨/피킹) EQ | 코어 처리 후 zone 출력 | B4/MBR1에서 출력 SBR·톤·floor 확인 |
| property 간 상호작용 | 복합 | B1–B4와 Template A 결과 비교 |
출력 EQ가 코어 처리 후 적용된다는 PDF 설명상, 현재 결과만으로 “EQ가 upstream source separation 알고리즘 자체를 악화시켰다”고 결론 내릴 수 없다. 더 정확한 표현은 Template A 묶음이 최종 KWS/STT 입력과 출력 노이즈 결과를 악화시켰다이다.
3.4 노이즈 결론의 범위
현재 노이즈 파일의 실측 주성분은 약 1 kHz다. 일정한 모터성 톤의 proxy로는 사용할 수 있지만, 저주파 난류가 중심인 실제 wind나 RPM/PWM이 변하는 motor/fan 결과로 일반화할 수 없다.
Mesh Default에서 <80 Hz와 80–200 Hz 억제가 각각 약 1.01 dB,
0.69 dB 개선되는 방향이었지만 실제 wind 검증 전에는 HP2 cutoff를
150/180 Hz로 올리지 않는다. 높은 cutoff가 55 dB 원거리 음성의 저역
정보를 더 줄일 수 있기 때문이다.
4. 다음 계획 및 일정
일정은 장비 1대와 고정 음향 셋업 1식을 기준으로 한 실행안이다.
| 날짜 | 단계 | 실행 내용 | 산출물 / 판정 |
|---|---|---|---|
| 2026-07-30 | B0 기준 고정 | Mesh Default image·Kardome library·전체 property·SPL·PCM 고정 | B0 manifest, getprop, 적용 로그 |
| 2026-07-31 | B1–B4 원인 분리 | vol / sensitivity / HP2 / 기존 EQ를 하나씩만 적용 | property별 영향표, 조기 중단 판정 |
| 2026-08-03 | MBR1 ABBA | B0→MBR1→MBR1→B0, 55·70 dB 빠른 선별 후 전 레벨 확장 |
KWS FRR, SBR, VAD/dropout |
| 2026-08-04 | 실부하 노이즈 | motor RPM, fan PWM, wind 1/3/5 m/s, pink noise를 각 300초 | noise floor, false accept, 톤/대역 분석 |
| 2026-08-05 | 통합 Gate | decoder WER/CER와 파형·KWS·노이즈 결과 통합 | MBR1 적용/탈락 결정 |
| 2026-08-06 | 조건부 원인 분리 | MBR1 탈락 시 vol-only와 EQ-only로 분리 | 실패 원인 확정 또는 시험 종료 |
| 2026-08-07 | 결과 확정 | 최종 property와 회귀 결과 정리 | 제품 후보안과 Wiki 갱신 |
4.1 다음 시험값: MBR1
# Mesh Balanced Recovery · 시험 후보, 제품 preset 아님
persist.vendor.audio.sndflow.vol=0.35
persist.vendor.audio.sndflow.krdm.eq_filter=0,1800,0.75,1.4;0,3000,0.35,1.8
MBR1에서는 다음 두 property를 Template A 값으로 강제 설정하지 않는다.
persist.vendor.audio.sndflow.krdm.kws.sensitivity # B0 그대로
persist.vendor.audio.sndflow.krdm.pre_filter # B0 그대로
이전 Template A 네 줄을 남긴 상태에서 MBR1을 추가하면 안 된다. MBR1은 volume과 EQ를 함께 바꾸는 최적화 bundle이므로 B0와 직접 ABBA 비교한다. 원인 확인이 필요하면 아래 M1/단일 변수 시험으로 되돌아간다.
4.2 원인 분리 시험
| 단계 | B0 대비 변경 | 주 판정 |
|---|---|---|
| B1 | vol=0.4만 |
active RMS, output floor, headroom |
| B2 | kws.sensitivity=3만 |
KWS FRR/FAR |
| B3 | pre_filter=5,120,0,0만 |
실제 wind, 저역, 55 dB STT |
| B4 | eq_filter=0,1800,2,1;0,3000,1,1만 |
SBR, 1 kHz 제거, dropout |
| M1 | eq_filter=0,1800,0.5,1.2만 |
완화 EQ의 독립 효과 |
| MBR1 | vol=0.35 + 완화 BELL 두 개 |
다음 시험의 주 최적화 bundle |
4.3 승격 Gate
| 항목 | 합격 기준 |
|---|---|
| KWS | 55/60/65/70 dB 각 29/30 이상, B0보다 하락 금지 |
| 최종 STT | 동일 PCM decoder WER/CER가 B0보다 악화되지 않음 |
| STT 파형 proxy | 200–4,000 Hz SBR 변화가 B0 대비 -0.5 dB 이상 |
| 출력 noise floor | B0 대비 증가 +1 dB 이하 |
| 1 kHz 제거력 | B0 대비 손실 2 dB 이하 |
| VAD / dropout | 활성 구간 변화 50 ms 이하 / dropout 1% 이하 |
| False accept | 무음·motor·fan·wind 각 300초에서 B0 대비 증가 없음 |
| Headroom | 10 dBFS 이상 |
4.4 시험 파일
MBR1이 탈락하면 gain을 더 올리지 않는다. vol=0.35와 두 BELL 중
어느 쪽이 원인인지 vol-only와 EQ-only로 분리한다. M1은 이때
EQ 단독의 최소 개입 진단값으로 사용한다.