Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
43 changes: 29 additions & 14 deletions neuralspot/ns-nnsp/src/basic_mve.c
Original file line number Diff line number Diff line change
@@ -1,12 +1,37 @@
/*
Basic MVE Function for Helium architecture
*/
#include <string.h>
#include <stdint.h>
#include "ambiq_nnsp_debug.h"
// #include "third_party/ns_cmsis_nn/Include/arm_nnsupportfunctions.h"
#if ARM_OPTIMIZED == 3
#include "basic_mve.h"
#include <arm_mve.h>
#include "ns_ambiqsuite_harness.h"
/**
* @brief memcpy optimized for MVE
* @param[in, out] dst Destination pointer
* @param[in] src Source pointer.
* @param[in] block_size Number of bytes to copy.
*
*/
__STATIC_FORCEINLINE void
arm_memcpy_int8(int8_t *__RESTRICT dst, const int8_t *__RESTRICT src, uint32_t block_size) {
#if defined(ARM_MATH_MVEI)
__asm volatile(" wlstp.8 lr, %[cnt], 1f \n"
"2: \n"
" vldrb.8 q0, [%[in]], #16 \n"
" vstrb.8 q0, [%[out]], #16 \n"
" letp lr, 2b \n"
"1: \n"
: [in] "+r"(src), [out] "+r"(dst)
: [cnt] "r"(block_size)
: "q0", "memory", "r14");
#else
memcpy(dst, src, block_size);
#endif
}
void vec16_vec16_mul_32b(
int32_t *y,
int16_t *x1,
Expand Down Expand Up @@ -40,20 +65,10 @@ void move_data_16b(
int16_t *dst,
int len)
{
int i;
int num = len >> 3;
int rem = len & 0x7;
int16x8_t *pt_src = (int16x8_t*) src;
int16x8_t *pt_dst = (int16x8_t*) dst;

for (i = 0; i < num; i++)
*pt_dst++ = *pt_src++;

if (rem) {
mve_pred16_t mask = vctp16q((uint32_t) rem);
int16x8_t tmp = vldrhq_z_s16((int16_t*) pt_src, mask);
vst1q_p_s16((int16_t*) pt_dst, tmp, mask);
}
arm_memcpy_int8(
(int8_t*) dst,
(int8_t*) src,
(len << 1));
}

void set_zero_32b(int32_t *dst, int len)
Expand Down
4 changes: 3 additions & 1 deletion neuralspot/ns-nnsp/src/feature_module.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#endif
#define LOG10_2POW_N15_Q15 (-147963)
int32_t GLOBAL_PSPEC[512];
extern const int16_t mcombfltrBank_coeff_nfilt69_fftsize512[];
extern const int16_t mfltrBank_coeff_nfilt72_fftsize512[];
extern const int16_t mfltrBank_coeff_nfilt40_fftsize512[];
extern const int16_t mfltrBank_coeff_nfilt22_fftsize256[];
Expand All @@ -30,7 +31,6 @@ void FeatureClass_construct(
int16_t fftsize,
const int16_t *pt_stft_win_coeff)
{

stftModule_construct(&ps->state_stftModule, winsize, hopsize, fftsize, pt_stft_win_coeff);
ps->pt_norm_mean = norm_mean;
ps->pt_norm_stdR = norm_stdR;
Expand All @@ -40,6 +40,8 @@ void FeatureClass_construct(
ps->num_mfltrBank = num_mfltrBank;
if ((ps->num_mfltrBank == 72) && (fftsize == 512))
ps->p_melBanks = mfltrBank_coeff_nfilt72_fftsize512;
else if ((ps->num_mfltrBank == 69) && (fftsize == 512))
ps->p_melBanks = mcombfltrBank_coeff_nfilt69_fftsize512;
else if ((ps->num_mfltrBank == 40) && (fftsize == 512))
ps->p_melBanks = mfltrBank_coeff_nfilt40_fftsize512;
else if ((ps->num_mfltrBank == 22) && (fftsize == 256))
Expand Down
73 changes: 73 additions & 0 deletions neuralspot/ns-nnsp/src/melcomb_coeff_nfilt69_fftsize512.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#include <stdint.h>
const int16_t melcomb_coeff_nfilt69 = 69;
const int16_t mcombfltrBank_coeff_nfilt69_fftsize512[] = {
0x0000, 0x0000, 0x7FFF, // mel_0: start_bin, end_bin, values
0x0001, 0x0001, 0x7FFF, // mel_1: start_bin, end_bin, values
0x0002, 0x0002, 0x7FFF, // mel_2: start_bin, end_bin, values
0x0003, 0x0003, 0x7FFF, // mel_3: start_bin, end_bin, values
0x0004, 0x0004, 0x7FFF, // mel_4: start_bin, end_bin, values
0x0005, 0x0005, 0x7FFF, // mel_5: start_bin, end_bin, values
0x0006, 0x0006, 0x7FFF, // mel_6: start_bin, end_bin, values
0x0007, 0x0007, 0x7FFF, // mel_7: start_bin, end_bin, values
0x0008, 0x0008, 0x7FFF, // mel_8: start_bin, end_bin, values
0x0009, 0x0009, 0x7FFF, // mel_9: start_bin, end_bin, values
0x000A, 0x000A, 0x7FFF, // mel_10: start_bin, end_bin, values
0x000B, 0x000B, 0x7FFF, // mel_11: start_bin, end_bin, values
0x000C, 0x000C, 0x7FFF, // mel_12: start_bin, end_bin, values
0x000D, 0x000D, 0x7FFF, // mel_13: start_bin, end_bin, values
0x000E, 0x000E, 0x7FFF, // mel_14: start_bin, end_bin, values
0x000F, 0x000F, 0x7FFF, // mel_15: start_bin, end_bin, values
0x0010, 0x0010, 0x7FFF, // mel_16: start_bin, end_bin, values
0x0011, 0x0011, 0x7FFF, // mel_17: start_bin, end_bin, values
0x0012, 0x0012, 0x7FFF, // mel_18: start_bin, end_bin, values
0x0013, 0x0013, 0x7FFF, // mel_19: start_bin, end_bin, values
0x0014, 0x0014, 0x7FFF, // mel_20: start_bin, end_bin, values
0x0015, 0x0015, 0x7FFF, // mel_21: start_bin, end_bin, values
0x0016, 0x0016, 0x7FFF, // mel_22: start_bin, end_bin, values
0x0017, 0x0017, 0x7FFF, // mel_23: start_bin, end_bin, values
0x0018, 0x0018, 0x7FFF, // mel_24: start_bin, end_bin, values
0x0019, 0x0019, 0x7FFF, // mel_25: start_bin, end_bin, values
0x001A, 0x001A, 0x7FFF, // mel_26: start_bin, end_bin, values
0x001B, 0x001B, 0x7FFF, // mel_27: start_bin, end_bin, values
0x001C, 0x001C, 0x7FFF, // mel_28: start_bin, end_bin, values
0x001D, 0x001D, 0x7FFF, // mel_29: start_bin, end_bin, values
0x001E, 0x001E, 0x7FFF, // mel_30: start_bin, end_bin, values
0x001F, 0x001F, 0x7FFF, // mel_31: start_bin, end_bin, values
0x0020, 0x0020, 0x7FFF, // mel_32: start_bin, end_bin, values
0x0021, 0x0021, 0x7FFF, // mel_33: start_bin, end_bin, values
0x0022, 0x0022, 0x7FFF, // mel_34: start_bin, end_bin, values
0x0023, 0x0023, 0x7FFF, // mel_35: start_bin, end_bin, values
0x0024, 0x0024, 0x7FFF, // mel_36: start_bin, end_bin, values
0x0025, 0x0025, 0x7FFF, // mel_37: start_bin, end_bin, values
0x0026, 0x0026, 0x7FFF, // mel_38: start_bin, end_bin, values
0x0027, 0x0027, 0x7FFF, // mel_39: start_bin, end_bin, values
0x0028, 0x0028, 0x7FFF, // mel_40: start_bin, end_bin, values
0x0029, 0x0029, 0x7FFF, // mel_41: start_bin, end_bin, values
0x002A, 0x002A, 0x7FFF, // mel_42: start_bin, end_bin, values
0x002B, 0x002B, 0x7FFF, // mel_43: start_bin, end_bin, values
0x002C, 0x002C, 0x7FFF, // mel_44: start_bin, end_bin, values
0x002D, 0x002D, 0x7FFF, // mel_45: start_bin, end_bin, values
0x002E, 0x002E, 0x7FFF, // mel_46: start_bin, end_bin, values
0x002F, 0x002F, 0x7FFF, // mel_47: start_bin, end_bin, values
0x0030, 0x0030, 0x7FFF, // mel_48: start_bin, end_bin, values
0x0031, 0x0031, 0x7FFF, // mel_49: start_bin, end_bin, values
0x0032, 0x0032, 0x7FFF, // mel_50: start_bin, end_bin, values
0x0033, 0x0033, 0x7FFF, // mel_51: start_bin, end_bin, values
0x002F, 0x0038, 0x0273, 0x20AC, 0x3EE6, 0x5D20, 0x7B5A, 0x7FFF, 0x647E, 0x48FC, 0x2D7A, 0x11F8, // mel_52: start_bin, end_bin, values
0x0034, 0x003E, 0x0BDC, 0x26A2, 0x4168, 0x5C2E, 0x76F4, 0x7FFF, 0x67A2, 0x4F45, 0x36E7, 0x1E8A, 0x062D, // mel_53: start_bin, end_bin, values
0x0039, 0x0044, 0x084C, 0x203D, 0x382E, 0x501E, 0x680F, 0x7FFF, 0x75CE, 0x6004, 0x4A3B, 0x3472, 0x1EA8, 0x08DF, // mel_54: start_bin, end_bin, values
0x003F, 0x004B, 0x10A0, 0x26E7, 0x3D2D, 0x5373, 0x69B9, 0x7FFF, 0x7D0E, 0x68C9, 0x5483, 0x403E, 0x2BF9, 0x17B3, 0x036E, // mel_55: start_bin, end_bin, values
0x0045, 0x0052, 0x0B82, 0x1EEC, 0x3256, 0x45C1, 0x592B, 0x6C95, 0x7FFF, 0x749C, 0x62F0, 0x5145, 0x3F9A, 0x2DEF, 0x1C44, 0x0A98, // mel_56: start_bin, end_bin, values
0x004C, 0x005A, 0x0F0C, 0x2129, 0x3346, 0x4563, 0x5781, 0x699E, 0x7BBB, 0x7FFF, 0x6F83, 0x5F07, 0x4E8B, 0x3E0F, 0x2D93, 0x1D17, 0x0C9B, // mel_57: start_bin, end_bin, values
0x0053, 0x0063, 0x0671, 0x168A, 0x26A3, 0x36BD, 0x46D6, 0x56EF, 0x6709, 0x7722, 0x7FFF, 0x7159, 0x62B2, 0x540C, 0x4565, 0x36BF, 0x2818, 0x1972, 0x0ACB, // mel_58: start_bin, end_bin, values
0x005B, 0x006D, 0x0372, 0x121A, 0x20C3, 0x2F6B, 0x3E14, 0x4CBC, 0x5B64, 0x6A0D, 0x78B5, 0x7FFF, 0x72A9, 0x6552, 0x57FB, 0x4AA4, 0x3D4E, 0x2FF7, 0x22A0, 0x1549, 0x07F2, // mel_59: start_bin, end_bin, values
0x0064, 0x0078, 0x038C, 0x1108, 0x1E85, 0x2C01, 0x397E, 0x46FA, 0x5477, 0x61F3, 0x6F70, 0x7CEC, 0x7FFF, 0x73BA, 0x6774, 0x5B2E, 0x4EE8, 0x42A2, 0x365C, 0x2A16, 0x1DD0, 0x118B, 0x0545, // mel_60: start_bin, end_bin, values
0x006E, 0x0084, 0x04F8, 0x1146, 0x1D93, 0x29E1, 0x362E, 0x427C, 0x4EC9, 0x5B17, 0x6764, 0x73B2, 0x7FFF, 0x7EE5, 0x73B2, 0x6880, 0x5D4E, 0x521C, 0x46EA, 0x3BB7, 0x3085, 0x2553, 0x1A21, 0x0EEF, 0x03BC, // mel_61: start_bin, end_bin, values
0x0079, 0x0091, 0x064F, 0x115F, 0x1C6F, 0x277F, 0x328F, 0x3D9F, 0x48AF, 0x53BF, 0x5ECF, 0x69DF, 0x74EF, 0x7FFF, 0x7CFC, 0x72EB, 0x68DA, 0x5EC9, 0x54B7, 0x4AA6, 0x4095, 0x3684, 0x2C72, 0x2261, 0x1850, 0x0E3F, 0x042D, // mel_62: start_bin, end_bin, values
0x0085, 0x009F, 0x06BB, 0x10D6, 0x1AF1, 0x250C, 0x2F27, 0x3942, 0x435D, 0x4D78, 0x5793, 0x61AE, 0x6BC9, 0x75E4, 0x7FFF, 0x7ED0, 0x759E, 0x6C6C, 0x6339, 0x5A07, 0x50D5, 0x47A2, 0x3E70, 0x353E, 0x2C0B, 0x22D9, 0x19A7, 0x1074, 0x0742, // mel_63: start_bin, end_bin, values
0x0092, 0x00AF, 0x0547, 0x0E4D, 0x1754, 0x205A, 0x2961, 0x3267, 0x3B6E, 0x4474, 0x4D7A, 0x5681, 0x5F87, 0x688E, 0x7194, 0x7A9B, 0x7FFF, 0x77C9, 0x6F92, 0x675C, 0x5F25, 0x56EF, 0x4EB8, 0x4681, 0x3E4B, 0x3614, 0x2DDE, 0x25A7, 0x1D70, 0x153A, 0x0D03, 0x04CD, // mel_64: start_bin, end_bin, values
0x00A0, 0x00C0, 0x01BF, 0x0A0D, 0x125A, 0x1AA7, 0x22F5, 0x2B42, 0x3390, 0x3BDD, 0x442B, 0x4C78, 0x54C5, 0x5D13, 0x6560, 0x6DAE, 0x75FB, 0x7E49, 0x7FFF, 0x7871, 0x70E3, 0x6955, 0x61C7, 0x5A38, 0x52AA, 0x4B1C, 0x438E, 0x3BFF, 0x3471, 0x2CE3, 0x2555, 0x1DC6, 0x1638, 0x0EAA, 0x071C, // mel_65: start_bin, end_bin, values
0x00B0, 0x00D4, 0x0312, 0x0A78, 0x11DE, 0x1944, 0x20A9, 0x280F, 0x2F75, 0x36DB, 0x3E41, 0x45A6, 0x4D0C, 0x5472, 0x5BD8, 0x633D, 0x6AA3, 0x7209, 0x796F, 0x7FFF, 0x7944, 0x7289, 0x6BCD, 0x6512, 0x5E56, 0x579B, 0x50E0, 0x4A24, 0x4369, 0x3CAD, 0x35F2, 0x2F36, 0x287B, 0x21C0, 0x1B04, 0x1449, 0x0D8D, 0x06D2, 0x0016, // mel_66: start_bin, end_bin, values
0x00C1, 0x00E8, 0x0065, 0x071C, 0x0DD3, 0x148B, 0x1B42, 0x21F9, 0x28B1, 0x2F68, 0x361F, 0x3CD6, 0x438E, 0x4A45, 0x50FC, 0x57B4, 0x5E6B, 0x6522, 0x6BDA, 0x7291, 0x7948, 0x7FFF, 0x7A0F, 0x73F2, 0x6DD5, 0x67B9, 0x619C, 0x5B7F, 0x5563, 0x4F46, 0x4929, 0x430D, 0x3CF0, 0x36D4, 0x30B7, 0x2A9A, 0x247E, 0x1E61, 0x1844, 0x1228, 0x0C0B, 0x05EE, // mel_67: start_bin, end_bin, values
0x00D5, 0x00FF, 0x0608, 0x0C26, 0x1243, 0x1861, 0x1E7E, 0x249C, 0x2AB9, 0x30D7, 0x36F4, 0x3D12, 0x432F, 0x494D, 0x4F6B, 0x5588, 0x5BA6, 0x61C3, 0x67E1, 0x6DFE, 0x741C, 0x7A39, 0x7FFF, 0x7A6F, 0x74DE, 0x6F4D, 0x69BD, 0x642C, 0x5E9B, 0x590B, 0x537A, 0x4DE9, 0x4859, 0x42C8, 0x3D37, 0x37A6, 0x3216, 0x2C85, 0x26F4, 0x2164, 0x1BD3, 0x1642, 0x10B2, 0x0B21, 0x0590, // mel_68: start_bin, end_bin, values
};