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