From 2a190f35c03091d35c6c1adba556a18a6d53da67 Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Thu, 21 Jan 2021 02:09:20 +0200 Subject: [PATCH] Update ulab to 2.1.3 --- .../Nano 33 BLE Sense/03-Audio/audio_fft.py | 20 +++++------ .../Arduino/Portenta H7/37-Audio/audio_fft.py | 30 +++++++++++------ src/Makefile | 2 ++ src/micropython | 2 +- src/omv/common/ulab_config.h | 12 +++++++ src/omv/ports/nrf/omv_portconfig.mk | 33 ++++++++++++------- src/omv/ports/stm32/omv_portconfig.mk | 33 ++++++++++++------- 7 files changed, 87 insertions(+), 45 deletions(-) create mode 100644 src/omv/common/ulab_config.h diff --git a/scripts/examples/Arduino/Nano 33 BLE Sense/03-Audio/audio_fft.py b/scripts/examples/Arduino/Nano 33 BLE Sense/03-Audio/audio_fft.py index eecba238a..bec77d620 100644 --- a/scripts/examples/Arduino/Nano 33 BLE Sense/03-Audio/audio_fft.py +++ b/scripts/examples/Arduino/Nano 33 BLE Sense/03-Audio/audio_fft.py @@ -1,5 +1,6 @@ -import image, audio, time, array, math, ulab as np -from ulab import extras, numerical +import image, audio, time +from ulab import numpy as np +from ulab import scipy as sp CHANNELS = 1 SIZE = 256//(2*CHANNELS) @@ -19,7 +20,7 @@ audio.start_streaming(audio_callback) def draw_fft(img, fft_buf): fft_buf = (fft_buf / max(fft_buf)) * SIZE - fft_buf = np.vector.log10(fft_buf + 1) * 20 + fft_buf = np.log10(fft_buf + 1) * 20 color = (0xFF, 0x0F, 0x00) for i in range(0, SIZE): img.draw_line(i, SIZE, i, SIZE-int(fft_buf[i]), color, 1) @@ -33,20 +34,19 @@ def draw_audio_bar(img, level, offset): while (True): if (raw_buf != None): - pcm_buf = np.array(array.array('h', raw_buf)) + pcm_buf = np.frombuffer(raw_buf, dtype=np.int16) raw_buf = None if CHANNELS == 1: - fft_buf = extras.spectrogram(pcm_buf) - l_lvl = int((numerical.mean(abs(pcm_buf)) / 32768)*100) + fft_buf = sp.signal.spectrogram(pcm_buf) + l_lvl = int((np.mean(abs(pcm_buf[1::2])) / 32768)*100) else: - fft_buf = extras.spectrogram(pcm_buf[0::2]) - l_lvl = int((numerical.mean(abs(pcm_buf[1::2])) / 32768)*100) - r_lvl = int((numerical.mean(abs(pcm_buf[0::2])) / 32768)*100) + fft_buf = sp.signal.spectrogram(pcm_buf[0::2]) + l_lvl = int((np.mean(abs(pcm_buf[1::2])) / 32768)*100) + r_lvl = int((np.mean(abs(pcm_buf[0::2])) / 32768)*100) fb.clear() draw_fft(fb, fft_buf) - draw_audio_bar(fb, l_lvl, 0) if CHANNELS == 2: draw_audio_bar(fb, r_lvl, 25) diff --git a/scripts/examples/Arduino/Portenta H7/37-Audio/audio_fft.py b/scripts/examples/Arduino/Portenta H7/37-Audio/audio_fft.py index 590811bd4..0943219e2 100644 --- a/scripts/examples/Arduino/Portenta H7/37-Audio/audio_fft.py +++ b/scripts/examples/Arduino/Portenta H7/37-Audio/audio_fft.py @@ -1,10 +1,13 @@ -import image, audio, time, array, math, ulab as np -from ulab import extras, numerical +import image, audio, time +from ulab import numpy as np +from ulab import scipy as sp + +CHANNELS = 2 +SIZE = 512//(2*CHANNELS) -SIZE = 512//4 raw_buf = None fb = image.Image(SIZE+50, SIZE, image.RGB565, copy_to_fb=True) -audio.init(channels=2, frequency=16000, gain=24, highpass=0.9883) +audio.init(channels=CHANNELS, frequency=16000, gain_db=24, highpass=0.9883) def audio_callback(buf): # NOTE: do Not call any function that allocates memory. @@ -17,7 +20,7 @@ audio.start_streaming(audio_callback) def draw_fft(img, fft_buf): fft_buf = (fft_buf / max(fft_buf)) * SIZE - fft_buf = np.vector.log10(fft_buf + 1) * 20 + fft_buf = np.log10(fft_buf + 1) * 20 color = (0xFF, 0x0F, 0x00) for i in range(0, SIZE): img.draw_line(i, SIZE, i, SIZE-int(fft_buf[i]), color, 1) @@ -31,15 +34,22 @@ def draw_audio_bar(img, level, offset): while (True): if (raw_buf != None): - pcm_buf = pcm_buf = np.array(array.array('h', raw_buf)) + pcm_buf = np.frombuffer(raw_buf, dtype=np.int16) raw_buf = None - fft_buf = extras.spectrogram(pcm_buf[0::2]) - l_lvl = int((numerical.mean(abs(pcm_buf[1::2])) / 32768)*100) - r_lvl = int((numerical.mean(abs(pcm_buf[0::2])) / 32768)*100) + + if CHANNELS == 1: + fft_buf = sp.signal.spectrogram(pcm_buf) + l_lvl = int((np.mean(abs(pcm_buf[1::2])) / 32768)*100) + else: + fft_buf = sp.signal.spectrogram(pcm_buf[0::2]) + l_lvl = int((np.mean(abs(pcm_buf[1::2])) / 32768)*100) + r_lvl = int((np.mean(abs(pcm_buf[0::2])) / 32768)*100) + fb.clear() draw_fft(fb, fft_buf) draw_audio_bar(fb, l_lvl, 0) - draw_audio_bar(fb, r_lvl, 25) + if CHANNELS == 2: + draw_audio_bar(fb, r_lvl, 25) fb.flush() # Stop streaming diff --git a/src/Makefile b/src/Makefile index 03a225176..c52e623de 100755 --- a/src/Makefile +++ b/src/Makefile @@ -62,6 +62,7 @@ OMV_BOARD_CONFIG_DIR=$(TOP_DIR)/$(OMV_DIR)/boards/$(TARGET)/ MP_BOARD_CONFIG_DIR=$(TOP_DIR)/$(MICROPY_DIR)/ports/$(PORT)/boards/$(TARGET)/ MPY_LIB_DIR=$(TOP_DIR)/../scripts/libraries FROZEN_MANIFEST=$(OMV_BOARD_CONFIG_DIR)/manifest.py +OMV_COMMON_DIR=$(TOP_DIR)/$(OMV_DIR)/common # Debugging/Optimization ifeq ($(DEBUG), 1) @@ -117,6 +118,7 @@ endif ifeq ($(MICROPY_PY_ULAB), 1) MPY_CFLAGS += -DMICROPY_PY_ULAB=1 +MPY_CFLAGS += -DULAB_CONFIG_FILE="\"$(OMV_COMMON_DIR)/ulab_config.h\"" MICROPY_ARGS += MICROPY_PY_ULAB=1 endif diff --git a/src/micropython b/src/micropython index a12263ba2..696b1d15e 160000 --- a/src/micropython +++ b/src/micropython @@ -1 +1 @@ -Subproject commit a12263ba27bc9b63beb83d91bf55331af5f18ab1 +Subproject commit 696b1d15e2c18e8d2004576c10a4c26803b264c0 diff --git a/src/omv/common/ulab_config.h b/src/omv/common/ulab_config.h new file mode 100644 index 000000000..21f758a2f --- /dev/null +++ b/src/omv/common/ulab_config.h @@ -0,0 +1,12 @@ +/* + * This file is part of the OpenMV project. + * Copyright (c) 2013-2016 Kwabena W. Agyeman + * This work is licensed under the MIT license, see the file LICENSE for details. + * + * Ulab config file. + * + */ +#ifndef __ULAB_CONFIG_H__ +#define __ULAB_CONFIG_H__ +// Override ulab defaults here. +#endif //__ULAB_CONFIG_H__ diff --git a/src/omv/ports/nrf/omv_portconfig.mk b/src/omv/ports/nrf/omv_portconfig.mk index e24a4e587..ecd9477b2 100644 --- a/src/omv/ports/nrf/omv_portconfig.mk +++ b/src/omv/ports/nrf/omv_portconfig.mk @@ -296,18 +296,27 @@ FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/modules/,\ ifeq ($(MICROPY_PY_ULAB), 1) FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/extmod/ulab/,\ - code/fft.o \ - code/linalg.o \ - code/ndarray.o \ - code/numerical.o \ - code/poly.o \ - code/ulab.o \ - code/vectorise.o \ - code/create.o \ - code/approx.o \ - code/filter.o \ - code/compare.o \ - code/extras.o \ + code/scipy/optimize/optimize.o \ + code/scipy/signal/signal.o \ + code/scipy/special/special.o \ + code/ndarray_operators.o \ + code/ulab_tools.o \ + code/ndarray.o \ + code/numpy/approx/approx.o \ + code/numpy/compare/compare.o \ + code/ulab_create.o \ + code/numpy/fft/fft.o \ + code/numpy/fft/fft_tools.o \ + code/numpy/filter/filter.o \ + code/numpy/linalg/linalg.o \ + code/numpy/linalg/linalg_tools.o \ + code/numpy/numerical/numerical.o \ + code/numpy/poly/poly.o \ + code/numpy/vector/vector.o \ + code/user/user.o \ + code/numpy/numpy.o \ + code/scipy/scipy.o \ + code/ulab.o \ ) endif diff --git a/src/omv/ports/stm32/omv_portconfig.mk b/src/omv/ports/stm32/omv_portconfig.mk index 6623c481e..3542d34a2 100644 --- a/src/omv/ports/stm32/omv_portconfig.mk +++ b/src/omv/ports/stm32/omv_portconfig.mk @@ -376,18 +376,27 @@ FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/drivers/,\ ifeq ($(MICROPY_PY_ULAB), 1) FIRM_OBJ += $(addprefix $(BUILD)/$(MICROPY_DIR)/extmod/ulab/,\ - code/fft.o \ - code/linalg.o \ - code/ndarray.o \ - code/numerical.o \ - code/poly.o \ - code/ulab.o \ - code/vectorise.o \ - code/create.o \ - code/approx.o \ - code/filter.o \ - code/compare.o \ - code/extras.o \ + code/scipy/optimize/optimize.o \ + code/scipy/signal/signal.o \ + code/scipy/special/special.o \ + code/ndarray_operators.o \ + code/ulab_tools.o \ + code/ndarray.o \ + code/numpy/approx/approx.o \ + code/numpy/compare/compare.o \ + code/ulab_create.o \ + code/numpy/fft/fft.o \ + code/numpy/fft/fft_tools.o \ + code/numpy/filter/filter.o \ + code/numpy/linalg/linalg.o \ + code/numpy/linalg/linalg_tools.o \ + code/numpy/numerical/numerical.o \ + code/numpy/poly/poly.o \ + code/numpy/vector/vector.o \ + code/user/user.o \ + code/numpy/numpy.o \ + code/scipy/scipy.o \ + code/ulab.o \ ) endif