Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
6583589
audio: tflm: add keyword detection logging, host notification, and HD…
lrgirdwo Jul 22, 2026
411ed5e
audio: tflm: fix tensor byte sizing for micro speech int8 input
lrgirdwo Jul 22, 2026
3776df6
audio: tflm: integrate keyword detection with KPB for WoV trigger
lrgirdwo Jul 22, 2026
a6c639c
tools: topology2: update WoV pipeline graph with dual-path KPB routing
lrgirdwo Jul 22, 2026
df47967
docs: tensorflow: add comprehensive README for TFLM WoV architecture …
lrgirdwo Jul 22, 2026
930de94
ptl: app: enable KPB, TFLM, MFCC, Gain, Volume components and update …
lrgirdwo Jul 23, 2026
ea7449b
ptl: rimage: include KPB, TFLM, Volume and MFCC in base firmware mani…
lrgirdwo Jul 23, 2026
cf89a85
tools: topology2: update KPB IPC4 UUID and HDA TFLM 16kHz WoV topology
lrgirdwo Jul 23, 2026
e54cb5c
scripts: llext: support relocatable link bypass
lrgirdwo Jun 16, 2026
4470b81
library_manager: llext: implement page-level VMA allocator for reloca…
lrgirdwo Jun 16, 2026
22f090e
config: llext: enable SLID-based symbol linking for relocatable modules
lrgirdwo Jun 16, 2026
af4908e
config: intel_adsp: enable TFLM module and C++ dependencies for ace15…
lrgirdwo Jul 24, 2026
09a2cd3
audio: tensorflow: support Zephyr SDK GCC toolchain for LLEXT build
lrgirdwo Jul 24, 2026
3a7ce9f
topology2: add IPC4 ABI manifest and SoundWire TFLM topology configur…
lrgirdwo Jul 24, 2026
c21e37a
zephyr: Expand Virtual Heap to 4MB and Kernel Heap Pool to 32KB
lrgirdwo Aug 1, 2026
c6170c0
audio: tflm: Add KPB trigger notifications and stream shutdown event …
lrgirdwo Aug 1, 2026
331179b
topology: Add TFLM KPB topology targets and multi-pipeline output routes
lrgirdwo Aug 1, 2026
27e1681
audio: tflm: Update README.md with pipeline architecture, input abstr…
lrgirdwo Aug 1, 2026
8bbf272
topology2: tflm: attach real MFCC config blob and add HDA Mic host-co…
lrgirdwo Aug 6, 2026
d0f7f00
lib: cpp: export operator new/delete and __cxa_pure_virtual for LLEXT
lrgirdwo Aug 16, 2026
2e569a3
zephyr: llext: link non-relocatable modules -Bsymbolic-functions
lrgirdwo Aug 16, 2026
d3ded98
scripts: llext_link_helper: always use fixed-address section layout
lrgirdwo Aug 16, 2026
d16e06e
library_manager: llext: fix section rebase, layout packing, and expor…
lrgirdwo Aug 16, 2026
613e66b
lib: ams: export producer API for LLEXT modules
lrgirdwo Aug 16, 2026
eb67cfd
audio: tensorflow: add libm stubs for Zephyr SDK GCC toolchain LLEXT …
lrgirdwo Aug 16, 2026
1eb574f
audio: mfcc: add mel40_10ms profile for microWakeWord frontend
lrgirdwo Aug 16, 2026
fd705e5
scripts: xtensa-build-zephyr: create per-UUID symlinks in install_lib()
lrgirdwo Aug 16, 2026
a3066f5
audio: microwakeword: add component scaffolding
lrgirdwo Aug 16, 2026
64c5955
audio: microwakeword: implement mww component
lrgirdwo Aug 16, 2026
8b07ce6
config: intel_adsp_ace30_ptl: enable mww LLEXT module on aphid
lrgirdwo Aug 16, 2026
c796e91
topology2: add HDA Mic microWakeWord (MWW) topology with KPB
lrgirdwo Aug 16, 2026
c34652a
docs: microwakeword: add README with architecture and known issues
lrgirdwo Aug 16, 2026
07e188d
audio: llext: fix Clang LLEXT build and OBJECT library linking
lrgirdwo Aug 23, 2026
f124bde
audio: mfcc: tune: emit mel40 and mel40_compress configs
singalsu Aug 12, 2026
f4eef86
audio: mfcc: raise max_frames to a full hop in DP mode
singalsu Aug 14, 2026
c09456b
topology2: add TFLM Wake-on-Voice branches for HDA and SoundWire
lrgirdwo Jul 22, 2026
e1606f2
platform: cavs25: enable TFLM Wake-on-Voice on cAVS 2.5
lrgirdwo Jul 23, 2026
18227e3
docs: tensorflow: add TFLM Wake-on-Voice architecture README
lrgirdwo Jul 22, 2026
4ff06ed
audio: tensorflow: tune: TFLM wake-word training pipeline
singalsu Aug 6, 2026
1500896
audio: tensorflow: tune: add single-speaker Piper keyword generator
singalsu Aug 13, 2026
739e129
audio: tflm: soft mel-log AGC for level-robust wake-word detection
singalsu Aug 19, 2026
20307bd
topology2: host-copier: add D0i3 compatibility attributes
singalsu Aug 20, 2026
984f1f8
audio: microwakeword: placement new allocations and arena fallback fo…
lrgirdwo Aug 24, 2026
ac305bd
audio: microwakeword: update README with build instructions, dependen…
lrgirdwo Aug 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion app/boards/intel_adsp_ace15_mtpm.conf
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ CONFIG_FORMAT_CONVERT_HIFI3=n
CONFIG_SAMPLE_KEYPHRASE=y
CONFIG_COMP_PHASE_VOCODER=y
CONFIG_COMP_STFT_PROCESS=y
CONFIG_SOF_STAGING=y
CONFIG_CPP=y
CONFIG_STD_CPP17=y
CONFIG_COMP_TENSORFLOW=m
CONFIG_STACK_SIZE_EDF=32768

# SOF / audio modules / mocks
# This mock is part of official sof-bin releases because the CI that
Expand Down Expand Up @@ -52,7 +57,7 @@ CONFIG_SOF_LOG_LEVEL_INF=y
CONFIG_DEBUG_COREDUMP=y
CONFIG_DEBUG_COREDUMP_BACKEND_INTEL_ADSP_MEM_WINDOW=y
CONFIG_DEBUG_COREDUMP_MEMORY_DUMP_MIN=y
CONFIG_HEAP_MEM_POOL_SIZE=8192
CONFIG_HEAP_MEM_POOL_SIZE=32768
CONFIG_LLEXT=y
CONFIG_LLEXT_STORAGE_WRITABLE=y
CONFIG_LLEXT_EXPERIMENTAL=y
Expand Down
40 changes: 34 additions & 6 deletions app/boards/intel_adsp_ace30_ptl.conf
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,24 @@ CONFIG_FORMAT_CONVERT_HIFI3=n
# SOF / audio modules / mocks
# This mock is part of official sof-bin releases because the CI that
# tests it can't use extra CONFIGs. See #9410, #8722 and #9386
CONFIG_COMP_GOOGLE_RTC_AUDIO_PROCESSING=m
CONFIG_COMP_GOOGLE_RTC_AUDIO_PROCESSING=n
CONFIG_GOOGLE_RTC_AUDIO_PROCESSING_MOCK=y
CONFIG_COMP_STFT_PROCESS=y
CONFIG_COMP_STFT_PROCESS=n
CONFIG_SOF_STAGING=y
CONFIG_COMP_KPB=y
CONFIG_CPP=y
CONFIG_STD_CPP17=y
# tflmcly (stock keyword model) is not yet GNU-toolchain-clean on aphid
# (undefined sof_ut_log/__assert_no_args/abs); not required by mww, which
# builds its own independent TFLM lib copy. Disabled here to unblock the
# aphid mww LLEXT build.
CONFIG_COMP_TENSORFLOW=n
CONFIG_COMP_MFCC=y
CONFIG_COMP_MWW=y
CONFIG_AMS=n
CONFIG_STACK_SIZE_EDF=32768
CONFIG_COMP_VOLUME=y
CONFIG_COMP_GAIN=y

# SOF / infrastructure
CONFIG_KCPS_DYNAMIC_CLOCK_CONTROL=n
Expand All @@ -29,20 +44,28 @@ CONFIG_COLD_STORE_EXECUTE_DRAM=y
CONFIG_INTEL_MODULES=y
CONFIG_LIBRARY_AUTH_SUPPORT=y
CONFIG_LIBRARY_MANAGER=y
CONFIG_LIBRARY_BASE_ADDRESS=0xa0688000
CONFIG_LIBRARY_BUILD_LIB=y
CONFIG_LIBRARY_DEFAULT_MODULAR=y
CONFIG_LIBRARY_BASE_ADDRESS=0xa0700000
CONFIG_LIBRARY_BUILD_LIB=n
CONFIG_LIBRARY_DEFAULT_MODULAR=n

# SOF / logging
CONFIG_SOF_LOG_LEVEL_INF=y

# Zephyr / OS features
CONFIG_COUNTER=y
CONFIG_HEAP_MEM_POOL_SIZE=8192
CONFIG_HEAP_MEM_POOL_SIZE=32768
CONFIG_COMMON_LIBC_MALLOC_ARENA_SIZE=32768
CONFIG_LLEXT=y
CONFIG_LLEXT_STORAGE_WRITABLE=y
CONFIG_LLEXT_EXPERIMENTAL=y
CONFIG_LLEXT_EDK=n

# Default LLEXT metadata heap (CONFIG_LLEXT_HEAP_SIZE, 8 KB) is sized for
# small extensions with few STB_GLOBAL-only exported symbols. mww.llext
# links in TFLM, whose template-instantiated vtables/typeinfo are emitted
# STB_WEAK -- now included in ext->sym_tab after the llext_load.c fix -- and
# blows past 8 KB (Failed to allocate extension symbol table, ret -12).
CONFIG_LLEXT_HEAP_SIZE=256
CONFIG_MODULES=y

# Zephyr / device drivers
Expand Down Expand Up @@ -78,3 +101,8 @@ CONFIG_SOF_USERSPACE_PROXY=y
CONFIG_MAX_THREAD_BYTES=3

CONFIG_MAX_DOMAIN_PARTITIONS=32

# Debug: get faulting virtual address for openmodules-load panic
CONFIG_XTENSA_ADSP_FATAL_BREADCRUMB_DATA_VADDR=y
CONFIG_SYS_HEAP_RUNTIME_STATS=y
CONFIG_SOF_ZEPHYR_HEAP_SIZE=0x80000
11 changes: 10 additions & 1 deletion app/boards/intel_adsp_cavs25.conf
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,14 @@ CONFIG_COMP_MFCC=y
CONFIG_COMP_MULTIBAND_DRC=y
CONFIG_COMP_VOLUME_WINDOWS_FADE=y
CONFIG_FORMAT_CONVERT_HIFI3=n
CONFIG_SOF_STAGING=y

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note: Build works only with gcc.

CONFIG_CPP=y
CONFIG_STD_CPP17=y
# cavs2.5 has no LLEXT/module-manager support (see CONFIG_LIBRARY_MANAGER=n
# below), so build tensorflow in statically rather than as an LLEXT module.
CONFIG_COMP_TENSORFLOW=y
CONFIG_COMP_TENSORFLOW_DEBUG_TRACE=y
CONFIG_STACK_SIZE_EDF=32768
CONFIG_PCM_CONVERTER_FORMAT_S16LE=y
CONFIG_PCM_CONVERTER_FORMAT_S24LE=y
CONFIG_PCM_CONVERTER_FORMAT_S32LE=y
Expand All @@ -33,7 +41,8 @@ CONFIG_SOF_LOG_LEVEL_INF=y
CONFIG_DEBUG_COREDUMP=y
CONFIG_DEBUG_COREDUMP_BACKEND_INTEL_ADSP_MEM_WINDOW=y
CONFIG_DEBUG_COREDUMP_MEMORY_DUMP_MIN=y
CONFIG_HEAP_MEM_POOL_SIZE=8192
CONFIG_HEAP_MEM_POOL_SIZE=32768
CONFIG_COMMON_LIBC_MALLOC_ARENA_SIZE=32768

# Zephyr / device drivers
CONFIG_DAI_INIT_PRIORITY=70
Expand Down
1 change: 1 addition & 0 deletions app/llext_relocatable.conf
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
CONFIG_LLEXT_TYPE_ELF_RELOCATABLE=y
CONFIG_LLEXT_EXPORT_BUILTINS_BY_SLID=y
3 changes: 3 additions & 0 deletions scripts/llext_offset_calc.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@ def get_elf_size(elf_name):
if section.header['sh_addr'] + section.header['sh_size'] > end:
end = section.header['sh_addr'] + section.header['sh_size']

if start == 0xffffffff:
return 0

size = end - start

return size
Expand Down
5 changes: 3 additions & 2 deletions scripts/tensorflow-clone.sh
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@ declare -a COMMIT_ID=(
"d37128311b445e758136b8602d1bbd2a755e115d"
)

# Directory where repositories will be cloned/updated.
BASE_DIR="$HOME/work/sof" # Or any other desired location
# Directory where repositories will be cloned/updated. Override by exporting
# BASE_DIR before invoking the script.
BASE_DIR="${BASE_DIR:-$HOME/work/sof}"

# Function to check if a commit ID exists in a repository
check_commit() {
Expand Down
4 changes: 4 additions & 0 deletions scripts/xtensa-build-zephyr.py
Original file line number Diff line number Diff line change
Expand Up @@ -1174,6 +1174,10 @@ def install_lib(platform, sof_output_dir, abs_build_dir, platform_wconfig):
symlink_or_copy(lib_install_dir, lib_name,
lib_dir, alias_libname)

for uuid in lib_uuids.get(key, []):
linkname = uuid + '.bin'
symlink_or_copy(lib_install_dir, lib_name, sof_lib_dir, linkname)

def install_platform(platform, sof_output_dir, platf_build_environ, platform_wconfig):

# Keep in sync with caller
Expand Down
3 changes: 3 additions & 0 deletions src/audio/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ if(NOT CONFIG_COMP_MODULE_SHARED_LIBRARY_BUILD)
if(CONFIG_COMP_MFCC)
add_subdirectory(mfcc)
endif()
if(CONFIG_COMP_MWW)
add_subdirectory(microwakeword)
endif()
if(CONFIG_COMP_MIXER)
add_subdirectory(mixer)
endif()
Expand Down
1 change: 1 addition & 0 deletions src/audio/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ rsource "eq_iir/Kconfig"
rsource "google/Kconfig"
rsource "igo_nr/Kconfig"
rsource "mfcc/Kconfig"
rsource "microwakeword/Kconfig"
rsource "mixer/Kconfig"
rsource "mixin_mixout/Kconfig"
rsource "module_adapter/Kconfig"
Expand Down
11 changes: 10 additions & 1 deletion src/audio/mfcc/mfcc.c
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,16 @@ static int mfcc_prepare(struct processing_module *mod,

/* Initialize MFCC, max_frames is set to dev->frames + 4 */
if (cd->config && data_size > 0) {
ret = mfcc_setup(mod, dev->frames + 4, audio_stream_get_rate(&sourceb->stream),
Comment thread
singalsu marked this conversation as resolved.
int max_frames = dev->frames + 4;

/* DP wakes on ibs (~1 hop of input); consume the whole
* hop per call so we don't re-enter the DP thread many
* times per LL tick just to nibble dev->frames at a time.
*/
if (dev->ipc_config.proc_domain == COMP_PROCESSING_DOMAIN_DP)
max_frames = MAX(max_frames, cd->config->frame_shift);

ret = mfcc_setup(mod, max_frames, audio_stream_get_rate(&sourceb->stream),
audio_stream_get_channels(&sourceb->stream));
if (ret < 0) {
comp_err(dev, "setup failed.");
Expand Down
2 changes: 1 addition & 1 deletion src/audio/mfcc/tune/decode_all.m
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
% Copyright(c) 2026 Intel Corporation.

num_ceps = 13;
num_mel = 80;
num_mel = 40;

% MFCC cepstral output files (all int32 output, Q9.23)
ceps_files = {'mfcc_s16.raw', 'mfcc_s24.raw', 'mfcc_s32.raw'};
Expand Down
2 changes: 1 addition & 1 deletion src/audio/mfcc/tune/run_mfcc.sh
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ main() {
if [ -n "$XTENSA_PATH" ]; then
TESTBENCH_RUN="$XTENSA_PATH/xt-run $SOF_WORKSPACE/sof/tools/testbench/build_xt_testbench/sof-testbench4"
run_testbench "sof-hda-benchmark-mfcc" xt_mfcc_s16.raw xt_mfcc_s24.raw xt_mfcc_s32.raw "Xtensa MFCC"
run_testbench "sof-hda-benchmark-mfccmel" xt_mel_s16.raw xt_mel_s24.raw xt_mel_s32.raw "Xtensa MFCC Mel"
run_testbench "sof-hda-benchmark-mfccmel40" xt_mel_s16.raw xt_mel_s24.raw xt_mel_s32.raw "Xtensa MFCC Mel"
fi
}

Expand Down
30 changes: 30 additions & 0 deletions src/audio/mfcc/tune/setup_mfcc.m
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,36 @@ function setup_mfcc()
setup.tplg_fn = 'mel80_compress.conf';
export_mfcc_setup(gen_cfg, setup);

% Blob for 40-bin/20ms-hop mel spectrogram, matching TFLM micro_speech's
% front-end shape (TFLM_FEATURE_SIZE=40, TFLM_FEATURE_STRIDE_MS=20,
% TFLM_FEATURE_DURATION_MS=30) for interim wake-word sanity-checking.
setup = get_mel_spectrogram_config();
setup.frame_length = 30.0; % 480 samples at 16 kHz
setup.frame_shift = 20.0; % 320 samples at 16 kHz
setup.num_mel_bins = 40;
setup.tplg_fn = 'mel40.conf';
export_mfcc_setup(gen_cfg, setup);

% Blob for 40-bin/10ms-hop mel spectrogram, matching microWakeWord's
% MixConv front-end shape (40 features per 10ms stride over a 30ms
% window) -- see src/audio/microwakeword.
setup = get_mel_spectrogram_config();
setup.frame_length = 30.0; % 480 samples at 16 kHz
setup.frame_shift = 10.0; % 160 samples at 16 kHz
setup.num_mel_bins = 40;
setup.tplg_fn = 'mel40_10ms.conf';
export_mfcc_setup(gen_cfg, setup);

% Same 40-bin/20ms-hop mel spectrogram with compress PCM output for the
% on-device TFLM wake-word path (KPB -> SRC -> MFCC -> tflmcly).
setup = get_mel_spectrogram_config();
setup.frame_length = 30.0;
setup.frame_shift = 20.0;
setup.num_mel_bins = 40;
setup.compress_output = true;
setup.tplg_fn = 'mel40_compress.conf';
export_mfcc_setup(gen_cfg, setup);

% Blob for mel spectrogram with compress PCM output and DTX
setup = get_mel_spectrogram_config();
setup.compress_output = true;
Expand Down
Loading
Loading