diff --git a/Include/dsp/filtering_functions_f16.h b/Include/dsp/filtering_functions_f16.h
index 7a72910e..f80dbe71 100755
--- a/Include/dsp/filtering_functions_f16.h
+++ b/Include/dsp/filtering_functions_f16.h
@@ -26,12 +26,59 @@
#ifndef _FILTERING_FUNCTIONS_F16_H_
#define _FILTERING_FUNCTIONS_F16_H_
+#include "arm_math_types_f16.h"
+#include "arm_math_memory.h"
+
+#include "dsp/none.h"
+#include "dsp/utils.h"
+
+
#ifdef __cplusplus
extern "C"
{
#endif
#if defined(ARM_FLOAT16_SUPPORTED)
+
+ /**
+ * @brief Instance structure for the floating-point FIR filter.
+ */
+ typedef struct
+ {
+ uint16_t numTaps; /**< number of filter coefficients in the filter. */
+ float16_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */
+ const float16_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */
+ } arm_fir_instance_f16;
+
+ /**
+ * @brief Initialization function for the floating-point FIR filter.
+ * @param[in,out] S points to an instance of the floating-point FIR filter structure.
+ * @param[in] numTaps Number of filter coefficients in the filter.
+ * @param[in] pCoeffs points to the filter coefficients.
+ * @param[in] pState points to the state buffer.
+ * @param[in] blockSize number of samples that are processed at a time.
+ */
+ void arm_fir_init_f16(
+ arm_fir_instance_f16 * S,
+ uint16_t numTaps,
+ const float16_t * pCoeffs,
+ float16_t * pState,
+ uint32_t blockSize);
+
+ /**
+ * @brief Processing function for the floating-point FIR filter.
+ * @param[in] S points to an instance of the floating-point FIR structure.
+ * @param[in] pSrc points to the block of input data.
+ * @param[out] pDst points to the block of output data.
+ * @param[in] blockSize number of samples to process.
+ */
+ void arm_fir_f16(
+ const arm_fir_instance_f16 * S,
+ const float16_t * pSrc,
+ float16_t * pDst,
+ uint32_t blockSize);
+
+
#endif /*defined(ARM_FLOAT16_SUPPORTED)*/
#ifdef __cplusplus
}
diff --git a/Platforms/FVP/ARMv81MML/system_ARMv81MML.c b/Platforms/FVP/ARMv81MML/system_ARMv81MML.c
index f00ffbcf..4a7cdca5 100644
--- a/Platforms/FVP/ARMv81MML/system_ARMv81MML.c
+++ b/Platforms/FVP/ARMv81MML/system_ARMv81MML.c
@@ -299,6 +299,10 @@ void SystemInit (void)
SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk;
#endif
+ unsigned int fpscr =__get_FPSCR();
+ fpscr = fpscr & (~FPU_FPDSCR_AHP_Msk);
+ __set_FPSCR(fpscr);
+
// enable DL branch cache
CCR |= CCR_DL;
diff --git a/Platforms/IPSS/ARMv81MML/system_ARMv81MML.c b/Platforms/IPSS/ARMv81MML/system_ARMv81MML.c
index f00ffbcf..fbe9b866 100755
--- a/Platforms/IPSS/ARMv81MML/system_ARMv81MML.c
+++ b/Platforms/IPSS/ARMv81MML/system_ARMv81MML.c
@@ -299,6 +299,9 @@ void SystemInit (void)
SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk;
#endif
+ unsigned int fpscr =__get_FPSCR();
+ fpscr = fpscr & (~FPU_FPDSCR_AHP_Msk);
+ __set_FPSCR(fpscr);
// enable DL branch cache
CCR |= CCR_DL;
diff --git a/Source/ComplexMathFunctions/arm_cmplx_dot_prod_f16.c b/Source/ComplexMathFunctions/arm_cmplx_dot_prod_f16.c
index c95fe498..ad3219b5 100755
--- a/Source/ComplexMathFunctions/arm_cmplx_dot_prod_f16.c
+++ b/Source/ComplexMathFunctions/arm_cmplx_dot_prod_f16.c
@@ -143,8 +143,8 @@ void arm_cmplx_dot_prod_f16(
float16_t * imagResult)
{
uint32_t blkCnt; /* Loop counter */
- float16_t real_sum = 0.0f, imag_sum = 0.0f; /* Temporary result variables */
- float16_t a0,b0,c0,d0;
+ _Float16 real_sum = 0.0f, imag_sum = 0.0f; /* Temporary result variables */
+ _Float16 a0,b0,c0,d0;
#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE)
diff --git a/Source/FilteringFunctions/CMakeLists.txt b/Source/FilteringFunctions/CMakeLists.txt
index 8ec5f383..3310a866 100644
--- a/Source/FilteringFunctions/CMakeLists.txt
+++ b/Source/FilteringFunctions/CMakeLists.txt
@@ -123,6 +123,10 @@ target_sources(CMSISDSPFiltering PRIVATE arm_lms_norm_q31.c)
target_sources(CMSISDSPFiltering PRIVATE arm_lms_q15.c)
target_sources(CMSISDSPFiltering PRIVATE arm_lms_q31.c)
+if ((NOT ARMAC5) AND (NOT DISABLEFLOAT16))
+target_sources(CMSISDSPFiltering PRIVATE arm_fir_f16.c)
+target_sources(CMSISDSPFiltering PRIVATE arm_fir_init_f16.c)
+endif()
### Includes
target_include_directories(CMSISDSPFiltering PUBLIC "${DSP}/Include")
diff --git a/Source/FilteringFunctions/FilteringFunctionsF16.c b/Source/FilteringFunctions/FilteringFunctionsF16.c
new file mode 100755
index 00000000..d21389ed
--- /dev/null
+++ b/Source/FilteringFunctions/FilteringFunctionsF16.c
@@ -0,0 +1,28 @@
+/* ----------------------------------------------------------------------
+ * Project: CMSIS DSP Library
+ * Title: FilteringFunctions.c
+ * Description: Combination of all filtering function f16 source files.
+ *
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2020 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "arm_fir_f16.c"
+#include "arm_fir_init_f16.c"
diff --git a/Source/FilteringFunctions/arm_fir_f16.c b/Source/FilteringFunctions/arm_fir_f16.c
new file mode 100755
index 00000000..df8dbdea
--- /dev/null
+++ b/Source/FilteringFunctions/arm_fir_f16.c
@@ -0,0 +1,852 @@
+/* ----------------------------------------------------------------------
+ * Project: CMSIS DSP Library
+ * Title: arm_fir_f16.c
+ * Description: Floating-point FIR filter processing function
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "dsp/filtering_functions_f16.h"
+
+/**
+ @ingroup groupFilters
+ */
+
+
+/**
+ @addtogroup FIR
+ @{
+ */
+
+/**
+ @brief Processing function for floating-point FIR filter.
+ @param[in] S points to an instance of the floating-point FIR filter structure
+ @param[in] pSrc points to the block of input data
+ @param[out] pDst points to the block of output data
+ @param[in] blockSize number of samples to process
+ @return none
+ */
+
+#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
+
+#define FIR_F16_CORE(pSamples, c, NB_TAPS) \
+ vecAcc0 = vdupq_n_f16(0.0f16); \
+ for (int i = 0; i < NB_TAPS; i++) { \
+ vecIn0 = vld1q(&pSamples[i]); \
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c[i]); \
+ }
+
+static void arm_fir_f16_1_4_mve(const arm_fir_instance_f16 * S, const float16_t * pSrc, float16_t * pDst, uint32_t blockSize)
+{
+ float16_t *pState = S->pState; /* State pointer */
+ const float16_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */
+ float16_t *pStateCur; /* Points to the current sample of the state */
+ const float16_t *pSamples; /* Temporary pointer to the sample buffer */
+ float16_t *pOutput; /* Temporary pointer to the output buffer */
+ const float16_t *pTempSrc; /* Temporary pointer to the source data */
+ float16_t *pTempDest; /* Temporary pointer to the destination buffer */
+ uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */
+ int32_t blkCnt;
+ f16x8_t vecIn0;
+ f16x8_t vecAcc0;
+ const int NB_TAPS=4;
+ float16_t c[NB_TAPS];
+
+
+ /*
+ * pState points to state array which contains previous frame (numTaps - 1) samples
+ * pStateCur points to the location where the new input data should be written
+ */
+ pStateCur = &(pState[(numTaps - 1u)]);
+ /*
+ * Copy new data into state so that we obtain a continuous sample buffer
+ * containing both the tail end of the old data and the new data.
+ */
+ pSamples = pState;
+ pTempSrc = pSrc;
+ pOutput = pDst;
+
+ for (int i = 0; i < NB_TAPS; i++)
+ c[i] = pCoeffs[i];
+
+ blkCnt = blockSize >> 3;
+ while (blkCnt > 0) {
+ /*
+ * Save 8 input samples in the history buffer
+ */
+ vst1q(pStateCur, vld1q(pTempSrc));
+ pStateCur += 8;
+ pTempSrc += 8;
+
+ FIR_F16_CORE(pSamples, c, NB_TAPS);
+
+ vst1q(pOutput, vecAcc0);
+
+ pOutput += 8;
+ pSamples += 8;
+
+ blkCnt--;
+ }
+
+ blkCnt = blockSize & 7;
+ {
+ mve_pred16_t p0 = vctp16q(blkCnt);
+
+ vst1q(pStateCur, vld1q(pTempSrc));
+ pStateCur += 8;
+ pTempSrc += 8;
+
+ FIR_F16_CORE(pSamples, c, NB_TAPS);
+
+ vstrhq_p_f16(pOutput, vecAcc0, p0);
+ }
+
+ /*
+ * Copy the samples back into the history buffer start
+ */
+ pTempSrc = &pState[blockSize];
+ pTempDest = pState;
+
+ blkCnt = numTaps >> 3;
+ while (blkCnt > 0) {
+ vst1q(pTempDest, vld1q(pTempSrc));
+ pTempSrc += 8;
+ pTempDest += 8;
+ blkCnt--;
+ }
+ blkCnt = numTaps & 7;
+ if (blkCnt > 0) {
+ mve_pred16_t p0 = vctp16q(blkCnt);
+ vstrhq_p_f16(pTempDest, vld1q(pTempSrc), p0);
+ }
+
+}
+
+
+static void arm_fir_f16_5_8_mve(const arm_fir_instance_f16 * S, const float16_t * pSrc, float16_t * pDst, uint32_t blockSize)
+{
+ float16_t *pState = S->pState; /* State pointer */
+ const float16_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */
+ float16_t *pStateCur; /* Points to the current sample of the state */
+ const float16_t *pSamples; /* Temporary pointer to the sample buffer */
+ float16_t *pOutput; /* Temporary pointer to the output buffer */
+ const float16_t *pTempSrc; /* Temporary pointer to the source data */
+ float16_t *pTempDest; /* Temporary pointer to the destination buffer */
+ uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */
+ int32_t blkCnt;
+ f16x8_t vecIn0;
+ f16x8_t vecAcc0;
+ const int NB_TAPS=8;
+ float16_t c[NB_TAPS];
+
+
+ /*
+ * pState points to state array which contains previous frame (numTaps - 1) samples
+ * pStateCur points to the location where the new input data should be written
+ */
+ pStateCur = &(pState[(numTaps - 1u)]);
+ /*
+ * Copy new data into state so that we obtain a continuous sample buffer
+ * containing both the tail end of the old data and the new data.
+ */
+ pSamples = pState;
+ pTempSrc = pSrc;
+ pOutput = pDst;
+
+ for (int i = 0; i < NB_TAPS; i++)
+ c[i] = pCoeffs[i];
+
+ blkCnt = blockSize >> 3;
+ while (blkCnt > 0) {
+ /*
+ * Save 8 input samples in the history buffer
+ */
+ vst1q(pStateCur, vld1q(pTempSrc));
+ pStateCur += 8;
+ pTempSrc += 8;
+
+ FIR_F16_CORE(pSamples, c, NB_TAPS);
+
+ vst1q(pOutput, vecAcc0);
+
+ pOutput += 8;
+ pSamples += 8;
+
+ blkCnt--;
+ }
+
+ blkCnt = blockSize & 7;
+ {
+ mve_pred16_t p0 = vctp16q(blkCnt);
+
+ vst1q(pStateCur, vld1q(pTempSrc));
+ pStateCur += 8;
+ pTempSrc += 8;
+
+ FIR_F16_CORE(pSamples, c, NB_TAPS);
+
+ vstrhq_p_f16(pOutput, vecAcc0, p0);
+ }
+
+ /*
+ * Copy the samples back into the history buffer start
+ */
+ pTempSrc = &pState[blockSize];
+ pTempDest = pState;
+
+ blkCnt = numTaps >> 3;
+ while (blkCnt > 0) {
+ vst1q(pTempDest, vld1q(pTempSrc));
+ pTempSrc += 8;
+ pTempDest += 8;
+ blkCnt--;
+ }
+ blkCnt = numTaps & 7;
+ if (blkCnt > 0) {
+ mve_pred16_t p0 = vctp16q(blkCnt);
+ vstrhq_p_f16(pTempDest, vld1q(pTempSrc), p0);
+ }
+}
+
+
+void arm_fir_f16(const arm_fir_instance_f16 * S,
+ const float16_t * pSrc,
+ float16_t * pDst,
+ uint32_t blockSize)
+{
+ float16_t *pState = S->pState; /* State pointer */
+ const float16_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */
+ float16_t *pStateCur; /* Points to the current sample of the state */
+ const float16_t *pSamples; /* Temporary pointer to the sample buffer */
+ float16_t *pOutput; /* Temporary pointer to the output buffer */
+ const float16_t *pTempSrc; /* Temporary pointer to the source data */
+ float16_t *pTempDest; /* Temporary pointer to the destination buffer */
+ int32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */
+ uint32_t blkCnt;
+ f16x8_t vecIn0;
+ f16x8_t vecAcc0;
+ float16_t c0, c1, c2, c3;
+ float16_t c4, c5, c6, c7;
+
+ /*
+ * [1 to 8 taps] specialized routines
+ */
+ if (numTaps <= 4)
+ {
+ arm_fir_f16_1_4_mve(S, pSrc, pDst, blockSize);
+ return;
+ }
+ else if (numTaps <= 8)
+ {
+ arm_fir_f16_5_8_mve(S, pSrc, pDst, blockSize);
+ return;
+ }
+
+ /*
+ * pState points to state array which contains previous frame (numTaps - 1) samples
+ * pStateCur points to the location where the new input data should be written
+ */
+ pStateCur = &(pState[(numTaps - 1u)]);
+ /*
+ * Copy new data into state so that we obtain a continuous sample buffer
+ * containing both the tail end of the old data and the new data.
+ */
+ pSamples = pState;
+ pTempSrc = pSrc;
+ pOutput = pDst;
+
+ blkCnt = blockSize >> 3;
+ while (blkCnt > 0U)
+ {
+ int i;
+ const float16_t *pCoeffsCur = pCoeffs;
+
+ /*
+ * Save 8 input samples in the history buffer
+ */
+ vst1q(pStateCur, vld1q(pTempSrc));
+ pStateCur += 8;
+ pTempSrc += 8;
+
+ c0 = *pCoeffsCur++;
+ c1 = *pCoeffsCur++;
+ c2 = *pCoeffsCur++;
+ c3 = *pCoeffsCur++;
+ c4 = *pCoeffsCur++;
+ c5 = *pCoeffsCur++;
+ c6 = *pCoeffsCur++;
+ c7 = *pCoeffsCur++;
+
+ vecIn0 = vld1q(pSamples);
+ vecAcc0 = vmulq(vecIn0, c0);
+
+ vecIn0 = vld1q(&pSamples[1]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c1);
+
+ vecIn0 = vld1q(&pSamples[2]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c2);
+
+ vecIn0 = vld1q(&pSamples[3]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c3);
+
+ vecIn0 = vld1q(&pSamples[4]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c4);
+
+ vecIn0 = vld1q(&pSamples[5]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c5);
+
+ vecIn0 = vld1q(&pSamples[6]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c6);
+
+ vecIn0 = vld1q(&pSamples[7]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c7);
+
+ pSamples += 8;
+
+ for (i = 0; i <= ((numTaps - 9) / 8); i++)
+ {
+ c0 = *pCoeffsCur++;
+ c1 = *pCoeffsCur++;
+ c2 = *pCoeffsCur++;
+ c3 = *pCoeffsCur++;
+ c4 = *pCoeffsCur++;
+ c5 = *pCoeffsCur++;
+ c6 = *pCoeffsCur++;
+ c7 = *pCoeffsCur++;
+
+ vecIn0 = vld1q(pSamples);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c0);
+
+ vecIn0 = vld1q(&pSamples[1]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c1);
+
+ vecIn0 = vld1q(&pSamples[2]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c2);
+
+ vecIn0 = vld1q(&pSamples[3]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c3);
+
+ vecIn0 = vld1q(&pSamples[4]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c4);
+
+ vecIn0 = vld1q(&pSamples[5]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c5);
+
+ vecIn0 = vld1q(&pSamples[6]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c6);
+
+ vecIn0 = vld1q(&pSamples[7]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c7);
+
+ pSamples += 8;
+ }
+
+ vst1q(pOutput, vecAcc0);
+ pOutput += 8;
+ pSamples = pSamples - (i + 1) * 8 + 8;
+
+ blkCnt--;
+ }
+
+ blkCnt = blockSize & 7;
+ {
+ mve_pred16_t p0 = vctp16q(blkCnt);
+ int i;
+ const float16_t *pCoeffsCur = pCoeffs;
+
+ vst1q(pStateCur, vld1q(pTempSrc));
+ pStateCur += 8;
+ pTempSrc += 8;
+
+ c0 = *pCoeffsCur++;
+ c1 = *pCoeffsCur++;
+ c2 = *pCoeffsCur++;
+ c3 = *pCoeffsCur++;
+ c4 = *pCoeffsCur++;
+ c5 = *pCoeffsCur++;
+ c6 = *pCoeffsCur++;
+ c7 = *pCoeffsCur++;
+
+ vecIn0 = vld1q(pSamples);
+ vecAcc0 = vmulq(vecIn0, c0);
+
+ vecIn0 = vld1q(&pSamples[1]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c1);
+
+ vecIn0 = vld1q(&pSamples[2]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c2);
+
+ vecIn0 = vld1q(&pSamples[3]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c3);
+
+ vecIn0 = vld1q(&pSamples[4]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c4);
+
+ vecIn0 = vld1q(&pSamples[5]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c5);
+
+ vecIn0 = vld1q(&pSamples[6]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c6);
+
+ vecIn0 = vld1q(&pSamples[7]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c7);
+
+ pSamples += 8;
+
+ for (i = 0; i <= ((numTaps - 9) / 8); i++)
+ {
+ c0 = *pCoeffsCur++;
+ c1 = *pCoeffsCur++;
+ c2 = *pCoeffsCur++;
+ c3 = *pCoeffsCur++;
+ c4 = *pCoeffsCur++;
+ c5 = *pCoeffsCur++;
+ c6 = *pCoeffsCur++;
+ c7 = *pCoeffsCur++;
+
+ vecIn0 = vld1q(pSamples);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c0);
+
+ vecIn0 = vld1q(&pSamples[1]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c1);
+
+ vecIn0 = vld1q(&pSamples[2]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c2);
+
+ vecIn0 = vld1q(&pSamples[3]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c3);
+
+ vecIn0 = vld1q(&pSamples[4]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c4);
+
+ vecIn0 = vld1q(&pSamples[5]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c5);
+
+ vecIn0 = vld1q(&pSamples[6]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c6);
+
+ vecIn0 = vld1q(&pSamples[7]);
+ vecAcc0 = vfmaq(vecAcc0, vecIn0, c7);
+
+ pSamples += 8;
+ }
+
+ vstrhq_p_f16(pOutput, vecAcc0, p0);
+ }
+
+ /*
+ * Copy the samples back into the history buffer start
+ */
+ pTempSrc = &pState[blockSize];
+ pTempDest = pState;
+
+ blkCnt = numTaps >> 3;
+ while (blkCnt > 0U)
+ {
+ vst1q(pTempDest, vld1q(pTempSrc));
+ pTempSrc += 8;
+ pTempDest += 8;
+ blkCnt--;
+ }
+ blkCnt = numTaps & 7;
+ if (blkCnt > 0U)
+ {
+ mve_pred16_t p0 = vctp16q(blkCnt);
+ vstrhq_p_f16(pTempDest, vld1q(pTempSrc), p0);
+ }
+}
+
+#else
+
+void arm_fir_f16(
+ const arm_fir_instance_f16 * S,
+ const float16_t * pSrc,
+ float16_t * pDst,
+ uint32_t blockSize)
+{
+ float16_t *pState = S->pState; /* State pointer */
+ const float16_t *pCoeffs = S->pCoeffs; /* Coefficient pointer */
+ float16_t *pStateCurnt; /* Points to the current sample of the state */
+ float16_t *px; /* Temporary pointer for state buffer */
+ const float16_t *pb; /* Temporary pointer for coefficient buffer */
+ _Float16 acc0; /* Accumulator */
+ uint32_t numTaps = S->numTaps; /* Number of filter coefficients in the filter */
+ uint32_t i, tapCnt, blkCnt; /* Loop counters */
+
+#if defined (ARM_MATH_LOOPUNROLL)
+ _Float16 acc1, acc2, acc3, acc4, acc5, acc6, acc7; /* Accumulators */
+ _Float16 x0, x1, x2, x3, x4, x5, x6, x7; /* Temporary variables to hold state values */
+ _Float16 c0; /* Temporary variable to hold coefficient value */
+#endif
+
+ /* S->pState points to state array which contains previous frame (numTaps - 1) samples */
+ /* pStateCurnt points to the location where the new input data should be written */
+ pStateCurnt = &(S->pState[(numTaps - 1U)]);
+
+#if defined (ARM_MATH_LOOPUNROLL)
+
+ /* Loop unrolling: Compute 8 output values simultaneously.
+ * The variables acc0 ... acc7 hold output values that are being computed:
+ *
+ * acc0 = b[numTaps-1] * x[n-numTaps-1] + b[numTaps-2] * x[n-numTaps-2] + b[numTaps-3] * x[n-numTaps-3] +...+ b[0] * x[0]
+ * acc1 = b[numTaps-1] * x[n-numTaps] + b[numTaps-2] * x[n-numTaps-1] + b[numTaps-3] * x[n-numTaps-2] +...+ b[0] * x[1]
+ * acc2 = b[numTaps-1] * x[n-numTaps+1] + b[numTaps-2] * x[n-numTaps] + b[numTaps-3] * x[n-numTaps-1] +...+ b[0] * x[2]
+ * acc3 = b[numTaps-1] * x[n-numTaps+2] + b[numTaps-2] * x[n-numTaps+1] + b[numTaps-3] * x[n-numTaps] +...+ b[0] * x[3]
+ */
+
+ blkCnt = blockSize >> 3U;
+
+ while (blkCnt > 0U)
+ {
+ /* Copy 4 new input samples into the state buffer. */
+ *pStateCurnt++ = *pSrc++;
+ *pStateCurnt++ = *pSrc++;
+ *pStateCurnt++ = *pSrc++;
+ *pStateCurnt++ = *pSrc++;
+
+ /* Set all accumulators to zero */
+ acc0 = 0.0f;
+ acc1 = 0.0f;
+ acc2 = 0.0f;
+ acc3 = 0.0f;
+ acc4 = 0.0f;
+ acc5 = 0.0f;
+ acc6 = 0.0f;
+ acc7 = 0.0f;
+
+ /* Initialize state pointer */
+ px = pState;
+
+ /* Initialize coefficient pointer */
+ pb = pCoeffs;
+
+ /* This is separated from the others to avoid
+ * a call to __aeabi_memmove which would be slower
+ */
+ *pStateCurnt++ = *pSrc++;
+ *pStateCurnt++ = *pSrc++;
+ *pStateCurnt++ = *pSrc++;
+ *pStateCurnt++ = *pSrc++;
+
+ /* Read the first 7 samples from the state buffer: x[n-numTaps], x[n-numTaps-1], x[n-numTaps-2] */
+ x0 = *px++;
+ x1 = *px++;
+ x2 = *px++;
+ x3 = *px++;
+ x4 = *px++;
+ x5 = *px++;
+ x6 = *px++;
+
+ /* Loop unrolling: process 8 taps at a time. */
+ tapCnt = numTaps >> 3U;
+
+ while (tapCnt > 0U)
+ {
+ /* Read the b[numTaps-1] coefficient */
+ c0 = *(pb++);
+
+ /* Read x[n-numTaps-3] sample */
+ x7 = *(px++);
+
+ /* acc0 += b[numTaps-1] * x[n-numTaps] */
+ acc0 += x0 * c0;
+
+ /* acc1 += b[numTaps-1] * x[n-numTaps-1] */
+ acc1 += x1 * c0;
+
+ /* acc2 += b[numTaps-1] * x[n-numTaps-2] */
+ acc2 += x2 * c0;
+
+ /* acc3 += b[numTaps-1] * x[n-numTaps-3] */
+ acc3 += x3 * c0;
+
+ /* acc4 += b[numTaps-1] * x[n-numTaps-4] */
+ acc4 += x4 * c0;
+
+ /* acc1 += b[numTaps-1] * x[n-numTaps-5] */
+ acc5 += x5 * c0;
+
+ /* acc2 += b[numTaps-1] * x[n-numTaps-6] */
+ acc6 += x6 * c0;
+
+ /* acc3 += b[numTaps-1] * x[n-numTaps-7] */
+ acc7 += x7 * c0;
+
+ /* Read the b[numTaps-2] coefficient */
+ c0 = *(pb++);
+
+ /* Read x[n-numTaps-4] sample */
+ x0 = *(px++);
+
+ /* Perform the multiply-accumulate */
+ acc0 += x1 * c0;
+ acc1 += x2 * c0;
+ acc2 += x3 * c0;
+ acc3 += x4 * c0;
+ acc4 += x5 * c0;
+ acc5 += x6 * c0;
+ acc6 += x7 * c0;
+ acc7 += x0 * c0;
+
+ /* Read the b[numTaps-3] coefficient */
+ c0 = *(pb++);
+
+ /* Read x[n-numTaps-5] sample */
+ x1 = *(px++);
+
+ /* Perform the multiply-accumulates */
+ acc0 += x2 * c0;
+ acc1 += x3 * c0;
+ acc2 += x4 * c0;
+ acc3 += x5 * c0;
+ acc4 += x6 * c0;
+ acc5 += x7 * c0;
+ acc6 += x0 * c0;
+ acc7 += x1 * c0;
+
+ /* Read the b[numTaps-4] coefficient */
+ c0 = *(pb++);
+
+ /* Read x[n-numTaps-6] sample */
+ x2 = *(px++);
+
+ /* Perform the multiply-accumulates */
+ acc0 += x3 * c0;
+ acc1 += x4 * c0;
+ acc2 += x5 * c0;
+ acc3 += x6 * c0;
+ acc4 += x7 * c0;
+ acc5 += x0 * c0;
+ acc6 += x1 * c0;
+ acc7 += x2 * c0;
+
+ /* Read the b[numTaps-4] coefficient */
+ c0 = *(pb++);
+
+ /* Read x[n-numTaps-6] sample */
+ x3 = *(px++);
+ /* Perform the multiply-accumulates */
+ acc0 += x4 * c0;
+ acc1 += x5 * c0;
+ acc2 += x6 * c0;
+ acc3 += x7 * c0;
+ acc4 += x0 * c0;
+ acc5 += x1 * c0;
+ acc6 += x2 * c0;
+ acc7 += x3 * c0;
+
+ /* Read the b[numTaps-4] coefficient */
+ c0 = *(pb++);
+
+ /* Read x[n-numTaps-6] sample */
+ x4 = *(px++);
+
+ /* Perform the multiply-accumulates */
+ acc0 += x5 * c0;
+ acc1 += x6 * c0;
+ acc2 += x7 * c0;
+ acc3 += x0 * c0;
+ acc4 += x1 * c0;
+ acc5 += x2 * c0;
+ acc6 += x3 * c0;
+ acc7 += x4 * c0;
+
+ /* Read the b[numTaps-4] coefficient */
+ c0 = *(pb++);
+
+ /* Read x[n-numTaps-6] sample */
+ x5 = *(px++);
+
+ /* Perform the multiply-accumulates */
+ acc0 += x6 * c0;
+ acc1 += x7 * c0;
+ acc2 += x0 * c0;
+ acc3 += x1 * c0;
+ acc4 += x2 * c0;
+ acc5 += x3 * c0;
+ acc6 += x4 * c0;
+ acc7 += x5 * c0;
+
+ /* Read the b[numTaps-4] coefficient */
+ c0 = *(pb++);
+
+ /* Read x[n-numTaps-6] sample */
+ x6 = *(px++);
+
+ /* Perform the multiply-accumulates */
+ acc0 += x7 * c0;
+ acc1 += x0 * c0;
+ acc2 += x1 * c0;
+ acc3 += x2 * c0;
+ acc4 += x3 * c0;
+ acc5 += x4 * c0;
+ acc6 += x5 * c0;
+ acc7 += x6 * c0;
+
+ /* Decrement loop counter */
+ tapCnt--;
+ }
+
+ /* Loop unrolling: Compute remaining outputs */
+ tapCnt = numTaps % 0x8U;
+
+ while (tapCnt > 0U)
+ {
+ /* Read coefficients */
+ c0 = *(pb++);
+
+ /* Fetch 1 state variable */
+ x7 = *(px++);
+
+ /* Perform the multiply-accumulates */
+ acc0 += x0 * c0;
+ acc1 += x1 * c0;
+ acc2 += x2 * c0;
+ acc3 += x3 * c0;
+ acc4 += x4 * c0;
+ acc5 += x5 * c0;
+ acc6 += x6 * c0;
+ acc7 += x7 * c0;
+
+ /* Reuse the present sample states for next sample */
+ x0 = x1;
+ x1 = x2;
+ x2 = x3;
+ x3 = x4;
+ x4 = x5;
+ x5 = x6;
+ x6 = x7;
+
+ /* Decrement loop counter */
+ tapCnt--;
+ }
+
+ /* Advance the state pointer by 8 to process the next group of 8 samples */
+ pState = pState + 8;
+
+ /* The results in the 8 accumulators, store in the destination buffer. */
+ *pDst++ = acc0;
+ *pDst++ = acc1;
+ *pDst++ = acc2;
+ *pDst++ = acc3;
+ *pDst++ = acc4;
+ *pDst++ = acc5;
+ *pDst++ = acc6;
+ *pDst++ = acc7;
+
+
+ /* Decrement loop counter */
+ blkCnt--;
+ }
+
+ /* Loop unrolling: Compute remaining output samples */
+ blkCnt = blockSize % 0x8U;
+
+#else
+
+ /* Initialize blkCnt with number of taps */
+ blkCnt = blockSize;
+
+#endif /* #if defined (ARM_MATH_LOOPUNROLL) */
+
+ while (blkCnt > 0U)
+ {
+ /* Copy one sample at a time into state buffer */
+ *pStateCurnt++ = *pSrc++;
+
+ /* Set the accumulator to zero */
+ acc0 = 0.0f;
+
+ /* Initialize state pointer */
+ px = pState;
+
+ /* Initialize Coefficient pointer */
+ pb = pCoeffs;
+
+ i = numTaps;
+
+ /* Perform the multiply-accumulates */
+ while (i > 0U)
+ {
+ /* acc = b[numTaps-1] * x[n-numTaps-1] + b[numTaps-2] * x[n-numTaps-2] + b[numTaps-3] * x[n-numTaps-3] +...+ b[0] * x[0] */
+ acc0 += *px++ * *pb++;
+
+ i--;
+ }
+
+ /* Store result in destination buffer. */
+ *pDst++ = acc0;
+
+ /* Advance state pointer by 1 for the next sample */
+ pState = pState + 1U;
+
+ /* Decrement loop counter */
+ blkCnt--;
+ }
+
+ /* Processing is complete.
+ Now copy the last numTaps - 1 samples to the start of the state buffer.
+ This prepares the state buffer for the next function call. */
+
+ /* Points to the start of the state buffer */
+ pStateCurnt = S->pState;
+
+#if defined (ARM_MATH_LOOPUNROLL)
+
+ /* Loop unrolling: Compute 4 taps at a time */
+ tapCnt = (numTaps - 1U) >> 2U;
+
+ /* Copy data */
+ while (tapCnt > 0U)
+ {
+ *pStateCurnt++ = *pState++;
+ *pStateCurnt++ = *pState++;
+ *pStateCurnt++ = *pState++;
+ *pStateCurnt++ = *pState++;
+
+ /* Decrement loop counter */
+ tapCnt--;
+ }
+
+ /* Calculate remaining number of copies */
+ tapCnt = (numTaps - 1U) % 0x4U;
+
+#else
+
+ /* Initialize tapCnt with number of taps */
+ tapCnt = (numTaps - 1U);
+
+#endif /* #if defined (ARM_MATH_LOOPUNROLL) */
+
+ /* Copy remaining data */
+ while (tapCnt > 0U)
+ {
+ *pStateCurnt++ = *pState++;
+
+ /* Decrement loop counter */
+ tapCnt--;
+ }
+
+}
+
+#endif /* #if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
+/**
+* @} end of FIR group
+*/
diff --git a/Source/FilteringFunctions/arm_fir_init_f16.c b/Source/FilteringFunctions/arm_fir_init_f16.c
new file mode 100755
index 00000000..366710f9
--- /dev/null
+++ b/Source/FilteringFunctions/arm_fir_init_f16.c
@@ -0,0 +1,86 @@
+/* ----------------------------------------------------------------------
+ * Project: CMSIS DSP Library
+ * Title: arm_fir_init_f16.c
+ * Description: Floating-point FIR filter initialization function
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "dsp/filtering_functions_f16.h"
+
+/**
+ @ingroup groupFilters
+ */
+
+/**
+ @addtogroup FIR
+ @{
+ */
+
+/**
+ @brief Initialization function for the floating-point FIR filter.
+ @param[in,out] S points to an instance of the floating-point FIR filter structure
+ @param[in] numTaps number of filter coefficients in the filter
+ @param[in] pCoeffs points to the filter coefficients buffer
+ @param[in] pState points to the state buffer
+ @param[in] blockSize number of samples processed per call
+ @return none
+
+ @par Details
+ pCoeffs points to the array of filter coefficients stored in time reversed order:
+
+ {b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}
+
+ @par
+ pState points to the array of state variables.
+ pState is of length numTaps+blockSize-1 samples, where blockSize is the number of input samples processed by each call to arm_fir_f16().
+ @par Initialization of Helium version
+ For Helium version the array of coefficients must be a multiple of 16 even if less
+ then 16 coefficients are used. The additional coefficients must be set to 0.
+ It does not mean that all the coefficients will be used in the filter (numTaps
+ is still set to its right value in the init function.) It just means that
+ the implementation may require to read more coefficients due to the vectorization and
+ to avoid having to manage too many different cases in the code.
+
+ */
+
+void arm_fir_init_f16(
+ arm_fir_instance_f16 * S,
+ uint16_t numTaps,
+ const float16_t * pCoeffs,
+ float16_t * pState,
+ uint32_t blockSize)
+{
+ /* Assign filter taps */
+ S->numTaps = numTaps;
+
+ /* Assign coefficient pointer */
+ S->pCoeffs = pCoeffs;
+
+ /* Clear state buffer. The size is always (blockSize + numTaps - 1) */
+ memset(pState, 0, (numTaps + (blockSize - 1U)) * sizeof(float16_t));
+
+ /* Assign state pointer */
+ S->pState = pState;
+}
+
+/**
+ @} end of FIR group
+ */
diff --git a/Source/TransformFunctions/arm_cfft_init_f16.c b/Source/TransformFunctions/arm_cfft_init_f16.c
index d366fa99..fb8360fd 100755
--- a/Source/TransformFunctions/arm_cfft_init_f16.c
+++ b/Source/TransformFunctions/arm_cfft_init_f16.c
@@ -64,7 +64,8 @@ arm_status arm_cfft_radix4by2_rearrange_twiddles_f16(arm_cfft_instance_f16 *S, i
switch (S->fftLen >> (twidCoefModifier - 1)) {
-#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_4096)
+#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) \
+ || defined(ARM_TABLE_TWIDDLECOEF_F16_4096)
case 4096U:
S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_4096_f16;
S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_4096_f16;
@@ -77,7 +78,8 @@ arm_status arm_cfft_radix4by2_rearrange_twiddles_f16(arm_cfft_instance_f16 *S, i
break;
#endif
-#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_1024) || defined(ARM_TABLE_BITREVIDX_FXT_2048)
+#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) \
+ || defined(ARM_TABLE_TWIDDLECOEF_F16_1024) || defined(ARM_TABLE_TWIDDLECOEF_F16_2048)
case 1024U:
S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_1024_f16;
S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_1024_f16;
@@ -90,7 +92,8 @@ arm_status arm_cfft_radix4by2_rearrange_twiddles_f16(arm_cfft_instance_f16 *S, i
break;
#endif
- #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_256) || defined(ARM_TABLE_BITREVIDX_FXT_512)
+ #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) \
+ || defined(ARM_TABLE_TWIDDLECOEF_F16_256) || defined(ARM_TABLE_TWIDDLECOEF_F16_512)
case 256U:
S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_256_f16;
S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_256_f16;
@@ -104,7 +107,8 @@ arm_status arm_cfft_radix4by2_rearrange_twiddles_f16(arm_cfft_instance_f16 *S, i
break;
#endif
-#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_64) || defined(ARM_TABLE_BITREVIDX_FXT_128)
+#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) \
+ || defined(ARM_TABLE_TWIDDLECOEF_F16_64) || defined(ARM_TABLE_TWIDDLECOEF_F16_128)
case 64U:
S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_64_f16;
S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_64_f16;
@@ -117,7 +121,8 @@ arm_status arm_cfft_radix4by2_rearrange_twiddles_f16(arm_cfft_instance_f16 *S, i
break;
#endif
-#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_16) || defined(ARM_TABLE_BITREVIDX_FXT_32)
+#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) \
+ || defined(ARM_TABLE_TWIDDLECOEF_F16_16) || defined(ARM_TABLE_TWIDDLECOEF_F16_32)
case 16U:
S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_16_f16;
S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_16_f16;
diff --git a/Source/TransformFunctions/arm_cfft_init_f32.c b/Source/TransformFunctions/arm_cfft_init_f32.c
index d0741ae0..d8c466d8 100755
--- a/Source/TransformFunctions/arm_cfft_init_f32.c
+++ b/Source/TransformFunctions/arm_cfft_init_f32.c
@@ -63,7 +63,8 @@ arm_status arm_cfft_radix4by2_rearrange_twiddles_f32(arm_cfft_instance_f32 *S, i
switch (S->fftLen >> (twidCoefModifier - 1)) {
-#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_4096)
+#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) \
+ || defined(ARM_TABLE_TWIDDLECOEF_F32_4096)
case 4096U:
S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_4096_f32;
S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_4096_f32;
@@ -76,7 +77,8 @@ arm_status arm_cfft_radix4by2_rearrange_twiddles_f32(arm_cfft_instance_f32 *S, i
break;
#endif
-#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_1024) || defined(ARM_TABLE_BITREVIDX_FXT_2048)
+#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) \
+ || defined(ARM_TABLE_TWIDDLECOEF_F32_1024) || defined(ARM_TABLE_TWIDDLECOEF_F32_2048)
case 1024U:
S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_1024_f32;
S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_1024_f32;
@@ -89,7 +91,8 @@ arm_status arm_cfft_radix4by2_rearrange_twiddles_f32(arm_cfft_instance_f32 *S, i
break;
#endif
- #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_256) || defined(ARM_TABLE_BITREVIDX_FXT_512)
+ #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) \
+ || defined(ARM_TABLE_TWIDDLECOEF_F32_256) || defined(ARM_TABLE_TWIDDLECOEF_F32_512)
case 256U:
S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_256_f32;
S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_256_f32;
@@ -103,7 +106,8 @@ arm_status arm_cfft_radix4by2_rearrange_twiddles_f32(arm_cfft_instance_f32 *S, i
break;
#endif
-#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_64) || defined(ARM_TABLE_BITREVIDX_FXT_128)
+#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) \
+ || defined(ARM_TABLE_TWIDDLECOEF_F32_64) || defined(ARM_TABLE_TWIDDLECOEF_F32_128)
case 64U:
S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_64_f32;
S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_64_f32;
@@ -116,7 +120,8 @@ arm_status arm_cfft_radix4by2_rearrange_twiddles_f32(arm_cfft_instance_f32 *S, i
break;
#endif
-#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_16) || defined(ARM_TABLE_BITREVIDX_FXT_32)
+#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) \
+ || defined(ARM_TABLE_TWIDDLECOEF_F32_16) || defined(ARM_TABLE_TWIDDLECOEF_F32_32)
case 16U:
S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_16_f32;
S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_16_f32;
diff --git a/Testing/CMakeLists.txt b/Testing/CMakeLists.txt
index c0cc169e..4628d6d6 100644
--- a/Testing/CMakeLists.txt
+++ b/Testing/CMakeLists.txt
@@ -328,6 +328,7 @@ if ((NOT ARMAC5) AND (FLOAT16TESTS) AND ((FLOAT16) OR (MVEF) OR (HELIUM) OR (NEO
set(TESTSRC16
Source/Tests/BasicTestsF16.cpp
Source/Tests/ComplexTestsF16.cpp
+ Source/Tests/FIRF16.cpp
Source/Tests/TransformCF16.cpp
Source/Tests/TransformRF16.cpp
)
diff --git a/Testing/Include/Tests/FIRF16.h b/Testing/Include/Tests/FIRF16.h
new file mode 100755
index 00000000..ab20f701
--- /dev/null
+++ b/Testing/Include/Tests/FIRF16.h
@@ -0,0 +1,26 @@
+#include "Test.h"
+#include "Pattern.h"
+
+#include "dsp/filtering_functions_f16.h"
+
+class FIRF16:public Client::Suite
+ {
+ public:
+ FIRF16(Testing::testID_t id);
+ virtual void setUp(Testing::testID_t,std::vector& params,Client::PatternMgr *mgr);
+ virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+ private:
+ #include "FIRF16_decl.h"
+
+ Client::Pattern coefs;
+ Client::Pattern inputs;
+ Client::RefPattern configs;
+ Client::LocalPattern output;
+ Client::LocalPattern state;
+ // Reference patterns are not loaded when we are in dump mode
+ Client::RefPattern ref;
+
+
+ arm_fir_instance_f16 S;
+
+ };
diff --git a/Testing/PatternGeneration/FIR.py b/Testing/PatternGeneration/FIR.py
index c4b90cdb..0a3f3bf9 100755
--- a/Testing/PatternGeneration/FIR.py
+++ b/Testing/PatternGeneration/FIR.py
@@ -3,7 +3,7 @@ import numpy as np
import itertools
import Tools
from scipy import signal
-from pylab import figure, clf, plot, xlabel, ylabel, xlim, ylim, title, grid, axes, show,semilogx, semilogy
+#from pylab import figure, clf, plot, xlabel, ylabel, xlim, ylim, title, grid, axes, show,semilogx, semilogy
# Those patterns are used for tests and benchmarks.
# For tests, there is the need to add tests for saturation
@@ -57,7 +57,7 @@ def writeTests(config,format):
if format == 0 or format == 31:
blk = [1, 2, 3, 8, 9,10,11, 16, 23]
taps = [1, 2, 3, 4, 5, 6, 7, 8, 11, 16, 23, 25]
- elif format == 15:
+ elif format == 15 or format == 16:
blk = [1, 2, 3, 12,13,14,15]
taps = [2, 3, 4, 5, 6, 7, 8, 11, 25]
elif format == 7:
@@ -99,6 +99,7 @@ def generatePatterns():
PARAMDIR = os.path.join("Parameters","DSP","Filtering","FIR","FIR")
configf32=Tools.Config(PATTERNDIR,PARAMDIR,"f32")
+ configf16=Tools.Config(PATTERNDIR,PARAMDIR,"f16")
configq31=Tools.Config(PATTERNDIR,PARAMDIR,"q31")
configq15=Tools.Config(PATTERNDIR,PARAMDIR,"q15")
configq7=Tools.Config(PATTERNDIR,PARAMDIR,"q7")
@@ -106,6 +107,7 @@ def generatePatterns():
writeTests(configf32,0)
+ writeTests(configf16,16)
writeTests(configq31,31)
writeTests(configq15,15)
writeTests(configq7,7)
diff --git a/Testing/Patterns/DSP/Filtering/FIR/FIRF16/Coefs1_f16.txt b/Testing/Patterns/DSP/Filtering/FIR/FIRF16/Coefs1_f16.txt
new file mode 100755
index 00000000..1d78dcf8
--- /dev/null
+++ b/Testing/Patterns/DSP/Filtering/FIR/FIRF16/Coefs1_f16.txt
@@ -0,0 +1,130 @@
+H
+64
+// 0.330498
+0x354a
+// -0.216810
+0xb2f0
+// -0.528238
+0xb83a
+// 0.405195
+0x367c
+// -0.083506
+0xad58
+// 0.000449
+0xf59
+// -0.464291
+0xb76e
+// -0.019857
+0xa515
+// -0.169947
+0xb170
+// -0.376044
+0xb604
+// 0.090843
+0x2dd0
+// -0.221458
+0xb316
+// 0.084262
+0x2d65
+// -0.138296
+0xb06d
+// 0.059415
+0x2b9b
+// 0.198837
+0x325d
+// -0.063674
+0xac13
+// 0.214492
+0x32dd
+// -0.005482
+0x9d9d
+// 0.359475
+0x35c0
+// -0.569871
+0xb88f
+// 0.278625
+0x3475
+// 0.432925
+0x36ed
+// 0.453892
+0x3743
+// -0.437651
+0xb701
+// 0.021434
+0x257d
+// -0.654628
+0xb93d
+// 0.416193
+0x36a9
+// 0.317476
+0x3514
+// 0.582392
+0x38a9
+// -0.319969
+0xb51f
+// -0.717655
+0xb9be
+// -0.137898
+0xb06a
+// -0.513659
+0xb81c
+// -0.127180
+0xb012
+// 0.091017
+0x2dd3
+// -0.389085
+0xb63a
+// 0.281055
+0x347f
+// 0.036319
+0x28a6
+// -0.454822
+0xb747
+// -0.097364
+0xae3b
+// -0.018346
+0xa4b2
+// -0.132280
+0xb03c
+// -0.019581
+0xa503
+// -0.053694
+0xaadf
+// -1.000000
+0xbc00
+// 0.072400
+0x2ca2
+// -0.344655
+0xb584
+// -0.215652
+0xb2e7
+// 0.648358
+0x3930
+// -0.058424
+0xab7a
+// -0.373601
+0xb5fa
+// -0.612667
+0xb8e7
+// -0.230776
+0xb363
+// -0.874476
+0xbaff
+// -0.135680
+0xb057
+// 0.435408
+0x36f7
+// 0.882500
+0x3b0f
+// 0.276670
+0x346d
+// -0.165710
+0xb14d
+// 0.532691
+0x3843
+// -0.246518
+0xb3e3
+// -0.192607
+0xb22a
+// -0.966899
+0xbbbc
diff --git a/Testing/Patterns/DSP/Filtering/FIR/FIRF16/FirCoefs1_f16.txt b/Testing/Patterns/DSP/Filtering/FIR/FIRF16/FirCoefs1_f16.txt
new file mode 100755
index 00000000..43cb123e
--- /dev/null
+++ b/Testing/Patterns/DSP/Filtering/FIR/FIRF16/FirCoefs1_f16.txt
@@ -0,0 +1,996 @@
+H
+497
+// 0.500000
+0x3800
+// 0.250000
+0x3400
+// 0.600000
+0x38cd
+// 0.400000
+0x3666
+// 0.200000
+0x3266
+// 0.666667
+0x3955
+// 0.500000
+0x3800
+// 0.333333
+0x3555
+// 0.166667
+0x3155
+// 0.714286
+0x39b7
+// 0.571429
+0x3892
+// 0.428571
+0x36db
+// 0.285714
+0x3492
+// 0.142857
+0x3092
+// 0.750000
+0x3a00
+// 0.625000
+0x3900
+// 0.500000
+0x3800
+// 0.375000
+0x3600
+// 0.250000
+0x3400
+// 0.125000
+0x3000
+// 0.777778
+0x3a39
+// 0.666667
+0x3955
+// 0.555556
+0x3872
+// 0.444444
+0x371c
+// 0.333333
+0x3555
+// 0.222222
+0x331c
+// 0.111111
+0x2f1c
+// 0.800000
+0x3a66
+// 0.700000
+0x399a
+// 0.600000
+0x38cd
+// 0.500000
+0x3800
+// 0.400000
+0x3666
+// 0.300000
+0x34cd
+// 0.200000
+0x3266
+// 0.100000
+0x2e66
+// 0.846154
+0x3ac5
+// 0.769231
+0x3a27
+// 0.692308
+0x398a
+// 0.615385
+0x38ec
+// 0.538462
+0x384f
+// 0.461538
+0x3762
+// 0.384615
+0x3627
+// 0.307692
+0x34ec
+// 0.230769
+0x3362
+// 0.153846
+0x30ec
+// 0.076923
+0x2cec
+// 0.925926
+0x3b68
+// 0.888889
+0x3b1c
+// 0.851852
+0x3ad1
+// 0.814815
+0x3a85
+// 0.777778
+0x3a39
+// 0.740741
+0x39ed
+// 0.703704
+0x39a1
+// 0.666667
+0x3955
+// 0.629630
+0x3909
+// 0.592593
+0x38be
+// 0.555556
+0x3872
+// 0.518519
+0x3826
+// 0.481481
+0x37b4
+// 0.444444
+0x371c
+// 0.407407
+0x3685
+// 0.370370
+0x35ed
+// 0.333333
+0x3555
+// 0.296296
+0x34be
+// 0.259259
+0x3426
+// 0.222222
+0x331c
+// 0.185185
+0x31ed
+// 0.148148
+0x30be
+// 0.111111
+0x2f1c
+// 0.074074
+0x2cbe
+// 0.037037
+0x28be
+// 0.500000
+0x3800
+// 0.250000
+0x3400
+// 0.600000
+0x38cd
+// 0.400000
+0x3666
+// 0.200000
+0x3266
+// 0.666667
+0x3955
+// 0.500000
+0x3800
+// 0.333333
+0x3555
+// 0.166667
+0x3155
+// 0.714286
+0x39b7
+// 0.571429
+0x3892
+// 0.428571
+0x36db
+// 0.285714
+0x3492
+// 0.142857
+0x3092
+// 0.750000
+0x3a00
+// 0.625000
+0x3900
+// 0.500000
+0x3800
+// 0.375000
+0x3600
+// 0.250000
+0x3400
+// 0.125000
+0x3000
+// 0.777778
+0x3a39
+// 0.666667
+0x3955
+// 0.555556
+0x3872
+// 0.444444
+0x371c
+// 0.333333
+0x3555
+// 0.222222
+0x331c
+// 0.111111
+0x2f1c
+// 0.800000
+0x3a66
+// 0.700000
+0x399a
+// 0.600000
+0x38cd
+// 0.500000
+0x3800
+// 0.400000
+0x3666
+// 0.300000
+0x34cd
+// 0.200000
+0x3266
+// 0.100000
+0x2e66
+// 0.846154
+0x3ac5
+// 0.769231
+0x3a27
+// 0.692308
+0x398a
+// 0.615385
+0x38ec
+// 0.538462
+0x384f
+// 0.461538
+0x3762
+// 0.384615
+0x3627
+// 0.307692
+0x34ec
+// 0.230769
+0x3362
+// 0.153846
+0x30ec
+// 0.076923
+0x2cec
+// 0.925926
+0x3b68
+// 0.888889
+0x3b1c
+// 0.851852
+0x3ad1
+// 0.814815
+0x3a85
+// 0.777778
+0x3a39
+// 0.740741
+0x39ed
+// 0.703704
+0x39a1
+// 0.666667
+0x3955
+// 0.629630
+0x3909
+// 0.592593
+0x38be
+// 0.555556
+0x3872
+// 0.518519
+0x3826
+// 0.481481
+0x37b4
+// 0.444444
+0x371c
+// 0.407407
+0x3685
+// 0.370370
+0x35ed
+// 0.333333
+0x3555
+// 0.296296
+0x34be
+// 0.259259
+0x3426
+// 0.222222
+0x331c
+// 0.185185
+0x31ed
+// 0.148148
+0x30be
+// 0.111111
+0x2f1c
+// 0.074074
+0x2cbe
+// 0.037037
+0x28be
+// 0.500000
+0x3800
+// 0.250000
+0x3400
+// 0.600000
+0x38cd
+// 0.400000
+0x3666
+// 0.200000
+0x3266
+// 0.666667
+0x3955
+// 0.500000
+0x3800
+// 0.333333
+0x3555
+// 0.166667
+0x3155
+// 0.714286
+0x39b7
+// 0.571429
+0x3892
+// 0.428571
+0x36db
+// 0.285714
+0x3492
+// 0.142857
+0x3092
+// 0.750000
+0x3a00
+// 0.625000
+0x3900
+// 0.500000
+0x3800
+// 0.375000
+0x3600
+// 0.250000
+0x3400
+// 0.125000
+0x3000
+// 0.777778
+0x3a39
+// 0.666667
+0x3955
+// 0.555556
+0x3872
+// 0.444444
+0x371c
+// 0.333333
+0x3555
+// 0.222222
+0x331c
+// 0.111111
+0x2f1c
+// 0.800000
+0x3a66
+// 0.700000
+0x399a
+// 0.600000
+0x38cd
+// 0.500000
+0x3800
+// 0.400000
+0x3666
+// 0.300000
+0x34cd
+// 0.200000
+0x3266
+// 0.100000
+0x2e66
+// 0.846154
+0x3ac5
+// 0.769231
+0x3a27
+// 0.692308
+0x398a
+// 0.615385
+0x38ec
+// 0.538462
+0x384f
+// 0.461538
+0x3762
+// 0.384615
+0x3627
+// 0.307692
+0x34ec
+// 0.230769
+0x3362
+// 0.153846
+0x30ec
+// 0.076923
+0x2cec
+// 0.925926
+0x3b68
+// 0.888889
+0x3b1c
+// 0.851852
+0x3ad1
+// 0.814815
+0x3a85
+// 0.777778
+0x3a39
+// 0.740741
+0x39ed
+// 0.703704
+0x39a1
+// 0.666667
+0x3955
+// 0.629630
+0x3909
+// 0.592593
+0x38be
+// 0.555556
+0x3872
+// 0.518519
+0x3826
+// 0.481481
+0x37b4
+// 0.444444
+0x371c
+// 0.407407
+0x3685
+// 0.370370
+0x35ed
+// 0.333333
+0x3555
+// 0.296296
+0x34be
+// 0.259259
+0x3426
+// 0.222222
+0x331c
+// 0.185185
+0x31ed
+// 0.148148
+0x30be
+// 0.111111
+0x2f1c
+// 0.074074
+0x2cbe
+// 0.037037
+0x28be
+// 0.500000
+0x3800
+// 0.250000
+0x3400
+// 0.600000
+0x38cd
+// 0.400000
+0x3666
+// 0.200000
+0x3266
+// 0.666667
+0x3955
+// 0.500000
+0x3800
+// 0.333333
+0x3555
+// 0.166667
+0x3155
+// 0.714286
+0x39b7
+// 0.571429
+0x3892
+// 0.428571
+0x36db
+// 0.285714
+0x3492
+// 0.142857
+0x3092
+// 0.750000
+0x3a00
+// 0.625000
+0x3900
+// 0.500000
+0x3800
+// 0.375000
+0x3600
+// 0.250000
+0x3400
+// 0.125000
+0x3000
+// 0.777778
+0x3a39
+// 0.666667
+0x3955
+// 0.555556
+0x3872
+// 0.444444
+0x371c
+// 0.333333
+0x3555
+// 0.222222
+0x331c
+// 0.111111
+0x2f1c
+// 0.800000
+0x3a66
+// 0.700000
+0x399a
+// 0.600000
+0x38cd
+// 0.500000
+0x3800
+// 0.400000
+0x3666
+// 0.300000
+0x34cd
+// 0.200000
+0x3266
+// 0.100000
+0x2e66
+// 0.846154
+0x3ac5
+// 0.769231
+0x3a27
+// 0.692308
+0x398a
+// 0.615385
+0x38ec
+// 0.538462
+0x384f
+// 0.461538
+0x3762
+// 0.384615
+0x3627
+// 0.307692
+0x34ec
+// 0.230769
+0x3362
+// 0.153846
+0x30ec
+// 0.076923
+0x2cec
+// 0.925926
+0x3b68
+// 0.888889
+0x3b1c
+// 0.851852
+0x3ad1
+// 0.814815
+0x3a85
+// 0.777778
+0x3a39
+// 0.740741
+0x39ed
+// 0.703704
+0x39a1
+// 0.666667
+0x3955
+// 0.629630
+0x3909
+// 0.592593
+0x38be
+// 0.555556
+0x3872
+// 0.518519
+0x3826
+// 0.481481
+0x37b4
+// 0.444444
+0x371c
+// 0.407407
+0x3685
+// 0.370370
+0x35ed
+// 0.333333
+0x3555
+// 0.296296
+0x34be
+// 0.259259
+0x3426
+// 0.222222
+0x331c
+// 0.185185
+0x31ed
+// 0.148148
+0x30be
+// 0.111111
+0x2f1c
+// 0.074074
+0x2cbe
+// 0.037037
+0x28be
+// 0.500000
+0x3800
+// 0.250000
+0x3400
+// 0.600000
+0x38cd
+// 0.400000
+0x3666
+// 0.200000
+0x3266
+// 0.666667
+0x3955
+// 0.500000
+0x3800
+// 0.333333
+0x3555
+// 0.166667
+0x3155
+// 0.714286
+0x39b7
+// 0.571429
+0x3892
+// 0.428571
+0x36db
+// 0.285714
+0x3492
+// 0.142857
+0x3092
+// 0.750000
+0x3a00
+// 0.625000
+0x3900
+// 0.500000
+0x3800
+// 0.375000
+0x3600
+// 0.250000
+0x3400
+// 0.125000
+0x3000
+// 0.777778
+0x3a39
+// 0.666667
+0x3955
+// 0.555556
+0x3872
+// 0.444444
+0x371c
+// 0.333333
+0x3555
+// 0.222222
+0x331c
+// 0.111111
+0x2f1c
+// 0.800000
+0x3a66
+// 0.700000
+0x399a
+// 0.600000
+0x38cd
+// 0.500000
+0x3800
+// 0.400000
+0x3666
+// 0.300000
+0x34cd
+// 0.200000
+0x3266
+// 0.100000
+0x2e66
+// 0.846154
+0x3ac5
+// 0.769231
+0x3a27
+// 0.692308
+0x398a
+// 0.615385
+0x38ec
+// 0.538462
+0x384f
+// 0.461538
+0x3762
+// 0.384615
+0x3627
+// 0.307692
+0x34ec
+// 0.230769
+0x3362
+// 0.153846
+0x30ec
+// 0.076923
+0x2cec
+// 0.925926
+0x3b68
+// 0.888889
+0x3b1c
+// 0.851852
+0x3ad1
+// 0.814815
+0x3a85
+// 0.777778
+0x3a39
+// 0.740741
+0x39ed
+// 0.703704
+0x39a1
+// 0.666667
+0x3955
+// 0.629630
+0x3909
+// 0.592593
+0x38be
+// 0.555556
+0x3872
+// 0.518519
+0x3826
+// 0.481481
+0x37b4
+// 0.444444
+0x371c
+// 0.407407
+0x3685
+// 0.370370
+0x35ed
+// 0.333333
+0x3555
+// 0.296296
+0x34be
+// 0.259259
+0x3426
+// 0.222222
+0x331c
+// 0.185185
+0x31ed
+// 0.148148
+0x30be
+// 0.111111
+0x2f1c
+// 0.074074
+0x2cbe
+// 0.037037
+0x28be
+// 0.500000
+0x3800
+// 0.250000
+0x3400
+// 0.600000
+0x38cd
+// 0.400000
+0x3666
+// 0.200000
+0x3266
+// 0.666667
+0x3955
+// 0.500000
+0x3800
+// 0.333333
+0x3555
+// 0.166667
+0x3155
+// 0.714286
+0x39b7
+// 0.571429
+0x3892
+// 0.428571
+0x36db
+// 0.285714
+0x3492
+// 0.142857
+0x3092
+// 0.750000
+0x3a00
+// 0.625000
+0x3900
+// 0.500000
+0x3800
+// 0.375000
+0x3600
+// 0.250000
+0x3400
+// 0.125000
+0x3000
+// 0.777778
+0x3a39
+// 0.666667
+0x3955
+// 0.555556
+0x3872
+// 0.444444
+0x371c
+// 0.333333
+0x3555
+// 0.222222
+0x331c
+// 0.111111
+0x2f1c
+// 0.800000
+0x3a66
+// 0.700000
+0x399a
+// 0.600000
+0x38cd
+// 0.500000
+0x3800
+// 0.400000
+0x3666
+// 0.300000
+0x34cd
+// 0.200000
+0x3266
+// 0.100000
+0x2e66
+// 0.846154
+0x3ac5
+// 0.769231
+0x3a27
+// 0.692308
+0x398a
+// 0.615385
+0x38ec
+// 0.538462
+0x384f
+// 0.461538
+0x3762
+// 0.384615
+0x3627
+// 0.307692
+0x34ec
+// 0.230769
+0x3362
+// 0.153846
+0x30ec
+// 0.076923
+0x2cec
+// 0.925926
+0x3b68
+// 0.888889
+0x3b1c
+// 0.851852
+0x3ad1
+// 0.814815
+0x3a85
+// 0.777778
+0x3a39
+// 0.740741
+0x39ed
+// 0.703704
+0x39a1
+// 0.666667
+0x3955
+// 0.629630
+0x3909
+// 0.592593
+0x38be
+// 0.555556
+0x3872
+// 0.518519
+0x3826
+// 0.481481
+0x37b4
+// 0.444444
+0x371c
+// 0.407407
+0x3685
+// 0.370370
+0x35ed
+// 0.333333
+0x3555
+// 0.296296
+0x34be
+// 0.259259
+0x3426
+// 0.222222
+0x331c
+// 0.185185
+0x31ed
+// 0.148148
+0x30be
+// 0.111111
+0x2f1c
+// 0.074074
+0x2cbe
+// 0.037037
+0x28be
+// 0.500000
+0x3800
+// 0.250000
+0x3400
+// 0.600000
+0x38cd
+// 0.400000
+0x3666
+// 0.200000
+0x3266
+// 0.666667
+0x3955
+// 0.500000
+0x3800
+// 0.333333
+0x3555
+// 0.166667
+0x3155
+// 0.714286
+0x39b7
+// 0.571429
+0x3892
+// 0.428571
+0x36db
+// 0.285714
+0x3492
+// 0.142857
+0x3092
+// 0.750000
+0x3a00
+// 0.625000
+0x3900
+// 0.500000
+0x3800
+// 0.375000
+0x3600
+// 0.250000
+0x3400
+// 0.125000
+0x3000
+// 0.777778
+0x3a39
+// 0.666667
+0x3955
+// 0.555556
+0x3872
+// 0.444444
+0x371c
+// 0.333333
+0x3555
+// 0.222222
+0x331c
+// 0.111111
+0x2f1c
+// 0.800000
+0x3a66
+// 0.700000
+0x399a
+// 0.600000
+0x38cd
+// 0.500000
+0x3800
+// 0.400000
+0x3666
+// 0.300000
+0x34cd
+// 0.200000
+0x3266
+// 0.100000
+0x2e66
+// 0.846154
+0x3ac5
+// 0.769231
+0x3a27
+// 0.692308
+0x398a
+// 0.615385
+0x38ec
+// 0.538462
+0x384f
+// 0.461538
+0x3762
+// 0.384615
+0x3627
+// 0.307692
+0x34ec
+// 0.230769
+0x3362
+// 0.153846
+0x30ec
+// 0.076923
+0x2cec
+// 0.925926
+0x3b68
+// 0.888889
+0x3b1c
+// 0.851852
+0x3ad1
+// 0.814815
+0x3a85
+// 0.777778
+0x3a39
+// 0.740741
+0x39ed
+// 0.703704
+0x39a1
+// 0.666667
+0x3955
+// 0.629630
+0x3909
+// 0.592593
+0x38be
+// 0.555556
+0x3872
+// 0.518519
+0x3826
+// 0.481481
+0x37b4
+// 0.444444
+0x371c
+// 0.407407
+0x3685
+// 0.370370
+0x35ed
+// 0.333333
+0x3555
+// 0.296296
+0x34be
+// 0.259259
+0x3426
+// 0.222222
+0x331c
+// 0.185185
+0x31ed
+// 0.148148
+0x30be
+// 0.111111
+0x2f1c
+// 0.074074
+0x2cbe
+// 0.037037
+0x28be
diff --git a/Testing/Patterns/DSP/Filtering/FIR/FIRF16/FirConfigs1_s16.txt b/Testing/Patterns/DSP/Filtering/FIR/FIRF16/FirConfigs1_s16.txt
new file mode 100755
index 00000000..282ab253
--- /dev/null
+++ b/Testing/Patterns/DSP/Filtering/FIR/FIRF16/FirConfigs1_s16.txt
@@ -0,0 +1,254 @@
+H
+126
+// 1
+0x0001
+// 2
+0x0002
+// 1
+0x0001
+// 3
+0x0003
+// 1
+0x0001
+// 4
+0x0004
+// 1
+0x0001
+// 5
+0x0005
+// 1
+0x0001
+// 6
+0x0006
+// 1
+0x0001
+// 7
+0x0007
+// 1
+0x0001
+// 8
+0x0008
+// 1
+0x0001
+// 11
+0x000B
+// 1
+0x0001
+// 25
+0x0019
+// 2
+0x0002
+// 2
+0x0002
+// 2
+0x0002
+// 3
+0x0003
+// 2
+0x0002
+// 4
+0x0004
+// 2
+0x0002
+// 5
+0x0005
+// 2
+0x0002
+// 6
+0x0006
+// 2
+0x0002
+// 7
+0x0007
+// 2
+0x0002
+// 8
+0x0008
+// 2
+0x0002
+// 11
+0x000B
+// 2
+0x0002
+// 25
+0x0019
+// 3
+0x0003
+// 2
+0x0002
+// 3
+0x0003
+// 3
+0x0003
+// 3
+0x0003
+// 4
+0x0004
+// 3
+0x0003
+// 5
+0x0005
+// 3
+0x0003
+// 6
+0x0006
+// 3
+0x0003
+// 7
+0x0007
+// 3
+0x0003
+// 8
+0x0008
+// 3
+0x0003
+// 11
+0x000B
+// 3
+0x0003
+// 25
+0x0019
+// 12
+0x000C
+// 2
+0x0002
+// 12
+0x000C
+// 3
+0x0003
+// 12
+0x000C
+// 4
+0x0004
+// 12
+0x000C
+// 5
+0x0005
+// 12
+0x000C
+// 6
+0x0006
+// 12
+0x000C
+// 7
+0x0007
+// 12
+0x000C
+// 8
+0x0008
+// 12
+0x000C
+// 11
+0x000B
+// 12
+0x000C
+// 25
+0x0019
+// 13
+0x000D
+// 2
+0x0002
+// 13
+0x000D
+// 3
+0x0003
+// 13
+0x000D
+// 4
+0x0004
+// 13
+0x000D
+// 5
+0x0005
+// 13
+0x000D
+// 6
+0x0006
+// 13
+0x000D
+// 7
+0x0007
+// 13
+0x000D
+// 8
+0x0008
+// 13
+0x000D
+// 11
+0x000B
+// 13
+0x000D
+// 25
+0x0019
+// 14
+0x000E
+// 2
+0x0002
+// 14
+0x000E
+// 3
+0x0003
+// 14
+0x000E
+// 4
+0x0004
+// 14
+0x000E
+// 5
+0x0005
+// 14
+0x000E
+// 6
+0x0006
+// 14
+0x000E
+// 7
+0x0007
+// 14
+0x000E
+// 8
+0x0008
+// 14
+0x000E
+// 11
+0x000B
+// 14
+0x000E
+// 25
+0x0019
+// 15
+0x000F
+// 2
+0x0002
+// 15
+0x000F
+// 3
+0x0003
+// 15
+0x000F
+// 4
+0x0004
+// 15
+0x000F
+// 5
+0x0005
+// 15
+0x000F
+// 6
+0x0006
+// 15
+0x000F
+// 7
+0x0007
+// 15
+0x000F
+// 8
+0x0008
+// 15
+0x000F
+// 11
+0x000B
+// 15
+0x000F
+// 25
+0x0019
diff --git a/Testing/Patterns/DSP/Filtering/FIR/FIRF16/FirInput1_f16.txt b/Testing/Patterns/DSP/Filtering/FIR/FIRF16/FirInput1_f16.txt
new file mode 100755
index 00000000..14818be7
--- /dev/null
+++ b/Testing/Patterns/DSP/Filtering/FIR/FIRF16/FirInput1_f16.txt
@@ -0,0 +1,94 @@
+H
+46
+// -0.000700
+0x91bd
+// 0.021809
+0x2595
+// 0.027493
+0x270a
+// 0.026437
+0x26c5
+// 0.007935
+0x2010
+// -0.007331
+0x9f82
+// -0.024370
+0xa63d
+// -0.030877
+0xa7e8
+// -0.018988
+0xa4dc
+// -0.004488
+0x9c98
+// 0.015286
+0x23d4
+// 0.030232
+0x27bd
+// 0.028046
+0x272e
+// 0.009504
+0x20de
+// -0.008154
+0xa02d
+// -0.023052
+0xa5e7
+// -0.029021
+0xa76e
+// -0.023819
+0xa619
+// 0.000666
+0x1174
+// 0.018105
+0x24a3
+// 0.027556
+0x270e
+// 0.024663
+0x2650
+// 0.009321
+0x20c6
+// -0.006156
+0x9e4e
+// -0.025390
+0xa680
+// -0.029759
+0xa79e
+// -0.014619
+0xa37c
+// -0.001256
+0x9525
+// 0.022857
+0x25da
+// 0.030488
+0x27ce
+// 0.028626
+0x2754
+// 0.012083
+0x2230
+// -0.010159
+0xa134
+// -0.024086
+0xa62a
+// -0.033333
+0xa844
+// -0.020435
+0xa53b
+// -0.001083
+0x946f
+// 0.019899
+0x2518
+// 0.028454
+0x2749
+// 0.026614
+0x26d0
+// 0.006058
+0x1e34
+// -0.011197
+0xa1bc
+// -0.025509
+0xa688
+// -0.031663
+0xa80e
+// -0.021418
+0xa57c
+// 0.004721
+0x1cd6
diff --git a/Testing/Patterns/DSP/Filtering/FIR/FIRF16/FirRefs1_f16.txt b/Testing/Patterns/DSP/Filtering/FIR/FIRF16/FirRefs1_f16.txt
new file mode 100755
index 00000000..9b8f3b77
--- /dev/null
+++ b/Testing/Patterns/DSP/Filtering/FIR/FIRF16/FirRefs1_f16.txt
@@ -0,0 +1,2162 @@
+H
+1080
+// -0.000175
+0x89bd
+// 0.005102
+0x1d39
+// -0.000140
+0x8897
+// 0.004082
+0x1c2e
+// -0.000117
+0x87a6
+// 0.003401
+0x1af7
+// -0.000100
+0x868e
+// 0.002915
+0x19f9
+// -0.000088
+0x85bd
+// 0.002551
+0x1939
+// -0.000078
+0x8519
+// 0.002268
+0x18a5
+// -0.000070
+0x8497
+// 0.002041
+0x182e
+// -0.000054
+0x8388
+// 0.001570
+0x166e
+// -0.000026
+0x81b3
+// 0.000756
+0x1231
+// -0.000175
+0x89bd
+// 0.005102
+0x1d39
+// 0.017778
+0x248d
+// 0.020356
+0x2536
+// -0.000140
+0x8897
+// 0.004082
+0x1c2e
+// 0.013802
+0x2311
+// 0.029370
+0x2785
+// -0.000117
+0x87a6
+// 0.003401
+0x1af7
+// 0.011502
+0x21e4
+// 0.024008
+0x2625
+// -0.000100
+0x868e
+// 0.002915
+0x19f9
+// 0.009858
+0x210c
+// 0.020578
+0x2545
+// -0.000088
+0x85bd
+// 0.002551
+0x1939
+// 0.008626
+0x206b
+// 0.018006
+0x249c
+// -0.000078
+0x8519
+// 0.002268
+0x18a5
+// 0.007668
+0x1fda
+// 0.016005
+0x2419
+// -0.000070
+0x8497
+// 0.002041
+0x182e
+// 0.006901
+0x1f11
+// 0.014405
+0x2360
+// -0.000054
+0x8388
+// 0.001570
+0x166e
+// 0.005308
+0x1d70
+// 0.011081
+0x21ac
+// -0.000026
+0x81b3
+// 0.000756
+0x1231
+// 0.002556
+0x193c
+// 0.005335
+0x1d77
+// -0.000175
+0x89bd
+// 0.005102
+0x1d39
+// 0.017778
+0x248d
+// 0.020356
+0x2536
+// 0.015202
+0x23c9
+// 0.002135
+0x185f
+// -0.000140
+0x8897
+// 0.004082
+0x1c2e
+// 0.013802
+0x2311
+// 0.029370
+0x2785
+// 0.028658
+0x2756
+// 0.017570
+0x247f
+// -0.000117
+0x87a6
+// 0.003401
+0x1af7
+// 0.011502
+0x21e4
+// 0.024008
+0x2625
+// 0.038420
+0x28eb
+// 0.032970
+0x2838
+// -0.000100
+0x868e
+// 0.002915
+0x19f9
+// 0.009858
+0x210c
+// 0.020578
+0x2545
+// 0.032432
+0x2827
+// 0.043838
+0x299c
+// -0.000088
+0x85bd
+// 0.002551
+0x1939
+// 0.008626
+0x206b
+// 0.018006
+0x249c
+// 0.028378
+0x2744
+// 0.037833
+0x28d8
+// -0.000078
+0x8519
+// 0.002268
+0x18a5
+// 0.007668
+0x1fda
+// 0.016005
+0x2419
+// 0.025225
+0x2675
+// 0.033629
+0x284e
+// -0.000070
+0x8497
+// 0.002041
+0x182e
+// 0.006901
+0x1f11
+// 0.014405
+0x2360
+// 0.022702
+0x25d0
+// 0.030266
+0x27c0
+// -0.000054
+0x8388
+// 0.001570
+0x166e
+// 0.005308
+0x1d70
+// 0.011081
+0x21ac
+// 0.017463
+0x2478
+// 0.023282
+0x25f6
+// -0.000026
+0x81b3
+// 0.000756
+0x1231
+// 0.002556
+0x193c
+// 0.005335
+0x1d77
+// 0.008408
+0x204e
+// 0.011210
+0x21bd
+// -0.000175
+0x89bd
+// 0.005102
+0x1d39
+// 0.017778
+0x248d
+// 0.020356
+0x2536
+// 0.015202
+0x23c9
+// 0.002135
+0x185f
+// -0.009758
+0xa0ff
+// -0.019904
+0xa518
+// -0.020185
+0xa52b
+// -0.010616
+0xa16f
+// 0.001578
+0x1676
+// 0.015201
+0x23c8
+// 0.022128
+0x25aa
+// 0.016399
+0x2433
+// 0.002714
+0x198f
+// -0.009840
+0xa10a
+// -0.018781
+0xa4cf
+// -0.020465
+0xa53d
+// -0.011743
+0xa203
+// 0.004859
+0x1cfa
+// 0.015941
+0x2415
+// 0.019944
+0x251b
+// 0.014662
+0x2382
+// 0.003121
+0x1a65
+// -0.000140
+0x8897
+// 0.004082
+0x1c2e
+// 0.013802
+0x2311
+// 0.029370
+0x2785
+// 0.028658
+0x2756
+// 0.017570
+0x247f
+// -0.003045
+0x9a3d
+// -0.020322
+0xa534
+// -0.030771
+0xa7e1
+// -0.027019
+0xa6eb
+// -0.010131
+0xa130
+// 0.009468
+0x20d9
+// 0.026873
+0x26e1
+// 0.031258
+0x2800
+// 0.018998
+0x24dd
+// -0.002170
+0x9871
+// -0.019917
+0xa519
+// -0.030204
+0xa7bb
+// -0.026807
+0xa6dd
+// -0.010404
+0xa154
+// 0.013153
+0x22bc
+// 0.026818
+0x26de
+// 0.028263
+0x273c
+// 0.017295
+0x246d
+// -0.000117
+0x87a6
+// 0.003401
+0x1af7
+// 0.011502
+0x21e4
+// 0.024008
+0x2625
+// 0.038420
+0x28eb
+// 0.032970
+0x2838
+// 0.015087
+0x23b9
+// -0.011645
+0xa1f6
+// -0.030530
+0xa7d1
+// -0.038763
+0xa8f6
+// -0.029027
+0xa76e
+// -0.004769
+0x9ce2
+// 0.019403
+0x24f8
+// 0.036239
+0x28a3
+// 0.035987
+0x289b
+// 0.016889
+0x2453
+// -0.010262
+0xa141
+// -0.030605
+0xa7d6
+// -0.037707
+0xa8d4
+// -0.028017
+0xa72c
+// -0.004919
+0x9d09
+// 0.022792
+0x25d6
+// 0.035623
+0x288f
+// 0.032783
+0x2832
+// -0.000100
+0x868e
+// 0.002915
+0x19f9
+// 0.009858
+0x210c
+// 0.020578
+0x2545
+// 0.032432
+0x2827
+// 0.043838
+0x299c
+// 0.032570
+0x282b
+// 0.008902
+0x208f
+// -0.020500
+0xa53f
+// -0.038462
+0xa8ec
+// -0.042288
+0xa96a
+// -0.026142
+0xa6b1
+// 0.003068
+0x1a49
+// 0.027857
+0x2722
+// 0.041764
+0x2959
+// 0.036071
+0x289e
+// 0.011237
+0x21c1
+// -0.019445
+0xa4fa
+// -0.038145
+0xa8e2
+// -0.040481
+0xa92e
+// -0.024945
+0xa663
+// 0.002522
+0x192b
+// 0.031009
+0x27f0
+// 0.041032
+0x2941
+// -0.000088
+0x85bd
+// 0.002551
+0x1939
+// 0.008626
+0x206b
+// 0.018006
+0x249c
+// 0.028378
+0x2744
+// 0.037833
+0x28d8
+// 0.044855
+0x29be
+// 0.028409
+0x2746
+// 0.001890
+0x17be
+// -0.027702
+0xa718
+// -0.042500
+0xa971
+// -0.041152
+0xa944
+// -0.020473
+0xa53e
+// 0.010134
+0x2130
+// 0.033178
+0x283f
+// 0.043026
+0x2982
+// 0.032506
+0x2829
+// 0.004020
+0x1c1e
+// -0.026249
+0xa6b8
+// -0.041536
+0xa951
+// -0.039116
+0xa902
+// -0.019558
+0xa502
+// 0.009269
+0x20bf
+// 0.036402
+0x28a9
+// -0.000078
+0x8519
+// 0.002268
+0x18a5
+// 0.007668
+0x1fda
+// 0.016005
+0x2419
+// 0.025225
+0x2675
+// 0.033629
+0x284e
+// 0.039326
+0x2909
+// 0.042215
+0x2967
+// 0.023064
+0x25e7
+// -0.004062
+0x9c29
+// -0.031606
+0xa80c
+// -0.042282
+0xa969
+// -0.037153
+0xa8c1
+// -0.015008
+0xa3af
+// 0.014723
+0x238a
+// 0.034755
+0x2873
+// 0.040784
+0x2938
+// 0.027088
+0x26ef
+// -0.001519
+0x9638
+// -0.029529
+0xa78f
+// -0.041112
+0xa943
+// -0.035315
+0xa885
+// -0.014333
+0xa357
+// 0.013832
+0x2315
+// -0.000070
+0x8497
+// 0.002041
+0x182e
+// 0.006901
+0x1f11
+// 0.014405
+0x2360
+// 0.022702
+0x25d0
+// 0.030266
+0x27c0
+// 0.035394
+0x2888
+// 0.037433
+0x28cb
+// 0.038204
+0x28e4
+// 0.018338
+0x24b2
+// -0.007296
+0x9f79
+// -0.031705
+0xa80f
+// -0.039303
+0xa908
+// -0.033003
+0xa839
+// -0.011451
+0xa1dd
+// 0.016089
+0x241e
+// 0.033115
+0x283d
+// 0.036607
+0x28b0
+// 0.022819
+0x25d7
+// -0.004139
+0x9c3d
+// -0.029398
+0xa787
+// -0.038306
+0xa8e7
+// -0.031341
+0xa803
+// -0.010768
+0xa183
+// -0.000054
+0x8388
+// 0.001570
+0x166e
+// 0.005308
+0x1d70
+// 0.011081
+0x21ac
+// 0.017463
+0x2478
+// 0.023282
+0x25f6
+// 0.027226
+0x26f8
+// 0.028795
+0x275f
+// 0.028903
+0x2766
+// 0.028666
+0x2757
+// 0.029605
+0x2794
+// 0.033516
+0x284a
+// 0.018860
+0x24d4
+// -0.001989
+0x9813
+// -0.024605
+0xa64d
+// -0.033950
+0xa858
+// -0.032045
+0xa81a
+// -0.015680
+0xa404
+// 0.008617
+0x2069
+// 0.025707
+0x2695
+// 0.032992
+0x2839
+// 0.024268
+0x2636
+// 0.001288
+0x1547
+// -0.022473
+0xa5c1
+// -0.000026
+0x81b3
+// 0.000756
+0x1231
+// 0.002556
+0x193c
+// 0.005335
+0x1d77
+// 0.008408
+0x204e
+// 0.011210
+0x21bd
+// 0.013109
+0x22b6
+// 0.013864
+0x2319
+// 0.013916
+0x2320
+// 0.013802
+0x2311
+// 0.014254
+0x234c
+// 0.015826
+0x240d
+// 0.018436
+0x24b8
+// 0.021399
+0x257a
+// 0.024059
+0x2629
+// 0.025866
+0x269f
+// 0.026598
+0x26cf
+// 0.026448
+0x26c5
+// 0.026322
+0x26bd
+// 0.026867
+0x26e1
+// 0.028432
+0x2747
+// 0.030911
+0x27ea
+// 0.033736
+0x2851
+// 0.036332
+0x28a7
+// -0.000175
+0x89bd
+// 0.005102
+0x1d39
+// 0.017778
+0x248d
+// 0.020356
+0x2536
+// 0.015202
+0x23c9
+// 0.002135
+0x185f
+// -0.009758
+0xa0ff
+// -0.019904
+0xa518
+// -0.020185
+0xa52b
+// -0.010616
+0xa16f
+// 0.001578
+0x1676
+// 0.015201
+0x23c8
+// 0.022128
+0x25aa
+// 0.016399
+0x2433
+// 0.002714
+0x198f
+// -0.009840
+0xa10a
+// -0.018781
+0xa4cf
+// -0.020465
+0xa53d
+// -0.011743
+0xa203
+// 0.004859
+0x1cfa
+// 0.015941
+0x2415
+// 0.019944
+0x251b
+// 0.014662
+0x2382
+// 0.003121
+0x1a65
+// -0.009426
+0xa0d3
+// -0.020135
+0xa528
+// -0.000140
+0x8897
+// 0.004082
+0x1c2e
+// 0.013802
+0x2311
+// 0.029370
+0x2785
+// 0.028658
+0x2756
+// 0.017570
+0x247f
+// -0.003045
+0x9a3d
+// -0.020322
+0xa534
+// -0.030771
+0xa7e1
+// -0.027019
+0xa6eb
+// -0.010131
+0xa130
+// 0.009468
+0x20d9
+// 0.026873
+0x26e1
+// 0.031258
+0x2800
+// 0.018998
+0x24dd
+// -0.002170
+0x9871
+// -0.019917
+0xa519
+// -0.030204
+0xa7bb
+// -0.026807
+0xa6dd
+// -0.010404
+0xa154
+// 0.013153
+0x22bc
+// 0.026818
+0x26de
+// 0.028263
+0x273c
+// 0.017295
+0x246d
+// -0.001948
+0x97fa
+// -0.019801
+0xa512
+// -0.000117
+0x87a6
+// 0.003401
+0x1af7
+// 0.011502
+0x21e4
+// 0.024008
+0x2625
+// 0.038420
+0x28eb
+// 0.032970
+0x2838
+// 0.015087
+0x23b9
+// -0.011645
+0xa1f6
+// -0.030530
+0xa7d1
+// -0.038763
+0xa8f6
+// -0.029027
+0xa76e
+// -0.004769
+0x9ce2
+// 0.019403
+0x24f8
+// 0.036239
+0x28a3
+// 0.035987
+0x289b
+// 0.016889
+0x2453
+// -0.010262
+0xa141
+// -0.030605
+0xa7d6
+// -0.037707
+0xa8d4
+// -0.028017
+0xa72c
+// -0.004919
+0x9d09
+// 0.022792
+0x25d6
+// 0.035623
+0x288f
+// 0.032783
+0x2832
+// 0.014819
+0x2396
+// -0.010287
+0xa144
+// -0.000100
+0x868e
+// 0.002915
+0x19f9
+// 0.009858
+0x210c
+// 0.020578
+0x2545
+// 0.032432
+0x2827
+// 0.043838
+0x299c
+// 0.032570
+0x282b
+// 0.008902
+0x208f
+// -0.020500
+0xa53f
+// -0.038462
+0xa8ec
+// -0.042288
+0xa96a
+// -0.026142
+0xa6b1
+// 0.003068
+0x1a49
+// 0.027857
+0x2722
+// 0.041764
+0x2959
+// 0.036071
+0x289e
+// 0.011237
+0x21c1
+// -0.019445
+0xa4fa
+// -0.038145
+0xa8e2
+// -0.040481
+0xa92e
+// -0.024945
+0xa663
+// 0.002522
+0x192b
+// 0.031009
+0x27f0
+// 0.041032
+0x2941
+// 0.032385
+0x2825
+// 0.008799
+0x2081
+// -0.000088
+0x85bd
+// 0.002551
+0x1939
+// 0.008626
+0x206b
+// 0.018006
+0x249c
+// 0.028378
+0x2744
+// 0.037833
+0x28d8
+// 0.044855
+0x29be
+// 0.028409
+0x2746
+// 0.001890
+0x17be
+// -0.027702
+0xa718
+// -0.042500
+0xa971
+// -0.041152
+0xa944
+// -0.020473
+0xa53e
+// 0.010134
+0x2130
+// 0.033178
+0x283f
+// 0.043026
+0x2982
+// 0.032506
+0x2829
+// 0.004020
+0x1c1e
+// -0.026249
+0xa6b8
+// -0.041536
+0xa951
+// -0.039116
+0xa902
+// -0.019558
+0xa502
+// 0.009269
+0x20bf
+// 0.036402
+0x28a9
+// 0.041916
+0x295d
+// 0.028366
+0x2743
+// -0.000078
+0x8519
+// 0.002268
+0x18a5
+// 0.007668
+0x1fda
+// 0.016005
+0x2419
+// 0.025225
+0x2675
+// 0.033629
+0x284e
+// 0.039326
+0x2909
+// 0.042215
+0x2967
+// 0.023064
+0x25e7
+// -0.004062
+0x9c29
+// -0.031606
+0xa80c
+// -0.042282
+0xa969
+// -0.037153
+0xa8c1
+// -0.015008
+0xa3af
+// 0.014723
+0x238a
+// 0.034755
+0x2873
+// 0.040784
+0x2938
+// 0.027088
+0x26ef
+// -0.001519
+0x9638
+// -0.029529
+0xa78f
+// -0.041112
+0xa943
+// -0.035315
+0xa885
+// -0.014333
+0xa357
+// 0.013832
+0x2315
+// 0.037776
+0x28d6
+// 0.039296
+0x2908
+// -0.000070
+0x8497
+// 0.002041
+0x182e
+// 0.006901
+0x1f11
+// 0.014405
+0x2360
+// 0.022702
+0x25d0
+// 0.030266
+0x27c0
+// 0.035394
+0x2888
+// 0.037433
+0x28cb
+// 0.038204
+0x28e4
+// 0.018338
+0x24b2
+// -0.007296
+0x9f79
+// -0.031705
+0xa80f
+// -0.039303
+0xa908
+// -0.033003
+0xa839
+// -0.011451
+0xa1dd
+// 0.016089
+0x241e
+// 0.033115
+0x283d
+// 0.036607
+0x28b0
+// 0.022819
+0x25d7
+// -0.004139
+0x9c3d
+// -0.029398
+0xa787
+// -0.038306
+0xa8e7
+// -0.031341
+0xa803
+// -0.010768
+0xa183
+// 0.014943
+0x23a7
+// 0.035899
+0x2898
+// -0.000054
+0x8388
+// 0.001570
+0x166e
+// 0.005308
+0x1d70
+// 0.011081
+0x21ac
+// 0.017463
+0x2478
+// 0.023282
+0x25f6
+// 0.027226
+0x26f8
+// 0.028795
+0x275f
+// 0.028903
+0x2766
+// 0.028666
+0x2757
+// 0.029605
+0x2794
+// 0.033516
+0x284a
+// 0.018860
+0x24d4
+// -0.001989
+0x9813
+// -0.024605
+0xa64d
+// -0.033950
+0xa858
+// -0.032045
+0xa81a
+// -0.015680
+0xa404
+// 0.008617
+0x2069
+// 0.025707
+0x2695
+// 0.032992
+0x2839
+// 0.024268
+0x2636
+// 0.001288
+0x1547
+// -0.022473
+0xa5c1
+// -0.033228
+0xa841
+// -0.030705
+0xa7dc
+// -0.000026
+0x81b3
+// 0.000756
+0x1231
+// 0.002556
+0x193c
+// 0.005335
+0x1d77
+// 0.008408
+0x204e
+// 0.011210
+0x21bd
+// 0.013109
+0x22b6
+// 0.013864
+0x2319
+// 0.013916
+0x2320
+// 0.013802
+0x2311
+// 0.014254
+0x234c
+// 0.015826
+0x240d
+// 0.018436
+0x24b8
+// 0.021399
+0x257a
+// 0.024059
+0x2629
+// 0.025866
+0x269f
+// 0.026598
+0x26cf
+// 0.026448
+0x26c5
+// 0.026322
+0x26bd
+// 0.026867
+0x26e1
+// 0.028432
+0x2747
+// 0.030911
+0x27ea
+// 0.033736
+0x2851
+// 0.036332
+0x28a7
+// 0.037988
+0x28dd
+// 0.039215
+0x2905
+// -0.000175
+0x89bd
+// 0.005102
+0x1d39
+// 0.017778
+0x248d
+// 0.020356
+0x2536
+// 0.015202
+0x23c9
+// 0.002135
+0x185f
+// -0.009758
+0xa0ff
+// -0.019904
+0xa518
+// -0.020185
+0xa52b
+// -0.010616
+0xa16f
+// 0.001578
+0x1676
+// 0.015201
+0x23c8
+// 0.022128
+0x25aa
+// 0.016399
+0x2433
+// 0.002714
+0x198f
+// -0.009840
+0xa10a
+// -0.018781
+0xa4cf
+// -0.020465
+0xa53d
+// -0.011743
+0xa203
+// 0.004859
+0x1cfa
+// 0.015941
+0x2415
+// 0.019944
+0x251b
+// 0.014662
+0x2382
+// 0.003121
+0x1a65
+// -0.009426
+0xa0d3
+// -0.020135
+0xa528
+// -0.018534
+0xa4bf
+// -0.007623
+0x9fce
+// -0.000140
+0x8897
+// 0.004082
+0x1c2e
+// 0.013802
+0x2311
+// 0.029370
+0x2785
+// 0.028658
+0x2756
+// 0.017570
+0x247f
+// -0.003045
+0x9a3d
+// -0.020322
+0xa534
+// -0.030771
+0xa7e1
+// -0.027019
+0xa6eb
+// -0.010131
+0xa130
+// 0.009468
+0x20d9
+// 0.026873
+0x26e1
+// 0.031258
+0x2800
+// 0.018998
+0x24dd
+// -0.002170
+0x9871
+// -0.019917
+0xa519
+// -0.030204
+0xa7bb
+// -0.026807
+0xa6dd
+// -0.010404
+0xa154
+// 0.013153
+0x22bc
+// 0.026818
+0x26de
+// 0.028263
+0x273c
+// 0.017295
+0x246d
+// -0.001948
+0x97fa
+// -0.019801
+0xa512
+// -0.030061
+0xa7b2
+// -0.023954
+0xa622
+// -0.000117
+0x87a6
+// 0.003401
+0x1af7
+// 0.011502
+0x21e4
+// 0.024008
+0x2625
+// 0.038420
+0x28eb
+// 0.032970
+0x2838
+// 0.015087
+0x23b9
+// -0.011645
+0xa1f6
+// -0.030530
+0xa7d1
+// -0.038763
+0xa8f6
+// -0.029027
+0xa76e
+// -0.004769
+0x9ce2
+// 0.019403
+0x24f8
+// 0.036239
+0x28a3
+// 0.035987
+0x289b
+// 0.016889
+0x2453
+// -0.010262
+0xa141
+// -0.030605
+0xa7d6
+// -0.037707
+0xa8d4
+// -0.028017
+0xa72c
+// -0.004919
+0x9d09
+// 0.022792
+0x25d6
+// 0.035623
+0x288f
+// 0.032783
+0x2832
+// 0.014819
+0x2396
+// -0.010287
+0xa144
+// -0.029155
+0xa777
+// -0.036888
+0xa8b9
+// -0.000100
+0x868e
+// 0.002915
+0x19f9
+// 0.009858
+0x210c
+// 0.020578
+0x2545
+// 0.032432
+0x2827
+// 0.043838
+0x299c
+// 0.032570
+0x282b
+// 0.008902
+0x208f
+// -0.020500
+0xa53f
+// -0.038462
+0xa8ec
+// -0.042288
+0xa96a
+// -0.026142
+0xa6b1
+// 0.003068
+0x1a49
+// 0.027857
+0x2722
+// 0.041764
+0x2959
+// 0.036071
+0x289e
+// 0.011237
+0x21c1
+// -0.019445
+0xa4fa
+// -0.038145
+0xa8e2
+// -0.040481
+0xa92e
+// -0.024945
+0xa663
+// 0.002522
+0x192b
+// 0.031009
+0x27f0
+// 0.041032
+0x2941
+// 0.032385
+0x2825
+// 0.008799
+0x2081
+// -0.018332
+0xa4b1
+// -0.036016
+0xa89c
+// -0.000088
+0x85bd
+// 0.002551
+0x1939
+// 0.008626
+0x206b
+// 0.018006
+0x249c
+// 0.028378
+0x2744
+// 0.037833
+0x28d8
+// 0.044855
+0x29be
+// 0.028409
+0x2746
+// 0.001890
+0x17be
+// -0.027702
+0xa718
+// -0.042500
+0xa971
+// -0.041152
+0xa944
+// -0.020473
+0xa53e
+// 0.010134
+0x2130
+// 0.033178
+0x283f
+// 0.043026
+0x2982
+// 0.032506
+0x2829
+// 0.004020
+0x1c1e
+// -0.026249
+0xa6b8
+// -0.041536
+0xa951
+// -0.039116
+0xa902
+// -0.019558
+0xa502
+// 0.009269
+0x20bf
+// 0.036402
+0x28a9
+// 0.041916
+0x295d
+// 0.028366
+0x2743
+// 0.002457
+0x1908
+// -0.024523
+0xa647
+// -0.000078
+0x8519
+// 0.002268
+0x18a5
+// 0.007668
+0x1fda
+// 0.016005
+0x2419
+// 0.025225
+0x2675
+// 0.033629
+0x284e
+// 0.039326
+0x2909
+// 0.042215
+0x2967
+// 0.023064
+0x25e7
+// -0.004062
+0x9c29
+// -0.031606
+0xa80c
+// -0.042282
+0xa969
+// -0.037153
+0xa8c1
+// -0.015008
+0xa3af
+// 0.014723
+0x238a
+// 0.034755
+0x2873
+// 0.040784
+0x2938
+// 0.027088
+0x26ef
+// -0.001519
+0x9638
+// -0.029529
+0xa78f
+// -0.041112
+0xa943
+// -0.035315
+0xa885
+// -0.014333
+0xa357
+// 0.013832
+0x2315
+// 0.037776
+0x28d6
+// 0.039296
+0x2908
+// 0.023616
+0x260c
+// -0.002616
+0x995b
+// -0.000070
+0x8497
+// 0.002041
+0x182e
+// 0.006901
+0x1f11
+// 0.014405
+0x2360
+// 0.022702
+0x25d0
+// 0.030266
+0x27c0
+// 0.035394
+0x2888
+// 0.037433
+0x28cb
+// 0.038204
+0x28e4
+// 0.018338
+0x24b2
+// -0.007296
+0x9f79
+// -0.031705
+0xa80f
+// -0.039303
+0xa908
+// -0.033003
+0xa839
+// -0.011451
+0xa1dd
+// 0.016089
+0x241e
+// 0.033115
+0x283d
+// 0.036607
+0x28b0
+// 0.022819
+0x25d7
+// -0.004139
+0x9c3d
+// -0.029398
+0xa787
+// -0.038306
+0xa8e7
+// -0.031341
+0xa803
+// -0.010768
+0xa183
+// 0.014943
+0x23a7
+// 0.035899
+0x2898
+// 0.035739
+0x2893
+// 0.019691
+0x250a
+// -0.000054
+0x8388
+// 0.001570
+0x166e
+// 0.005308
+0x1d70
+// 0.011081
+0x21ac
+// 0.017463
+0x2478
+// 0.023282
+0x25f6
+// 0.027226
+0x26f8
+// 0.028795
+0x275f
+// 0.028903
+0x2766
+// 0.028666
+0x2757
+// 0.029605
+0x2794
+// 0.033516
+0x284a
+// 0.018860
+0x24d4
+// -0.001989
+0x9813
+// -0.024605
+0xa64d
+// -0.033950
+0xa858
+// -0.032045
+0xa81a
+// -0.015680
+0xa404
+// 0.008617
+0x2069
+// 0.025707
+0x2695
+// 0.032992
+0x2839
+// 0.024268
+0x2636
+// 0.001288
+0x1547
+// -0.022473
+0xa5c1
+// -0.033228
+0xa841
+// -0.030705
+0xa7dc
+// -0.014926
+0xa3a4
+// 0.008038
+0x201e
+// -0.000026
+0x81b3
+// 0.000756
+0x1231
+// 0.002556
+0x193c
+// 0.005335
+0x1d77
+// 0.008408
+0x204e
+// 0.011210
+0x21bd
+// 0.013109
+0x22b6
+// 0.013864
+0x2319
+// 0.013916
+0x2320
+// 0.013802
+0x2311
+// 0.014254
+0x234c
+// 0.015826
+0x240d
+// 0.018436
+0x24b8
+// 0.021399
+0x257a
+// 0.024059
+0x2629
+// 0.025866
+0x269f
+// 0.026598
+0x26cf
+// 0.026448
+0x26c5
+// 0.026322
+0x26bd
+// 0.026867
+0x26e1
+// 0.028432
+0x2747
+// 0.030911
+0x27ea
+// 0.033736
+0x2851
+// 0.036332
+0x28a7
+// 0.037988
+0x28dd
+// 0.039215
+0x2905
+// 0.018253
+0x24ac
+// -0.009038
+0xa0a1
+// -0.000175
+0x89bd
+// 0.005102
+0x1d39
+// 0.017778
+0x248d
+// 0.020356
+0x2536
+// 0.015202
+0x23c9
+// 0.002135
+0x185f
+// -0.009758
+0xa0ff
+// -0.019904
+0xa518
+// -0.020185
+0xa52b
+// -0.010616
+0xa16f
+// 0.001578
+0x1676
+// 0.015201
+0x23c8
+// 0.022128
+0x25aa
+// 0.016399
+0x2433
+// 0.002714
+0x198f
+// -0.009840
+0xa10a
+// -0.018781
+0xa4cf
+// -0.020465
+0xa53d
+// -0.011743
+0xa203
+// 0.004859
+0x1cfa
+// 0.015941
+0x2415
+// 0.019944
+0x251b
+// 0.014662
+0x2382
+// 0.003121
+0x1a65
+// -0.009426
+0xa0d3
+// -0.020135
+0xa528
+// -0.018534
+0xa4bf
+// -0.007623
+0x9fce
+// 0.005086
+0x1d35
+// 0.019051
+0x24e0
+// -0.000140
+0x8897
+// 0.004082
+0x1c2e
+// 0.013802
+0x2311
+// 0.029370
+0x2785
+// 0.028658
+0x2756
+// 0.017570
+0x247f
+// -0.003045
+0x9a3d
+// -0.020322
+0xa534
+// -0.030771
+0xa7e1
+// -0.027019
+0xa6eb
+// -0.010131
+0xa130
+// 0.009468
+0x20d9
+// 0.026873
+0x26e1
+// 0.031258
+0x2800
+// 0.018998
+0x24dd
+// -0.002170
+0x9871
+// -0.019917
+0xa519
+// -0.030204
+0xa7bb
+// -0.026807
+0xa6dd
+// -0.010404
+0xa154
+// 0.013153
+0x22bc
+// 0.026818
+0x26de
+// 0.028263
+0x273c
+// 0.017295
+0x246d
+// -0.001948
+0x97fa
+// -0.019801
+0xa512
+// -0.030061
+0xa7b2
+// -0.023954
+0xa622
+// -0.004702
+0x9cd1
+// 0.014487
+0x236b
+// -0.000117
+0x87a6
+// 0.003401
+0x1af7
+// 0.011502
+0x21e4
+// 0.024008
+0x2625
+// 0.038420
+0x28eb
+// 0.032970
+0x2838
+// 0.015087
+0x23b9
+// -0.011645
+0xa1f6
+// -0.030530
+0xa7d1
+// -0.038763
+0xa8f6
+// -0.029027
+0xa76e
+// -0.004769
+0x9ce2
+// 0.019403
+0x24f8
+// 0.036239
+0x28a3
+// 0.035987
+0x289b
+// 0.016889
+0x2453
+// -0.010262
+0xa141
+// -0.030605
+0xa7d6
+// -0.037707
+0xa8d4
+// -0.028017
+0xa72c
+// -0.004919
+0x9d09
+// 0.022792
+0x25d6
+// 0.035623
+0x288f
+// 0.032783
+0x2832
+// 0.014819
+0x2396
+// -0.010287
+0xa144
+// -0.029155
+0xa777
+// -0.036888
+0xa8b9
+// -0.023758
+0xa615
+// 0.002327
+0x18c4
+// -0.000100
+0x868e
+// 0.002915
+0x19f9
+// 0.009858
+0x210c
+// 0.020578
+0x2545
+// 0.032432
+0x2827
+// 0.043838
+0x299c
+// 0.032570
+0x282b
+// 0.008902
+0x208f
+// -0.020500
+0xa53f
+// -0.038462
+0xa8ec
+// -0.042288
+0xa96a
+// -0.026142
+0xa6b1
+// 0.003068
+0x1a49
+// 0.027857
+0x2722
+// 0.041764
+0x2959
+// 0.036071
+0x289e
+// 0.011237
+0x21c1
+// -0.019445
+0xa4fa
+// -0.038145
+0xa8e2
+// -0.040481
+0xa92e
+// -0.024945
+0xa663
+// 0.002522
+0x192b
+// 0.031009
+0x27f0
+// 0.041032
+0x2941
+// 0.032385
+0x2825
+// 0.008799
+0x2081
+// -0.018332
+0xa4b1
+// -0.036016
+0xa89c
+// -0.038500
+0xa8ee
+// -0.019262
+0xa4ee
+// -0.000088
+0x85bd
+// 0.002551
+0x1939
+// 0.008626
+0x206b
+// 0.018006
+0x249c
+// 0.028378
+0x2744
+// 0.037833
+0x28d8
+// 0.044855
+0x29be
+// 0.028409
+0x2746
+// 0.001890
+0x17be
+// -0.027702
+0xa718
+// -0.042500
+0xa971
+// -0.041152
+0xa944
+// -0.020473
+0xa53e
+// 0.010134
+0x2130
+// 0.033178
+0x283f
+// 0.043026
+0x2982
+// 0.032506
+0x2829
+// 0.004020
+0x1c1e
+// -0.026249
+0xa6b8
+// -0.041536
+0xa951
+// -0.039116
+0xa902
+// -0.019558
+0xa502
+// 0.009269
+0x20bf
+// 0.036402
+0x28a9
+// 0.041916
+0x295d
+// 0.028366
+0x2743
+// 0.002457
+0x1908
+// -0.024523
+0xa647
+// -0.038304
+0xa8e7
+// -0.035897
+0xa898
+// -0.000078
+0x8519
+// 0.002268
+0x18a5
+// 0.007668
+0x1fda
+// 0.016005
+0x2419
+// 0.025225
+0x2675
+// 0.033629
+0x284e
+// 0.039326
+0x2909
+// 0.042215
+0x2967
+// 0.023064
+0x25e7
+// -0.004062
+0x9c29
+// -0.031606
+0xa80c
+// -0.042282
+0xa969
+// -0.037153
+0xa8c1
+// -0.015008
+0xa3af
+// 0.014723
+0x238a
+// 0.034755
+0x2873
+// 0.040784
+0x2938
+// 0.027088
+0x26ef
+// -0.001519
+0x9638
+// -0.029529
+0xa78f
+// -0.041112
+0xa943
+// -0.035315
+0xa885
+// -0.014333
+0xa357
+// 0.013832
+0x2315
+// 0.037776
+0x28d6
+// 0.039296
+0x2908
+// 0.023616
+0x260c
+// -0.002616
+0x995b
+// -0.026799
+0xa6dc
+// -0.036696
+0xa8b2
+// -0.000070
+0x8497
+// 0.002041
+0x182e
+// 0.006901
+0x1f11
+// 0.014405
+0x2360
+// 0.022702
+0x25d0
+// 0.030266
+0x27c0
+// 0.035394
+0x2888
+// 0.037433
+0x28cb
+// 0.038204
+0x28e4
+// 0.018338
+0x24b2
+// -0.007296
+0x9f79
+// -0.031705
+0xa80f
+// -0.039303
+0xa908
+// -0.033003
+0xa839
+// -0.011451
+0xa1dd
+// 0.016089
+0x241e
+// 0.033115
+0x283d
+// 0.036607
+0x28b0
+// 0.022819
+0x25d7
+// -0.004139
+0x9c3d
+// -0.029398
+0xa787
+// -0.038306
+0xa8e7
+// -0.031341
+0xa803
+// -0.010768
+0xa183
+// 0.014943
+0x23a7
+// 0.035899
+0x2898
+// 0.035739
+0x2893
+// 0.019691
+0x250a
+// -0.004388
+0x9c7e
+// -0.025570
+0xa68c
+// -0.000054
+0x8388
+// 0.001570
+0x166e
+// 0.005308
+0x1d70
+// 0.011081
+0x21ac
+// 0.017463
+0x2478
+// 0.023282
+0x25f6
+// 0.027226
+0x26f8
+// 0.028795
+0x275f
+// 0.028903
+0x2766
+// 0.028666
+0x2757
+// 0.029605
+0x2794
+// 0.033516
+0x284a
+// 0.018860
+0x24d4
+// -0.001989
+0x9813
+// -0.024605
+0xa64d
+// -0.033950
+0xa858
+// -0.032045
+0xa81a
+// -0.015680
+0xa404
+// 0.008617
+0x2069
+// 0.025707
+0x2695
+// 0.032992
+0x2839
+// 0.024268
+0x2636
+// 0.001288
+0x1547
+// -0.022473
+0xa5c1
+// -0.033228
+0xa841
+// -0.030705
+0xa7dc
+// -0.014926
+0xa3a4
+// 0.008038
+0x201e
+// 0.030192
+0x27bb
+// 0.033922
+0x2858
+// -0.000026
+0x81b3
+// 0.000756
+0x1231
+// 0.002556
+0x193c
+// 0.005335
+0x1d77
+// 0.008408
+0x204e
+// 0.011210
+0x21bd
+// 0.013109
+0x22b6
+// 0.013864
+0x2319
+// 0.013916
+0x2320
+// 0.013802
+0x2311
+// 0.014254
+0x234c
+// 0.015826
+0x240d
+// 0.018436
+0x24b8
+// 0.021399
+0x257a
+// 0.024059
+0x2629
+// 0.025866
+0x269f
+// 0.026598
+0x26cf
+// 0.026448
+0x26c5
+// 0.026322
+0x26bd
+// 0.026867
+0x26e1
+// 0.028432
+0x2747
+// 0.030911
+0x27ea
+// 0.033736
+0x2851
+// 0.036332
+0x28a7
+// 0.037988
+0x28dd
+// 0.039215
+0x2905
+// 0.018253
+0x24ac
+// -0.009038
+0xa0a1
+// -0.035484
+0xa88b
+// -0.043963
+0xa9a1
diff --git a/Testing/Patterns/DSP/Filtering/FIR/FIRF16/Refs1_f16.txt b/Testing/Patterns/DSP/Filtering/FIR/FIRF16/Refs1_f16.txt
new file mode 100755
index 00000000..972111a7
--- /dev/null
+++ b/Testing/Patterns/DSP/Filtering/FIR/FIRF16/Refs1_f16.txt
@@ -0,0 +1,514 @@
+H
+256
+// 0.383858
+0x3624
+// -0.360281
+0xb5c4
+// -0.108248
+0xaeee
+// -0.356475
+0xb5b4
+// 0.093465
+0x2dfb
+// -0.410823
+0xb693
+// -0.397555
+0xb65c
+// 0.760141
+0x3a15
+// -0.311272
+0xb4fb
+// 0.232246
+0x336f
+// -0.794597
+0xba5b
+// 0.338903
+0x356c
+// 0.571877
+0x3893
+// -0.367889
+0xb5e3
+// -0.026122
+0xa6b0
+// 0.036031
+0x289d
+// -0.168775
+0xb167
+// 0.001169
+0x14ca
+// 0.631633
+0x390e
+// 0.067260
+0x2c4e
+// 0.214385
+0x32dc
+// -0.219711
+0xb308
+// -0.196264
+0xb248
+// 0.251620
+0x3407
+// 0.087506
+0x2d9a
+// 0.043158
+0x2986
+// 0.357896
+0x35ba
+// -0.233053
+0xb375
+// 0.652629
+0x3939
+// 0.319134
+0x351b
+// 0.231096
+0x3365
+// 1.000000
+0x3c00
+// 0.103619
+0x2ea2
+// -0.053190
+0xaacf
+// -0.030475
+0xa7cd
+// 0.506094
+0x380c
+// -0.085849
+0xad7f
+// 0.996009
+0x3bf8
+// -0.257541
+0xb41f
+// -0.277745
+0xb472
+// 0.289254
+0x34a1
+// -0.240127
+0xb3af
+// 0.302976
+0x34d9
+// -0.059987
+0xabae
+// 0.326989
+0x353b
+// -0.299167
+0xb4c9
+// 0.063774
+0x2c15
+// -0.137762
+0xb069
+// 0.188525
+0x3208
+// -0.766262
+0xba21
+// -0.096278
+0xae29
+// 0.188865
+0x320b
+// -0.633632
+0xb912
+// -0.283286
+0xb488
+// -0.180676
+0xb1c8
+// 0.290336
+0x34a5
+// 0.059201
+0x2b94
+// 0.392815
+0x3649
+// 0.291631
+0x34ab
+// 0.139361
+0x3076
+// 0.015437
+0x23e7
+// -0.715859
+0xb9ba
+// -0.228692
+0xb351
+// 0.068302
+0x2c5f
+// -0.526484
+0xb836
+// 0.651278
+0x3936
+// 0.329696
+0x3546
+// 0.505235
+0x380b
+// -0.335248
+0xb55d
+// 0.072160
+0x2c9e
+// -0.303078
+0xb4d9
+// -0.104510
+0xaeb0
+// 0.233797
+0x337b
+// -0.489524
+0xb7d5
+// 0.139492
+0x3077
+// 0.109968
+0x2f0a
+// -0.176948
+0xb1aa
+// 0.482679
+0x37b9
+// 0.129985
+0x3029
+// 0.211463
+0x32c4
+// -0.037170
+0xa8c2
+// -0.375432
+0xb602
+// 0.063445
+0x2c0f
+// 0.129749
+0x3027
+// -0.250616
+0xb403
+// 0.408141
+0x3688
+// 0.520295
+0x382a
+// 0.285543
+0x3492
+// 0.045666
+0x29d8
+// -0.157962
+0xb10e
+// -0.034793
+0xa874
+// -0.235224
+0xb387
+// 0.271029
+0x3456
+// 0.249988
+0x3400
+// 0.109455
+0x2f01
+// 0.359216
+0x35bf
+// -0.034223
+0xa861
+// -0.613673
+0xb8e9
+// 0.088313
+0x2da7
+// -0.205604
+0xb294
+// 0.428466
+0x36db
+// 0.379569
+0x3613
+// -0.299336
+0xb4ca
+// 0.458983
+0x3758
+// 0.651217
+0x3936
+// -0.270324
+0xb453
+// 0.190474
+0x3218
+// 0.556901
+0x3875
+// -0.782642
+0xba43
+// -0.121448
+0xafc6
+// -0.212072
+0xb2c9
+// -0.600759
+0xb8ce
+// -0.131040
+0xb031
+// 0.589764
+0x38b8
+// 0.041692
+0x2956
+// 0.419055
+0x36b4
+// 0.100536
+0x2e6f
+// -0.183686
+0xb1e1
+// -0.339428
+0xb56e
+// 0.521166
+0x382b
+// -0.388635
+0xb638
+// 0.143214
+0x3095
+// 0.598850
+0x38ca
+// 0.002518
+0x1928
+// -0.034847
+0xa876
+// 0.238035
+0x339e
+// -0.177845
+0xb1b1
+// -0.322159
+0xb528
+// 0.140149
+0x307c
+// 0.329944
+0x3547
+// -0.107482
+0xaee1
+// -0.188600
+0xb209
+// -0.275420
+0xb468
+// 0.068589
+0x2c64
+// 0.221843
+0x3319
+// 0.367855
+0x35e3
+// -0.213981
+0xb2d9
+// 0.029023
+0x276e
+// -0.238657
+0xb3a3
+// -0.251368
+0xb406
+// 0.014687
+0x2385
+// -0.592525
+0xb8bd
+// -0.043726
+0xa999
+// -0.324220
+0xb530
+// 0.502311
+0x3805
+// 0.354737
+0x35ad
+// -0.292617
+0xb4af
+// -0.118101
+0xaf8f
+// 0.206575
+0x329c
+// -0.050570
+0xaa79
+// 0.202377
+0x327a
+// 0.173775
+0x3190
+// 0.306190
+0x34e6
+// -0.363015
+0xb5cf
+// -0.222011
+0xb31b
+// 0.047552
+0x2a16
+// 0.223897
+0x332a
+// -0.141249
+0xb085
+// -0.227664
+0xb349
+// 0.641983
+0x3923
+// 0.047110
+0x2a08
+// -0.190337
+0xb217
+// 0.605096
+0x38d7
+// 0.525760
+0x3835
+// -0.032498
+0xa829
+// -0.189156
+0xb20e
+// -0.229228
+0xb356
+// 0.698481
+0x3996
+// -0.017210
+0xa468
+// -0.408740
+0xb68a
+// 0.375436
+0x3602
+// -0.305202
+0xb4e2
+// -0.055640
+0xab1f
+// 0.213179
+0x32d2
+// 0.344974
+0x3585
+// 0.389034
+0x3639
+// -0.385519
+0xb62b
+// -0.605079
+0xb8d7
+// -0.402558
+0xb671
+// 0.079455
+0x2d16
+// 0.230710
+0x3362
+// -0.869931
+0xbaf6
+// 0.533997
+0x3846
+// -0.278426
+0xb474
+// -0.246206
+0xb3e1
+// 0.536629
+0x384b
+// 0.260969
+0x342d
+// 0.422810
+0x36c4
+// -0.358079
+0xb5bb
+// -0.201306
+0xb271
+// -0.137197
+0xb064
+// 0.106299
+0x2ece
+// 0.405284
+0x367c
+// -0.395406
+0xb654
+// -0.270691
+0xb455
+// 0.077241
+0x2cf2
+// -0.108960
+0xaef9
+// -0.475029
+0xb79a
+// 0.235909
+0x338d
+// 0.240788
+0x33b5
+// 0.118769
+0x2f9a
+// 0.885914
+0x3b16
+// -0.309430
+0xb4f3
+// 0.024907
+0x2660
+// 0.805678
+0x3a72
+// -0.223015
+0xb323
+// -0.274012
+0xb462
+// 0.560700
+0x387c
+// 0.253083
+0x340d
+// -0.208701
+0xb2ae
+// 0.793855
+0x3a5a
+// 0.092311
+0x2de8
+// 0.000585
+0x10cb
+// 0.113034
+0x2f3c
+// 0.385109
+0x3629
+// -0.138169
+0xb06c
+// -0.037009
+0xa8bd
+// -0.762359
+0xba19
+// 0.518755
+0x3826
+// -0.285450
+0xb491
+// 0.195220
+0x323f
+// 0.043038
+0x2982
+// 0.092252
+0x2de7
+// 0.592847
+0x38be
+// -0.179904
+0xb1c2
+// 0.316811
+0x3512
+// 0.756446
+0x3a0d
+// -0.121211
+0xafc2
+// -0.124608
+0xaffa
+// -0.101613
+0xae81
+// 0.001223
+0x1503
+// 0.517774
+0x3824
+// -0.512054
+0xb819
+// 0.138212
+0x306c
+// -0.518981
+0xb827
+// 0.048176
+0x2a2b
+// -0.119868
+0xafac
+// 0.246059
+0x33e0
+// 0.233722
+0x337b
+// -0.217484
+0xb2f6
+// -0.210270
+0xb2bb
+// 0.151679
+0x30db
+// 0.303623
+0x34dc
+// 0.318946
+0x351a
+// 0.219740
+0x3308
+// 0.335878
+0x3560
+// 0.158669
+0x3114
+// -0.202058
+0xb277
+// -0.591399
+0xb8bb
+// -0.241789
+0xb3bd
+// 0.118708
+0x2f99
+// 0.025184
+0x2672
+// 0.495268
+0x37ed
+// 0.283356
+0x3489
+// -0.354557
+0xb5ac
+// 0.525900
+0x3835
diff --git a/Testing/Patterns/DSP/Filtering/FIR/FIRF16/Samples1_f16.txt b/Testing/Patterns/DSP/Filtering/FIR/FIRF16/Samples1_f16.txt
new file mode 100755
index 00000000..a7533078
--- /dev/null
+++ b/Testing/Patterns/DSP/Filtering/FIR/FIRF16/Samples1_f16.txt
@@ -0,0 +1,514 @@
+H
+256
+// 0.249984
+0x3400
+// -0.183097
+0xb1dc
+// -0.344601
+0xb583
+// 0.098066
+0x2e47
+// -0.400134
+0xb667
+// 0.319700
+0x351d
+// -0.329309
+0xb545
+// 0.403234
+0x3674
+// 0.190989
+0x321d
+// 0.182858
+0x31da
+// -0.332209
+0xb551
+// -0.034188
+0xa860
+// -0.261380
+0xb42f
+// -0.123044
+0xafe0
+// 0.156372
+0x3101
+// 0.122502
+0x2fd7
+// -0.345881
+0xb589
+// -0.451564
+0xb73a
+// -0.797421
+0xba61
+// 0.159252
+0x3119
+// -0.113934
+0xaf4b
+// -0.177704
+0xb1b0
+// 0.132971
+0x3041
+// -0.175539
+0xb19e
+// -0.115232
+0xaf60
+// -0.634750
+0xb914
+// -0.451905
+0xb73b
+// 0.027005
+0x26ea
+// -0.319930
+0xb51e
+// 0.158835
+0x3115
+// 0.428410
+0x36db
+// 0.028448
+0x2748
+// -0.047753
+0xaa1d
+// 0.383866
+0x3624
+// -0.040763
+0xa938
+// -0.078810
+0xad0b
+// 0.338680
+0x356b
+// 0.448964
+0x372f
+// -0.469767
+0xb784
+// -0.226947
+0xb343
+// -0.178926
+0xb1ba
+// -0.119506
+0xafa6
+// -0.254654
+0xb413
+// -0.627118
+0xb904
+// 0.169415
+0x316c
+// 0.034287
+0x2864
+// 0.302811
+0x34d8
+// -0.345401
+0xb587
+// -0.031438
+0xa806
+// -0.001290
+0x9549
+// 0.339376
+0x356e
+// -0.136957
+0xb062
+// -0.218204
+0xb2fc
+// -0.531362
+0xb840
+// -0.225418
+0xb337
+// -0.490645
+0xb7da
+// 0.189584
+0x3211
+// 0.134361
+0x304d
+// -0.133553
+0xb046
+// 0.299372
+0x34ca
+// 0.053582
+0x2adc
+// -0.238793
+0xb3a4
+// -0.011138
+0xa1b4
+// -0.025163
+0xa671
+// -0.141425
+0xb087
+// 0.155496
+0x30fa
+// -0.843599
+0xbac0
+// 0.404869
+0x367a
+// 0.279935
+0x347b
+// -0.171104
+0xb17a
+// 0.798979
+0x3a64
+// 0.419563
+0x36b7
+// -0.046483
+0xa9f3
+// 0.164040
+0x3140
+// -0.343224
+0xb57e
+// 0.355330
+0x35af
+// 0.249571
+0x33fc
+// 0.448248
+0x372c
+// -0.112597
+0xaf35
+// 0.002446
+0x1902
+// 0.512631
+0x381a
+// 0.390085
+0x363e
+// 0.031414
+0x2805
+// 0.290983
+0x34a8
+// -0.473040
+0xb792
+// -0.234847
+0xb384
+// -0.064832
+0xac26
+// -0.174688
+0xb197
+// 0.362366
+0x35cc
+// 0.274910
+0x3466
+// 0.004258
+0x1c5c
+// 0.108512
+0x2ef2
+// -0.285746
+0xb492
+// 0.025406
+0x2681
+// -0.093021
+0xadf4
+// -0.363160
+0xb5d0
+// 0.528219
+0x383a
+// 0.358702
+0x35bd
+// 0.306481
+0x34e7
+// -0.179833
+0xb1c1
+// -0.032838
+0xa834
+// -0.046751
+0xa9fc
+// 1.000000
+0x3c00
+// 0.308833
+0x34f1
+// -0.181706
+0xb1d1
+// 0.090539
+0x2dcb
+// 0.313973
+0x3506
+// 0.034424
+0x2868
+// -0.251419
+0xb406
+// -0.322614
+0xb529
+// -0.305809
+0xb4e5
+// 0.129173
+0x3022
+// -0.694126
+0xb98e
+// -0.250858
+0xb404
+// 0.059264
+0x2b96
+// -0.128325
+0xb01b
+// -0.159713
+0xb11c
+// 0.413051
+0x369c
+// 0.387051
+0x3631
+// 0.182918
+0x31da
+// -0.385751
+0xb62c
+// -0.224448
+0xb32f
+// 0.038416
+0x28eb
+// -0.396644
+0xb659
+// 0.263277
+0x3436
+// 0.298354
+0x34c6
+// -0.118298
+0xaf92
+// 0.059839
+0x2ba9
+// 0.015236
+0x23cd
+// -0.385397
+0xb62b
+// -0.050137
+0xaa6b
+// 0.225182
+0x3335
+// 0.091417
+0x2dda
+// -0.332301
+0xb551
+// 0.051487
+0x2a97
+// -0.338015
+0xb569
+// -0.138657
+0xb070
+// -0.062845
+0xac06
+// 0.239372
+0x33a9
+// -0.412823
+0xb69b
+// -0.847904
+0xbac9
+// 0.204396
+0x328a
+// -0.319114
+0xb51b
+// -0.042128
+0xa964
+// 0.555310
+0x3871
+// 0.238792
+0x33a4
+// -0.252236
+0xb409
+// -0.017146
+0xa464
+// -0.023100
+0xa5ea
+// 0.196936
+0x324d
+// -0.113372
+0xaf41
+// 0.220568
+0x330f
+// 0.220745
+0x3310
+// 0.142593
+0x3090
+// 0.202789
+0x327d
+// -0.089607
+0xadbc
+// 0.043039
+0x2982
+// -0.022674
+0xa5ce
+// -0.266567
+0xb444
+// 0.017297
+0x246e
+// 0.046384
+0x29f0
+// 0.086227
+0x2d85
+// -0.238717
+0xb3a4
+// 0.118165
+0x2f90
+// -0.112214
+0xaf2f
+// 0.124228
+0x2ff3
+// -0.032142
+0xa81d
+// -0.469288
+0xb782
+// -0.083456
+0xad57
+// -0.114390
+0xaf52
+// -0.376088
+0xb604
+// -0.256146
+0xb419
+// 0.564330
+0x3884
+// -0.455378
+0xb749
+// 0.037945
+0x28db
+// -0.086562
+0xad8a
+// -0.020960
+0xa55e
+// -0.052032
+0xaaa9
+// -0.020560
+0xa543
+// 0.181430
+0x31ce
+// -0.168339
+0xb163
+// 0.160549
+0x3123
+// 0.337014
+0x3564
+// -0.011247
+0xa1c2
+// 0.535964
+0x384a
+// -0.272158
+0xb45b
+// 0.296389
+0x34be
+// -0.177760
+0xb1b0
+// -0.417893
+0xb6b0
+// 0.489028
+0x37d3
+// -0.074416
+0xacc3
+// -0.218618
+0xb2ff
+// -0.061131
+0xabd3
+// -0.285138
+0xb490
+// -0.323742
+0xb52e
+// 0.128847
+0x3020
+// 0.263543
+0x3437
+// 0.234468
+0x3381
+// 0.057744
+0x2b64
+// 0.575727
+0x389b
+// 0.167712
+0x315e
+// -0.088527
+0xadaa
+// -0.849734
+0xbacc
+// -0.200050
+0xb267
+// 0.324250
+0x3530
+// 0.161737
+0x312d
+// 0.153342
+0x30e8
+// 0.302206
+0x34d6
+// 0.116038
+0x2f6d
+// -0.099881
+0xae64
+// 0.186304
+0x31f6
+// -0.223249
+0xb325
+// 0.025895
+0x26a1
+// -0.298294
+0xb4c6
+// -0.318191
+0xb517
+// 0.098580
+0x2e4f
+// 0.073843
+0x2cba
+// -0.385885
+0xb62d
+// 0.126810
+0x300f
+// 0.259714
+0x3428
+// -0.073260
+0xacb0
+// 0.077473
+0x2cf5
+// -0.363027
+0xb5cf
+// -0.003902
+0x9bfe
+// -0.234876
+0xb384
+// 0.374649
+0x35ff
+// -0.454872
+0xb747
+// -0.472326
+0xb78f
+// 0.230260
+0x335e
+// -0.576768
+0xb89d
+// -0.010350
+0xa14d
+// -0.147272
+0xb0b6
+// -0.017430
+0xa476
+// 0.242852
+0x33c5
+// -0.381067
+0xb619
+// 0.063783
+0x2c15
+// -0.257065
+0xb41d
+// -0.306546
+0xb4e8
+// -0.061511
+0xabe0
+// -0.162114
+0xb130
+// -0.046601
+0xa9f7
+// -0.430016
+0xb6e1
+// 0.296375
+0x34be
+// -0.323816
+0xb52e
+// -0.117019
+0xaf7d
+// -0.294586
+0xb4b7
+// -0.557569
+0xb876
+// -0.087492
+0xad99
+// -0.076313
+0xace2
+// -0.036039
+0xa89d
+// -0.620596
+0xb8f7
+// 0.160799
+0x3125
+// -0.250968
+0xb404
+// -0.121415
+0xafc5
+// 0.004643
+0x1cc1
+// 0.555032
+0x3871
diff --git a/Testing/Source/Tests/FIRF16.cpp b/Testing/Source/Tests/FIRF16.cpp
new file mode 100755
index 00000000..aaea99ad
--- /dev/null
+++ b/Testing/Source/Tests/FIRF16.cpp
@@ -0,0 +1,148 @@
+#include "FIRF16.h"
+#include
+#include "Error.h"
+
+#define SNR_THRESHOLD 60
+
+/*
+
+Reference patterns are generated with
+a double precision computation.
+
+*/
+#define REL_ERROR (1.0e-2)
+
+#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
+static __ALIGNED(8) float16_t coeffArray[32];
+#endif
+
+void checkInnerTail(float16_t *b)
+{
+ ASSERT_TRUE(b[0] == 0.0f);
+ ASSERT_TRUE(b[1] == 0.0f);
+ ASSERT_TRUE(b[2] == 0.0f);
+ ASSERT_TRUE(b[3] == 0.0f);
+}
+
+ void FIRF16::test_fir_f16()
+ {
+
+
+ const int16_t *configp = configs.ptr();
+ float16_t *statep = state.ptr();
+ const float16_t *orgcoefsp = coefs.ptr();
+
+ const float16_t *coefsp;
+ const float16_t *inputp = inputs.ptr();
+ float16_t *outp = output.ptr();
+
+ unsigned long i;
+#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
+ int j;
+#endif
+ int blockSize;
+ int numTaps;
+
+
+
+ /*
+
+ Python script is generating different tests with
+ different blockSize and numTaps.
+
+ We loop on those configs.
+
+ */
+ for(i=0; i < configs.nbSamples() ; i += 2)
+ {
+ blockSize = configp[0];
+ numTaps = configp[1];
+
+#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
+ /* Copy coefficients and pad to zero
+ */
+ memset(coeffArray,0,32);
+ for(j=0;j < numTaps; j++)
+ {
+ coeffArray[j] = orgcoefsp[j];
+ }
+
+ coefsp = coeffArray;
+#else
+ coefsp = orgcoefsp;
+#endif
+
+ /*
+
+ The filter is initialized with the coefs, blockSize and numTaps.
+
+ */
+ arm_fir_init_f16(&this->S,numTaps,coefsp,statep,blockSize);
+
+ /*
+
+ Input pointer is reset since the same input pattern is used
+
+ */
+ inputp = inputs.ptr();
+
+ /*
+
+ Python script is filtering a 2*blockSize number of samples.
+ We do the same filtering in two pass to check (indirectly that
+ the state management of the fir is working.)
+
+ */
+
+ arm_fir_f16(&this->S,inputp,outp,blockSize);
+ outp += blockSize;
+ checkInnerTail(outp);
+
+ inputp += blockSize;
+ arm_fir_f16(&this->S,inputp,outp,blockSize);
+ outp += blockSize;
+ checkInnerTail(outp);
+
+ configp += 2;
+ orgcoefsp += numTaps;
+
+ }
+
+
+ ASSERT_EMPTY_TAIL(output);
+
+ ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
+
+ ASSERT_REL_ERROR(output,ref,REL_ERROR);
+
+ }
+
+
+ void FIRF16::setUp(Testing::testID_t id,std::vector& params,Client::PatternMgr *mgr)
+ {
+
+ (void)params;
+
+ switch(id)
+ {
+ case FIRF16::TEST_FIR_F16_1:
+ break;
+
+ }
+
+
+ inputs.reload(FIRF16::FIRINPUTS_F16_ID,mgr);
+ coefs.reload(FIRF16::FIRCOEFS_F16_ID,mgr);
+ configs.reload(FIRF16::FIRCONFIGS_S16_ID,mgr);
+ ref.reload(FIRF16::FIRREFS_F16_ID,mgr);
+
+ output.create(ref.nbSamples(),FIRF16::OUT_F16_ID,mgr);
+ /* Max blockSize + numTaps - 1 as generated by Python script */
+ state.create(47,FIRF16::OUT_F16_ID,mgr);
+ }
+
+ void FIRF16::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
+ {
+ (void)id;
+ output.dump(mgr);
+ }
diff --git a/Testing/desc_f16.txt b/Testing/desc_f16.txt
index 3e7f3408..13202678 100755
--- a/Testing/desc_f16.txt
+++ b/Testing/desc_f16.txt
@@ -140,6 +140,34 @@ group Root {
}
+ group Filtering Tests {
+ class = FilteringTests
+ folder = Filtering
+
+ group FIR {
+ class = FIR
+ folder = FIR
+
+ suite FIR F16 {
+ class = FIRF16
+ folder = FIRF16
+
+ Pattern FIRINPUTS_F16_ID : FirInput1_f16.txt
+ Pattern FIRCOEFS_F16_ID : FirCoefs1_f16.txt
+ Pattern FIRCONFIGS_S16_ID : FirConfigs1_s16.txt
+
+ Pattern FIRREFS_F16_ID : FirRefs1_f16.txt
+
+ Output OUT_F16_ID : Output
+
+ Functions {
+ arm_fir_f16:test_fir_f16
+ }
+
+ }
+ }
+ }
+
group Transform Tests {
class = TransformTests
folder = Transform
diff --git a/Toolchain/GCC.cmake b/Toolchain/GCC.cmake
index eeed0e45..4e0dcf15 100644
--- a/Toolchain/GCC.cmake
+++ b/Toolchain/GCC.cmake
@@ -15,7 +15,7 @@ function(compilerSpecificCompileOptions PROJECTNAME ROOT)
# Add support for the type __fp16 even if there is no HW
# support for it.
if (FLOAT16)
- target_compile_options(${PROJECTNAME} PUBLIC "-mfp16-format=alternative")
+ target_compile_options(${PROJECTNAME} PUBLIC "-mfp16-format=ieee")
endif()
if ((OPTIMIZED) AND (NOT DISABLEOPTIM))