#include #include #include #include "src/vec_match.h" #define DATA_LEN 16 #define REF_LEN 10 static float reference[DATA_LEN] = { //0, 10, 20, 30, 40, 50, 40, 30, 20, 10, 0 0, 15.7, 0, 0, 0.1, 0.2, 0.1, 10, 24.242, 7, 0, 2, 0.2, 0.4, 0.5, 0 }; static float data[DATA_LEN] = { //0, 10, 20, 30, 40, 50, 50, 35, 15, 15, 0 0, 13, 16, 0, 0.1, 0.2, 10, 0, 24, 0, 0, 7, 12, 0.4, 0.5, 0 }; static float ref_p[REF_LEN]; //static float data_cprs[16] = { // 0, 15.7, 0, 0, 0.1, 0.2, 0.1, 10, 24.242, 0, 0, 2, 0.2, 0.4, 0.5, 0 //}; //static float data_packed[16]; int main(void) { /* for (int i = 0; i < 16; i++) { printf("%.1f, ", data_cprs[i]); } printf("\n"); int pklen = vec_pack(data_packed, 16, data_cprs, 16, 2); printf("compressed len = %d\n", pklen); for (int i = 0; i < pklen; i++) { printf("%.1f, ", data_packed[i]); } printf("\n"); pack_walker_t pw; pw_init(&pw, data_packed, pklen); for(int i=0; i<16; i++) { printf("Value at %d is %.1f\n", i, pw_get(&pw, i)); } int i = 8; printf("Value at %d is %.1f\n", i, pw_get(&pw, i)); i = 7; printf("Value at %d is %.1f\n", i, pw_get(&pw, i)); i = 1; printf("Value at %d is %.1f\n", i, pw_get(&pw, i)); i = 15; printf("Value at %d is %.1f\n", i, pw_get(&pw, i)); i = 11; printf("Value at %d is %.1f\n", i, pw_get(&pw, i)); i = 12; printf("Value at %d is %.1f\n", i, pw_get(&pw, i));*/ /* len = vec_unpack(data_cprs3, 16, data_cprs2, len); printf("unpacked len = %d\n", len); for (int i = 0; i < len; i++) { printf("%.1f, ", data_cprs3[i]); } printf("\n"); */ //return 0; vec_fuzzymatch_cfg_t cfg = { .length = DATA_LEN, .drift_x = 1, .offset_y = 1, .abs_threshold = 0.1 }; vec_hausdorff_cfg_t cfg_hdf = { .length = DATA_LEN, .max_drift_x = 10, .cost_x = 10, .cost_y = 4 }; // example printf("REF: "); for (int i = 0; i < DATA_LEN; i++) { printf("%5.1f, ", reference[i]); } printf("\n"); printf("MEAS: "); for (int i = 0; i < DATA_LEN; i++) { printf("%5.1f, ", data[i]); } printf("\n"); // --- PACK REFERENCE VECTOR --- float thr; int ref_pack_len = vec_pack_auto(ref_p, REF_LEN, reference, DATA_LEN, &thr); printf("Reference packed with zero threshold %.1f to %d items.\n", thr, ref_pack_len); printf("REF packed: "); for (int i = 0; i < ref_pack_len; i++) { printf("%5.1f, ", ref_p[i]); } printf("\n"); // error metric fields float env_e, abs_e; bool ok = vec_fuzzymatch(data, reference, &cfg, &env_e, &abs_e); printf("FUZZY: %s", ok ? "MATCH OK" : "MATCH FAILED"); printf("\n"); printf("Error rate: ENV %.2f, ABS %.2f\n", env_e, abs_e); ok = vec_fuzzymatch_packed(data, ref_p, ref_pack_len, &cfg, &env_e, &abs_e); printf("PACKED FUZZY: %s", ok ? "MATCH OK" : "MATCH FAILED"); printf("\n"); printf("Error rate: ENV %.2f, ABS %.2f\n", env_e, abs_e); // ---- HAUSDORFF ---- float hdif = vec_hausdorff(data, reference, &cfg_hdf); printf("HAUSDORFF dist: %.2f\n", hdif); float hdif_p = vec_hausdorff_packed(data, ref_p, ref_pack_len, &cfg_hdf); printf("HAUSDORFF dist packed: %.2f\n", hdif_p); }