SoundFlow Kardome Tuning Runbook
이 문서는 A1 SoC soundflowservice에 Kardome v1.1.17을 적용한 뒤, mesh 적용과 제품 높이 감소로 발생할 수 있는 음성 입력 RMS 감소를 보정하기 위한 설치, 튜닝, 테스트 작업 가이드다.
4조건 KWS/STT/노이즈 결과와 재튜닝 설계는 SoundFlow Mesh × Template A KWS/STT 정밀 분석을 기준 보고서로 사용한다.
Mini Custom A-D 풍량 시험은 Mini Custom A-D 통합 분석을 참조한다.
Original/Mesh/Mini와 decoder·음향 proxy를 한 번에 비교할 때는 기존 A1·Mini·Custom EQ 통합 분석을 기준으로 한다.
적용 범위
대상 코드/산출물:
SoC repo: /home/silogood/work/1.A1_SoC_new/SoC/a1_um_quber
Output: output/kardome_sndflow_20260716
Service: vendor.quber.hardware.soundflowservice@1.0-service
Kardome: thirdparty/Kardome/2026-07-16_v1.1.17
테스트 목적:
1. 최신 Kardome library와 SoundFlow service가 기기에서 정상 로딩되는지 확인한다.
2. mesh 적용 후 줄어든 입력 RMS를 보정한다.
3. 제품 높이 감소로 늘어날 수 있는 저역 울림/바닥 반사/구조물 진동을 줄인다.
4. STT에 유리한 음성 명료도와 안정적인 SNR을 확보한다.
5. VAD/SAE/KWS 반응성 개선과 오검출 증가 사이의 균형점을 찾는다.
2026-08-18 Mini A1 RMS 보상 판정
높이가 약 70 cm 낮아진 Mini A1은 기존 A1 대비 MIC RMS가 4조건 평균 -12.65 dB, 출력 RMS가 평균 -11.41 dB 낮다. 현재 제품 상태에서 RMS가 전반적으로 낮게 관측된 것은 확인됐다. 아래 판정은 Custom 필터 A-D가 이 저하를 보상할 수 있는지를 본다.
| 후보 | 평균 출력 RMS | 전달량 | output floor | 판정 |
|---|---|---|---|---|
| Custom A | -0.23 dB | -1.12 dB | -1.13 dB | 강풍·터보 부분 회복, 후속 기반안 |
| Custom B | -1.37 dB | -1.91 dB | -2.05 dB | noise 억제 비교군 |
| Custom C | -0.55 dB | -1.46 dB | -1.44 dB | 회복량 미미, 변동 큼 |
| Custom D | -0.74 dB | -1.56 dB | -1.47 dB | 보류 |
네 후보 모두 Mini Original 대비 평균 출력 RMS가 음수다. 따라서 현재 필터 단독으로 Mini RMS 저하를 회복하지 못했다. 확인된 공통 이득은 output floor 감소이고, 그 대가로 전달량과 레벨 안정성에 비용이 생겼다.
Custom A는 강풍 +0.57 dB, 터보 +1.67 dB로 출력 RMS가 부분 회복됐지만 약풍 -2.03 dB, 중풍 -1.11 dB로 악화했다. A를 바로 채택하지 않고 필터 기반안으로 사용한다.
Mini 로그 20개에서 찾은 KWS 기록 23건은 모두 0이고 정답 전사문·decoder 결과가 없다. 따라서 현재 수치로 KWS hit-rate 또는 STT WER/CER가 개선됐다고 말할 수 없다.
튜닝 원칙:
- Mini Original의 현재 property 상태를 B0로 고정한다.
A 필터 단독 → A + gain/vol 단계 보상으로 필터와 증폭을 분리한다.- gain은 전체 RMS만 올리는 것이 아니라 speech-active RMS/SBR 회복을 목표로 하고 floor/headroom을 동시에 Gate로 둔다.
- KWS sensitivity는 음향 전처리와 gain 확정 뒤 마지막에 조정한다.
- A + gain 후보가 RMS 회복, KWS 기준선 유지, WER/CER 비열화, dropout 1% 이하, floor 개선을 동시에 만족할 때만 승격한다.
기존 A1과 Mini의 팬 SPL이 서로 달라 높이 효과는 아직 인과 미확정이다. 높이 축은 기존 A1 vs Mini Original, EQ 축은 Mini Original vs A/B로 나눠 동일 조건에서 재시험한다. 전체 수치와 증거 수준은 기존 A1·Mini·Custom EQ 통합 분석에서 확인한다.
2026-07-29 Mesh × Template A 실측 업데이트
이번 2×2 비교의 Custom 조건은 Original과 Mesh 모두 아래의 동일한
Template A를 적용했다.
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
비교 조건:
| 조건 | Mesh | Template A |
|---|---|---|
| Original Default | 없음 | 미적용 |
| Original Custom | 없음 | 적용 |
| Mesh Default | 적용 | 미적용 |
| Mesh Custom | 적용 | 적용 |
핵심 실측 결과
55/60/65/70 dB 호출어 각 5회, 총 KWS 80회와 WAV 180개를 분석했다.
| 비교 | KWS | STT 200~4000 Hz SBR | Kardome 처리 이득 | 1 kHz 톤 제거력 | 출력 노이즈 바닥 |
|---|---|---|---|---|---|
| Original Default | 19/20 | 23.03 dB | 기준 | 50.53 dB | -89.44 dBFS |
| Original Custom | 20/20 | 24.72 dB | Default 대비 +0.08 dB | 47.84 dB | -90.39 dBFS |
| Mesh Default | 20/20 | 25.13 dB | Original Default 대비 +2.23 dB | 49.70 dB | -89.87 dBFS |
| Mesh Custom | 18/20 | 23.22 dB | Mesh Default 대비 -1.75 dB | 40.01 dB | -86.49 dBFS |
해석:
Template A는 Original에서는 KWS 19/20 -> 20/20, STT SBR +1.69 dB로 유효했다.
동일 Template A를 Mesh에 적용하면 KWS 20/20 -> 18/20, STT SBR -1.91 dB가 됐다.
Mesh Custom은 Mesh Default보다 출력 노이즈가 +3.38 dB 높고,
1 kHz 정상음 제거력은 -9.69 dB 약해졌다.
70 dB에서는 VAD 구간 +256 ms, dropout 7.44%로 끝점/게이팅 불안정도 관찰됐다.
따라서 Mesh 음향 경로와 기존 Template A 묶음의 상호작용 문제다.
STT SBR은 실제 decoder WER/CER가 아니라 호출어 구간 파형의
200~4000 Hz 신호-배경 분리도 proxy다. KWS는 로그의 실제 검출 횟수다.
또한 데이터 폴더명이 1Hz이지만 실제 주 톤은 약 1000 Hz다. 따라서
현재 노이즈 결과는 정상 모터성 톤 proxy이며 실제 풍절음 결론으로 확대하지 않는다.
중요한 인과 한계가 있다. Custom은 EQ만 변경한 조건이 아니라 vol,
kws.sensitivity, pre_filter, eq_filter를 동시에 바꾼 Template A다.
따라서 현재 데이터로 확정할 수 있는 것은 “Mesh에서 Template A 전체가
악화했다”까지다. 열화량을 EQ 단독 원인으로 귀속하려면 아래 구성요소
분리 A/B가 필요하다.
현재 판정
제품 적용 기준점: Mesh Default
Template A on Mesh: No-Go
Template C: 재검증 전 보류
Template D: 현재 No-Go
Mesh에서 입력 Mic RMS는 Default 기준 Original보다 평균 약 0.12 dB만
낮았다. 반면 Kardome 처리 이득은 +2.23 dB였다. 즉 이번 샘플에서 Mesh의
주요 이득은 단순 Mic RMS 감쇠가 아니라 처리단의 신호/배경 분리 변화다.
Mesh Custom의 active speech RMS는 Mesh Default보다 평균 1.24 dB 낮으면서
노이즈 바닥은 오히려 높아졌으므로 vol=0.5 선적용으로 보상하면 안 된다.
Mesh 전용 재튜닝 순서
한 번에 한 property만 변경한다.
- 이번
Mesh Default의 실제 property 미설정/설정 상태를 B0로 고정한다. - Template A의 네 구성요소를 한 개씩 추가해 원인 기여도를 분리한다.
- EQ 단독 후보 B4가 원인으로 확인될 때만 한 밴드씩 작은 gain으로 시험한다.
- EQ 후보가 노이즈 Gate를 통과한 뒤에만
vol을 조정한다. - 실제 바람/모터 데이터로 HPF와 선택적 notch를 별도 검증한다.
- KWS sensitivity는 음향 전처리 확정 뒤 마지막에 조정한다.
1단계 구성요소 분리:
| 단계 | Mesh Default(B0) 대비 유일한 변경 | 주 판정 |
|---|---|---|
| B0 baseline | 변경 없음. 실제 미설정 property까지 동일 복제 | 전체 기준 |
| B1 vol | vol=0.4만 추가 |
active RMS, noise floor, headroom |
| B2 KWS | kws.sensitivity=3만 추가 |
KWS FRR/FAR |
| B3 HPF | pre_filter=5,120,0,0만 추가 |
저역/풍절, 55 dB STT |
| B4 EQ | 현재 eq_filter=0,1800,2,1;0,3000,1,1만 추가 |
STT SBR, 1 kHz 제거, dropout |
부팅 후 B0의 getprop와 SoundFlow 적용 로그를 저장한다. Default를
vol=0.4, sensitivity 3, HP2 120 Hz라고 추정해서는 안 된다. property가
미설정이면 해당 상태도 기준 조건의 일부다.
2단계 EQ 단독 후보:
| 단계 | eq_filter |
|---|---|
| E0 | OFF/B0 그대로 |
| E1 | 0,1800,0.5,1.2 |
| E2 | 0,1800,0.5,1.2;0,3000,0.25,1.2 |
| E3 vol sweep | E1/E2 합격 뒤 vol: Default -> 0.4 -> 0.425 -> 0.45 |
| E4 wind only | E1/E2 합격 뒤 HP2 120 -> 140 -> 150 Hz |
필터 parser는 strtof()를 사용하므로 소수 gain/Q를 받을 수 있다. 초기
총 부스트는 +0.75 dB 이하로 제한한다. 실제 제품 모터 톤이 1 kHz에
고정되어 재현될 때만 -0.5 dB, Q3 notch를 별도 후보로 시험한다.
광대역 STT 경로에 notch를 기본 적용하지 않는다.
후보 승격 Gate:
KWS: 각 레벨 30회 중 29회 이상, Mesh Default보다 하락 금지
STT proxy: 200~4000 Hz SBR 변화 -0.5 dB 이상
출력 노이즈 바닥: Mesh Default 대비 +1 dB 이하
1 kHz 제거력: Mesh Default 대비 손실 2 dB 이하
VAD 길이 변화: 50 ms 이하
dropout: 1% 이하
무발화/모터/풍절: 각 300초 false accept 증가 없음
headroom: 10 dBFS 이상
최종 STT: 동일 PCM 재생의 WER/CER가 Mesh Default보다 악화되지 않음
필수 부하 데이터는 Clean, 1 kHz 정상음, motor RPM/Fan PWM sweep, 실제 wind, broadband noise다.
설치 산출물
기기에 push해야 하는 파일:
vendor/bin/hw/vendor.quber.hardware.soundflowservice@1.0-service -> /vendor/bin/hw/
vendor/lib64/libKardome.so -> /vendor/lib64/
vendor/lib64/libc++_shared.so -> /vendor/lib64/
vendor/lib64/libonnxruntime.so -> /vendor/lib64/
vendor/lib64/libtensorflowlite_c.so -> /vendor/lib64/
vendor/lib64/libkrdmAFE.so -> /vendor/lib64/
vendor/lib64/libkrdmKWS.so -> /vendor/lib64/
kardome/kardome_config.bin -> /vendor/etc/kardome_config.bin
kardome_config.bin은 현재 SoundFlow 코드가 직접 로드하지는 않지만 최신 패키지 일관성을 위해 함께 배치한다.
Push 절차
cd /home/silogood/work/1.A1_SoC_new/SoC/a1_um_quber/output/kardome_sndflow_20260716
export ADB_SERIAL=192.168.10.5:5555
adb connect ${ADB_SERIAL}
adb -s ${ADB_SERIAL} root
adb -s ${ADB_SERIAL} wait-for-device
adb -s ${ADB_SERIAL} remount
adb -s ${ADB_SERIAL} shell stop soundflowservice
adb -s ${ADB_SERIAL} push vendor/bin/hw/vendor.quber.hardware.soundflowservice@1.0-service /vendor/bin/hw/
adb -s ${ADB_SERIAL} push vendor/lib64/libKardome.so /vendor/lib64/
adb -s ${ADB_SERIAL} push vendor/lib64/libc++_shared.so /vendor/lib64/
adb -s ${ADB_SERIAL} push vendor/lib64/libonnxruntime.so /vendor/lib64/
adb -s ${ADB_SERIAL} push vendor/lib64/libtensorflowlite_c.so /vendor/lib64/
adb -s ${ADB_SERIAL} push vendor/lib64/libkrdmAFE.so /vendor/lib64/
adb -s ${ADB_SERIAL} push vendor/lib64/libkrdmKWS.so /vendor/lib64/
adb -s ${ADB_SERIAL} push kardome/kardome_config.bin /vendor/etc/kardome_config.bin
권한과 SELinux label:
adb -s ${ADB_SERIAL} shell chmod 755 /vendor/bin/hw/vendor.quber.hardware.soundflowservice@1.0-service
adb -s ${ADB_SERIAL} shell chmod 644 /vendor/lib64/libKardome.so
adb -s ${ADB_SERIAL} shell chmod 644 /vendor/lib64/libc++_shared.so
adb -s ${ADB_SERIAL} shell chmod 644 /vendor/lib64/libonnxruntime.so
adb -s ${ADB_SERIAL} shell chmod 644 /vendor/lib64/libtensorflowlite_c.so
adb -s ${ADB_SERIAL} shell chmod 644 /vendor/lib64/libkrdmAFE.so
adb -s ${ADB_SERIAL} shell chmod 644 /vendor/lib64/libkrdmKWS.so
adb -s ${ADB_SERIAL} shell chmod 644 /vendor/etc/kardome_config.bin
adb -s ${ADB_SERIAL} shell restorecon /vendor/bin/hw/vendor.quber.hardware.soundflowservice@1.0-service
adb -s ${ADB_SERIAL} shell restorecon /vendor/lib64/libKardome.so
adb -s ${ADB_SERIAL} shell restorecon /vendor/lib64/libc++_shared.so
adb -s ${ADB_SERIAL} shell restorecon /vendor/lib64/libonnxruntime.so
adb -s ${ADB_SERIAL} shell restorecon /vendor/lib64/libtensorflowlite_c.so
adb -s ${ADB_SERIAL} shell restorecon /vendor/lib64/libkrdmAFE.so
adb -s ${ADB_SERIAL} shell restorecon /vendor/lib64/libkrdmKWS.so
adb -s ${ADB_SERIAL} shell restorecon /vendor/etc/kardome_config.bin
설치 검증
adb -s ${ADB_SERIAL} reboot
adb -s ${ADB_SERIAL} wait-for-device
adb -s ${ADB_SERIAL} shell getprop sys.boot_completed
adb -s ${ADB_SERIAL} shell getprop init.svc.soundflowservice
adb -s ${ADB_SERIAL} shell ps -A | grep soundflowservice
adb -s ${ADB_SERIAL} shell getprop sys.audio.sndflow.started
adb -s ${ADB_SERIAL} shell getprop sys.audio.sndflow.krdm.version
기대값:
sys.boot_completed = 1
init.svc.soundflowservice = running
sys.audio.sndflow.started = true
sys.audio.sndflow.krdm.version = 1.1.17
로그 확인:
adb -s ${ADB_SERIAL} logcat -d -b all | grep -i -E 'krdm Version|Kardome context created|Capture Sample|is_vad_detected|Received message: VAD|Received message: SAE'
정상 로그 예:
krdm Version = 1.1.17
Kardome context created
Capture Sample: 5 ch, 16000 hz, 24 bit -> Playing Sample: 1 ch, 16000 hz, 16 bit
Kardome : is_vad_detected 1
SoundFlowEventProcessor: Received message: VAD
SoundFlowEventProcessor: Received message: SAE
Linker 실패 확인
서비스만 새 버전이고 libKardome.so가 구버전이면 다음 에러로 서비스가 restarting 상태가 된다.
CANNOT LINK EXECUTABLE "/vendor/bin/hw/vendor.quber.hardware.soundflowservice@1.0-service": cannot locate symbol "krdmGetParamConfig"
확인:
sha256sum vendor/lib64/libKardome.so
adb -s ${ADB_SERIAL} shell sha256sum /vendor/lib64/libKardome.so
현재 산출물의 libKardome.so checksum:
8f19cb7d96e858a5a23d01353a07dea54ce6d26323f619af67c0934771e32afe
튜닝 프로퍼티
주요 property:
persist.vendor.audio.sndflow.vol
persist.vendor.audio.sndflow.krdm.kws.sensitivity
persist.vendor.audio.sndflow.krdm.pre_filter
persist.vendor.audio.sndflow.krdm.eq_filter
의미:
| Property | 목적 | 기본 테스트 방향 |
|---|---|---|
persist.vendor.audio.sndflow.vol |
mesh/높이 변경으로 줄어든 전체 RMS 보정 | 0.35 -> 0.4 -> 0.5 |
persist.vendor.audio.sndflow.krdm.kws.sensitivity |
호출어 검출 민감도 | 3 기준, 미검출 많으면 +1, 오검출 많으면 -1 |
persist.vendor.audio.sndflow.krdm.pre_filter |
저역 울림/진동/바닥 반사 억제 | HP2 100~150 Hz |
persist.vendor.audio.sndflow.krdm.eq_filter |
mesh로 줄어든 음성 명료도 보정 | 1800~3000 Hz 소폭 boost |
현재 테스트 기기에서는 adb shell setprop persist.vendor.audio.sndflow.*가 SELinux로 막힐 수 있다.
avc: denied { set } for property=persist.vendor.audio.sndflow...
scontext=u:r:shell:s0
tcontext=u:object_r:vendor_audio_prop:s0
따라서 field tester는 기본적으로 /vendor/build.prop 방식으로 적용한다.
build.prop 적용 방식
adb -s ${ADB_SERIAL} root
adb -s ${ADB_SERIAL} wait-for-device
adb -s ${ADB_SERIAL} remount
adb -s ${ADB_SERIAL} pull /vendor/build.prop /tmp/vendor.build.prop
/tmp/vendor.build.prop 끝에 preset 값을 넣는다. 예:
# SoundFlow STT tuning
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
반영:
adb -s ${ADB_SERIAL} push /tmp/vendor.build.prop /vendor/build.prop
adb -s ${ADB_SERIAL} shell chmod 644 /vendor/build.prop
adb -s ${ADB_SERIAL} shell restorecon /vendor/build.prop
adb -s ${ADB_SERIAL} reboot
부팅 후 확인:
adb -s ${ADB_SERIAL} wait-for-device
adb -s ${ADB_SERIAL} shell getprop persist.vendor.audio.sndflow.vol
adb -s ${ADB_SERIAL} shell getprop persist.vendor.audio.sndflow.krdm.kws.sensitivity
adb -s ${ADB_SERIAL} shell getprop persist.vendor.audio.sndflow.krdm.pre_filter
adb -s ${ADB_SERIAL} shell getprop persist.vendor.audio.sndflow.krdm.eq_filter
adb -s ${ADB_SERIAL} shell getprop sys.audio.sndflow.krdm.version
필터 포맷
필터 하나는 다음 4개 값으로 구성된다.
type,frequency_hz,gain_db,q
여러 필터는 세미콜론 ;으로 연결한다.
persist.vendor.audio.sndflow.krdm.eq_filter=0,1800,2,1;0,3000,1,1
필터 타입:
-1 FILTER_NONE
0 FILTER_BELL
1 FILTER_SHELF_LOW
2 FILTER_SHELF_HIGH
3 FILTER_NOTCH
4 FILTER_HP1
5 FILTER_HP2
6 FILTER_LP1
7 FILTER_LP2
STT 추천 템플릿
STT에는 단순 감도 증가보다 안정적인 SNR, 저역 노이즈 억제, 자음 명료도 확보가 중요하다.
Template M1: Mesh Mild Clarity (다음 시험 권장)
2026-07-29 결과를 기준으로 다음 Mesh 시험에 권장하는 단일 후보값이다.
제품 배포 preset이 아니라 eq_filter 단독 효과를 확인하기 위한
field-test template이다.
적용 전 이번 Mesh Default의 image, vendor build.prop, Kardome library와
property 상태를 그대로 B0로 복제한다. 그 뒤 아래 한 줄만 추가한다.
persist.vendor.audio.sndflow.krdm.eq_filter=0,1800,0.5,1.2
vol, kws.sensitivity, pre_filter는 B0와 동일하게 유지한다. B0에서
미설정이었다면 M1에서도 미설정 상태로 둔다. Template A의 네 줄을 남긴
상태에서 M1을 덧붙이면 안 된다.
M1 변경 의도:
1.8 kHz boost: 기존 +2.0 dB -> +0.5 dB
3 kHz boost: 기존 +1.0 dB -> 제거
Q: 기존 1.0 -> 1.2
변경 변수: eq_filter 하나
시험 파일:
M1이 KWS, WER/CER, 출력 floor, 1 kHz 제거, VAD/dropout Gate를 모두
통과한 뒤에만 3 kHz +0.25 dB, Q1.2를 M2로 추가 시험한다.
Template A: STT Friendly (Original 검증, Mesh No-Go)
Mesh가 없는 Original에서는 유효한 시작값이다. 2026-07-29 실측에서 동일 설정을 Mesh에 적용한 결과 KWS/STT/정상음 억제가 모두 악화되었으므로 Mesh 제품의 시작값으로 사용하지 않는다.
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
의도:
vol=0.4
-> mesh/낮은 높이로 줄어든 RMS를 약하게 보정
pre_filter=5,120,0,0
-> 120 Hz 아래 저역 진동과 바닥 울림 제거
eq_filter=0,1800,2,1
-> 말소리 명료도 대역 보강
eq_filter=0,3000,1,1
-> 자음 선명도 소폭 보강
Template B: STT Low-Noise
저역 울림, 모터음, 바닥 반사음이 STT를 흔드는 경우.
persist.vendor.audio.sndflow.vol=0.4
persist.vendor.audio.sndflow.krdm.kws.sensitivity=3
persist.vendor.audio.sndflow.krdm.pre_filter=5,150,0,0
persist.vendor.audio.sndflow.krdm.eq_filter=0,1800,2,1;0,2800,1,1
판정:
저역 노이즈가 줄고 STT가 안정되면 유지한다.
음성이 얇아지거나 먼 거리 인식이 나빠지면 pre_filter cutoff를 120 Hz로 낮춘다.
Template C: Mesh / Low-Height RMS Recovery (재검증 전 보류)
초기 가설용 프리셋이다. 2026-07-29 데이터에서 vol=0.4의 Template A도
Mesh Default보다 나빠졌으므로 vol=0.5를 더한 이 프리셋은 재검증 전
제품 적용을 보류한다.
persist.vendor.audio.sndflow.vol=0.5
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
판정:
Template A보다 호출어/STT 반응이 좋아지는지 확인한다.
오검출이나 소음 반응이 늘면 vol을 0.45 또는 0.4로 낮춘다.
소음 환경에서 VAD/SAE가 과도하게 발생하면 No-Go로 기록한다.
Template D: Heavy Mesh Attenuation (현재 No-Go)
이전 강한 후보값이다. Template A보다 EQ와 sensitivity가 더 공격적이므로 현재 실측 근거에서는 사용하지 않는다.
persist.vendor.audio.sndflow.vol=0.5
persist.vendor.audio.sndflow.krdm.kws.sensitivity=4
persist.vendor.audio.sndflow.krdm.pre_filter=5,120,0,0
persist.vendor.audio.sndflow.krdm.eq_filter=0,1800,3,1;0,3000,2,1
주의:
첫 번째 적용값으로 쓰지 않는다.
Template A 또는 C에서 반응이 부족할 때만 테스트한다.
오검출, 치찰음, 거친 음색이 늘면 No-Go로 기록한다.
테스트 절차
각 template마다 동일 조건으로 테스트한다.
거리: 0.5 m, 1.0 m, 2.0 m
방향: 정면 0도, 좌/우 45도
반복: 조건별 호출어 10회
무발화: 60초
생활소음/제품동작소음: 60초
기록 항목:
Mesh version:
제품 높이:
거리/방향:
Template:
vol:
kws.sensitivity:
pre_filter:
eq_filter:
호출어 성공 횟수:
미검출 횟수:
오검출 횟수:
VAD/SAE 이벤트:
STT 주관 품질:
저역 울림:
고역 거칠음:
판정:
로그 저장:
adb -s ${ADB_SERIAL} logcat -d -b all > soundflow_tuning_log.txt
adb -s ${ADB_SERIAL} shell getprop > getprop_after_tuning.txt
판정 기준
Go 후보:
호출어 성공률이 baseline보다 개선된다.
STT 문장 누락이 줄어든다.
무발화 오검출이 증가하지 않는다.
생활 소음에서 VAD/SAE가 과도하게 발생하지 않는다.
음성이 지나치게 얇거나 거칠게 변하지 않는다.
Kardome invalid value 경고가 없다.
No-Go 후보:
호출어 성공률은 좋아졌지만 오검출이 증가한다.
저역은 줄었지만 음성이 얇아져 먼 거리 인식이 나빠진다.
명료도 EQ 후 고역이 거칠고 피로하게 들린다.
서비스가 restarting 상태가 된다.
Kardome parameter invalid warning이 반복된다.
빠른 판단표
Mesh에서 호출어/STT 반응이 둔함
-> Mesh Default와 동일 PCM A/B로 먼저 재현
-> EQ OFF -> 1800 Hz +0.5 dB 단일 밴드
-> 노이즈 Gate 통과 후 vol 0.4 -> 0.425 -> 0.45
-> 전처리 확정 뒤에만 kws.sensitivity +1 별도 시험
Original에서 호출어/STT 반응이 둔함
-> Template A를 기준 후보로 사용
오검출이 늘어남
-> kws.sensitivity -1
-> vol -0.1
-> 2~4 kHz EQ gain 낮춤
저역 울림이 큼
-> pre_filter HP2 cutoff 100 -> 120 -> 150 -> 180
음성이 얇음
-> pre_filter HP2 cutoff 낮춤
-> 1.5~2 kHz EQ만 약하게 유지
고역이 거침
-> 3 kHz gain 낮춤
-> 필요 시 3.5 kHz notch -1~-2 dB