mlonmcu 0.3.0.dev0__3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mlonmcu/__init__.py +26 -0
- mlonmcu/artifact.py +172 -0
- mlonmcu/cli/__init__.py +19 -0
- mlonmcu/cli/build.py +119 -0
- mlonmcu/cli/cleanup.py +75 -0
- mlonmcu/cli/common.py +227 -0
- mlonmcu/cli/compile.py +87 -0
- mlonmcu/cli/env.py +68 -0
- mlonmcu/cli/export.py +93 -0
- mlonmcu/cli/flow.py +67 -0
- mlonmcu/cli/helper/__init__.py +18 -0
- mlonmcu/cli/helper/filter.py +25 -0
- mlonmcu/cli/helper/parse.py +159 -0
- mlonmcu/cli/init.py +130 -0
- mlonmcu/cli/load.py +87 -0
- mlonmcu/cli/main.py +116 -0
- mlonmcu/cli/models.py +48 -0
- mlonmcu/cli/run.py +56 -0
- mlonmcu/cli/setup.py +136 -0
- mlonmcu/cli/tune.py +48 -0
- mlonmcu/config.py +219 -0
- mlonmcu/context/__init__.py +22 -0
- mlonmcu/context/context.py +545 -0
- mlonmcu/context/read_write_filelock.py +327 -0
- mlonmcu/environment/__init__.py +18 -0
- mlonmcu/environment/config.py +214 -0
- mlonmcu/environment/environment.py +501 -0
- mlonmcu/environment/init.py +191 -0
- mlonmcu/environment/list.py +81 -0
- mlonmcu/environment/loader.py +250 -0
- mlonmcu/environment/templates.py +69 -0
- mlonmcu/environment/writer.py +117 -0
- mlonmcu/feature/__init__.py +18 -0
- mlonmcu/feature/feature.py +230 -0
- mlonmcu/feature/features.py +1537 -0
- mlonmcu/feature/type.py +33 -0
- mlonmcu/flow/__init__.py +61 -0
- mlonmcu/flow/backend.py +234 -0
- mlonmcu/flow/framework.py +69 -0
- mlonmcu/flow/tflm/__init__.py +23 -0
- mlonmcu/flow/tflm/backend/__init__.py +23 -0
- mlonmcu/flow/tflm/backend/backend.py +47 -0
- mlonmcu/flow/tflm/backend/tflmc.py +129 -0
- mlonmcu/flow/tflm/backend/tflmi.py +385 -0
- mlonmcu/flow/tflm/framework.py +81 -0
- mlonmcu/flow/tvm/__init__.py +23 -0
- mlonmcu/flow/tvm/backend/__init__.py +26 -0
- mlonmcu/flow/tvm/backend/backend.py +282 -0
- mlonmcu/flow/tvm/backend/model_info.py +307 -0
- mlonmcu/flow/tvm/backend/python_utils.py +36 -0
- mlonmcu/flow/tvm/backend/tuner.py +41 -0
- mlonmcu/flow/tvm/backend/tvmaot.py +162 -0
- mlonmcu/flow/tvm/backend/tvmaotplus.py +51 -0
- mlonmcu/flow/tvm/backend/tvmc_utils.py +172 -0
- mlonmcu/flow/tvm/backend/tvmcg.py +102 -0
- mlonmcu/flow/tvm/backend/tvmllvm.py +106 -0
- mlonmcu/flow/tvm/backend/tvmrt.py +151 -0
- mlonmcu/flow/tvm/backend/wrapper.py +645 -0
- mlonmcu/flow/tvm/framework.py +96 -0
- mlonmcu/logging.py +79 -0
- mlonmcu/mlonmcu.py +19 -0
- mlonmcu/models/__init__.py +31 -0
- mlonmcu/models/convert_data.py +107 -0
- mlonmcu/models/frontend.py +571 -0
- mlonmcu/models/group.py +29 -0
- mlonmcu/models/lookup.py +345 -0
- mlonmcu/models/metadata.py +133 -0
- mlonmcu/models/model.py +104 -0
- mlonmcu/models/options.py +64 -0
- mlonmcu/models/utils.py +136 -0
- mlonmcu/platform/__init__.py +27 -0
- mlonmcu/platform/_platform.py +46 -0
- mlonmcu/platform/espidf/__init__.py +25 -0
- mlonmcu/platform/espidf/espidf.py +489 -0
- mlonmcu/platform/espidf/espidf_target.py +257 -0
- mlonmcu/platform/lookup.py +126 -0
- mlonmcu/platform/microtvm/__init__.py +25 -0
- mlonmcu/platform/microtvm/microtvm.py +580 -0
- mlonmcu/platform/microtvm/microtvm_arduino_target.py +68 -0
- mlonmcu/platform/microtvm/microtvm_backend.py +64 -0
- mlonmcu/platform/microtvm/microtvm_espidf_target.py +94 -0
- mlonmcu/platform/microtvm/microtvm_etissvp_target.py +98 -0
- mlonmcu/platform/microtvm/microtvm_host_target.py +46 -0
- mlonmcu/platform/microtvm/microtvm_spike_target.py +230 -0
- mlonmcu/platform/microtvm/microtvm_target.py +189 -0
- mlonmcu/platform/microtvm/microtvm_template_target.py +55 -0
- mlonmcu/platform/microtvm/microtvm_zephyr_target.py +91 -0
- mlonmcu/platform/mlif/__init__.py +25 -0
- mlonmcu/platform/mlif/mlif.py +300 -0
- mlonmcu/platform/mlif/mlif_target.py +86 -0
- mlonmcu/platform/platform.py +244 -0
- mlonmcu/platform/tvm/__init__.py +25 -0
- mlonmcu/platform/tvm/tvm.py +429 -0
- mlonmcu/platform/tvm/tvm_backend.py +57 -0
- mlonmcu/platform/tvm/tvm_target.py +165 -0
- mlonmcu/platform/zephyr/__init__.py +25 -0
- mlonmcu/platform/zephyr/zephyr.py +450 -0
- mlonmcu/platform/zephyr/zephyr_target.py +110 -0
- mlonmcu/plugins.py +26 -0
- mlonmcu/report.py +99 -0
- mlonmcu/session/__init__.py +18 -0
- mlonmcu/session/postprocess/__init__.py +43 -0
- mlonmcu/session/postprocess/postprocess.py +62 -0
- mlonmcu/session/postprocess/postprocesses.py +487 -0
- mlonmcu/session/run.py +1008 -0
- mlonmcu/session/session.py +373 -0
- mlonmcu/setup/__init__.py +18 -0
- mlonmcu/setup/cache.py +147 -0
- mlonmcu/setup/gen_requirements.py +619 -0
- mlonmcu/setup/setup.py +285 -0
- mlonmcu/setup/task.py +380 -0
- mlonmcu/setup/tasks/__init__.py +40 -0
- mlonmcu/setup/tasks/arm_gcc.py +58 -0
- mlonmcu/setup/tasks/cmsisnn.py +151 -0
- mlonmcu/setup/tasks/common.py +36 -0
- mlonmcu/setup/tasks/corstone300.py +64 -0
- mlonmcu/setup/tasks/espidf.py +87 -0
- mlonmcu/setup/tasks/etiss.py +147 -0
- mlonmcu/setup/tasks/llvm.py +67 -0
- mlonmcu/setup/tasks/mlif.py +49 -0
- mlonmcu/setup/tasks/muriscvnn.py +166 -0
- mlonmcu/setup/tasks/pulp.py +192 -0
- mlonmcu/setup/tasks/riscv_gcc.py +146 -0
- mlonmcu/setup/tasks/spike.py +190 -0
- mlonmcu/setup/tasks/tf.py +92 -0
- mlonmcu/setup/tasks/tflite.py +59 -0
- mlonmcu/setup/tasks/tflmc.py +141 -0
- mlonmcu/setup/tasks/tvm.py +172 -0
- mlonmcu/setup/tasks/utvmcg.py +96 -0
- mlonmcu/setup/tasks/zephyr.py +119 -0
- mlonmcu/setup/utils.py +374 -0
- mlonmcu/target/__init__.py +37 -0
- mlonmcu/target/_target.py +41 -0
- mlonmcu/target/arm/__init__.py +3 -0
- mlonmcu/target/arm/corstone300.py +235 -0
- mlonmcu/target/arm/util.py +109 -0
- mlonmcu/target/common.py +194 -0
- mlonmcu/target/elf.py +256 -0
- mlonmcu/target/host_x86.py +84 -0
- mlonmcu/target/metrics.py +75 -0
- mlonmcu/target/riscv/__init__.py +7 -0
- mlonmcu/target/riscv/etiss_pulpino.py +462 -0
- mlonmcu/target/riscv/gvsoc_pulp.py +215 -0
- mlonmcu/target/riscv/ovpsim.py +301 -0
- mlonmcu/target/riscv/riscv.py +185 -0
- mlonmcu/target/riscv/riscv_qemu.py +166 -0
- mlonmcu/target/riscv/spike.py +243 -0
- mlonmcu/target/riscv/util.py +134 -0
- mlonmcu/target/target.py +200 -0
- mlonmcu/utils.py +49 -0
- mlonmcu/version.py +21 -0
- mlonmcu-0.3.0.dev0.dist-info/LICENSE +202 -0
- mlonmcu-0.3.0.dev0.dist-info/METADATA +343 -0
- mlonmcu-0.3.0.dev0.dist-info/NOTICE +8 -0
- mlonmcu-0.3.0.dev0.dist-info/RECORD +376 -0
- mlonmcu-0.3.0.dev0.dist-info/WHEEL +5 -0
- mlonmcu-0.3.0.dev0.dist-info/entry_points.txt +3 -0
- mlonmcu-0.3.0.dev0.dist-info/top_level.txt +1 -0
- resources/frameworks/tvm/crt_config/README.md +7 -0
- resources/frameworks/tvm/crt_config/crt_config.h +53 -0
- resources/frameworks/tvm/tuning_records/riscv_cpu_v0.01.log.best +46 -0
- resources/patches/fix_esp32c3_march.patch +20 -0
- resources/patches/pulp_freertos_support.patch +55 -0
- resources/platforms/espidf/micro_speech_esp32devboard/CMakeLists.txt +29 -0
- resources/platforms/espidf/micro_speech_esp32devboard/README.md +70 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/CMakeLists.txt +78 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/Kconfig +76 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/default_data.c +26 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/default_model_support/process_input.c +35 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/default_model_support/process_output.c +45 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/include/exit.h +26 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/include/ml_interface.h +70 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/include/printing.h +31 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/ml_interface.c +74 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/ml_interface_tflm.cc +64 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/ml_interface_tvm.c +53 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/tflite-lib/CMakeLists.txt +140 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/tflite-lib/Kconfig +8 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/tvm-lib/CMakeLists.txt +66 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/tvm-lib/Kconfig +7 -0
- resources/platforms/espidf/micro_speech_esp32devboard/example_test.py +38 -0
- resources/platforms/espidf/micro_speech_esp32devboard/info.txt +9 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/CMakeLists.txt +58 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/audio_provider.cc +193 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/audio_provider.h +49 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/command_responder.cc +53 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/command_responder.h +35 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/feature_provider.cc +132 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/feature_provider.cc.orig +145 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/feature_provider.h +55 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/COPYING +11 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/_kiss_fft_guts.h +168 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/kiss_fft.c +408 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/kiss_fft.h +124 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/tools/kiss_fftr.c +159 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/tools/kiss_fftr.h +46 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/main.cc +63 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/main_functions.cc +204 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/main_functions.h +37 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/micro_features_generator.cc +121 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/micro_features_generator.h +38 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/micro_model_settings.cc +23 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/micro_model_settings.h +43 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/bits.h +102 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/fft.cc +52 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/fft.h +50 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/fft_util.cc +69 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/fft_util.h +34 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/filterbank.c +134 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/filterbank.h +63 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/filterbank_util.c +220 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/filterbank_util.h +50 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/frontend.c +72 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/frontend.h +64 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/frontend_util.c +85 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/frontend_util.h +52 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/kiss_fft_common.h +48 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/kiss_fft_int16.cc +8 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/kiss_fft_int16.h +34 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_lut.c +30 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_lut.h +40 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_scale.c +83 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_scale.h +39 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_scale_util.c +27 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_scale_util.h +45 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction.c +51 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction.h +46 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction_util.c +45 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction_util.h +50 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control.c +56 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control.h +47 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control_util.c +92 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control_util.h +57 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/window.c +70 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/window.h +49 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/window_util.c +73 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/window_util.h +45 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/pins.c +14 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/pins.h +30 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/recognize_commands.cc +150 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/recognize_commands.h +173 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/ringbuf.c +333 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/ringbuf.h +74 -0
- resources/platforms/espidf/micro_speech_esp32devboard/sdkconfig.defaults +36 -0
- resources/platforms/espidf/project/CMakeLists.txt +29 -0
- resources/platforms/espidf/project/README.md +70 -0
- resources/platforms/espidf/project/components/mlif/CMakeLists.txt +77 -0
- resources/platforms/espidf/project/components/mlif/Kconfig +76 -0
- resources/platforms/espidf/project/components/mlif/default_data.c +26 -0
- resources/platforms/espidf/project/components/mlif/default_model_support/process_input.c +35 -0
- resources/platforms/espidf/project/components/mlif/default_model_support/process_output.c +45 -0
- resources/platforms/espidf/project/components/mlif/include/exit.h +26 -0
- resources/platforms/espidf/project/components/mlif/include/ml_interface.h +60 -0
- resources/platforms/espidf/project/components/mlif/include/printing.h +31 -0
- resources/platforms/espidf/project/components/mlif/ml_interface.c +54 -0
- resources/platforms/espidf/project/components/mlif/ml_interface_tflm.cc +40 -0
- resources/platforms/espidf/project/components/mlif/ml_interface_tvm.c +40 -0
- resources/platforms/espidf/project/components/tflite-lib/CMakeLists.txt +142 -0
- resources/platforms/espidf/project/components/tflite-lib/Kconfig +8 -0
- resources/platforms/espidf/project/components/tvm-lib/CMakeLists.txt +66 -0
- resources/platforms/espidf/project/components/tvm-lib/Kconfig +7 -0
- resources/platforms/espidf/project/example_test.py +38 -0
- resources/platforms/espidf/project/main/CMakeLists.txt +25 -0
- resources/platforms/espidf/project/main/main.c +57 -0
- resources/platforms/espidf/project/sdkconfig.defaults +26 -0
- resources/platforms/zephyr/project/CMakeLists.txt +22 -0
- resources/platforms/zephyr/project/Kconfig +101 -0
- resources/platforms/zephyr/project/README.rst +33 -0
- resources/platforms/zephyr/project/cmake/AddAllSubdirs.cmake +21 -0
- resources/platforms/zephyr/project/cmake/ChooseTarget.cmake +22 -0
- resources/platforms/zephyr/project/cmake/LinkTFLite.cmake +223 -0
- resources/platforms/zephyr/project/cmake/LinkTVM.cmake +68 -0
- resources/platforms/zephyr/project/cmake/LookupClang.cmake +41 -0
- resources/platforms/zephyr/project/cmake/backends/tflmc.cmake +5 -0
- resources/platforms/zephyr/project/cmake/backends/tflmi.cmake +5 -0
- resources/platforms/zephyr/project/cmake/backends/tvmaot.cmake +10 -0
- resources/platforms/zephyr/project/cmake/backends/tvmaotplus.cmake +10 -0
- resources/platforms/zephyr/project/cmake/backends/tvmcg.cmake +10 -0
- resources/platforms/zephyr/project/cmake/backends/tvmllvm.cmake +8 -0
- resources/platforms/zephyr/project/cmake/backends/tvmrt.cmake +8 -0
- resources/platforms/zephyr/project/cmake/extras.cmake +9 -0
- resources/platforms/zephyr/project/cmake/features/auto_vectorize_gcc.cmake +65 -0
- resources/platforms/zephyr/project/cmake/features/auto_vectorize_llvm.cmake +20 -0
- resources/platforms/zephyr/project/cmake/features/cmsisnn.cmake +86 -0
- resources/platforms/zephyr/project/cmake/features/muriscvnn.cmake +87 -0
- resources/platforms/zephyr/project/cmake/frameworks/tflm.cmake +1 -0
- resources/platforms/zephyr/project/cmake/frameworks/tflm_mlif.cmake +8 -0
- resources/platforms/zephyr/project/cmake/frameworks/tvm.cmake +1 -0
- resources/platforms/zephyr/project/cmake/frameworks/tvm_mlif.cmake +37 -0
- resources/platforms/zephyr/project/lib/CMakeLists.txt +13 -0
- resources/platforms/zephyr/project/lib/drivers/fake_input.c +10 -0
- resources/platforms/zephyr/project/lib/drivers/fake_input.h +8 -0
- resources/platforms/zephyr/project/lib/ml_interface/CMakeLists.txt +31 -0
- resources/platforms/zephyr/project/lib/ml_interface/default_data.c +8 -0
- resources/platforms/zephyr/project/lib/ml_interface/default_model_support/CMakeLists.txt +2 -0
- resources/platforms/zephyr/project/lib/ml_interface/default_model_support/process_input.c +17 -0
- resources/platforms/zephyr/project/lib/ml_interface/default_model_support/process_output.c +27 -0
- resources/platforms/zephyr/project/lib/ml_interface/ml_interface.c +36 -0
- resources/platforms/zephyr/project/lib/ml_interface/ml_interface.h +47 -0
- resources/platforms/zephyr/project/lib/ml_interface/ml_interface_tflm.cc +22 -0
- resources/platforms/zephyr/project/lib/ml_interface/ml_interface_tvm.c +22 -0
- resources/platforms/zephyr/project/lib/support/CMakeLists.txt +2 -0
- resources/platforms/zephyr/project/lib/support/dummy.c +0 -0
- resources/platforms/zephyr/project/lib/support/exit.h +8 -0
- resources/platforms/zephyr/project/lib/support/printing.h +11 -0
- resources/platforms/zephyr/project/lib/support/quantize.h +23 -0
- resources/platforms/zephyr/project/lib/targets/corstone300.c +62 -0
- resources/platforms/zephyr/project/lib/targets/default.c +2 -0
- resources/platforms/zephyr/project/lib/targets/etiss_pulpino.c +112 -0
- resources/platforms/zephyr/project/lib/targets/generic_riscv.c +112 -0
- resources/platforms/zephyr/project/lib/targets/riscv_qemu.c +112 -0
- resources/platforms/zephyr/project/lib/targets/target.h +2 -0
- resources/platforms/zephyr/project/prj.conf +11 -0
- resources/platforms/zephyr/project/sample.yaml +19 -0
- resources/platforms/zephyr/project/src/main.c +71 -0
- resources/platforms/zephyr/project2/CMakeLists.txt +72 -0
- resources/platforms/zephyr/project2/Kconfig +101 -0
- resources/platforms/zephyr/project2/README.rst +33 -0
- resources/platforms/zephyr/project2/cmake/AddAllSubdirs.cmake +21 -0
- resources/platforms/zephyr/project2/cmake/ChooseTarget.cmake +22 -0
- resources/platforms/zephyr/project2/cmake/LinkTFLite.cmake +223 -0
- resources/platforms/zephyr/project2/cmake/LinkTVM.cmake +68 -0
- resources/platforms/zephyr/project2/cmake/LookupClang.cmake +41 -0
- resources/platforms/zephyr/project2/cmake/backends/tflmc.cmake +5 -0
- resources/platforms/zephyr/project2/cmake/backends/tflmi.cmake +5 -0
- resources/platforms/zephyr/project2/cmake/backends/tvmaot.cmake +10 -0
- resources/platforms/zephyr/project2/cmake/backends/tvmaotplus.cmake +10 -0
- resources/platforms/zephyr/project2/cmake/backends/tvmcg.cmake +10 -0
- resources/platforms/zephyr/project2/cmake/backends/tvmllvm.cmake +8 -0
- resources/platforms/zephyr/project2/cmake/backends/tvmrt.cmake +8 -0
- resources/platforms/zephyr/project2/cmake/extras.cmake +9 -0
- resources/platforms/zephyr/project2/cmake/features/auto_vectorize_gcc.cmake +65 -0
- resources/platforms/zephyr/project2/cmake/features/auto_vectorize_llvm.cmake +20 -0
- resources/platforms/zephyr/project2/cmake/features/cmsisnn.cmake +86 -0
- resources/platforms/zephyr/project2/cmake/features/muriscvnn.cmake +87 -0
- resources/platforms/zephyr/project2/cmake/frameworks/tflm.cmake +1 -0
- resources/platforms/zephyr/project2/cmake/frameworks/tflm_mlif.cmake +8 -0
- resources/platforms/zephyr/project2/cmake/frameworks/tvm.cmake +1 -0
- resources/platforms/zephyr/project2/cmake/frameworks/tvm_mlif.cmake +37 -0
- resources/platforms/zephyr/project2/default_data.c +8 -0
- resources/platforms/zephyr/project2/default_model_support/CMakeLists.txt +3 -0
- resources/platforms/zephyr/project2/default_model_support/process_input.c +17 -0
- resources/platforms/zephyr/project2/default_model_support/process_output.c +27 -0
- resources/platforms/zephyr/project2/lib/CMakeLists.txt +13 -0
- resources/platforms/zephyr/project2/lib/drivers/fake_input.c +10 -0
- resources/platforms/zephyr/project2/lib/drivers/fake_input.h +8 -0
- resources/platforms/zephyr/project2/lib/support/CMakeLists.txt +2 -0
- resources/platforms/zephyr/project2/lib/support/dummy.c +0 -0
- resources/platforms/zephyr/project2/lib/support/exit.h +8 -0
- resources/platforms/zephyr/project2/lib/support/printing.h +11 -0
- resources/platforms/zephyr/project2/lib/support/quantize.h +23 -0
- resources/platforms/zephyr/project2/lib/targets/corstone300.c +62 -0
- resources/platforms/zephyr/project2/lib/targets/default.c +2 -0
- resources/platforms/zephyr/project2/lib/targets/etiss_pulpino.c +112 -0
- resources/platforms/zephyr/project2/lib/targets/generic_riscv.c +112 -0
- resources/platforms/zephyr/project2/lib/targets/riscv_qemu.c +112 -0
- resources/platforms/zephyr/project2/lib/targets/target.h +2 -0
- resources/platforms/zephyr/project2/ml_interface.c +36 -0
- resources/platforms/zephyr/project2/ml_interface.h +47 -0
- resources/platforms/zephyr/project2/ml_interface_tflm.cc +22 -0
- resources/platforms/zephyr/project2/ml_interface_tvm.c +22 -0
- resources/platforms/zephyr/project2/prj.conf +13 -0
- resources/platforms/zephyr/project2/sample.yaml +19 -0
- resources/platforms/zephyr/project2/settings.json +6 -0
- resources/platforms/zephyr/project2/src/main.c +35 -0
- resources/pycharm/.run/README.md +73 -0
- resources/pycharm/.run/step1_ init env.run.xml +24 -0
- resources/pycharm/.run/step2_ setup.run.xml +25 -0
- resources/pycharm/.run/step3_ run resnet on pulpxpulpissimo.run.xml +25 -0
- resources/templates/default.yml.j2 +258 -0
- resources/templates/dev.yml.j2 +212 -0
- resources/templates/minimal.yml.j2 +234 -0
- resources/templates/phi.yml.j2 +282 -0
- resources/templates/pulp.yml.j2 +267 -0
- resources/templates/research.yml.j2 +237 -0
- resources/templates/tumeda.yml.j2 +239 -0
resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction.c
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
|
|
2
|
+
|
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
See the License for the specific language governing permissions and
|
|
13
|
+
limitations under the License.
|
|
14
|
+
==============================================================================*/
|
|
15
|
+
#include "microfrontend/lib/noise_reduction.h"
|
|
16
|
+
|
|
17
|
+
#include <string.h>
|
|
18
|
+
|
|
19
|
+
void NoiseReductionApply(struct NoiseReductionState* state, uint32_t* signal) {
|
|
20
|
+
int i;
|
|
21
|
+
for (i = 0; i < state->num_channels; ++i) {
|
|
22
|
+
const uint32_t smoothing =
|
|
23
|
+
((i & 1) == 0) ? state->even_smoothing : state->odd_smoothing;
|
|
24
|
+
const uint32_t one_minus_smoothing = (1 << kNoiseReductionBits) - smoothing;
|
|
25
|
+
|
|
26
|
+
// Update the estimate of the noise.
|
|
27
|
+
const uint32_t signal_scaled_up = signal[i] << state->smoothing_bits;
|
|
28
|
+
uint32_t estimate =
|
|
29
|
+
(((uint64_t)signal_scaled_up * smoothing) +
|
|
30
|
+
((uint64_t)state->estimate[i] * one_minus_smoothing)) >>
|
|
31
|
+
kNoiseReductionBits;
|
|
32
|
+
state->estimate[i] = estimate;
|
|
33
|
+
|
|
34
|
+
// Make sure that we can't get a negative value for the signal - estimate.
|
|
35
|
+
if (estimate > signal_scaled_up) {
|
|
36
|
+
estimate = signal_scaled_up;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const uint32_t floor =
|
|
40
|
+
((uint64_t)signal[i] * state->min_signal_remaining) >>
|
|
41
|
+
kNoiseReductionBits;
|
|
42
|
+
const uint32_t subtracted =
|
|
43
|
+
(signal_scaled_up - estimate) >> state->smoothing_bits;
|
|
44
|
+
const uint32_t output = subtracted > floor ? subtracted : floor;
|
|
45
|
+
signal[i] = output;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
void NoiseReductionReset(struct NoiseReductionState* state) {
|
|
50
|
+
memset(state->estimate, 0, sizeof(*state->estimate) * state->num_channels);
|
|
51
|
+
}
|
resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction.h
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
|
|
2
|
+
|
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
See the License for the specific language governing permissions and
|
|
13
|
+
limitations under the License.
|
|
14
|
+
==============================================================================*/
|
|
15
|
+
#ifndef TENSORFLOW_LITE_EXPERIMENTAL_MICROFRONTEND_LIB_NOISE_REDUCTION_H_
|
|
16
|
+
#define TENSORFLOW_LITE_EXPERIMENTAL_MICROFRONTEND_LIB_NOISE_REDUCTION_H_
|
|
17
|
+
|
|
18
|
+
#define kNoiseReductionBits 14
|
|
19
|
+
|
|
20
|
+
#include <stdint.h>
|
|
21
|
+
#include <stdlib.h>
|
|
22
|
+
|
|
23
|
+
#ifdef __cplusplus
|
|
24
|
+
extern "C" {
|
|
25
|
+
#endif
|
|
26
|
+
|
|
27
|
+
struct NoiseReductionState {
|
|
28
|
+
int smoothing_bits;
|
|
29
|
+
uint16_t even_smoothing;
|
|
30
|
+
uint16_t odd_smoothing;
|
|
31
|
+
uint16_t min_signal_remaining;
|
|
32
|
+
int num_channels;
|
|
33
|
+
uint32_t* estimate;
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
// Removes stationary noise from each channel of the signal using a low pass
|
|
37
|
+
// filter.
|
|
38
|
+
void NoiseReductionApply(struct NoiseReductionState* state, uint32_t* signal);
|
|
39
|
+
|
|
40
|
+
void NoiseReductionReset(struct NoiseReductionState* state);
|
|
41
|
+
|
|
42
|
+
#ifdef __cplusplus
|
|
43
|
+
} // extern "C"
|
|
44
|
+
#endif
|
|
45
|
+
|
|
46
|
+
#endif // TENSORFLOW_LITE_EXPERIMENTAL_MICROFRONTEND_LIB_NOISE_REDUCTION_H_
|
resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction_util.c
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
|
|
2
|
+
|
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
See the License for the specific language governing permissions and
|
|
13
|
+
limitations under the License.
|
|
14
|
+
==============================================================================*/
|
|
15
|
+
#include "microfrontend/lib/noise_reduction_util.h"
|
|
16
|
+
|
|
17
|
+
#include <stdio.h>
|
|
18
|
+
|
|
19
|
+
void NoiseReductionFillConfigWithDefaults(struct NoiseReductionConfig* config) {
|
|
20
|
+
config->smoothing_bits = 10;
|
|
21
|
+
config->even_smoothing = 0.025;
|
|
22
|
+
config->odd_smoothing = 0.06;
|
|
23
|
+
config->min_signal_remaining = 0.05;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
int NoiseReductionPopulateState(const struct NoiseReductionConfig* config,
|
|
27
|
+
struct NoiseReductionState* state,
|
|
28
|
+
int num_channels) {
|
|
29
|
+
state->smoothing_bits = config->smoothing_bits;
|
|
30
|
+
state->odd_smoothing = config->odd_smoothing * (1 << kNoiseReductionBits);
|
|
31
|
+
state->even_smoothing = config->even_smoothing * (1 << kNoiseReductionBits);
|
|
32
|
+
state->min_signal_remaining =
|
|
33
|
+
config->min_signal_remaining * (1 << kNoiseReductionBits);
|
|
34
|
+
state->num_channels = num_channels;
|
|
35
|
+
state->estimate = calloc(state->num_channels, sizeof(*state->estimate));
|
|
36
|
+
if (state->estimate == NULL) {
|
|
37
|
+
fprintf(stderr, "Failed to alloc estimate buffer\n");
|
|
38
|
+
return 0;
|
|
39
|
+
}
|
|
40
|
+
return 1;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
void NoiseReductionFreeStateContents(struct NoiseReductionState* state) {
|
|
44
|
+
free(state->estimate);
|
|
45
|
+
}
|
resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction_util.h
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
|
|
2
|
+
|
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
See the License for the specific language governing permissions and
|
|
13
|
+
limitations under the License.
|
|
14
|
+
==============================================================================*/
|
|
15
|
+
#ifndef TENSORFLOW_LITE_EXPERIMENTAL_MICROFRONTEND_LIB_NOISE_REDUCTION_UTIL_H_
|
|
16
|
+
#define TENSORFLOW_LITE_EXPERIMENTAL_MICROFRONTEND_LIB_NOISE_REDUCTION_UTIL_H_
|
|
17
|
+
|
|
18
|
+
#include "microfrontend/lib/noise_reduction.h"
|
|
19
|
+
|
|
20
|
+
#ifdef __cplusplus
|
|
21
|
+
extern "C" {
|
|
22
|
+
#endif
|
|
23
|
+
|
|
24
|
+
struct NoiseReductionConfig {
|
|
25
|
+
// scale the signal up by 2^(smoothing_bits) before reduction
|
|
26
|
+
int smoothing_bits;
|
|
27
|
+
// smoothing coefficient for even-numbered channels
|
|
28
|
+
float even_smoothing;
|
|
29
|
+
// smoothing coefficient for odd-numbered channels
|
|
30
|
+
float odd_smoothing;
|
|
31
|
+
// fraction of signal to preserve (1.0 disables this module)
|
|
32
|
+
float min_signal_remaining;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
// Populates the NoiseReductionConfig with "sane" default values.
|
|
36
|
+
void NoiseReductionFillConfigWithDefaults(struct NoiseReductionConfig* config);
|
|
37
|
+
|
|
38
|
+
// Allocates any buffers.
|
|
39
|
+
int NoiseReductionPopulateState(const struct NoiseReductionConfig* config,
|
|
40
|
+
struct NoiseReductionState* state,
|
|
41
|
+
int num_channels);
|
|
42
|
+
|
|
43
|
+
// Frees any allocated buffers.
|
|
44
|
+
void NoiseReductionFreeStateContents(struct NoiseReductionState* state);
|
|
45
|
+
|
|
46
|
+
#ifdef __cplusplus
|
|
47
|
+
} // extern "C"
|
|
48
|
+
#endif
|
|
49
|
+
|
|
50
|
+
#endif // TENSORFLOW_LITE_EXPERIMENTAL_MICROFRONTEND_LIB_NOISE_REDUCTION_UTIL_H_
|
resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control.c
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
|
|
2
|
+
|
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
See the License for the specific language governing permissions and
|
|
13
|
+
limitations under the License.
|
|
14
|
+
==============================================================================*/
|
|
15
|
+
#include "microfrontend/lib/pcan_gain_control.h"
|
|
16
|
+
|
|
17
|
+
#include "microfrontend/lib/bits.h"
|
|
18
|
+
|
|
19
|
+
int16_t WideDynamicFunction(const uint32_t x, const int16_t* lut) {
|
|
20
|
+
if (x <= 2) {
|
|
21
|
+
return lut[x];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const int16_t interval = MostSignificantBit32(x);
|
|
25
|
+
lut += 4 * interval - 6;
|
|
26
|
+
|
|
27
|
+
const int16_t frac =
|
|
28
|
+
((interval < 11) ? (x << (11 - interval)) : (x >> (interval - 11))) &
|
|
29
|
+
0x3FF;
|
|
30
|
+
|
|
31
|
+
int32_t result = ((int32_t)lut[2] * frac) >> 5;
|
|
32
|
+
result += (int32_t)((uint32_t)lut[1] << 5);
|
|
33
|
+
result *= frac;
|
|
34
|
+
result = (result + (1 << 14)) >> 15;
|
|
35
|
+
result += lut[0];
|
|
36
|
+
return (int16_t)result;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
uint32_t PcanShrink(const uint32_t x) {
|
|
40
|
+
if (x < (2 << kPcanSnrBits)) {
|
|
41
|
+
return (x * x) >> (2 + 2 * kPcanSnrBits - kPcanOutputBits);
|
|
42
|
+
} else {
|
|
43
|
+
return (x >> (kPcanSnrBits - kPcanOutputBits)) - (1 << kPcanOutputBits);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
void PcanGainControlApply(struct PcanGainControlState* state,
|
|
48
|
+
uint32_t* signal) {
|
|
49
|
+
int i;
|
|
50
|
+
for (i = 0; i < state->num_channels; ++i) {
|
|
51
|
+
const uint32_t gain =
|
|
52
|
+
WideDynamicFunction(state->noise_estimate[i], state->gain_lut);
|
|
53
|
+
const uint32_t snr = ((uint64_t)signal[i] * gain) >> state->snr_shift;
|
|
54
|
+
signal[i] = PcanShrink(snr);
|
|
55
|
+
}
|
|
56
|
+
}
|
resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control.h
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
|
|
2
|
+
|
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
See the License for the specific language governing permissions and
|
|
13
|
+
limitations under the License.
|
|
14
|
+
==============================================================================*/
|
|
15
|
+
#ifndef TENSORFLOW_LITE_EXPERIMENTAL_MICROFRONTEND_LIB_PCAN_GAIN_CONTROL_H_
|
|
16
|
+
#define TENSORFLOW_LITE_EXPERIMENTAL_MICROFRONTEND_LIB_PCAN_GAIN_CONTROL_H_
|
|
17
|
+
|
|
18
|
+
#include <stdint.h>
|
|
19
|
+
#include <stdlib.h>
|
|
20
|
+
|
|
21
|
+
#define kPcanSnrBits 12
|
|
22
|
+
#define kPcanOutputBits 6
|
|
23
|
+
|
|
24
|
+
#ifdef __cplusplus
|
|
25
|
+
extern "C" {
|
|
26
|
+
#endif
|
|
27
|
+
|
|
28
|
+
// Details at https://research.google/pubs/pub45911.pdf
|
|
29
|
+
struct PcanGainControlState {
|
|
30
|
+
int enable_pcan;
|
|
31
|
+
uint32_t* noise_estimate;
|
|
32
|
+
int num_channels;
|
|
33
|
+
int16_t* gain_lut;
|
|
34
|
+
int32_t snr_shift;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
int16_t WideDynamicFunction(const uint32_t x, const int16_t* lut);
|
|
38
|
+
|
|
39
|
+
uint32_t PcanShrink(const uint32_t x);
|
|
40
|
+
|
|
41
|
+
void PcanGainControlApply(struct PcanGainControlState* state, uint32_t* signal);
|
|
42
|
+
|
|
43
|
+
#ifdef __cplusplus
|
|
44
|
+
} // extern "C"
|
|
45
|
+
#endif
|
|
46
|
+
|
|
47
|
+
#endif // TENSORFLOW_LITE_EXPERIMENTAL_MICROFRONTEND_LIB_PCAN_GAIN_CONTROL_H_
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
|
|
2
|
+
|
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
See the License for the specific language governing permissions and
|
|
13
|
+
limitations under the License.
|
|
14
|
+
==============================================================================*/
|
|
15
|
+
#include "microfrontend/lib/pcan_gain_control_util.h"
|
|
16
|
+
|
|
17
|
+
#include <math.h>
|
|
18
|
+
#include <stdio.h>
|
|
19
|
+
|
|
20
|
+
#define kint16max 0x00007FFF
|
|
21
|
+
|
|
22
|
+
void PcanGainControlFillConfigWithDefaults(
|
|
23
|
+
struct PcanGainControlConfig* config) {
|
|
24
|
+
config->enable_pcan = 0;
|
|
25
|
+
config->strength = 0.95;
|
|
26
|
+
config->offset = 80.0;
|
|
27
|
+
config->gain_bits = 21;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
int16_t PcanGainLookupFunction(const struct PcanGainControlConfig* config,
|
|
31
|
+
int32_t input_bits, uint32_t x) {
|
|
32
|
+
const float x_as_float = ((float)x) / ((uint32_t)1 << input_bits);
|
|
33
|
+
const float gain_as_float =
|
|
34
|
+
((uint32_t)1 << config->gain_bits) *
|
|
35
|
+
powf(x_as_float + config->offset, -config->strength);
|
|
36
|
+
|
|
37
|
+
if (gain_as_float > kint16max) {
|
|
38
|
+
return kint16max;
|
|
39
|
+
}
|
|
40
|
+
return (int16_t)(gain_as_float + 0.5f);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
int PcanGainControlPopulateState(const struct PcanGainControlConfig* config,
|
|
44
|
+
struct PcanGainControlState* state,
|
|
45
|
+
uint32_t* noise_estimate,
|
|
46
|
+
const int num_channels,
|
|
47
|
+
const uint16_t smoothing_bits,
|
|
48
|
+
const int32_t input_correction_bits) {
|
|
49
|
+
state->enable_pcan = config->enable_pcan;
|
|
50
|
+
if (!state->enable_pcan) {
|
|
51
|
+
return 1;
|
|
52
|
+
}
|
|
53
|
+
state->noise_estimate = noise_estimate;
|
|
54
|
+
state->num_channels = num_channels;
|
|
55
|
+
state->gain_lut = malloc(kWideDynamicFunctionLUTSize * sizeof(int16_t));
|
|
56
|
+
if (state->gain_lut == NULL) {
|
|
57
|
+
fprintf(stderr, "Failed to allocate gain LUT\n");
|
|
58
|
+
return 0;
|
|
59
|
+
}
|
|
60
|
+
state->snr_shift = config->gain_bits - input_correction_bits - kPcanSnrBits;
|
|
61
|
+
|
|
62
|
+
const int32_t input_bits = smoothing_bits - input_correction_bits;
|
|
63
|
+
state->gain_lut[0] = PcanGainLookupFunction(config, input_bits, 0);
|
|
64
|
+
state->gain_lut[1] = PcanGainLookupFunction(config, input_bits, 1);
|
|
65
|
+
state->gain_lut -= 6;
|
|
66
|
+
int interval;
|
|
67
|
+
for (interval = 2; interval <= kWideDynamicFunctionBits; ++interval) {
|
|
68
|
+
const uint32_t x0 = (uint32_t)1 << (interval - 1);
|
|
69
|
+
const uint32_t x1 = x0 + (x0 >> 1);
|
|
70
|
+
const uint32_t x2 =
|
|
71
|
+
(interval == kWideDynamicFunctionBits) ? x0 + (x0 - 1) : 2 * x0;
|
|
72
|
+
|
|
73
|
+
const int16_t y0 = PcanGainLookupFunction(config, input_bits, x0);
|
|
74
|
+
const int16_t y1 = PcanGainLookupFunction(config, input_bits, x1);
|
|
75
|
+
const int16_t y2 = PcanGainLookupFunction(config, input_bits, x2);
|
|
76
|
+
|
|
77
|
+
const int32_t diff1 = (int32_t)y1 - y0;
|
|
78
|
+
const int32_t diff2 = (int32_t)y2 - y0;
|
|
79
|
+
const int32_t a1 = 4 * diff1 - diff2;
|
|
80
|
+
const int32_t a2 = diff2 - a1;
|
|
81
|
+
|
|
82
|
+
state->gain_lut[4 * interval] = y0;
|
|
83
|
+
state->gain_lut[4 * interval + 1] = (int16_t)a1;
|
|
84
|
+
state->gain_lut[4 * interval + 2] = (int16_t)a2;
|
|
85
|
+
}
|
|
86
|
+
state->gain_lut += 6;
|
|
87
|
+
return 1;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
void PcanGainControlFreeStateContents(struct PcanGainControlState* state) {
|
|
91
|
+
free(state->gain_lut);
|
|
92
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
|
|
2
|
+
|
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
See the License for the specific language governing permissions and
|
|
13
|
+
limitations under the License.
|
|
14
|
+
==============================================================================*/
|
|
15
|
+
#ifndef TENSORFLOW_LITE_EXPERIMENTAL_MICROFRONTEND_LIB_PCAN_GAIN_CONTROL_UTIL_H_
|
|
16
|
+
#define TENSORFLOW_LITE_EXPERIMENTAL_MICROFRONTEND_LIB_PCAN_GAIN_CONTROL_UTIL_H_
|
|
17
|
+
|
|
18
|
+
#include "microfrontend/lib/pcan_gain_control.h"
|
|
19
|
+
|
|
20
|
+
#define kWideDynamicFunctionBits 32
|
|
21
|
+
#define kWideDynamicFunctionLUTSize (4 * kWideDynamicFunctionBits - 3)
|
|
22
|
+
|
|
23
|
+
#ifdef __cplusplus
|
|
24
|
+
extern "C" {
|
|
25
|
+
#endif
|
|
26
|
+
|
|
27
|
+
struct PcanGainControlConfig {
|
|
28
|
+
// set to false (0) to disable this module
|
|
29
|
+
int enable_pcan;
|
|
30
|
+
// gain normalization exponent (0.0 disables, 1.0 full strength)
|
|
31
|
+
float strength;
|
|
32
|
+
// positive value added in the normalization denominator
|
|
33
|
+
float offset;
|
|
34
|
+
// number of fractional bits in the gain
|
|
35
|
+
int gain_bits;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
void PcanGainControlFillConfigWithDefaults(
|
|
39
|
+
struct PcanGainControlConfig* config);
|
|
40
|
+
|
|
41
|
+
int16_t PcanGainLookupFunction(const struct PcanGainControlConfig* config,
|
|
42
|
+
int32_t input_bits, uint32_t x);
|
|
43
|
+
|
|
44
|
+
int PcanGainControlPopulateState(const struct PcanGainControlConfig* config,
|
|
45
|
+
struct PcanGainControlState* state,
|
|
46
|
+
uint32_t* noise_estimate,
|
|
47
|
+
const int num_channels,
|
|
48
|
+
const uint16_t smoothing_bits,
|
|
49
|
+
const int32_t input_correction_bits);
|
|
50
|
+
|
|
51
|
+
void PcanGainControlFreeStateContents(struct PcanGainControlState* state);
|
|
52
|
+
|
|
53
|
+
#ifdef __cplusplus
|
|
54
|
+
} // extern "C"
|
|
55
|
+
#endif
|
|
56
|
+
|
|
57
|
+
#endif // TENSORFLOW_LITE_EXPERIMENTAL_MICROFRONTEND_LIB_PCAN_GAIN_CONTROL_UTIL_H_
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
|
|
2
|
+
|
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
See the License for the specific language governing permissions and
|
|
13
|
+
limitations under the License.
|
|
14
|
+
==============================================================================*/
|
|
15
|
+
#include "microfrontend/lib/window.h"
|
|
16
|
+
|
|
17
|
+
#include <string.h>
|
|
18
|
+
|
|
19
|
+
int WindowProcessSamples(struct WindowState* state, const int16_t* samples,
|
|
20
|
+
size_t num_samples, size_t* num_samples_read) {
|
|
21
|
+
const int size = state->size;
|
|
22
|
+
|
|
23
|
+
// Copy samples from the samples buffer over to our local input.
|
|
24
|
+
size_t max_samples_to_copy = state->size - state->input_used;
|
|
25
|
+
if (max_samples_to_copy > num_samples) {
|
|
26
|
+
max_samples_to_copy = num_samples;
|
|
27
|
+
}
|
|
28
|
+
memcpy(state->input + state->input_used, samples,
|
|
29
|
+
max_samples_to_copy * sizeof(*samples));
|
|
30
|
+
*num_samples_read = max_samples_to_copy;
|
|
31
|
+
state->input_used += max_samples_to_copy;
|
|
32
|
+
|
|
33
|
+
if (state->input_used < state->size) {
|
|
34
|
+
// We don't have enough samples to compute a window.
|
|
35
|
+
return 0;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Apply the window to the input.
|
|
39
|
+
const int16_t* coefficients = state->coefficients;
|
|
40
|
+
const int16_t* input = state->input;
|
|
41
|
+
int16_t* output = state->output;
|
|
42
|
+
int i;
|
|
43
|
+
int16_t max_abs_output_value = 0;
|
|
44
|
+
for (i = 0; i < size; ++i) {
|
|
45
|
+
int16_t new_value =
|
|
46
|
+
(((int32_t)*input++) * *coefficients++) >> kFrontendWindowBits;
|
|
47
|
+
*output++ = new_value;
|
|
48
|
+
if (new_value < 0) {
|
|
49
|
+
new_value = -new_value;
|
|
50
|
+
}
|
|
51
|
+
if (new_value > max_abs_output_value) {
|
|
52
|
+
max_abs_output_value = new_value;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// Shuffle the input down by the step size, and update how much we have used.
|
|
56
|
+
memmove(state->input, state->input + state->step,
|
|
57
|
+
sizeof(*state->input) * (state->size - state->step));
|
|
58
|
+
state->input_used -= state->step;
|
|
59
|
+
state->max_abs_output_value = max_abs_output_value;
|
|
60
|
+
|
|
61
|
+
// Indicate that the output buffer is valid for the next stage.
|
|
62
|
+
return 1;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
void WindowReset(struct WindowState* state) {
|
|
66
|
+
memset(state->input, 0, state->size * sizeof(*state->input));
|
|
67
|
+
memset(state->output, 0, state->size * sizeof(*state->output));
|
|
68
|
+
state->input_used = 0;
|
|
69
|
+
state->max_abs_output_value = 0;
|
|
70
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
|
|
2
|
+
|
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
See the License for the specific language governing permissions and
|
|
13
|
+
limitations under the License.
|
|
14
|
+
==============================================================================*/
|
|
15
|
+
#ifndef TENSORFLOW_LITE_EXPERIMENTAL_MICROFRONTEND_LIB_WINDOW_H_
|
|
16
|
+
#define TENSORFLOW_LITE_EXPERIMENTAL_MICROFRONTEND_LIB_WINDOW_H_
|
|
17
|
+
|
|
18
|
+
#include <stdint.h>
|
|
19
|
+
#include <stdlib.h>
|
|
20
|
+
|
|
21
|
+
#define kFrontendWindowBits 12
|
|
22
|
+
|
|
23
|
+
#ifdef __cplusplus
|
|
24
|
+
extern "C" {
|
|
25
|
+
#endif
|
|
26
|
+
|
|
27
|
+
struct WindowState {
|
|
28
|
+
size_t size;
|
|
29
|
+
int16_t* coefficients;
|
|
30
|
+
size_t step;
|
|
31
|
+
|
|
32
|
+
int16_t* input;
|
|
33
|
+
size_t input_used;
|
|
34
|
+
int16_t* output;
|
|
35
|
+
int16_t max_abs_output_value;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
// Applies a window to the samples coming in, stepping forward at the given
|
|
39
|
+
// rate.
|
|
40
|
+
int WindowProcessSamples(struct WindowState* state, const int16_t* samples,
|
|
41
|
+
size_t num_samples, size_t* num_samples_read);
|
|
42
|
+
|
|
43
|
+
void WindowReset(struct WindowState* state);
|
|
44
|
+
|
|
45
|
+
#ifdef __cplusplus
|
|
46
|
+
} // extern "C"
|
|
47
|
+
#endif
|
|
48
|
+
|
|
49
|
+
#endif // TENSORFLOW_LITE_EXPERIMENTAL_MICROFRONTEND_LIB_WINDOW_H_
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
|
|
2
|
+
|
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
See the License for the specific language governing permissions and
|
|
13
|
+
limitations under the License.
|
|
14
|
+
==============================================================================*/
|
|
15
|
+
#include "microfrontend/lib/window_util.h"
|
|
16
|
+
|
|
17
|
+
#include <math.h>
|
|
18
|
+
#include <stdio.h>
|
|
19
|
+
#include <stdlib.h>
|
|
20
|
+
#include <string.h>
|
|
21
|
+
|
|
22
|
+
// Some platforms don't have M_PI
|
|
23
|
+
#ifndef M_PI
|
|
24
|
+
#define M_PI 3.14159265358979323846
|
|
25
|
+
#endif
|
|
26
|
+
|
|
27
|
+
void WindowFillConfigWithDefaults(struct WindowConfig* config) {
|
|
28
|
+
config->size_ms = 25;
|
|
29
|
+
config->step_size_ms = 10;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
int WindowPopulateState(const struct WindowConfig* config,
|
|
33
|
+
struct WindowState* state, int sample_rate) {
|
|
34
|
+
state->size = config->size_ms * sample_rate / 1000;
|
|
35
|
+
state->step = config->step_size_ms * sample_rate / 1000;
|
|
36
|
+
|
|
37
|
+
state->coefficients = malloc(state->size * sizeof(*state->coefficients));
|
|
38
|
+
if (state->coefficients == NULL) {
|
|
39
|
+
fprintf(stderr, "Failed to allocate window coefficients\n");
|
|
40
|
+
return 0;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Populate the window values.
|
|
44
|
+
const float arg = M_PI * 2.0 / ((float)state->size);
|
|
45
|
+
int i;
|
|
46
|
+
for (i = 0; i < state->size; ++i) {
|
|
47
|
+
float float_value = 0.5 - (0.5 * cos(arg * (i + 0.5)));
|
|
48
|
+
// Scale it to fixed point and round it.
|
|
49
|
+
state->coefficients[i] =
|
|
50
|
+
floor(float_value * (1 << kFrontendWindowBits) + 0.5);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
state->input_used = 0;
|
|
54
|
+
state->input = malloc(state->size * sizeof(*state->input));
|
|
55
|
+
if (state->input == NULL) {
|
|
56
|
+
fprintf(stderr, "Failed to allocate window input\n");
|
|
57
|
+
return 0;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
state->output = malloc(state->size * sizeof(*state->output));
|
|
61
|
+
if (state->output == NULL) {
|
|
62
|
+
fprintf(stderr, "Failed to allocate window output\n");
|
|
63
|
+
return 0;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return 1;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
void WindowFreeStateContents(struct WindowState* state) {
|
|
70
|
+
free(state->coefficients);
|
|
71
|
+
free(state->input);
|
|
72
|
+
free(state->output);
|
|
73
|
+
}
|