tests: lib: cmsis_dsp: filtering: Update MISC Q15 tests for 1.9.0
This commit updates the filtering MISC Q15 test patterns and implementations for the CMSIS-DSP 1.9.0. Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
This commit is contained in:
parent
35a5daeee7
commit
53f148de84
2 changed files with 250 additions and 5 deletions
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Copyright (c) 2020 Stephanos Ioannidis <root@stephanos.io>
|
||||
* Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2021 Stephanos Ioannidis <root@stephanos.io>
|
||||
* Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
@ -13,8 +13,9 @@
|
|||
|
||||
#include "misc_q15.pat"
|
||||
|
||||
#define SNR_ERROR_THRESH ((float32_t)70)
|
||||
#define ABS_ERROR_THRESH_Q15 ((q15_t)10)
|
||||
#define SNR_ERROR_THRESH ((float32_t)70)
|
||||
#define ABS_ERROR_THRESH_Q15 ((q15_t)10)
|
||||
#define ABS_ERROR_THRESH_FAST_Q15 ((q15_t)20)
|
||||
|
||||
static void test_arm_correlate_q15(
|
||||
size_t in1_length, size_t in2_length, const q15_t *ref,
|
||||
|
@ -130,6 +131,188 @@ DEFINE_CONV_TEST(32, 17);
|
|||
DEFINE_CONV_TEST(32, 18);
|
||||
DEFINE_CONV_TEST(32, 33);
|
||||
|
||||
static void test_arm_conv_partial_q15(
|
||||
size_t first, size_t in1_length, size_t in2_length, const q15_t *ref,
|
||||
size_t ref_length)
|
||||
{
|
||||
q15_t *output;
|
||||
q15_t *temp;
|
||||
arm_status status;
|
||||
|
||||
/* Allocate output buffer */
|
||||
output = calloc(first + ref_length, sizeof(q15_t));
|
||||
temp = calloc(ref_length, sizeof(q15_t));
|
||||
|
||||
/* Run test function */
|
||||
status = arm_conv_partial_q15(
|
||||
in_partial1, in1_length, in_partial2, in2_length,
|
||||
output, first, ref_length);
|
||||
|
||||
zassert_equal(status, ARM_MATH_SUCCESS,
|
||||
ASSERT_MSG_INCORRECT_COMP_RESULT);
|
||||
|
||||
memcpy(temp, &output[first], ref_length * sizeof(q15_t));
|
||||
|
||||
/* Validate output */
|
||||
zassert_true(
|
||||
test_snr_error_q15(ref_length, ref, temp, SNR_ERROR_THRESH),
|
||||
ASSERT_MSG_SNR_LIMIT_EXCEED);
|
||||
|
||||
zassert_true(
|
||||
test_near_equal_q15(ref_length, ref, temp,
|
||||
ABS_ERROR_THRESH_Q15),
|
||||
ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
|
||||
|
||||
/* Free output buffer */
|
||||
free(output);
|
||||
free(temp);
|
||||
}
|
||||
|
||||
static void test_arm_conv_partial_fast_q15(
|
||||
size_t first, size_t in1_length, size_t in2_length, const q15_t *ref,
|
||||
size_t ref_length)
|
||||
{
|
||||
q15_t *output;
|
||||
q15_t *temp;
|
||||
arm_status status;
|
||||
|
||||
/* Allocate output buffer */
|
||||
output = calloc(first + ref_length, sizeof(q15_t));
|
||||
temp = calloc(ref_length, sizeof(q15_t));
|
||||
|
||||
/* Run test function */
|
||||
status = arm_conv_partial_fast_q15(
|
||||
in_partial1, in1_length, in_partial2, in2_length,
|
||||
output, first, ref_length);
|
||||
|
||||
zassert_equal(status, ARM_MATH_SUCCESS,
|
||||
ASSERT_MSG_INCORRECT_COMP_RESULT);
|
||||
|
||||
memcpy(temp, &output[first], ref_length * sizeof(q15_t));
|
||||
|
||||
/* Validate output */
|
||||
zassert_true(
|
||||
test_snr_error_q15(ref_length, ref, temp, SNR_ERROR_THRESH),
|
||||
ASSERT_MSG_SNR_LIMIT_EXCEED);
|
||||
|
||||
zassert_true(
|
||||
test_near_equal_q15(ref_length, ref, temp,
|
||||
ABS_ERROR_THRESH_FAST_Q15),
|
||||
ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
|
||||
|
||||
/* Free output buffer */
|
||||
free(output);
|
||||
free(temp);
|
||||
}
|
||||
|
||||
static void test_arm_conv_partial_opt_q15(
|
||||
size_t first, size_t in1_length, size_t in2_length, const q15_t *ref,
|
||||
size_t ref_length)
|
||||
{
|
||||
q15_t *output;
|
||||
q15_t *temp;
|
||||
q15_t *scratch1, *scratch2;
|
||||
arm_status status;
|
||||
|
||||
/* Allocate output buffer */
|
||||
output = calloc(first + ref_length, sizeof(q15_t));
|
||||
temp = calloc(ref_length, sizeof(q15_t));
|
||||
scratch1 = calloc(24, sizeof(q15_t));
|
||||
scratch2 = calloc(24, sizeof(q15_t));
|
||||
|
||||
/* Run test function */
|
||||
status = arm_conv_partial_opt_q15(
|
||||
in_partial1, in1_length, in_partial2, in2_length,
|
||||
output, first, ref_length,
|
||||
scratch1, scratch2);
|
||||
|
||||
zassert_equal(status, ARM_MATH_SUCCESS,
|
||||
ASSERT_MSG_INCORRECT_COMP_RESULT);
|
||||
|
||||
memcpy(temp, &output[first], ref_length * sizeof(q15_t));
|
||||
|
||||
/* Validate output */
|
||||
zassert_true(
|
||||
test_snr_error_q15(ref_length, ref, temp, SNR_ERROR_THRESH),
|
||||
ASSERT_MSG_SNR_LIMIT_EXCEED);
|
||||
|
||||
zassert_true(
|
||||
test_near_equal_q15(ref_length, ref, temp,
|
||||
ABS_ERROR_THRESH_FAST_Q15),
|
||||
ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
|
||||
|
||||
/* Free output buffer */
|
||||
free(output);
|
||||
free(temp);
|
||||
free(scratch1);
|
||||
free(scratch2);
|
||||
}
|
||||
|
||||
static void test_arm_conv_partial_fast_opt_q15(
|
||||
size_t first, size_t in1_length, size_t in2_length, const q15_t *ref,
|
||||
size_t ref_length)
|
||||
{
|
||||
q15_t *output;
|
||||
q15_t *temp;
|
||||
q15_t *scratch1, *scratch2;
|
||||
arm_status status;
|
||||
|
||||
/* Allocate output buffer */
|
||||
output = calloc(first + ref_length, sizeof(q15_t));
|
||||
temp = calloc(ref_length, sizeof(q15_t));
|
||||
scratch1 = calloc(24, sizeof(q15_t));
|
||||
scratch2 = calloc(24, sizeof(q15_t));
|
||||
|
||||
/* Run test function */
|
||||
status = arm_conv_partial_fast_opt_q15(
|
||||
in_partial1, in1_length, in_partial2, in2_length,
|
||||
output, first, ref_length,
|
||||
scratch1, scratch2);
|
||||
|
||||
zassert_equal(status, ARM_MATH_SUCCESS,
|
||||
ASSERT_MSG_INCORRECT_COMP_RESULT);
|
||||
|
||||
memcpy(temp, &output[first], ref_length * sizeof(q15_t));
|
||||
|
||||
/* Validate output */
|
||||
zassert_true(
|
||||
test_snr_error_q15(ref_length, ref, temp, SNR_ERROR_THRESH),
|
||||
ASSERT_MSG_SNR_LIMIT_EXCEED);
|
||||
|
||||
zassert_true(
|
||||
test_near_equal_q15(ref_length, ref, temp,
|
||||
ABS_ERROR_THRESH_FAST_Q15),
|
||||
ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
|
||||
|
||||
/* Free output buffer */
|
||||
free(output);
|
||||
free(temp);
|
||||
free(scratch1);
|
||||
free(scratch2);
|
||||
}
|
||||
|
||||
#define DEFINE_CONV_PARTIAL_TEST(a, b, c) \
|
||||
DEFINE_TEST_VARIANT5( \
|
||||
arm_conv_partial_q15, a##_##b##_##c, a, b, c, \
|
||||
ref_conv_partial_##a##_##b##_##c, \
|
||||
ARRAY_SIZE(ref_conv_partial_##a##_##b##_##c)) \
|
||||
DEFINE_TEST_VARIANT5( \
|
||||
arm_conv_partial_fast_q15, a##_##b##_##c, a, b, c, \
|
||||
ref_conv_partial_##a##_##b##_##c, \
|
||||
ARRAY_SIZE(ref_conv_partial_##a##_##b##_##c)) \
|
||||
DEFINE_TEST_VARIANT5( \
|
||||
arm_conv_partial_opt_q15, a##_##b##_##c, a, b, c, \
|
||||
ref_conv_partial_##a##_##b##_##c, \
|
||||
ARRAY_SIZE(ref_conv_partial_##a##_##b##_##c)) \
|
||||
DEFINE_TEST_VARIANT5( \
|
||||
arm_conv_partial_fast_opt_q15, a##_##b##_##c, a, b, c, \
|
||||
ref_conv_partial_##a##_##b##_##c, \
|
||||
ARRAY_SIZE(ref_conv_partial_##a##_##b##_##c))
|
||||
|
||||
DEFINE_CONV_PARTIAL_TEST(3, 6, 8);
|
||||
DEFINE_CONV_PARTIAL_TEST(9, 6, 8);
|
||||
DEFINE_CONV_PARTIAL_TEST(7, 6, 8);
|
||||
|
||||
void test_filtering_misc_q15(void)
|
||||
{
|
||||
ztest_test_suite(filtering_misc_q15,
|
||||
|
@ -182,7 +365,19 @@ void test_filtering_misc_q15(void)
|
|||
ztest_unit_test(test_arm_conv_q15_32_16),
|
||||
ztest_unit_test(test_arm_conv_q15_32_17),
|
||||
ztest_unit_test(test_arm_conv_q15_32_18),
|
||||
ztest_unit_test(test_arm_conv_q15_32_33)
|
||||
ztest_unit_test(test_arm_conv_q15_32_33),
|
||||
ztest_unit_test(test_arm_conv_partial_q15_3_6_8),
|
||||
ztest_unit_test(test_arm_conv_partial_q15_9_6_8),
|
||||
ztest_unit_test(test_arm_conv_partial_q15_7_6_8),
|
||||
ztest_unit_test(test_arm_conv_partial_fast_q15_3_6_8),
|
||||
ztest_unit_test(test_arm_conv_partial_fast_q15_9_6_8),
|
||||
ztest_unit_test(test_arm_conv_partial_fast_q15_7_6_8),
|
||||
ztest_unit_test(test_arm_conv_partial_opt_q15_3_6_8),
|
||||
ztest_unit_test(test_arm_conv_partial_opt_q15_9_6_8),
|
||||
ztest_unit_test(test_arm_conv_partial_opt_q15_7_6_8),
|
||||
ztest_unit_test(test_arm_conv_partial_fast_opt_q15_3_6_8),
|
||||
ztest_unit_test(test_arm_conv_partial_fast_opt_q15_9_6_8),
|
||||
ztest_unit_test(test_arm_conv_partial_fast_opt_q15_7_6_8)
|
||||
);
|
||||
|
||||
ztest_run_test_suite(filtering_misc_q15);
|
||||
|
|
50
tests/lib/cmsis_dsp/filtering/src/misc_q15.pat
generated
50
tests/lib/cmsis_dsp/filtering/src/misc_q15.pat
generated
|
@ -36,6 +36,44 @@ static const q15_t in_com2[128] = {
|
|||
0xE2B5, 0x3A7F, 0xDC23, 0xF699, 0xE13B, 0x146F, 0x2BA2, 0xE3AC
|
||||
};
|
||||
|
||||
static const q15_t in_partial1[128] = {
|
||||
0x6FB3, 0x0F54, 0x7FFF, 0x0E22, 0x05CB, 0xA8EF, 0x1CA1, 0x1186,
|
||||
0xDC25, 0xF8E1, 0x2F69, 0x1EDC, 0x0AB5, 0x2FE2, 0x33BA, 0x6A94,
|
||||
0xEB74, 0x34BF, 0xC92F, 0x3C78, 0x1BBD, 0x4F33, 0xD9BF, 0x2150,
|
||||
0x1696, 0xEC42, 0xFD13, 0xD3E2, 0x2459, 0x225C, 0x30FC, 0x2BC9,
|
||||
0xD37E, 0x2953, 0x573A, 0x1A1C, 0x1BD0, 0x2048, 0xA7AA, 0xD25B,
|
||||
0x19BC, 0x1A02, 0xFC2C, 0x2111, 0xE7D8, 0x3BB0, 0x19A7, 0xD890,
|
||||
0x56E5, 0x149C, 0xE617, 0x0515, 0x0E13, 0x2B88, 0x0B3D, 0x322F,
|
||||
0x23AB, 0x1208, 0x1038, 0xE696, 0x19BD, 0x1674, 0xE7B1, 0x1562,
|
||||
0x45B4, 0xFB05, 0xF2A4, 0xBBD4, 0xD1E8, 0xBE66, 0x3804, 0xFC48,
|
||||
0xE403, 0x34C8, 0x1801, 0xDE4C, 0xFD27, 0x1B1C, 0xBFFB, 0x1F08,
|
||||
0xE61F, 0x166A, 0x2390, 0x0D02, 0x186F, 0x12AA, 0x1031, 0x0BD5,
|
||||
0x1C4E, 0x4ED0, 0xE999, 0xD919, 0xE21F, 0x1FB6, 0xACE8, 0xC400,
|
||||
0xE780, 0x10BA, 0xA6FF, 0x07C7, 0x9AD8, 0x6A71, 0x0C40, 0x3015,
|
||||
0xDC29, 0xBFB3, 0xCCCA, 0x222E, 0x051E, 0xDA07, 0x502D, 0x0866,
|
||||
0xD162, 0xFFE5, 0x0E2A, 0xF858, 0x18B0, 0xBE37, 0xFB5A, 0xDC92,
|
||||
0xFD95, 0x3709, 0x1687, 0xCE71, 0x0578, 0xC542, 0x0112, 0xEC46
|
||||
};
|
||||
|
||||
static const q15_t in_partial2[128] = {
|
||||
0x1641, 0x52F0, 0x1B50, 0x2507, 0xD6A1, 0xD60C, 0x21F8, 0x3324,
|
||||
0xEE6F, 0xF2D6, 0xAC64, 0x3783, 0x2EF4, 0xC46B, 0xB3CB, 0xDB05,
|
||||
0xC429, 0xE63D, 0xF672, 0x2602, 0xEA6A, 0xF10B, 0xD974, 0xCBE7,
|
||||
0x9AC7, 0x5E5D, 0x06A9, 0x1A5F, 0x33E3, 0xEBE5, 0xEAD9, 0xE37C,
|
||||
0xDA86, 0xF0ED, 0x1E21, 0x0F69, 0xB999, 0x2D58, 0x26AC, 0x4000,
|
||||
0xBC47, 0xFD45, 0x3270, 0xCBBE, 0x2E9C, 0xDB5E, 0xF991, 0xB49C,
|
||||
0xF2F1, 0xF68B, 0xAD3A, 0x4EB7, 0xC9CE, 0x4D4C, 0xFDB6, 0x1047,
|
||||
0xF693, 0xD66D, 0x1CC9, 0x0271, 0xF998, 0x276D, 0x05C9, 0x01EB,
|
||||
0x464C, 0xF9F7, 0xF5D2, 0x368B, 0x374E, 0x0DA5, 0xDF99, 0x0CB8,
|
||||
0x6031, 0x0677, 0xFD6B, 0xB882, 0xF267, 0xD799, 0xEDFE, 0x8000,
|
||||
0xD780, 0x04F9, 0x4E9F, 0xA875, 0x8FF0, 0xEED7, 0x18CC, 0x1B45,
|
||||
0x9B33, 0xF73D, 0x0CF3, 0x05FF, 0x2C07, 0xFAC8, 0xDB2A, 0x1B0A,
|
||||
0xE6A5, 0xF5D1, 0xC3B6, 0x1533, 0xF0AF, 0xDF2A, 0xF586, 0x1136,
|
||||
0x38F6, 0xF003, 0x3704, 0x1C10, 0xC4B7, 0x093F, 0xA87B, 0x4A42,
|
||||
0xDCB6, 0xB6DC, 0xD61A, 0x3DEB, 0x08A0, 0x398C, 0xE67C, 0x16E7,
|
||||
0x0DDD, 0x3F0B, 0x1039, 0xA885, 0xE47A, 0x0AA8, 0x1BBF, 0xC9A2
|
||||
};
|
||||
|
||||
static const q15_t ref_correlate_14_15[29] = {
|
||||
0xFF46, 0x0BF7, 0xEC48, 0xE15E, 0x20E5, 0x06E3, 0x036D, 0xFEE6,
|
||||
0xF728, 0x39EA, 0x56F4, 0xDF7E, 0x1A7F, 0xBCDB, 0x13EE, 0x249C,
|
||||
|
@ -462,3 +500,15 @@ static const q15_t ref_conv_32_33[64] = {
|
|||
0xCB86, 0xFFFD, 0x11F8, 0xED32, 0xF40C, 0x0853, 0x05CC, 0x00CD
|
||||
};
|
||||
|
||||
static const q15_t ref_conv_partial_3_6_8[4] = {
|
||||
0x78FA, 0x05CF, 0xF317, 0xBC29
|
||||
};
|
||||
|
||||
static const q15_t ref_conv_partial_9_6_8[4] = {
|
||||
0x5122, 0x23B9, 0xEB35, 0xDD37
|
||||
};
|
||||
|
||||
static const q15_t ref_conv_partial_7_6_8[4] = {
|
||||
0xF146, 0x0868, 0x5122, 0x23B9
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue