Skip to content

Commit

Permalink
Merge pull request #1 from FabKlein/main
Browse files Browse the repository at this point in the history
    Replaced KissFFT with CMSIS DSP FFT and added Helium optimization…
  • Loading branch information
MatthiasHertel80 authored Sep 30, 2021
2 parents cea38a0 + cca4c9f commit 3120b5e
Show file tree
Hide file tree
Showing 5 changed files with 378 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<cprj schemaVersion="0.0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CPRJ.xsd">

<created timestamp="2021-09-06T09:47:49" tool="uVision V5.35.0.0"/>

<info>
<name>Blinky</name>
<description/>
</info>

<packages>
<package name="CMSIS" vendor="ARM"/>
<package name="V2M_MPS3_SSE_300_BSP" vendor="ARM"/>
<package name="flatbuffers" vendor="tensorflow"/>
<package name="gemmlowp" vendor="tensorflow"/>
<package name="kissfft" vendor="tensorflow"/>
<package name="ruy" vendor="tensorflow"/>
<package name="tensorflow-lite-micro" vendor="tensorflow"/>
<package name="ARM_Compiler" vendor="Keil"/>
</packages>

<compilers>
<compiler name="AC6" version="6.0.0:6.99.99"/>
</compilers>

<target Ddsp="DSP" Dendian="Little-endian" Dfpu="SP_FPU" Dmve="MVE" Dname="SSE-300-MPS3" Dsecure="TZ-disabled" Dtz="TZ" Dvendor="ARM:82">
<output intdir="./Objects/" name="microspeech" outdir="./Objects/" type="exe"/>
<ldflags add="--strict --diag_suppress 6439,6314 --summary_stderr --info summarysizes --map --load_addr_map_info --xref --callgraph --symbols --info sizes --info totals --info unused --info veneers --entry=Reset_Handler --lto" compiler="AC6" file="./RTE/Device/SSE-300-MPS3/fvp_sse300_mps3_s.sct"/>
<cflags add="-Ofast -Wno-documentation -Wno-documentation-unknown-command -Wno-license-management -Wno-missing-noreturn -Wno-missing-prototypes -Wno-missing-variable-declarations -Wno-nonportable-include-path -Wno-packed -Wno-parentheses-equality -Wno-reserved-id-macro -Wno-sign-conversion -Wno-unused-macros -ffunction-sections -fno-rtti -fshort-enums -fshort-wchar -funsigned-char -gdwarf-4 -std=c99 -xc -flto" compiler="AC6"/>
<cxxflags add="-Ofast -Wno-documentation -Wno-documentation-unknown-command -Wno-license-management -Wno-missing-noreturn -Wno-missing-prototypes -Wno-missing-variable-declarations -Wno-nonportable-include-path -Wno-packed -Wno-parentheses-equality -Wno-reserved-id-macro -Wno-sign-conversion -Wno-unused-macros -ffunction-sections -fno-exceptions -fno-rtti -fshort-enums -fshort-wchar -funsigned-char -gdwarf-4 -std=c++14 -xc++ -flto" compiler="AC6"/>
<asflags add="-gdwarf-3 -masm=gnu" compiler="AC6"/>
<includes>../VSI/audio/include;../VSI/include;../micro_speech/src</includes>
<defines>__FVP_PY</defines>
</target>

<components>
<component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM"/>
<component Cclass="CMSIS" Cgroup="DSP" Cvariant="Source" Cvendor="ARM"/>
<component Cclass="CMSIS" Cgroup="NN Lib" Cvendor="ARM"/>
<component Cclass="CMSIS" Cgroup="RTOS2" Csub="Keil RTX5" Cvariant="Source" Cvendor="ARM">
<file attr="config" category="source" name="CMSIS/RTOS2/RTX/Config/RTX_Config.c" version="5.1.1"/>
<file attr="config" category="header" name="CMSIS/RTOS2/RTX/Config/RTX_Config.h" version="5.5.2"/>
</component>
<component Cclass="CMSIS Driver" Cgroup="MPC" Cvendor="ARM"/>
<component Cclass="CMSIS Driver" Cgroup="PPC" Cvendor="ARM"/>
<component Cclass="CMSIS Driver" Cgroup="SPI" Cvendor="ARM"/>
<component Cclass="CMSIS Driver" Cgroup="USART" Cvendor="ARM"/>
<component Cclass="Data Exchange" Cgroup="Serialization" Csub="flatbuffers" Cvariant="tensorflow" Cvendor="tensorflow"/>
<component Cclass="Data Processing" Cgroup="Math" Csub="gemmlowp fixed-point" Cvariant="tensorflow" Cvendor="tensorflow"/>
<component Cclass="Data Processing" Cgroup="Math" Csub="kissfft" Cvariant="tensorflow" Cvendor="tensorflow"/>
<component Cclass="Data Processing" Cgroup="Math" Csub="ruy" Cvariant="tensorflow" Cvendor="tensorflow"/>
<component Cclass="Device" Cgroup="Definition" Cvendor="ARM">
<file attr="config" category="header" name="Board/Platform/platform_base_address.h" version="1.1.2"/>
<file attr="config" category="source" name="Device/Source/system_SSE300MPS3.c" version="1.1.1"/>
</component>
<component Cclass="Device" Cgroup="Startup" Cvariant="Baremetal" Cvendor="ARM">
<file attr="config" category="header" name="CMSIS_Driver/Config/Baremetal/cmsis_driver_config.h" version="1.1.1"/>
<file attr="config" category="header" name="CMSIS_Driver/Config/RTE_Device.h" version="1.1.0"/>
<file attr="config" category="header" name="Device/Config/Baremetal/device_cfg.h" version="1.1.2"/>
<file attr="config" category="header" name="Device/Include/region_defs.h" version="1.0.0"/>
<file attr="config" category="header" name="Device/Include/region_limits.h" version="1.0.0"/>
<file attr="config" category="linkerScript" name="Device/Source/armclang/fvp_sse300_mps3_s.sct" version="1.1.0"/>
<file attr="config" category="source" name="Device/Source/startup_fvp_sse300_mps3.c" version="1.1.1"/>
</component>
<component Cclass="Machine Learning" Cgroup="TensorFlow" Csub="Kernel" Cvariant="CMSIS-NN" Cvendor="tensorflow"/>
<component Cclass="Machine Learning" Cgroup="TensorFlow" Csub="Kernel Utils" Cvendor="tensorflow">
<file attr="config" category="sourceCpp" name="tensorflow/lite/micro/cortex_m_generic/debug_log.cc" version="1.0"/>
<file attr="config" category="sourceCpp" name="tensorflow/lite/micro/cortex_m_generic/micro_time.cc" version="1.0"/>
<file attr="config" category="sourceCpp" name="tensorflow/lite/micro/system_setup.cc" version="1.0"/>
</component>
<component Cclass="Native Driver" Cgroup="GPIO" Cvendor="ARM"/>
<component Cclass="Native Driver" Cgroup="IO" Cvendor="ARM"/>
<component Cclass="Native Driver" Cgroup="MPC" Cvendor="ARM"/>
<component Cclass="Native Driver" Cgroup="PPC" Cvendor="ARM"/>
<component Cclass="Native Driver" Cgroup="SPI" Cvendor="ARM"/>
<component Cclass="Native Driver" Cgroup="SysCounter" Cvendor="ARM"/>
<component Cclass="Native Driver" Cgroup="SysTimer" Cvendor="ARM"/>
<component Cclass="Native Driver" Cgroup="UART" Cvendor="ARM"/>
<component Cclass="Native Driver" Cgroup="Watch Dog" Cvendor="ARM"/>
<component Cbundle="ARM Compiler" Cclass="Compiler" Cgroup="Event Recorder" Cvariant="DAP" Cvendor="Keil">
<file attr="config" category="header" name="Config/EventRecorderConf.h" version="1.1.0"/>
</component>
<component Cbundle="ARM Compiler" Cclass="Compiler" Cgroup="I/O" Csub="STDOUT" Cvariant="User" Cvendor="Keil"/>
</components>

<files>
<group name="App">
<file category="sourceC" name="./microspeech.c"/>
</group>
<group name="Board">
<file category="sourceC" name="./main.c"/>
<file category="header" name="./main.h"/>
</group>
<group name="Board IO">
<file category="sourceC" name="./Board_IO/retarget_stdio.c"/>
</group>
<group name="Driver">
<file category="sourceC" name="../VSI/audio/driver/audio_drv.c"/>
</group>
<group name="TF_micro_frontend">
<file category="sourceCpp" name="../micro_speech/src/microfrontend/lib/fft.cc"/>
<file category="sourceCpp" name="../micro_speech/src/microfrontend/lib/fft_util.cc"/>
<file category="sourceC" name="../micro_speech/src/microfrontend/lib/filterbank.c"/>
<file category="sourceC" name="../micro_speech/src/microfrontend/lib/filterbank_util.c"/>
<file category="sourceC" name="../micro_speech/src/microfrontend/lib/frontend.c"/>
<file category="sourceC" name="../micro_speech/src/microfrontend/lib/frontend_util.c"/>
<file category="sourceC" name="../micro_speech/src/microfrontend/lib/log_lut.c"/>
<file category="sourceC" name="../micro_speech/src/microfrontend/lib/log_scale.c"/>
<file category="sourceC" name="../micro_speech/src/microfrontend/lib/log_scale_util.c"/>
<file category="sourceC" name="../micro_speech/src/microfrontend/lib/noise_reduction.c"/>
<file category="sourceC" name="../micro_speech/src/microfrontend/lib/noise_reduction_util.c"/>
<file category="sourceC" name="../micro_speech/src/microfrontend/lib/pcan_gain_control.c"/>
<file category="sourceC" name="../micro_speech/src/microfrontend/lib/pcan_gain_control_util.c"/>
<file category="sourceC" name="../micro_speech/src/microfrontend/lib/window.c"/>
<file category="sourceC" name="../micro_speech/src/microfrontend/lib/window_util.c"/>
</group>
<group name="TF_micro_features">
<file category="sourceCpp" name="../micro_speech/src/micro_features/micro_features_generator.cc"/>
<file category="sourceCpp" name="../micro_speech/src/micro_features/micro_model_settings.cc"/>
<file category="sourceCpp" name="../micro_speech/src/micro_features/model.cc"/>
<file category="sourceCpp" name="../micro_speech/src/micro_features/no_micro_features_data.cc"/>
<file category="sourceCpp" name="../micro_speech/src/micro_features/yes_micro_features_data.cc"/>
</group>
<group name="TF_main">
<file category="sourceCpp" name="../micro_speech/src/audio_provider.cc"/>
<file category="sourceCpp" name="../micro_speech/src/command_responder.cc"/>
<file category="sourceCpp" name="../micro_speech/src/feature_provider.cc"/>
<file category="sourceCpp" name="../micro_speech/src/main_functions.cc"/>
<file category="sourceCpp" name="../micro_speech/src/recognize_commands.cc"/>
</group>
</files>

</cprj>
7 changes: 7 additions & 0 deletions micro_speech/src/microfrontend/lib/fft.cc
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ limitations under the License.
#define FIXED_POINT 16
#include "kiss_fft.h"
#include "tools/kiss_fftr.h"
#include <arm_math.h>

void FftCompute(struct FftState* state, const int16_t* input,
int input_scale_shift) {
Expand All @@ -38,9 +39,15 @@ void FftCompute(struct FftState* state, const int16_t* input,
}

// Apply the FFT.
#ifdef USE_KISS_FFT
kiss_fftr(reinterpret_cast<kiss_fftr_cfg>(state->scratch),
state->input,
reinterpret_cast<kiss_fft_cpx*>(state->output));
#else
arm_rfft_q15(reinterpret_cast<arm_rfft_instance_q15 *>(state->scratch),
state->input,
reinterpret_cast<int16_t *>(state->output));
#endif
}

void FftInit(struct FftState* state) {
Expand Down
18 changes: 18 additions & 0 deletions micro_speech/src/microfrontend/lib/fft_util.cc
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ limitations under the License.
#include "kiss_fft.h"
#include "tools/kiss_fftr.h"

#include "arm_math.h"

int FftPopulateState(struct FftState* state, size_t input_size) {
state->input_size = input_size;
state->fft_size = 1;
Expand All @@ -41,6 +43,21 @@ int FftPopulateState(struct FftState* state, size_t input_size) {
return 0;
}

#ifndef USE_KISS_FFT
arm_rfft_instance_q15 * cmsisFft;

cmsisFft = (arm_rfft_instance_q15 *)malloc(sizeof(arm_rfft_instance_q15));
if (cmsisFft == nullptr) {
fprintf(stderr, "Failed to alloc cmsis fft context\n");
return 0;
}
if (arm_rfft_init_q15(cmsisFft, state->fft_size, 0, 1) != ARM_MATH_SUCCESS) {
fprintf(stderr, "Failed to init cmsis fft \n");
return 0;
}

state->scratch = cmsisFft;
#else
// Ask kissfft how much memory it wants.
size_t scratch_size = 0;
kiss_fftr_cfg kfft_cfg = kiss_fftr_alloc(
Expand All @@ -62,6 +79,7 @@ int FftPopulateState(struct FftState* state, size_t input_size) {
fprintf(stderr, "Kiss memory preallocation strategy failed.\n");
return 0;
}
#endif
return 1;
}

Expand Down
Loading

0 comments on commit 3120b5e

Please sign in to comment.