← Docs hub

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가 개선됐다고 말할 수 없다.

튜닝 원칙:

  1. Mini Original의 현재 property 상태를 B0로 고정한다.
  2. A 필터 단독 → A + gain/vol 단계 보상으로 필터와 증폭을 분리한다.
  3. gain은 전체 RMS만 올리는 것이 아니라 speech-active RMS/SBR 회복을 목표로 하고 floor/headroom을 동시에 Gate로 둔다.
  4. KWS sensitivity는 음향 전처리와 gain 확정 뒤 마지막에 조정한다.
  5. 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 적용 적용

Mesh EQ KWS STT 정밀분석

Mesh EQ 재튜닝 권고

핵심 실측 결과

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만 변경한다.

  1. 이번 Mesh Default의 실제 property 미설정/설정 상태를 B0로 고정한다.
  2. Template A의 네 구성요소를 한 개씩 추가해 원인 기여도를 분리한다.
  3. EQ 단독 후보 B4가 원인으로 확인될 때만 한 밴드씩 작은 gain으로 시험한다.
  4. EQ 후보가 노이즈 Gate를 통과한 뒤에만 vol을 조정한다.
  5. 실제 바람/모터 데이터로 HPF와 선택적 notch를 별도 검증한다.
  6. 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

Keyboard shortcuts

⌘K / Ctrl+KOpen command palette
/Focus search
g hGo to home
g pGo to projects
g sGo to sessions
j / kNext / prev row (tables)
?Show this help
EscClose dialogs

Structured queries

Mix key:value filters with free text in the palette:

type:sessionOnly session pages
project:llm-wikiFilter by project name (substring)
model:claudeFilter by model name (substring)
date:>2026-03-01Sessions after a date
date:<2026-04-01Sessions before a date
tags:rustPages mentioning a tag/topic
sort:dateSort results by date (newest first)

Example: type:session project:llm-wiki date:>2026-04 sort:date