mirror of
https://github.com/Fishwaldo/bl_mcu_sdk.git
synced 2025-07-23 05:08:45 +00:00
[feat][nmsis] add nmsis component and nn,dsp demo
This commit is contained in:
parent
b2aada479b
commit
5d1126d0f0
989 changed files with 286224 additions and 0 deletions
4
examples/dsp/DistanceFunctions_part1/CMakeLists.txt
Normal file
4
examples/dsp/DistanceFunctions_part1/CMakeLists.txt
Normal file
|
@ -0,0 +1,4 @@
|
|||
set(TARGET_REQUIRED_PRIVATE_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/..)
|
||||
set(TARGET_REQUIRED_LIBS nmsis)
|
||||
set(mains main.c)
|
||||
generate_bin()
|
27
examples/dsp/DistanceFunctions_part1/array.h
Normal file
27
examples/dsp/DistanceFunctions_part1/array.h
Normal file
|
@ -0,0 +1,27 @@
|
|||
// Array for DistanceFunctions part1
|
||||
float32_t f32_braycurtis_a_array[10] = {10,2,10,7,1,3,6,10,10,2};
|
||||
float32_t f32_braycurtis_b_array[10] = {10,10,5,9,2,5,10,8,10,7};
|
||||
|
||||
float32_t f32_canberra_a_array[10] = {0.0318328463774207,0.276922984960890,0.0461713906311539,0.0971317812358475,0.823457828327293,0.694828622975817,0.317099480060861,0.950222048838355,0.0344460805029088,0.438744359656398};
|
||||
float32_t f32_canberra_b_array[10] = {0.0357116785741896,0.849129305868777,0.933993247757551,0.678735154857774,0.757740130578333,0.743132468124916,0.392227019534168,0.655477890177557,0.171186687811562,0.706046088019609};
|
||||
|
||||
float32_t f32_chebyshev_a_array[10] = {0.0318328463774207,0.276922984960890,0.0461713906311539,0.0971317812358475,0.823457828327293,0.694828622975817,0.317099480060861,0.950222048838355,0.0344460805029088,0.438744359656398};
|
||||
float32_t f32_chebyshev_b_array[10] = {0.0357116785741896,0.849129305868777,0.933993247757551,0.678735154857774,0.757740130578333,0.743132468124916,0.392227019534168,0.655477890177557,0.171186687811562,0.706046088019609};
|
||||
|
||||
float32_t f32_cityblock_a_array[10] = {0.0318328463774207,0.276922984960890,0.0461713906311539,0.0971317812358475,0.823457828327293,0.694828622975817,0.317099480060861,0.950222048838355,0.0344460805029088,0.438744359656398};
|
||||
float32_t f32_cityblock_b_array[10] = {0.0357116785741896,0.849129305868777,0.933993247757551,0.678735154857774,0.757740130578333,0.743132468124916,0.392227019534168,0.655477890177557,0.171186687811562,0.706046088019609};
|
||||
|
||||
float32_t f32_correlation_a_array[10] = {0.0318328463774207,0.276922984960890,0.0461713906311539,0.0971317812358475,0.823457828327293,0.694828622975817,0.317099480060861,0.950222048838355,0.0344460805029088,0.438744359656398};
|
||||
float32_t f32_correlation_b_array[10] = {0.0357116785741896,0.849129305868777,0.933993247757551,0.678735154857774,0.757740130578333,0.743132468124916,0.392227019534168,0.655477890177557,0.171186687811562,0.706046088019609};
|
||||
|
||||
float32_t f32_cosine_a_array[10] = {0.0318328463774207,0.276922984960890,0.0461713906311539,0.0971317812358475,0.823457828327293,0.694828622975817,0.317099480060861,0.950222048838355,0.0344460805029088,0.438744359656398};
|
||||
float32_t f32_cosine_b_array[10] = {0.0357116785741896,0.849129305868777,0.933993247757551,0.678735154857774,0.757740130578333,0.743132468124916,0.392227019534168,0.655477890177557,0.171186687811562,0.706046088019609};
|
||||
|
||||
float32_t f32_euclidean_a_array[10] = {0.0318328463774207,0.276922984960890,0.0461713906311539,0.0971317812358475,0.823457828327293,0.694828622975817,0.317099480060861,0.950222048838355,0.0344460805029088,0.438744359656398};
|
||||
float32_t f32_euclidean_b_array[10] = {0.0357116785741896,0.849129305868777,0.933993247757551,0.678735154857774,0.757740130578333,0.743132468124916,0.392227019534168,0.655477890177557,0.171186687811562,0.706046088019609};
|
||||
|
||||
float32_t f32_jensenshannon_a_array[10] = {0.0318328463774207,0.276922984960890,0.0461713906311539,0.0971317812358475,0.823457828327293,0.694828622975817,0.317099480060861,0.950222048838355,0.0344460805029088,0.438744359656398};
|
||||
float32_t f32_jensenshannon_b_array[10] = {0.0357116785741896,0.849129305868777,0.933993247757551,0.678735154857774,0.757740130578333,0.743132468124916,0.392227019534168,0.655477890177557,0.171186687811562,0.706046088019609};
|
||||
|
||||
float32_t f32_minkowski_a_array[10] = {0.0318328463774207,0.276922984960890,0.0461713906311539,0.0971317812358475,0.823457828327293,0.694828622975817,0.317099480060861,0.950222048838355,0.0344460805029088,0.438744359656398};
|
||||
float32_t f32_minkowski_b_array[10] = {0.0357116785741896,0.849129305868777,0.933993247757551,0.678735154857774,0.757740130578333,0.743132468124916,0.392227019534168,0.655477890177557,0.171186687811562,0.706046088019609};
|
129
examples/dsp/DistanceFunctions_part1/main.c
Normal file
129
examples/dsp/DistanceFunctions_part1/main.c
Normal file
|
@ -0,0 +1,129 @@
|
|||
#include "riscv_math.h"
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include "array.h"
|
||||
#include "../common.h"
|
||||
|
||||
#include "../HelperFunctions/math_helper.c"
|
||||
#include "../HelperFunctions/ref_helper.c"
|
||||
|
||||
#include <stdio.h>
|
||||
#define DELTAF32 (0.05f)
|
||||
#define DELTAQ31 (63)
|
||||
#define DELTAQ15 (1)
|
||||
#define DELTAQ7 (1)
|
||||
|
||||
int test_flag_error = 0;
|
||||
|
||||
int main()
|
||||
{
|
||||
int i;
|
||||
float32_t f32_output, f32_output_ref = 0.211678832116788;
|
||||
BENCH_INIT;
|
||||
//1-2( sun(min(Sai,Sbi)) / (sum(Sai)+sum(Sbi)) )
|
||||
BENCH_START(riscv_braycurtis_distance_f32);
|
||||
f32_output = riscv_braycurtis_distance_f32(f32_braycurtis_a_array, f32_braycurtis_b_array, 10);
|
||||
BENCH_END(riscv_braycurtis_distance_f32);
|
||||
if (fabs(f32_output - f32_output_ref) > DELTAF32) {
|
||||
BENCH_ERROR(riscv_braycurtis_distance_f32);
|
||||
printf("expect: %f, actual: %f\n", f32_output_ref, f32_output);
|
||||
test_flag_error = 1;
|
||||
}
|
||||
BENCH_STATUS(riscv_braycurtis_distance_f32);
|
||||
|
||||
f32_output_ref = 3.48408251169646;
|
||||
//sum(|pi-qi|/(|pi|+|qi|))
|
||||
BENCH_START(riscv_canberra_distance_f32);
|
||||
f32_output = riscv_canberra_distance_f32(f32_canberra_a_array, f32_canberra_b_array, 10);
|
||||
BENCH_END(riscv_canberra_distance_f32);
|
||||
if (fabs(f32_output - f32_output_ref) > DELTAF32) {
|
||||
BENCH_ERROR(riscv_canberra_distance_f32);
|
||||
printf("expect: %f, actual: %f\n", f32_output_ref, f32_output);
|
||||
test_flag_error = 1;
|
||||
}
|
||||
BENCH_STATUS(riscv_canberra_distance_f32);
|
||||
|
||||
f32_output_ref = 0.887821857126397;
|
||||
//x12=max(|x1i-x2i|)
|
||||
BENCH_START(riscv_chebyshev_distance_f32);
|
||||
f32_output = riscv_chebyshev_distance_f32(f32_chebyshev_a_array, f32_chebyshev_b_array, 10);
|
||||
BENCH_END(riscv_chebyshev_distance_f32);
|
||||
if (fabs(f32_output - f32_output_ref) > DELTAF32) {
|
||||
BENCH_ERROR(riscv_chebyshev_distance_f32);
|
||||
printf("expect: %f, actual: %f\n", f32_output_ref, f32_output);
|
||||
test_flag_error = 1;
|
||||
}
|
||||
BENCH_STATUS(riscv_chebyshev_distance_f32);
|
||||
|
||||
f32_output_ref = 2.93344596055701;
|
||||
//also known as Manhattan Distance
|
||||
//x12=sum(|x1i-x2i|)
|
||||
BENCH_START(riscv_cityblock_distance_f32);
|
||||
f32_output = riscv_cityblock_distance_f32(f32_cityblock_a_array, f32_cityblock_b_array, 10);
|
||||
BENCH_END(riscv_cityblock_distance_f32);
|
||||
if (fabs(f32_output - f32_output_ref) > DELTAF32) {
|
||||
BENCH_ERROR(riscv_cityblock_distance_f32);
|
||||
printf("expect: %f, actual: %f\n", f32_output_ref, f32_output);
|
||||
test_flag_error = 1;
|
||||
}
|
||||
BENCH_STATUS(riscv_cityblock_distance_f32);
|
||||
|
||||
f32_output_ref = 0.213739159949741;
|
||||
//cos(sita)=a.b/|a||b|=sum(x1i*x2i)/ ( sum(abs(x1i)) * sum(abs(x1i)) )
|
||||
//actually it outputs 1-cos(sita)
|
||||
BENCH_START(riscv_cosine_distance_f32);
|
||||
f32_output = riscv_cosine_distance_f32(f32_cosine_a_array, f32_cosine_b_array, 10);
|
||||
BENCH_END(riscv_cosine_distance_f32);
|
||||
if (fabs(f32_output - f32_output_ref) > DELTAF32) {
|
||||
BENCH_ERROR(riscv_cosine_distance_f32);
|
||||
printf("expect: %f, actual: %f\n", f32_output_ref, f32_output);
|
||||
test_flag_error = 1;
|
||||
}
|
||||
BENCH_STATUS(riscv_cosine_distance_f32);
|
||||
|
||||
f32_output_ref = 1.28189071468851;
|
||||
//sqrt(sum(square(x1i-x2i)))
|
||||
BENCH_START(riscv_euclidean_distance_f32);
|
||||
f32_output = riscv_euclidean_distance_f32(f32_euclidean_a_array, f32_euclidean_b_array, 10);
|
||||
BENCH_END(riscv_euclidean_distance_f32);
|
||||
if (fabs(f32_output - f32_output_ref) > DELTAF32) {
|
||||
BENCH_ERROR(riscv_euclidean_distance_f32);
|
||||
printf("expect: %f, actual: %f\n", f32_output_ref, f32_output);
|
||||
test_flag_error = 1;
|
||||
}
|
||||
BENCH_STATUS(riscv_euclidean_distance_f32);
|
||||
|
||||
|
||||
f32_output_ref = 0.733638397638707;
|
||||
//sqrt(sum(square(x1i-x2i)))
|
||||
BENCH_START(riscv_jensenshannon_distance_f32);
|
||||
f32_output = riscv_jensenshannon_distance_f32(f32_jensenshannon_a_array, f32_jensenshannon_b_array, 10);
|
||||
BENCH_END(riscv_jensenshannon_distance_f32);
|
||||
if (fabs(f32_output - f32_output_ref) > DELTAF32) {
|
||||
BENCH_ERROR(riscv_jensenshannon_distance_f32);
|
||||
printf("expect: %f, actual: %f\n", f32_output_ref, f32_output);
|
||||
test_flag_error = 1;
|
||||
}
|
||||
BENCH_STATUS(riscv_jensenshannon_distance_f32);
|
||||
|
||||
f32_output_ref = 1.04218658878953;
|
||||
//(sum(|xi-yi|p))1/p
|
||||
//p and 1/p stands for power p and power 1/p
|
||||
BENCH_START(riscv_minkowski_distance_f32);
|
||||
f32_output = riscv_minkowski_distance_f32(f32_minkowski_a_array, f32_minkowski_b_array, 3, 10);
|
||||
BENCH_END(riscv_minkowski_distance_f32);
|
||||
if (fabs(f32_output - f32_output_ref) > DELTAF32) {
|
||||
BENCH_ERROR(riscv_minkowski_distance_f32);
|
||||
printf("expect: %f, actual: %f\n", f32_output_ref, f32_output);
|
||||
test_flag_error = 1;
|
||||
}
|
||||
BENCH_STATUS(riscv_minkowski_distance_f32);
|
||||
BENCH_FINISH;
|
||||
if (test_flag_error) {
|
||||
printf("test error apprears, please recheck.\n");
|
||||
return 1;
|
||||
} else {
|
||||
printf("all test are passed. Well done!\n");
|
||||
}
|
||||
return 0;
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue