1 /*
2 * Copyright (c) 2020 Stephanos Ioannidis <root@stephanos.io>
3 * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved.
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8 #include <zephyr/ztest.h>
9 #include <zephyr/kernel.h>
10 #include <stdlib.h>
11 #include <arm_math.h>
12 #include "../../common/test_common.h"
13
14 #include "biquad_q15.pat"
15
16 #define SNR_ERROR_THRESH ((float32_t)30)
17 #define ABS_ERROR_THRESH_Q15 ((q15_t)500)
18
ZTEST(filtering_biquad_q15,test_arm_biquad_cascade_df1_q15)19 ZTEST(filtering_biquad_q15, test_arm_biquad_cascade_df1_q15)
20 {
21 size_t index;
22 size_t length = ARRAY_SIZE(ref_default);
23 size_t block_size = length / 2;
24 const q15_t *input = in_default_val;
25 const q15_t *coeff = in_default_coeff;
26 const q15_t *ref = ref_default;
27 q15_t *state, *output_buf, *output;
28 arm_biquad_casd_df1_inst_q15 inst;
29
30 /* Allocate buffers */
31 state = malloc(32 * sizeof(q15_t));
32 zassert_not_null(state, ASSERT_MSG_BUFFER_ALLOC_FAILED);
33
34 output_buf = malloc(length * sizeof(q15_t));
35 zassert_not_null(output_buf, ASSERT_MSG_BUFFER_ALLOC_FAILED);
36
37 output = output_buf;
38
39 /* Initialise instance */
40 arm_biquad_cascade_df1_init_q15(&inst, 3, coeff, state, 2);
41
42 /* Enumerate blocks */
43 for (index = 0; index < 2; index++) {
44 /* Run test function */
45 arm_biquad_cascade_df1_q15(&inst, input, output, block_size);
46
47 /* Increment pointers */
48 input += block_size;
49 output += block_size;
50 }
51
52 /* Validate output */
53 zassert_true(
54 test_snr_error_q15(length, output_buf, ref, SNR_ERROR_THRESH),
55 ASSERT_MSG_SNR_LIMIT_EXCEED);
56
57 zassert_true(
58 test_near_equal_q15(length, output_buf, ref,
59 ABS_ERROR_THRESH_Q15),
60 ASSERT_MSG_ABS_ERROR_LIMIT_EXCEED);
61
62 /* Free buffers */
63 free(state);
64 free(output_buf);
65 }
66
67 ZTEST_SUITE(filtering_biquad_q15, NULL, NULL, NULL, NULL, NULL);
68