diff --git a/ARM.CMSIS.pdsc b/ARM.CMSIS.pdsc
index 0e2a0e6..ba4d497 100644
--- a/ARM.CMSIS.pdsc
+++ b/ARM.CMSIS.pdsc
@@ -3249,6 +3249,7 @@
         <file category="source"   name="CMSIS/DSP/Source/TransformFunctions/TransformFunctionsF16.c"/>
         <file category="source"   name="CMSIS/DSP/Source/MatrixFunctions/MatrixFunctionsF16.c"/>
         <file category="source"   name="CMSIS/DSP/Source/InterpolationFunctions/InterpolationFunctionsF16.c"/>
+        <file category="source"   name="CMSIS/DSP/Source/StatisticsFunctions/StatisticsFunctionsF16.c"/>
 
         <!-- Compute Library for Cortex-A -->
         <file category="header"   name="CMSIS/DSP/ComputeLibrary/Include/NEMath.h"        condition="ARMv7-A Device"/>
diff --git a/CMSIS/DSP/Include/dsp/statistics_functions_f16.h b/CMSIS/DSP/Include/dsp/statistics_functions_f16.h
index bc3665c..c891e3f 100755
--- a/CMSIS/DSP/Include/dsp/statistics_functions_f16.h
+++ b/CMSIS/DSP/Include/dsp/statistics_functions_f16.h
@@ -26,12 +26,104 @@
 #ifndef _STATISTICS_FUNCTIONS_F16_H_
 #define _STATISTICS_FUNCTIONS_F16_H_
 
+#include "arm_math_types_f16.h"
+#include "arm_math_memory.h"
+
+#include "dsp/none.h"
+#include "dsp/utils.h"
+
+#include "dsp/basic_math_functions_f16.h"
+#include "dsp/fast_math_functions_f16.h"
+
 #ifdef   __cplusplus
 extern "C"
 {
 #endif
 
 #if defined(ARM_FLOAT16_SUPPORTED)
+
+ /**
+   * @brief  Sum of the squares of the elements of a floating-point vector.
+   * @param[in]  pSrc       is input pointer
+   * @param[in]  blockSize  is the number of samples to process
+   * @param[out] pResult    is output value.
+   */
+  void arm_power_f16(
+  const float16_t * pSrc,
+        uint32_t blockSize,
+        float16_t * pResult);
+
+ /**
+   * @brief  Mean value of a floating-point vector.
+   * @param[in]  pSrc       is input pointer
+   * @param[in]  blockSize  is the number of samples to process
+   * @param[out] pResult    is output value.
+   */
+  void arm_mean_f16(
+  const float16_t * pSrc,
+        uint32_t blockSize,
+        float16_t * pResult);
+
+  /**
+   * @brief  Variance of the elements of a floating-point vector.
+   * @param[in]  pSrc       is input pointer
+   * @param[in]  blockSize  is the number of samples to process
+   * @param[out] pResult    is output value.
+   */
+  void arm_var_f16(
+  const float16_t * pSrc,
+        uint32_t blockSize,
+        float16_t * pResult);
+
+ /**
+   * @brief  Root Mean Square of the elements of a floating-point vector.
+   * @param[in]  pSrc       is input pointer
+   * @param[in]  blockSize  is the number of samples to process
+   * @param[out] pResult    is output value.
+   */
+  void arm_rms_f16(
+  const float16_t * pSrc,
+        uint32_t blockSize,
+        float16_t * pResult);
+
+ /**
+   * @brief  Standard deviation of the elements of a floating-point vector.
+   * @param[in]  pSrc       is input pointer
+   * @param[in]  blockSize  is the number of samples to process
+   * @param[out] pResult    is output value.
+   */
+  void arm_std_f16(
+  const float16_t * pSrc,
+        uint32_t blockSize,
+        float16_t * pResult);
+
+ /**
+   * @brief  Minimum value of a floating-point vector.
+   * @param[in]  pSrc       is input pointer
+   * @param[in]  blockSize  is the number of samples to process
+   * @param[out] pResult    is output pointer
+   * @param[out] pIndex     is the array index of the minimum value in the input buffer.
+   */
+  void arm_min_f16(
+  const float16_t * pSrc,
+        uint32_t blockSize,
+        float16_t * pResult,
+        uint32_t * pIndex);
+
+/**
+ * @brief Maximum value of a floating-point vector.
+ * @param[in]  pSrc       points to the input buffer
+ * @param[in]  blockSize  length of the input vector
+ * @param[out] pResult    maximum value returned here
+ * @param[out] pIndex     index of maximum value returned here
+ */
+  void arm_max_f16(
+  const float16_t * pSrc,
+        uint32_t blockSize,
+        float16_t * pResult,
+        uint32_t * pIndex);
+
+
 #endif /*defined(ARM_FLOAT16_SUPPORTED)*/
 #ifdef   __cplusplus
 }
diff --git a/CMSIS/DSP/PythonWrapper/setup.py b/CMSIS/DSP/PythonWrapper/setup.py
index 6dc6766..142c759 100644
--- a/CMSIS/DSP/PythonWrapper/setup.py
+++ b/CMSIS/DSP/PythonWrapper/setup.py
@@ -38,6 +38,7 @@
 
 statistics = glob.glob(os.path.join(ROOT,"Source","StatisticsFunctions","*.c"))
 statistics.remove(os.path.join(ROOT,"Source","StatisticsFunctions","StatisticsFunctions.c"))
+statistics.remove(os.path.join(ROOT,"Source","StatisticsFunctions","StatisticsFunctionsF16.c"))
 
 complexf = glob.glob(os.path.join(ROOT,"Source","ComplexMathFunctions","*.c"))
 complexf.remove(os.path.join(ROOT,"Source","ComplexMathFunctions","ComplexMathFunctions.c"))
diff --git a/CMSIS/DSP/Source/MatrixFunctions/arm_mat_cmplx_mult_f16.c b/CMSIS/DSP/Source/MatrixFunctions/arm_mat_cmplx_mult_f16.c
index 7e009c6..5f400af 100755
--- a/CMSIS/DSP/Source/MatrixFunctions/arm_mat_cmplx_mult_f16.c
+++ b/CMSIS/DSP/Source/MatrixFunctions/arm_mat_cmplx_mult_f16.c
@@ -52,7 +52,6 @@
  */
 #if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
 
-#include <stdio.h>
 #include "arm_helium_utils.h"
 
 #define DONTCARE            0 /* inactive lane content */
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/CMakeLists.txt b/CMSIS/DSP/Source/StatisticsFunctions/CMakeLists.txt
index 8c3763c..b4310f3 100644
--- a/CMSIS/DSP/Source/StatisticsFunctions/CMakeLists.txt
+++ b/CMSIS/DSP/Source/StatisticsFunctions/CMakeLists.txt
@@ -5,9 +5,43 @@
 include(configLib)
 include(configDsp)
 
-file(GLOB SRC "./*_*.c")
 
-add_library(CMSISDSPStatistics STATIC ${SRC})
+
+add_library(CMSISDSPStatistics STATIC)
+
+target_sources(CMSISDSPStatistics PRIVATE arm_entropy_f32.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_entropy_f64.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_kullback_leibler_f32.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_kullback_leibler_f64.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_logsumexp_dot_prod_f32.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_logsumexp_f32.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_max_f32.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_max_no_idx_f32.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_max_q15.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_max_q31.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_max_q7.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_mean_f32.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_mean_q15.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_mean_q31.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_mean_q7.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_min_f32.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_min_q15.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_min_q31.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_min_q7.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_power_f32.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_power_q15.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_power_q31.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_power_q7.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_rms_f32.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_rms_q15.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_rms_q31.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_std_f32.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_std_q15.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_std_q31.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_var_f32.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_var_q15.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_var_q31.c)
+
 
 configLib(CMSISDSPStatistics ${ROOT})
 configDsp(CMSISDSPStatistics ${ROOT})
@@ -17,3 +51,12 @@
 
 
 
+if ((NOT ARMAC5) AND (NOT DISABLEFLOAT16))
+target_sources(CMSISDSPStatistics PRIVATE arm_max_f16.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_min_f16.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_mean_f16.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_power_f16.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_rms_f16.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_std_f16.c)
+target_sources(CMSISDSPStatistics PRIVATE arm_var_f16.c)
+endif()
\ No newline at end of file
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/StatisticsFunctionsF16.c b/CMSIS/DSP/Source/StatisticsFunctions/StatisticsFunctionsF16.c
new file mode 100755
index 0000000..b542e97
--- /dev/null
+++ b/CMSIS/DSP/Source/StatisticsFunctions/StatisticsFunctionsF16.c
@@ -0,0 +1,35 @@
+/* ----------------------------------------------------------------------
+ * Project:      CMSIS DSP Library
+ * Title:        StatisticsFunctions.c
+ * Description:  Combination of all statistics function source files.
+ *
+ * $Date:        16. March 2020
+ * $Revision:    V1.1.0
+ *
+ * Target Processor: Cortex-M cores
+ * -------------------------------------------------------------------- */
+/*
+ * Copyright (C) 2019-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_max_f16.c"
+#include "arm_min_f16.c"
+#include "arm_mean_f16.c"
+#include "arm_power_f16.c"
+#include "arm_rms_f16.c"
+#include "arm_std_f16.c"
+#include "arm_var_f16.c"
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_max_f16.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_max_f16.c
new file mode 100755
index 0000000..099f696
--- /dev/null
+++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_max_f16.c
@@ -0,0 +1,246 @@
+/* ----------------------------------------------------------------------
+ * Project:      CMSIS DSP Library
+ * Title:        arm_max_f16.c
+ * Description:  Maximum value of a floating-point vector
+ *
+ * $Date:        18. March 2020
+ * $Revision:    V1.6.0
+ *
+ * Target Processor: Cortex-M and Cortex-A 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/statistics_functions_f16.h"
+
+#if defined(ARM_FLOAT16_SUPPORTED)
+
+#if (defined(ARM_MATH_NEON) || defined(ARM_MATH_MVEF)) && !defined(ARM_MATH_AUTOVECTORIZE)
+#include <limits.h>
+#endif
+
+/**
+  @ingroup groupStats
+ */
+
+
+/**
+  @addtogroup Max
+  @{
+ */
+
+/**
+  @brief         Maximum value of a floating-point vector.
+  @param[in]     pSrc       points to the input vector
+  @param[in]     blockSize  number of samples in input vector
+  @param[out]    pResult    maximum value returned here
+  @param[out]    pIndex     index of maximum value returned here
+  @return        none
+ */
+
+#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
+
+void arm_max_f16(
+  const float16_t * pSrc,
+  uint32_t blockSize,
+  float16_t * pResult,
+  uint32_t * pIndex)
+{
+     int32_t blkCnt;
+    f16x8_t vecSrc;
+    f16x8_t curExtremValVec = vdupq_n_f16(F16_MIN);
+    float16_t maxValue = F16_MIN;
+    uint32_t idx = blockSize;
+    uint16x8_t indexVec;
+    uint16x8_t curExtremIdxVec;
+    uint32_t curIdx = 0;
+    mve_pred16_t p0;
+    float16_t tmp;
+
+
+    indexVec = vidupq_wb_u16(&curIdx, 1);
+    curExtremIdxVec = vdupq_n_u16(0);
+
+    /* Compute 4 outputs at a time */
+    blkCnt = blockSize >> 3;
+    while (blkCnt > 0)
+    {
+        vecSrc = vldrhq_f16(pSrc);
+        /*
+         * Get current max per lane and current index per lane
+         * when a max is selected
+         */
+        p0 = vcmpgeq(vecSrc, curExtremValVec);
+        curExtremValVec = vpselq(vecSrc, curExtremValVec, p0);
+        curExtremIdxVec = vpselq(indexVec, curExtremIdxVec, p0);
+
+        indexVec = vidupq_wb_u16(&curIdx, 1);
+
+        pSrc += 8;
+        /* Decrement the loop counter */
+        blkCnt--;
+    }
+
+
+    /*
+     * Get max value across the vector
+     */
+    maxValue = vmaxnmvq(maxValue, curExtremValVec);
+    /*
+     * set index for lower values to max possible index
+     */
+    p0 = vcmpgeq(curExtremValVec, maxValue);
+    indexVec = vpselq(curExtremIdxVec, vdupq_n_u16(blockSize), p0);
+    /*
+     * Get min index which is thus for a max value
+     */
+    idx = vminvq(idx, indexVec);
+
+    /* Tail */
+    blkCnt = blockSize & 7;
+
+    while (blkCnt > 0)
+    {
+      /* Initialize tmp to the next consecutive values one by one */
+      tmp = *pSrc++;
+
+      /* compare for the maximum value */
+      if (maxValue < tmp)
+      {
+        /* Update the maximum value and it's index */
+        maxValue = tmp;
+        idx = blockSize - blkCnt;
+      }
+
+      /* Decrement loop counter */
+      blkCnt--;
+    }
+
+    /*
+     * Save result
+     */
+    *pIndex = idx;
+    *pResult = maxValue;
+}
+
+#else
+void arm_max_f16(
+  const float16_t * pSrc,
+        uint32_t blockSize,
+        float16_t * pResult,
+        uint32_t * pIndex)
+{
+        float16_t maxVal, out;                         /* Temporary variables to store the output value. */
+        uint32_t blkCnt, outIndex;                     /* Loop counter */
+
+#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE)
+        uint32_t index;                                /* index of maximum value */
+#endif
+
+  /* Initialise index value to zero. */
+  outIndex = 0U;
+
+  /* Load first input value that act as reference value for comparision */
+  out = *pSrc++;
+
+#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE)
+  /* Initialise index of maximum value. */
+  index = 0U;
+
+  /* Loop unrolling: Compute 4 outputs at a time */
+  blkCnt = (blockSize - 1U) >> 2U;
+
+  while (blkCnt > 0U)
+  {
+    /* Initialize maxVal to next consecutive values one by one */
+    maxVal = *pSrc++;
+
+    /* compare for the maximum value */
+    if (out < maxVal)
+    {
+      /* Update the maximum value and it's index */
+      out = maxVal;
+      outIndex = index + 1U;
+    }
+
+    maxVal = *pSrc++;
+    if (out < maxVal)
+    {
+      out = maxVal;
+      outIndex = index + 2U;
+    }
+
+    maxVal = *pSrc++;
+    if (out < maxVal)
+    {
+      out = maxVal;
+      outIndex = index + 3U;
+    }
+
+    maxVal = *pSrc++;
+    if (out < maxVal)
+    {
+      out = maxVal;
+      outIndex = index + 4U;
+    }
+
+    index += 4U;
+
+    /* Decrement loop counter */
+    blkCnt--;
+  }
+
+  /* Loop unrolling: Compute remaining outputs */
+  blkCnt = (blockSize - 1U) % 4U;
+
+#else
+
+  /* Initialize blkCnt with number of samples */
+  blkCnt = (blockSize - 1U);
+
+#endif /* #if defined (ARM_MATH_LOOPUNROLL) */
+
+  while (blkCnt > 0U)
+  {
+    /* Initialize maxVal to the next consecutive values one by one */
+    maxVal = *pSrc++;
+
+    /* compare for the maximum value */
+    if (out < maxVal)
+    {
+      /* Update the maximum value and it's index */
+      out = maxVal;
+      outIndex = blockSize - blkCnt;
+    }
+
+    /* Decrement loop counter */
+    blkCnt--;
+  }
+
+  /* Store the maximum value and it's index into destination pointers */
+  *pResult = out;
+  *pIndex = outIndex;
+}
+#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
+
+/**
+  @} end of Max group
+ */
+
+#endif /* #if defined(ARM_FLOAT16_SUPPORTED) */ 
+
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_mean_f16.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_mean_f16.c
new file mode 100755
index 0000000..a32f871
--- /dev/null
+++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_mean_f16.c
@@ -0,0 +1,152 @@
+/* ----------------------------------------------------------------------
+ * Project:      CMSIS DSP Library
+ * Title:        arm_mean_f16.c
+ * Description:  Mean value of a floating-point vector
+ *
+ * $Date:        18. March 2020
+ * $Revision:    V1.6.0
+ *
+ * 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/statistics_functions_f16.h"
+
+#if defined(ARM_FLOAT16_SUPPORTED)
+
+
+/**
+  @ingroup groupStats
+ */
+
+/**
+  @defgroup mean Mean
+
+  Calculates the mean of the input vector. Mean is defined as the average of the elements in the vector.
+  The underlying algorithm is used:
+
+  <pre>
+      Result = (pSrc[0] + pSrc[1] + pSrc[2] + ... + pSrc[blockSize-1]) / blockSize;
+  </pre>
+
+  There are separate functions for floating-point, Q31, Q15, and Q7 data types.
+ */
+
+/**
+  @addtogroup mean
+  @{
+ */
+
+/**
+  @brief         Mean value of a floating-point vector.
+  @param[in]     pSrc       points to the input vector.
+  @param[in]     blockSize  number of samples in input vector.
+  @param[out]    pResult    mean value returned here.
+  @return        none
+ */
+#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
+
+#include "arm_helium_utils.h"
+
+void arm_mean_f16(
+  const float16_t * pSrc,
+  uint32_t blockSize,
+  float16_t * pResult)
+{
+    int32_t  blkCnt;           /* loop counters */
+    f16x8_t vecSrc;
+    f16x8_t sumVec = vdupq_n_f16(0.0f16);
+
+    blkCnt = blockSize;
+    do {
+        mve_pred16_t p = vctp16q(blkCnt);
+
+        vecSrc = vldrhq_z_f16((float16_t const *) pSrc, p);
+        sumVec = vaddq_m_f16(sumVec, sumVec, vecSrc, p);
+
+        blkCnt -= 8;
+        pSrc += 8;
+    }
+    while (blkCnt > 0);
+
+    *pResult = vecAddAcrossF16Mve(sumVec) / (float16_t) blockSize;
+}
+
+
+#else
+
+void arm_mean_f16(
+  const float16_t * pSrc,
+        uint32_t blockSize,
+        float16_t * pResult)
+{
+        uint32_t blkCnt;                               /* Loop counter */
+        float16_t sum = 0.0f;                          /* Temporary result storage */
+
+#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE)
+
+  /* Loop unrolling: Compute 4 outputs at a time */
+  blkCnt = blockSize >> 2U;
+
+  while (blkCnt > 0U)
+  {
+    /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */
+    sum += *pSrc++;
+
+    sum += *pSrc++;
+
+    sum += *pSrc++;
+
+    sum += *pSrc++;
+
+    /* Decrement the loop counter */
+    blkCnt--;
+  }
+
+  /* Loop unrolling: Compute remaining outputs */
+  blkCnt = blockSize % 0x4U;
+
+#else
+
+  /* Initialize blkCnt with number of samples */
+  blkCnt = blockSize;
+
+#endif /* #if defined (ARM_MATH_LOOPUNROLL) */
+
+  while (blkCnt > 0U)
+  {
+    /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */
+    sum += *pSrc++;
+
+    /* Decrement loop counter */
+    blkCnt--;
+  }
+
+  /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) / blockSize  */
+  /* Store result to destination */
+  *pResult = (sum / (float16_t)blockSize);
+}
+#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
+
+/**
+  @} end of mean group
+ */
+
+#endif /* #if defined(ARM_FLOAT16_SUPPORTED) */ 
+
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_mean_f32.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_mean_f32.c
index 57ea428..ec7b0dd 100644
--- a/CMSIS/DSP/Source/StatisticsFunctions/arm_mean_f32.c
+++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_mean_f32.c
@@ -32,18 +32,6 @@
   @ingroup groupStats
  */
 
-/**
-  @defgroup mean Mean
-
-  Calculates the mean of the input vector. Mean is defined as the average of the elements in the vector.
-  The underlying algorithm is used:
-
-  <pre>
-      Result = (pSrc[0] + pSrc[1] + pSrc[2] + ... + pSrc[blockSize-1]) / blockSize;
-  </pre>
-
-  There are separate functions for floating-point, Q31, Q15, and Q7 data types.
- */
 
 /**
   @addtogroup mean
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_min_f16.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_min_f16.c
new file mode 100755
index 0000000..cb53cab
--- /dev/null
+++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_min_f16.c
@@ -0,0 +1,240 @@
+/* ----------------------------------------------------------------------
+ * Project:      CMSIS DSP Library
+ * Title:        arm_min_f16.c
+ * Description:  Minimum value of a floating-point vector
+ *
+ * $Date:        18. March 2020
+ * $Revision:    V1.6.0
+ *
+ * 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/statistics_functions_f16.h"
+
+#if defined(ARM_FLOAT16_SUPPORTED)
+
+
+#if (defined(ARM_MATH_NEON) || defined(ARM_MATH_MVEF)) && !defined(ARM_MATH_AUTOVECTORIZE)
+#include <limits.h>
+#endif
+
+
+/**
+  @ingroup groupStats
+ */
+
+/**
+  @addtogroup Min
+  @{
+ */
+
+/**
+  @brief         Minimum value of a floating-point vector.
+  @param[in]     pSrc       points to the input vector
+  @param[in]     blockSize  number of samples in input vector
+  @param[out]    pResult    minimum value returned here
+  @param[out]    pIndex     index of minimum value returned here
+  @return        none
+ */
+
+#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
+
+void arm_min_f16(
+  const float16_t * pSrc,
+  uint32_t blockSize,
+  float16_t * pResult,
+  uint32_t * pIndex)
+{
+    int32_t  blkCnt;           /* loop counters */
+    f16x8_t vecSrc;
+    float16_t const *pSrcVec;
+    f16x8_t curExtremValVec = vdupq_n_f16(F16_MAX);
+    float16_t minValue = F16_MAX;
+    uint32_t  idx = blockSize;
+    uint16x8_t indexVec;
+    uint16x8_t curExtremIdxVec;
+    mve_pred16_t p0;
+
+    indexVec = vidupq_u16((uint32_t)0, 1);
+    curExtremIdxVec = vdupq_n_u16(0);
+
+    pSrcVec = (float16_t const *) pSrc;
+    blkCnt = blockSize >> 3;
+    while (blkCnt > 0)
+    {
+        vecSrc = vldrhq_f16(pSrcVec);  pSrcVec += 8;
+        /*
+         * Get current min per lane and current index per lane
+         * when a min is selected
+         */
+        p0 = vcmpleq(vecSrc, curExtremValVec);
+        curExtremValVec = vpselq(vecSrc, curExtremValVec, p0);
+        curExtremIdxVec = vpselq(indexVec, curExtremIdxVec, p0);
+
+        indexVec = indexVec + 8;
+        /*
+         * Decrement the blockSize loop counter
+         */
+        blkCnt--;
+    }
+    /*
+     * tail
+     * (will be merged thru tail predication)
+     */
+    blkCnt = blockSize & 7;
+    if (blkCnt > 0)
+    {
+        vecSrc = vldrhq_f16(pSrcVec);  pSrcVec += 8;
+        p0 = vctp16q(blkCnt);
+        /*
+         * Get current min per lane and current index per lane
+         * when a min is selected
+         */
+        p0 = vcmpleq_m(vecSrc, curExtremValVec, p0);
+        curExtremValVec = vpselq(vecSrc, curExtremValVec, p0);
+        curExtremIdxVec = vpselq(indexVec, curExtremIdxVec, p0);
+    }
+    /*
+     * Get min value across the vector
+     */
+    minValue = vminnmvq(minValue, curExtremValVec);
+    /*
+     * set index for lower values to min possible index
+     */
+    p0 = vcmpleq(curExtremValVec, minValue);
+    indexVec = vpselq(curExtremIdxVec, vdupq_n_u16(blockSize), p0);
+    /*
+     * Get min index which is thus for a min value
+     */
+    idx = vminvq(idx, indexVec);
+    /*
+     * Save result
+     */
+    *pIndex = idx;
+    *pResult = minValue;
+}
+
+#else
+
+void arm_min_f16(
+  const float16_t * pSrc,
+        uint32_t blockSize,
+        float16_t * pResult,
+        uint32_t * pIndex)
+{
+        float16_t minVal, out;                         /* Temporary variables to store the output value. */
+        uint32_t blkCnt, outIndex;                     /* Loop counter */
+
+#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE)
+        uint32_t index;                                /* index of maximum value */
+#endif
+
+  /* Initialise index value to zero. */
+  outIndex = 0U;
+
+  /* Load first input value that act as reference value for comparision */
+  out = *pSrc++;
+
+#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE)
+  /* Initialise index of maximum value. */
+  index = 0U;
+
+  /* Loop unrolling: Compute 4 outputs at a time */
+  blkCnt = (blockSize - 1U) >> 2U;
+
+  while (blkCnt > 0U)
+  {
+    /* Initialize minVal to next consecutive values one by one */
+    minVal = *pSrc++;
+
+    /* compare for the minimum value */
+    if (out > minVal)
+    {
+      /* Update the minimum value and it's index */
+      out = minVal;
+      outIndex = index + 1U;
+    }
+
+    minVal = *pSrc++;
+    if (out > minVal)
+    {
+      out = minVal;
+      outIndex = index + 2U;
+    }
+
+    minVal = *pSrc++;
+    if (out > minVal)
+    {
+      out = minVal;
+      outIndex = index + 3U;
+    }
+
+    minVal = *pSrc++;
+    if (out > minVal)
+    {
+      out = minVal;
+      outIndex = index + 4U;
+    }
+
+    index += 4U;
+
+    /* Decrement loop counter */
+    blkCnt--;
+  }
+
+  /* Loop unrolling: Compute remaining outputs */
+  blkCnt = (blockSize - 1U) % 4U;
+
+#else
+
+  /* Initialize blkCnt with number of samples */
+  blkCnt = (blockSize - 1U);
+
+#endif /* #if defined (ARM_MATH_LOOPUNROLL) */
+
+  while (blkCnt > 0U)
+  {
+    /* Initialize minVal to the next consecutive values one by one */
+    minVal = *pSrc++;
+
+    /* compare for the minimum value */
+    if (out > minVal)
+    {
+      /* Update the minimum value and it's index */
+      out = minVal;
+      outIndex = blockSize - blkCnt;
+    }
+
+    /* Decrement loop counter */
+    blkCnt--;
+  }
+
+  /* Store the minimum value and it's index into destination pointers */
+  *pResult = out;
+  *pIndex = outIndex;
+}
+#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
+
+/**
+  @} end of Min group
+ */
+
+#endif /* #if defined(ARM_FLOAT16_SUPPORTED) */ 
+
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_power_f16.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_power_f16.c
new file mode 100755
index 0000000..e40bc52
--- /dev/null
+++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_power_f16.c
@@ -0,0 +1,152 @@
+/* ----------------------------------------------------------------------
+ * Project:      CMSIS DSP Library
+ * Title:        arm_power_f16.c
+ * Description:  Sum of the squares of the elements of a floating-point vector
+ *
+ * $Date:        18. March 2020
+ * $Revision:    V1.6.0
+ *
+ * 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/statistics_functions_f16.h"
+
+#if defined(ARM_FLOAT16_SUPPORTED)
+
+
+/**
+  @ingroup groupStats
+ */
+
+
+
+/**
+  @addtogroup power
+  @{
+ */
+
+/**
+  @brief         Sum of the squares of the elements of a floating-point vector.
+  @param[in]     pSrc       points to the input vector
+  @param[in]     blockSize  number of samples in input vector
+  @param[out]    pResult    sum of the squares value returned here
+  @return        none
+ */
+#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
+
+#include "arm_helium_utils.h"
+
+void arm_power_f16(
+  const float16_t * pSrc,
+  uint32_t blockSize,
+  float16_t * pResult)
+{
+    int32_t         blkCnt;     /* loop counters */
+    f16x8_t         vecSrc;
+    f16x8_t         sumVec = vdupq_n_f16(0.0f);
+
+
+    blkCnt = blockSize;
+    do {
+        mve_pred16_t    p = vctp16q(blkCnt);
+
+        vecSrc = vldrhq_z_f16((float16_t const *) pSrc, p);
+        /*
+         * sum lanes
+         */
+        sumVec = vfmaq_m(sumVec, vecSrc, vecSrc, p);
+
+        blkCnt -= 8;
+        pSrc += 8;
+    }
+    while (blkCnt > 0);
+
+    *pResult = vecAddAcrossF16Mve(sumVec);
+}
+#else
+
+void arm_power_f16(
+  const float16_t * pSrc,
+        uint32_t blockSize,
+        float16_t * pResult)
+{
+        uint32_t blkCnt;                               /* Loop counter */
+        float16_t sum = 0.0f;                          /* Temporary result storage */
+        float16_t in;                                  /* Temporary variable to store input value */
+
+#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE)
+
+  /* Loop unrolling: Compute 4 outputs at a time */
+  blkCnt = blockSize >> 2U;
+
+  while (blkCnt > 0U)
+  {
+    /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */
+
+    /* Compute Power and store result in a temporary variable, sum. */
+    in = *pSrc++;
+    sum += in * in;
+
+    in = *pSrc++;
+    sum += in * in;
+
+    in = *pSrc++;
+    sum += in * in;
+
+    in = *pSrc++;
+    sum += in * in;
+
+    /* Decrement loop counter */
+    blkCnt--;
+  }
+
+  /* Loop unrolling: Compute remaining outputs */
+  blkCnt = blockSize % 0x4U;
+
+#else
+
+  /* Initialize blkCnt with number of samples */
+  blkCnt = blockSize;
+
+#endif /* #if defined (ARM_MATH_LOOPUNROLL) */
+
+  while (blkCnt > 0U)
+  {
+    /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */
+
+    /* Compute Power and store result in a temporary variable, sum. */
+    in = *pSrc++;
+    sum += in * in;
+
+    /* Decrement loop counter */
+    blkCnt--;
+  }
+
+  /* Store result to destination */
+  *pResult = sum;
+}
+#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
+
+/**
+  @} end of power group
+ */
+
+#endif /* #if defined(ARM_FLOAT16_SUPPORTED) */ 
+
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_rms_f16.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_rms_f16.c
new file mode 100755
index 0000000..15f1a47
--- /dev/null
+++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_rms_f16.c
@@ -0,0 +1,147 @@
+/* ----------------------------------------------------------------------
+ * Project:      CMSIS DSP Library
+ * Title:        arm_rms_f16.c
+ * Description:  Root mean square value of the elements of a floating-point vector
+ *
+ * $Date:        18. March 2020
+ * $Revision:    V1.6.0
+ *
+ * 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/statistics_functions_f16.h"
+
+#if defined(ARM_FLOAT16_SUPPORTED)
+
+
+/**
+  @ingroup groupStats
+ */
+
+/**
+  @defgroup RMS Root mean square (RMS)
+
+  Calculates the Root Mean Square of the elements in the input vector.
+  The underlying algorithm is used:
+
+  <pre>
+      Result = sqrt(((pSrc[0] * pSrc[0] + pSrc[1] * pSrc[1] + ... + pSrc[blockSize-1] * pSrc[blockSize-1]) / blockSize));
+  </pre>
+
+  There are separate functions for floating point, Q31, and Q15 data types.
+ */
+
+/**
+  @addtogroup RMS
+  @{
+ */
+
+/**
+  @brief         Root Mean Square of the elements of a floating-point vector.
+  @param[in]     pSrc       points to the input vector
+  @param[in]     blockSize  number of samples in input vector
+  @param[out]    pResult    root mean square value returned here
+  @return        none
+ */
+
+#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
+
+void arm_rms_f16(
+  const float16_t * pSrc,
+  uint32_t blockSize,
+  float16_t * pResult)
+{
+    float16_t pow = 0.0f;
+
+    arm_power_f16(pSrc, blockSize, &pow);
+
+    /* Compute Rms and store the result in the destination */
+    arm_sqrt_f16(pow / (float16_t) blockSize, pResult);
+}
+#else
+
+void arm_rms_f16(
+  const float16_t * pSrc,
+        uint32_t blockSize,
+        float16_t * pResult)
+{
+        uint32_t blkCnt;                               /* Loop counter */
+        float16_t sum = 0.0f;                          /* Temporary result storage */
+        float16_t in;                                  /* Temporary variable to store input value */
+
+#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE)
+
+  /* Loop unrolling: Compute 4 outputs at a time */
+  blkCnt = blockSize >> 2U;
+
+  while (blkCnt > 0U)
+  {
+    /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */
+
+    in = *pSrc++;
+    /* Compute sum of squares and store result in a temporary variable, sum. */
+    sum += in * in;
+
+    in = *pSrc++;
+    sum += in * in;
+
+    in = *pSrc++;
+    sum += in * in;
+
+    in = *pSrc++;
+    sum += in * in;
+
+    /* Decrement loop counter */
+    blkCnt--;
+  }
+
+  /* Loop unrolling: Compute remaining outputs */
+  blkCnt = blockSize % 0x4U;
+
+#else
+
+  /* Initialize blkCnt with number of samples */
+  blkCnt = blockSize;
+
+#endif /* #if defined (ARM_MATH_LOOPUNROLL) */
+
+  while (blkCnt > 0U)
+  {
+    /* C = A[0] * A[0] + A[1] * A[1] + ... + A[blockSize-1] * A[blockSize-1] */
+
+    in = *pSrc++;
+    /* Compute sum of squares and store result in a temporary variable. */
+    sum += ( in * in);
+
+    /* Decrement loop counter */
+    blkCnt--;
+  }
+
+  /* Compute Rms and store result in destination */
+  arm_sqrt_f16(sum / (float16_t) blockSize, pResult);
+}
+#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
+
+/**
+  @} end of RMS group
+ */
+
+#endif /* #if defined(ARM_FLOAT16_SUPPORTED) */ 
+
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_std_f16.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_std_f16.c
new file mode 100755
index 0000000..953838e
--- /dev/null
+++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_std_f16.c
@@ -0,0 +1,67 @@
+/* ----------------------------------------------------------------------
+ * Project:      CMSIS DSP Library
+ * Title:        arm_std_f16.c
+ * Description:  Standard deviation of the elements of a floating-point vector
+ *
+ * $Date:        18. March 2020
+ * $Revision:    V1.6.0
+ *
+ * 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/statistics_functions_f16.h"
+
+#if defined(ARM_FLOAT16_SUPPORTED)
+
+
+/**
+  @ingroup groupStats
+ */
+
+
+
+/**
+  @addtogroup STD
+  @{
+ */
+
+/**
+  @brief         Standard deviation of the elements of a floating-point vector.
+  @param[in]     pSrc       points to the input vector
+  @param[in]     blockSize  number of samples in input vector
+  @param[out]    pResult    standard deviation value returned here
+  @return        none
+ */
+void arm_std_f16(
+  const float16_t * pSrc,
+        uint32_t blockSize,
+        float16_t * pResult)
+{
+  float16_t var;
+  arm_var_f16(pSrc,blockSize,&var);
+  arm_sqrt_f16(var, pResult);
+}
+
+/**
+  @} end of STD group
+ */
+
+#endif /* #if defined(ARM_FLOAT16_SUPPORTED) */ 
+
diff --git a/CMSIS/DSP/Source/StatisticsFunctions/arm_var_f16.c b/CMSIS/DSP/Source/StatisticsFunctions/arm_var_f16.c
new file mode 100755
index 0000000..727a594
--- /dev/null
+++ b/CMSIS/DSP/Source/StatisticsFunctions/arm_var_f16.c
@@ -0,0 +1,221 @@
+/* ----------------------------------------------------------------------
+ * Project:      CMSIS DSP Library
+ * Title:        arm_var_f16.c
+ * Description:  Variance of the elements of a floating-point vector
+ *
+ * $Date:        18. March 2020
+ * $Revision:    V1.6.0
+ *
+ * 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/statistics_functions_f16.h"
+
+#include <stdio.h>
+
+#if defined(ARM_FLOAT16_SUPPORTED)
+
+
+/**
+  @ingroup groupStats
+ */
+
+
+/**
+  @addtogroup variance
+  @{
+ */
+
+/**
+  @brief         Variance of the elements of a floating-point vector.
+  @param[in]     pSrc       points to the input vector
+  @param[in]     blockSize  number of samples in input vector
+  @param[out]    pResult    variance value returned here
+  @return        none
+ */
+#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
+
+#include "arm_helium_utils.h"
+
+
+void arm_var_f16(
+           const float16_t * pSrc,
+                 uint32_t blockSize,
+                 float16_t * pResult)
+{
+    int32_t         blkCnt;     /* loop counters */
+    f16x8_t         vecSrc;
+    f16x8_t         sumVec = vdupq_n_f16((float16_t) 0.0);
+    float16_t       fMean;
+
+    if (blockSize <= 1U) {
+        *pResult = 0;
+        return;
+    }
+
+
+    arm_mean_f16(pSrc, blockSize, &fMean);
+
+/* 6.14 bug */
+#if defined(SDCOMP_xxx)
+#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100)
+    __asm volatile(
+        "   vmov.i32                     %[acc], #0 \n"
+        : [acc] "+t"(sumVec)
+        : 
+        : );
+#endif
+#endif
+
+    blkCnt = blockSize;
+    do {
+        mve_pred16_t    p = vctp16q(blkCnt);
+
+        vecSrc = vldrhq_z_f16((float16_t const *) pSrc, p);
+        /*
+         * sum lanes
+         */
+        vecSrc = vsubq_m(vuninitializedq_f16(), vecSrc, fMean, p);
+        sumVec = vfmaq_m(sumVec, vecSrc, vecSrc, p);
+
+        blkCnt -= 8;
+        pSrc += 8;
+    }
+    while (blkCnt > 0);
+    
+    /* Variance */
+    *pResult = vecAddAcrossF16Mve(sumVec) / (float16_t) (blockSize - 1.0f);
+}
+#else
+
+void arm_var_f16(
+  const float16_t * pSrc,
+        uint32_t blockSize,
+        float16_t * pResult)
+{
+        uint32_t blkCnt;                               /* Loop counter */
+        _Float16 sum = 0.0f;                          /* Temporary result storage */
+        _Float16 fSum = 0.0f;
+        _Float16 fMean, fValue;
+  const float16_t * pInput = pSrc;
+
+  if (blockSize <= 1U)
+  {
+    *pResult = 0;
+    return;
+  }
+
+#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE)
+
+  /* Loop unrolling: Compute 4 outputs at a time */
+  blkCnt = blockSize >> 2U;
+
+  while (blkCnt > 0U)
+  {
+    /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */
+
+    sum += *pInput++;
+    sum += *pInput++;
+    sum += *pInput++;
+    sum += *pInput++;
+
+
+    /* Decrement loop counter */
+    blkCnt--;
+  }
+
+  /* Loop unrolling: Compute remaining outputs */
+  blkCnt = blockSize % 0x4U;
+
+#else
+
+  /* Initialize blkCnt with number of samples */
+  blkCnt = blockSize;
+
+#endif /* #if defined (ARM_MATH_LOOPUNROLL) */
+
+  while (blkCnt > 0U)
+  {
+    /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) */
+
+    sum += *pInput++;
+
+    /* Decrement loop counter */
+    blkCnt--;
+  }
+
+  /* C = (A[0] + A[1] + A[2] + ... + A[blockSize-1]) / blockSize  */
+  fMean = sum / (float16_t) blockSize;
+
+  pInput = pSrc;
+
+#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE)
+
+  /* Loop unrolling: Compute 4 outputs at a time */
+  blkCnt = blockSize >> 2U;
+
+  while (blkCnt > 0U)
+  {
+    fValue = *pInput++ - fMean;
+    fSum += fValue * fValue;
+
+    fValue = *pInput++ - fMean;
+    fSum += fValue * fValue;
+
+    fValue = *pInput++ - fMean;
+    fSum += fValue * fValue;
+
+    fValue = *pInput++ - fMean;
+    fSum += fValue * fValue;
+
+    /* Decrement loop counter */
+    blkCnt--;
+  }
+
+  /* Loop unrolling: Compute remaining outputs */
+  blkCnt = blockSize % 0x4U;
+
+#else
+
+  /* Initialize blkCnt with number of samples */
+  blkCnt = blockSize;
+
+#endif /* #if defined (ARM_MATH_LOOPUNROLL) */
+
+  while (blkCnt > 0U)
+  {
+    fValue = *pInput++ - fMean;
+    fSum += fValue * fValue;
+
+    /* Decrement loop counter */
+    blkCnt--;
+  }
+
+  /* Variance */
+  *pResult = fSum / (float16_t)(blockSize - 1.0f);
+}
+#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */
+
+/**
+  @} end of variance group
+ */
+
+#endif /* #if defined(ARM_FLOAT16_SUPPORTED) */ 
+
diff --git a/CMSIS/DSP/Testing/CMakeLists.txt b/CMSIS/DSP/Testing/CMakeLists.txt
index 51b1665..d277a6a 100644
--- a/CMSIS/DSP/Testing/CMakeLists.txt
+++ b/CMSIS/DSP/Testing/CMakeLists.txt
@@ -329,6 +329,7 @@
   Source/Tests/BasicTestsF16.cpp
   Source/Tests/ComplexTestsF16.cpp
   Source/Tests/InterpolationTestsF16.cpp
+  Source/Tests/StatsTestsF16.cpp
   Source/Tests/FIRF16.cpp
   Source/Tests/BIQUADF16.cpp
   Source/Tests/MISCF16.cpp
diff --git a/CMSIS/DSP/Testing/Include/Tests/StatsTestsF16.h b/CMSIS/DSP/Testing/Include/Tests/StatsTestsF16.h
new file mode 100755
index 0000000..790633b
--- /dev/null
+++ b/CMSIS/DSP/Testing/Include/Tests/StatsTestsF16.h
@@ -0,0 +1,35 @@
+#include "Test.h"
+#include "Pattern.h"
+
+#include "dsp/statistics_functions_f16.h"
+
+class StatsTestsF16:public Client::Suite
+    {
+        public:
+            StatsTestsF16(Testing::testID_t id);
+            virtual void setUp(Testing::testID_t,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr);
+            virtual void tearDown(Testing::testID_t,Client::PatternMgr *mgr);
+        private:
+            #include "StatsTestsF16_decl.h"
+            
+            Client::Pattern<float16_t> inputA;
+            Client::Pattern<float16_t> inputB;
+            Client::Pattern<int16_t> dims;
+
+            Client::LocalPattern<float16_t> output;
+            Client::LocalPattern<int16_t> index;
+            Client::LocalPattern<float16_t> tmp;
+
+            // Reference patterns are not loaded when we are in dump mode
+            Client::RefPattern<float16_t> ref;
+            Client::Pattern<int16_t> maxIndexes;
+            Client::Pattern<int16_t> minIndexes;
+
+            int nbPatterns;
+            int vecDim;
+
+            int refOffset;
+
+           
+
+    };
diff --git a/CMSIS/DSP/Testing/PatternGeneration/Stats.py b/CMSIS/DSP/Testing/PatternGeneration/Stats.py
index 09d30bc..e0610eb 100755
--- a/CMSIS/DSP/Testing/PatternGeneration/Stats.py
+++ b/CMSIS/DSP/Testing/PatternGeneration/Stats.py
@@ -343,6 +343,7 @@
     PARAMDIR = os.path.join("Parameters","DSP","Stats","Stats")
     
     configf32=Tools.Config(PATTERNDIR,PARAMDIR,"f32")
+    configf16=Tools.Config(PATTERNDIR,PARAMDIR,"f16")
     configf64=Tools.Config(PATTERNDIR,PARAMDIR,"f64")
     configq31=Tools.Config(PATTERNDIR,PARAMDIR,"q31")
     configq15=Tools.Config(PATTERNDIR,PARAMDIR,"q15")
@@ -355,5 +356,7 @@
     writeTests(configq15,1,15)
     writeTests(configq7,1,7)
 
+    nb=writeTests(configf16,1,16)
+
 if __name__ == '__main__':
   generatePatterns()
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Input1_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Input1_f16.txt
new file mode 100755
index 0000000..5758d35
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Input1_f16.txt
@@ -0,0 +1,602 @@
+H
+300
+// -0.181541
+0xb1cf
+// -0.169745
+0xb16f
+// 0.237867
+0x339d
+// 0.280697
+0x347e
+// 0.111340
+0x2f20
+// -0.281630
+0xb482
+// 0.426820
+0x36d4
+// -0.147220
+0xb0b6
+// -0.301289
+0xb4d2
+// 0.085008
+0x2d71
+// -0.096822
+0xae32
+// 0.118322
+0x2f93
+// 0.026424
+0x26c4
+// -0.105946
+0xaec8
+// 0.411642
+0x3696
+// 0.136448
+0x305e
+// -0.335485
+0xb55e
+// -0.202068
+0xb277
+// -0.361403
+0xb5c8
+// -0.478874
+0xb7a9
+// -0.554829
+0xb870
+// -0.725607
+0xb9ce
+// -0.397848
+0xb65e
+// 0.081577
+0x2d39
+// 0.376096
+0x3604
+// 0.619949
+0x38f6
+// 0.035635
+0x2890
+// -0.045637
+0xa9d7
+// -0.168639
+0xb165
+// 0.170281
+0x3173
+// -0.077000
+0xacee
+// 0.167346
+0x315b
+// -0.189246
+0xb20e
+// 0.327278
+0x353d
+// -0.125620
+0xb005
+// -0.302179
+0xb4d6
+// 0.324256
+0x3530
+// -0.115925
+0xaf6b
+// 0.023388
+0x25fd
+// 0.213505
+0x32d5
+// -0.249834
+0xb3ff
+// 0.230302
+0x335f
+// 0.052223
+0x2aaf
+// -0.118431
+0xaf94
+// 0.237972
+0x339d
+// 0.167228
+0x315a
+// 0.500285
+0x3801
+// 0.396042
+0x3656
+// 0.287551
+0x349a
+// 0.363907
+0x35d3
+// -0.285888
+0xb493
+// -0.298927
+0xb4c8
+// 0.384334
+0x3626
+// -0.214899
+0xb2e0
+// -0.256566
+0xb41b
+// 0.438213
+0x3703
+// -0.057463
+0xab5b
+// 0.099164
+0x2e59
+// -0.337406
+0xb566
+// -0.602355
+0xb8d2
+// -0.003762
+0x9bb4
+// -0.270555
+0xb454
+// -0.351693
+0xb5a1
+// 0.279530
+0x3479
+// -0.365779
+0xb5da
+// 0.133551
+0x3046
+// 0.059872
+0x2baa
+// -0.286309
+0xb495
+// 0.246533
+0x33e4
+// 0.171805
+0x317f
+// -0.341557
+0xb577
+// 0.024636
+0x264f
+// 0.191050
+0x321d
+// 0.093971
+0x2e04
+// -0.077312
+0xacf3
+// -0.628921
+0xb908
+// 0.057062
+0x2b4e
+// 0.004234
+0x1c56
+// 0.702554
+0x399f
+// 0.070054
+0x2c7c
+// -0.126315
+0xb00b
+// -0.114205
+0xaf4f
+// 0.174413
+0x3195
+// -0.323334
+0xb52c
+// -0.419826
+0xb6b8
+// -0.092743
+0xadf0
+// 0.023260
+0x25f4
+// 0.169239
+0x316a
+// -0.112398
+0xaf32
+// -0.530023
+0xb83d
+// 0.057968
+0x2b6b
+// 0.099520
+0x2e5f
+// 0.249493
+0x33fc
+// -0.158562
+0xb113
+// 0.442311
+0x3714
+// -0.375796
+0xb603
+// 0.262720
+0x3434
+// -0.068077
+0xac5b
+// -0.338289
+0xb56a
+// 0.158634
+0x3114
+// 0.292740
+0x34af
+// 0.255336
+0x3416
+// 0.163457
+0x313b
+// -0.642740
+0xb924
+// -0.303784
+0xb4dc
+// 0.290379
+0x34a5
+// -0.139732
+0xb079
+// -0.531862
+0xb841
+// -0.109192
+0xaefd
+// -0.051034
+0xaa88
+// -0.845953
+0xbac5
+// 0.370689
+0x35ee
+// -0.224557
+0xb330
+// 0.087760
+0x2d9e
+// 0.044607
+0x29b6
+// -0.176383
+0xb1a5
+// -0.054776
+0xab03
+// -0.340220
+0xb572
+// -0.437922
+0xb702
+// -0.336270
+0xb561
+// 0.267078
+0x3446
+// 0.069067
+0x2c6c
+// -0.058832
+0xab88
+// -0.331618
+0xb54e
+// -0.029930
+0xa7a9
+// 0.609125
+0x38df
+// -0.251916
+0xb408
+// -0.122801
+0xafdc
+// 0.387843
+0x3635
+// 0.112303
+0x2f30
+// -0.407489
+0xb685
+// 0.316717
+0x3511
+// -0.076934
+0xacec
+// 0.299806
+0x34cc
+// -0.123522
+0xafe8
+// 0.221139
+0x3314
+// -0.012030
+0xa229
+// -0.330032
+0xb548
+// 0.043511
+0x2992
+// -0.790171
+0xba52
+// 0.119824
+0x2fab
+// -0.009153
+0xa0b0
+// 0.212885
+0x32d0
+// 0.430953
+0x36e5
+// 0.169799
+0x316f
+// -0.264303
+0xb43b
+// -0.075679
+0xacd8
+// -0.062243
+0xabf8
+// -0.322429
+0xb529
+// -0.229378
+0xb357
+// 0.020636
+0x2548
+// 0.474186
+0x3796
+// -0.149192
+0xb0c6
+// 0.159253
+0x3119
+// -0.418241
+0xb6b1
+// -0.220744
+0xb310
+// -0.332685
+0xb553
+// 0.078293
+0x2d03
+// 0.284063
+0x348c
+// 0.109206
+0x2efd
+// 0.069842
+0x2c78
+// -0.054476
+0xaaf9
+// -0.018401
+0xa4b6
+// 0.077888
+0x2cfc
+// 0.219216
+0x3304
+// 0.174853
+0x3198
+// 0.218507
+0x32fe
+// 0.208197
+0x32aa
+// -0.057710
+0xab63
+// -0.231653
+0xb36a
+// -0.213055
+0xb2d1
+// -0.174800
+0xb198
+// -0.099992
+0xae66
+// 0.081162
+0x2d32
+// -0.150392
+0xb0d0
+// -0.448191
+0xb72c
+// 0.200164
+0x3268
+// 0.020702
+0x254d
+// -0.249379
+0xb3fb
+// 0.079454
+0x2d16
+// 0.215899
+0x32e9
+// 0.415424
+0x36a6
+// -0.369649
+0xb5ea
+// 0.007064
+0x1f3c
+// -0.536642
+0xb84b
+// -0.106107
+0xaeca
+// -0.074443
+0xacc4
+// 0.087497
+0x2d9a
+// 0.543513
+0x3859
+// -0.090931
+0xadd2
+// -0.197363
+0xb251
+// -0.452118
+0xb73c
+// 0.139166
+0x3074
+// 0.054687
+0x2b00
+// -0.274367
+0xb464
+// -0.153652
+0xb0eb
+// -0.458440
+0xb756
+// -0.159573
+0xb11b
+// -0.014334
+0xa357
+// -0.138766
+0xb071
+// -0.285817
+0xb493
+// 0.166074
+0x3150
+// -0.007518
+0x9fb3
+// -0.287886
+0xb49b
+// 0.040596
+0x2932
+// 0.024333
+0x263b
+// -0.711750
+0xb9b2
+// -0.111767
+0xaf27
+// 0.123774
+0x2fec
+// -0.405266
+0xb67c
+// -0.291294
+0xb4a9
+// 0.165725
+0x314e
+// -0.390727
+0xb640
+// 0.037912
+0x28da
+// 0.067118
+0x2c4c
+// -0.020696
+0xa54c
+// 0.469622
+0x3784
+// -0.268572
+0xb44c
+// -0.365714
+0xb5da
+// 0.359382
+0x35c0
+// -0.351236
+0xb59f
+// 0.003563
+0x1b4c
+// -0.055833
+0xab26
+// 0.185036
+0x31ec
+// 0.220537
+0x330f
+// 0.142509
+0x308f
+// -0.131898
+0xb039
+// -0.040169
+0xa924
+// 0.340507
+0x3573
+// -0.443301
+0xb718
+// -0.504501
+0xb809
+// -0.143797
+0xb09a
+// -0.224534
+0xb32f
+// 0.413910
+0x369f
+// -0.304571
+0xb4e0
+// -0.546099
+0xb85e
+// 0.298548
+0x34c7
+// -0.075447
+0xacd4
+// -0.397018
+0xb65a
+// -0.706257
+0xb9a6
+// -0.326503
+0xb539
+// 0.027824
+0x271f
+// -0.067521
+0xac52
+// 0.132370
+0x303c
+// -0.119409
+0xafa4
+// 0.417147
+0x36ad
+// -0.053274
+0xaad2
+// 0.215552
+0x32e6
+// 0.555113
+0x3871
+// 0.132507
+0x303d
+// -0.112059
+0xaf2c
+// -0.438044
+0xb702
+// -0.061994
+0xabef
+// 0.420391
+0x36ba
+// -0.511288
+0xb817
+// -0.169411
+0xb16c
+// 0.455896
+0x374b
+// -0.037098
+0xa8c0
+// 0.097329
+0x2e3b
+// -0.510351
+0xb815
+// 0.031878
+0x2815
+// 0.451849
+0x373b
+// -0.005921
+0x9e10
+// 0.522571
+0x382e
+// -0.795109
+0xba5c
+// -0.063013
+0xac08
+// -0.395304
+0xb653
+// 0.044986
+0x29c2
+// 0.439022
+0x3706
+// 0.151798
+0x30dc
+// 1.000000
+0x3c00
+// 0.151786
+0x30db
+// 0.096127
+0x2e27
+// -0.079173
+0xad11
+// -0.182049
+0xb1d3
+// 0.381454
+0x361a
+// 0.370677
+0x35ee
+// -0.187572
+0xb201
+// 0.183005
+0x31db
+// -0.588512
+0xb8b5
+// -0.118559
+0xaf96
+// 0.200334
+0x3269
+// 0.120477
+0x2fb6
+// 0.423841
+0x36c8
+// -0.482627
+0xb7b9
+// 0.069639
+0x2c75
+// 0.179386
+0x31be
+// -0.066133
+0xac3c
+// 0.042963
+0x2980
+// -0.106336
+0xaece
+// -0.125617
+0xb005
+// -0.464414
+0xb76e
+// 0.132390
+0x303d
+// -0.202302
+0xb279
+// -0.703952
+0xb9a2
+// -0.128242
+0xb01b
+// 0.437213
+0x36ff
+// 0.160378
+0x3122
+// -0.112012
+0xaf2b
+// -0.038690
+0xa8f4
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Input2_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Input2_f16.txt
new file mode 100755
index 0000000..7e79907
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/Input2_f16.txt
@@ -0,0 +1,602 @@
+H
+300
+// 0.181541
+0x31cf
+// 0.169745
+0x316f
+// 0.237867
+0x339d
+// 0.280697
+0x347e
+// 0.111340
+0x2f20
+// 0.281630
+0x3482
+// 0.426820
+0x36d4
+// 0.147220
+0x30b6
+// 0.301289
+0x34d2
+// 0.085008
+0x2d71
+// 0.096822
+0x2e32
+// 0.118322
+0x2f93
+// 0.026424
+0x26c4
+// 0.105946
+0x2ec8
+// 0.411642
+0x3696
+// 0.136448
+0x305e
+// 0.335485
+0x355e
+// 0.202068
+0x3277
+// 0.361403
+0x35c8
+// 0.478874
+0x37a9
+// 0.554829
+0x3870
+// 0.725607
+0x39ce
+// 0.397848
+0x365e
+// 0.081577
+0x2d39
+// 0.376096
+0x3604
+// 0.619949
+0x38f6
+// 0.035635
+0x2890
+// 0.045637
+0x29d7
+// 0.168639
+0x3165
+// 0.170281
+0x3173
+// 0.077000
+0x2cee
+// 0.167346
+0x315b
+// 0.189246
+0x320e
+// 0.327278
+0x353d
+// 0.125620
+0x3005
+// 0.302179
+0x34d6
+// 0.324256
+0x3530
+// 0.115925
+0x2f6b
+// 0.023388
+0x25fd
+// 0.213505
+0x32d5
+// 0.249834
+0x33ff
+// 0.230302
+0x335f
+// 0.052223
+0x2aaf
+// 0.118431
+0x2f94
+// 0.237972
+0x339d
+// 0.167228
+0x315a
+// 0.500285
+0x3801
+// 0.396042
+0x3656
+// 0.287551
+0x349a
+// 0.363907
+0x35d3
+// 0.285888
+0x3493
+// 0.298927
+0x34c8
+// 0.384334
+0x3626
+// 0.214899
+0x32e0
+// 0.256566
+0x341b
+// 0.438213
+0x3703
+// 0.057463
+0x2b5b
+// 0.099164
+0x2e59
+// 0.337406
+0x3566
+// 0.602355
+0x38d2
+// 0.003762
+0x1bb4
+// 0.270555
+0x3454
+// 0.351693
+0x35a1
+// 0.279530
+0x3479
+// 0.365779
+0x35da
+// 0.133551
+0x3046
+// 0.059872
+0x2baa
+// 0.286309
+0x3495
+// 0.246533
+0x33e4
+// 0.171805
+0x317f
+// 0.341557
+0x3577
+// 0.024636
+0x264f
+// 0.191050
+0x321d
+// 0.093971
+0x2e04
+// 0.077312
+0x2cf3
+// 0.628921
+0x3908
+// 0.057062
+0x2b4e
+// 0.004234
+0x1c56
+// 0.702554
+0x399f
+// 0.070054
+0x2c7c
+// 0.126315
+0x300b
+// 0.114205
+0x2f4f
+// 0.174413
+0x3195
+// 0.323334
+0x352c
+// 0.419826
+0x36b8
+// 0.092743
+0x2df0
+// 0.023260
+0x25f4
+// 0.169239
+0x316a
+// 0.112398
+0x2f32
+// 0.530023
+0x383d
+// 0.057968
+0x2b6b
+// 0.099520
+0x2e5f
+// 0.249493
+0x33fc
+// 0.158562
+0x3113
+// 0.442311
+0x3714
+// 0.375796
+0x3603
+// 0.262720
+0x3434
+// 0.068077
+0x2c5b
+// 0.338289
+0x356a
+// 0.158634
+0x3114
+// 0.292740
+0x34af
+// 0.255336
+0x3416
+// 0.163457
+0x313b
+// 0.642740
+0x3924
+// 0.303784
+0x34dc
+// 0.290379
+0x34a5
+// 0.139732
+0x3079
+// 0.531862
+0x3841
+// 0.109192
+0x2efd
+// 0.051034
+0x2a88
+// 0.845953
+0x3ac5
+// 0.370689
+0x35ee
+// 0.224557
+0x3330
+// 0.087760
+0x2d9e
+// 0.044607
+0x29b6
+// 0.176383
+0x31a5
+// 0.054776
+0x2b03
+// 0.340220
+0x3572
+// 0.437922
+0x3702
+// 0.336270
+0x3561
+// 0.267078
+0x3446
+// 0.069067
+0x2c6c
+// 0.058832
+0x2b88
+// 0.331618
+0x354e
+// 0.029930
+0x27a9
+// 0.609125
+0x38df
+// 0.251916
+0x3408
+// 0.122801
+0x2fdc
+// 0.387843
+0x3635
+// 0.112303
+0x2f30
+// 0.407489
+0x3685
+// 0.316717
+0x3511
+// 0.076934
+0x2cec
+// 0.299806
+0x34cc
+// 0.123522
+0x2fe8
+// 0.221139
+0x3314
+// 0.012030
+0x2229
+// 0.330032
+0x3548
+// 0.043511
+0x2992
+// 0.790171
+0x3a52
+// 0.119824
+0x2fab
+// 0.009153
+0x20b0
+// 0.212885
+0x32d0
+// 0.430953
+0x36e5
+// 0.169799
+0x316f
+// 0.264303
+0x343b
+// 0.075679
+0x2cd8
+// 0.062243
+0x2bf8
+// 0.322429
+0x3529
+// 0.229378
+0x3357
+// 0.020636
+0x2548
+// 0.474186
+0x3796
+// 0.149192
+0x30c6
+// 0.159253
+0x3119
+// 0.418241
+0x36b1
+// 0.220744
+0x3310
+// 0.332685
+0x3553
+// 0.078293
+0x2d03
+// 0.284063
+0x348c
+// 0.109206
+0x2efd
+// 0.069842
+0x2c78
+// 0.054476
+0x2af9
+// 0.018401
+0x24b6
+// 0.077888
+0x2cfc
+// 0.219216
+0x3304
+// 0.174853
+0x3198
+// 0.218507
+0x32fe
+// 0.208197
+0x32aa
+// 0.057710
+0x2b63
+// 0.231653
+0x336a
+// 0.213055
+0x32d1
+// 0.174800
+0x3198
+// 0.099992
+0x2e66
+// 0.081162
+0x2d32
+// 0.150392
+0x30d0
+// 0.448191
+0x372c
+// 0.200164
+0x3268
+// 0.020702
+0x254d
+// 0.249379
+0x33fb
+// 0.079454
+0x2d16
+// 0.215899
+0x32e9
+// 0.415424
+0x36a6
+// 0.369649
+0x35ea
+// 0.007064
+0x1f3c
+// 0.536642
+0x384b
+// 0.106107
+0x2eca
+// 0.074443
+0x2cc4
+// 0.087497
+0x2d9a
+// 0.543513
+0x3859
+// 0.090931
+0x2dd2
+// 0.197363
+0x3251
+// 0.452118
+0x373c
+// 0.139166
+0x3074
+// 0.054687
+0x2b00
+// 0.274367
+0x3464
+// 0.153652
+0x30eb
+// 0.458440
+0x3756
+// 0.159573
+0x311b
+// 0.014334
+0x2357
+// 0.138766
+0x3071
+// 0.285817
+0x3493
+// 0.166074
+0x3150
+// 0.007518
+0x1fb3
+// 0.287886
+0x349b
+// 0.040596
+0x2932
+// 0.024333
+0x263b
+// 0.711750
+0x39b2
+// 0.111767
+0x2f27
+// 0.123774
+0x2fec
+// 0.405266
+0x367c
+// 0.291294
+0x34a9
+// 0.165725
+0x314e
+// 0.390727
+0x3640
+// 0.037912
+0x28da
+// 0.067118
+0x2c4c
+// 0.020696
+0x254c
+// 0.469622
+0x3784
+// 0.268572
+0x344c
+// 0.365714
+0x35da
+// 0.359382
+0x35c0
+// 0.351236
+0x359f
+// 0.003563
+0x1b4c
+// 0.055833
+0x2b26
+// 0.185036
+0x31ec
+// 0.220537
+0x330f
+// 0.142509
+0x308f
+// 0.131898
+0x3039
+// 0.040169
+0x2924
+// 0.340507
+0x3573
+// 0.443301
+0x3718
+// 0.504501
+0x3809
+// 0.143797
+0x309a
+// 0.224534
+0x332f
+// 0.413910
+0x369f
+// 0.304571
+0x34e0
+// 0.546099
+0x385e
+// 0.298548
+0x34c7
+// 0.075447
+0x2cd4
+// 0.397018
+0x365a
+// 0.706257
+0x39a6
+// 0.326503
+0x3539
+// 0.027824
+0x271f
+// 0.067521
+0x2c52
+// 0.132370
+0x303c
+// 0.119409
+0x2fa4
+// 0.417147
+0x36ad
+// 0.053274
+0x2ad2
+// 0.215552
+0x32e6
+// 0.555113
+0x3871
+// 0.132507
+0x303d
+// 0.112059
+0x2f2c
+// 0.438044
+0x3702
+// 0.061994
+0x2bef
+// 0.420391
+0x36ba
+// 0.511288
+0x3817
+// 0.169411
+0x316c
+// 0.455896
+0x374b
+// 0.037098
+0x28c0
+// 0.097329
+0x2e3b
+// 0.510351
+0x3815
+// 0.031878
+0x2815
+// 0.451849
+0x373b
+// 0.005921
+0x1e10
+// 0.522571
+0x382e
+// 0.795109
+0x3a5c
+// 0.063013
+0x2c08
+// 0.395304
+0x3653
+// 0.044986
+0x29c2
+// 0.439022
+0x3706
+// 0.151798
+0x30dc
+// 1.000000
+0x3c00
+// 0.151786
+0x30db
+// 0.096127
+0x2e27
+// 0.079173
+0x2d11
+// 0.182049
+0x31d3
+// 0.381454
+0x361a
+// 0.370677
+0x35ee
+// 0.187572
+0x3201
+// 0.183005
+0x31db
+// 0.588512
+0x38b5
+// 0.118559
+0x2f96
+// 0.200334
+0x3269
+// 0.120477
+0x2fb6
+// 0.423841
+0x36c8
+// 0.482627
+0x37b9
+// 0.069639
+0x2c75
+// 0.179386
+0x31be
+// 0.066133
+0x2c3c
+// 0.042963
+0x2980
+// 0.106336
+0x2ece
+// 0.125617
+0x3005
+// 0.464414
+0x376e
+// 0.132390
+0x303d
+// 0.202302
+0x3279
+// 0.703952
+0x39a2
+// 0.128242
+0x301b
+// 0.437213
+0x36ff
+// 0.160378
+0x3122
+// 0.112012
+0x2f2b
+// 0.038690
+0x28f4
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/MaxIndexes1_s16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/MaxIndexes1_s16.txt
new file mode 100755
index 0000000..2f82b16
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/MaxIndexes1_s16.txt
@@ -0,0 +1,8 @@
+H
+3
+// 6
+0x0006
+// 6
+0x0006
+// 6
+0x0006
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/MaxVals1_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/MaxVals1_f16.txt
new file mode 100755
index 0000000..5ae652f
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/MaxVals1_f16.txt
@@ -0,0 +1,8 @@
+H
+3
+// 0.426820
+0x36d4
+// 0.426820
+0x36d4
+// 0.426820
+0x36d4
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/MeanVals2_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/MeanVals2_f16.txt
new file mode 100755
index 0000000..b32fb52
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/MeanVals2_f16.txt
@@ -0,0 +1,10 @@
+H
+4
+// 0.241377
+0x33b9
+// 0.194923
+0x323d
+// 0.268473
+0x344c
+// 0.237753
+0x339c
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/MinIndexes3_s16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/MinIndexes3_s16.txt
new file mode 100755
index 0000000..5af71b9
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/MinIndexes3_s16.txt
@@ -0,0 +1,8 @@
+H
+3
+// 5
+0x0005
+// 8
+0x0008
+// 21
+0x0015
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/MinVals3_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/MinVals3_f16.txt
new file mode 100755
index 0000000..452e2aa
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/MinVals3_f16.txt
@@ -0,0 +1,8 @@
+H
+3
+// -0.281630
+0xb482
+// -0.301289
+0xb4d2
+// -0.725607
+0xb9ce
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/PowerVals4_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/PowerVals4_f16.txt
new file mode 100755
index 0000000..b4a756e
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/PowerVals4_f16.txt
@@ -0,0 +1,8 @@
+H
+3
+// 0.471030
+0x3789
+// 0.814069
+0x3a83
+// 2.320008
+0x40a4
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/RmsVals5_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/RmsVals5_f16.txt
new file mode 100755
index 0000000..1fffea7
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/RmsVals5_f16.txt
@@ -0,0 +1,10 @@
+H
+4
+// 0.259403
+0x3427
+// 0.225564
+0x3338
+// 0.317600
+0x3515
+// 0.288172
+0x349c
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/StdVals6_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/StdVals6_f16.txt
new file mode 100755
index 0000000..74d5c2e
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/StdVals6_f16.txt
@@ -0,0 +1,10 @@
+H
+4
+// 0.272449
+0x345c
+// 0.230237
+0x335e
+// 0.305035
+0x34e1
+// 0.289078
+0x34a0
diff --git a/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/VarVals7_f16.txt b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/VarVals7_f16.txt
new file mode 100755
index 0000000..05554e2
--- /dev/null
+++ b/CMSIS/DSP/Testing/Patterns/DSP/Stats/StatsF16/VarVals7_f16.txt
@@ -0,0 +1,10 @@
+H
+4
+// 0.074228
+0x2cc0
+// 0.053009
+0x2ac9
+// 0.093046
+0x2df4
+// 0.083566
+0x2d59
diff --git a/CMSIS/DSP/Testing/Source/Tests/StatsTestsF16.cpp b/CMSIS/DSP/Testing/Source/Tests/StatsTestsF16.cpp
new file mode 100755
index 0000000..909651d
--- /dev/null
+++ b/CMSIS/DSP/Testing/Source/Tests/StatsTestsF16.cpp
@@ -0,0 +1,749 @@
+#include "StatsTestsF16.h"
+#include <stdio.h>
+#include "Error.h"
+#include "Test.h"
+
+
+#define SNR_THRESHOLD 50
+/* 
+
+Reference patterns are generated with
+a double precision computation.
+
+*/
+#define REL_ERROR (3.0e-3)
+
+    void StatsTestsF16::test_max_f16()
+    {
+        const float16_t *inp  = inputA.ptr();
+
+        float16_t result;
+        uint32_t  indexval;
+
+        float16_t *refp  = ref.ptr();
+        int16_t  *refind = maxIndexes.ptr();
+
+        float16_t *outp  = output.ptr();
+        int16_t  *ind    = index.ptr();
+
+        arm_max_f16(inp,
+              inputA.nbSamples(),
+              &result,
+              &indexval);
+
+        outp[0] = result;
+        ind[0] = indexval;
+
+        ASSERT_EQ(result,refp[this->refOffset]);
+        ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
+
+    }
+
+#if 0
+    void StatsTestsF16::test_max_no_idx_f16()
+    {
+        const float16_t *inp  = inputA.ptr();
+
+        float16_t result;
+
+        float16_t *refp  = ref.ptr();
+
+        float16_t *outp  = output.ptr();
+
+        arm_max_no_idx_f16(inp,
+              inputA.nbSamples(),
+              &result);
+
+        outp[0] = result;
+
+        ASSERT_EQ(result,refp[this->refOffset]);
+
+    }
+#endif 
+
+    void StatsTestsF16::test_min_f16()
+    {
+        const float16_t *inp  = inputA.ptr();
+
+        float16_t result;
+        uint32_t  indexval;
+
+        float16_t *refp  = ref.ptr();
+        int16_t  *refind = minIndexes.ptr();
+
+        float16_t *outp  = output.ptr();
+        int16_t  *ind    = index.ptr();
+
+        arm_min_f16(inp,
+              inputA.nbSamples(),
+              &result,
+              &indexval);
+
+        outp[0] = result;
+        ind[0] = indexval;
+
+        ASSERT_EQ(result,refp[this->refOffset]);
+        ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
+
+    }
+
+    void StatsTestsF16::test_mean_f16()
+    {
+        const float16_t *inp  = inputA.ptr();
+
+        float16_t result;
+
+        float16_t *refp  = ref.ptr();
+
+        float16_t *outp  = output.ptr();
+
+        arm_mean_f16(inp,
+              inputA.nbSamples(),
+              &result);
+
+        outp[0] = result;
+
+        ASSERT_SNR(result,refp[this->refOffset],(float16_t)SNR_THRESHOLD);
+
+        ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
+
+    }
+
+    void StatsTestsF16::test_power_f16()
+    {
+        const float16_t *inp  = inputA.ptr();
+
+        float16_t result;
+
+        float16_t *refp  = ref.ptr();
+
+        float16_t *outp  = output.ptr();
+
+        arm_power_f16(inp,
+              inputA.nbSamples(),
+              &result);
+
+        outp[0] = result;
+
+        ASSERT_SNR(result,refp[this->refOffset],(float16_t)SNR_THRESHOLD);
+
+        ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
+
+    }
+
+    void StatsTestsF16::test_rms_f16()
+    {
+        const float16_t *inp  = inputA.ptr();
+
+        float16_t result;
+
+        float16_t *refp  = ref.ptr();
+
+        float16_t *outp  = output.ptr();
+
+        arm_rms_f16(inp,
+              inputA.nbSamples(),
+              &result);
+
+        outp[0] = result;
+
+        ASSERT_SNR(result,refp[this->refOffset],(float16_t)SNR_THRESHOLD);
+
+        ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
+
+    }
+
+    void StatsTestsF16::test_std_f16()
+    {
+        const float16_t *inp  = inputA.ptr();
+
+        float16_t result;
+
+        float16_t *refp  = ref.ptr();
+
+        float16_t *outp  = output.ptr();
+
+        arm_std_f16(inp,
+              inputA.nbSamples(),
+              &result);
+
+        outp[0] = result;
+
+        ASSERT_SNR(result,refp[this->refOffset],(float16_t)SNR_THRESHOLD);
+
+        ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
+
+    }
+
+    void StatsTestsF16::test_var_f16()
+    {
+        const float16_t *inp  = inputA.ptr();
+
+        float16_t result;
+
+        float16_t *refp  = ref.ptr();
+
+        float16_t *outp  = output.ptr();
+
+        arm_var_f16(inp,
+              inputA.nbSamples(),
+              &result);
+
+        outp[0] = result;
+
+        ASSERT_SNR(result,refp[this->refOffset],(float16_t)SNR_THRESHOLD);
+
+        ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
+
+    }
+
+
+    void StatsTestsF16::test_std_stability_f16()
+    {
+      /*
+
+      With the textbook algorithm, those values will produce a negative
+      value for the variance.
+
+      The CMSIS-DSP variance algorithm is the two pass one so will work
+      with those values.
+
+      So, it should be possible to compute the square root for the standard
+      deviation.
+
+      */
+      float16_t in[4]={4.0f, 7.0f, 13.0f, 16.0f};
+      float16_t result;
+      int i;
+
+      /*
+
+      Add bigger offset so that average is much bigger than standard deviation.
+
+      */
+      for(i=0 ; i < 4; i++)
+      {
+        in[i] += 3.0e3f;
+      }
+
+      arm_std_f16(in,4,&result);
+
+      /*
+
+      If variance is giving a negative value, the square root
+      should return zero.
+
+      We check it is not happening here.
+
+
+      */
+      ASSERT_TRUE(fabs(5.47723f - result) < 0.32f);
+
+    }
+
+#if 0
+    void StatsTestsF16::test_entropy_f16()
+    {
+      const float16_t *inp  = inputA.ptr();
+      const int16_t *dimsp  = dims.ptr();
+
+      float16_t *outp         = output.ptr();
+
+      for(int i=0;i < this->nbPatterns; i++)
+      {
+         *outp = arm_entropy_f16(inp,dimsp[i+1]);
+         outp++;
+         inp += dimsp[i+1];
+      }
+
+      ASSERT_SNR(ref,output,(float16_t)SNR_THRESHOLD);
+
+      ASSERT_REL_ERROR(ref,output,REL_ERROR);
+
+    } 
+
+    void StatsTestsF16::test_logsumexp_f16()
+    {
+      const float16_t *inp  = inputA.ptr();
+      const int16_t *dimsp  = dims.ptr();
+
+      float16_t *outp         = output.ptr();
+
+      for(int i=0;i < this->nbPatterns; i++)
+      {
+         *outp = arm_logsumexp_f16(inp,dimsp[i+1]);
+         outp++;
+         inp += dimsp[i+1];
+      }
+
+      ASSERT_SNR(ref,output,(float16_t)SNR_THRESHOLD);
+
+      ASSERT_REL_ERROR(ref,output,REL_ERROR);
+    } 
+
+
+    void StatsTestsF16::test_kullback_leibler_f16()
+    {
+      const float16_t *inpA  = inputA.ptr();
+      const float16_t *inpB  = inputB.ptr();
+      const int16_t *dimsp  = dims.ptr();
+
+      float16_t *outp         = output.ptr();
+
+      for(int i=0;i < this->nbPatterns; i++)
+      {
+         *outp = arm_kullback_leibler_f16(inpA,inpB,dimsp[i+1]);
+         outp++;
+         inpA += dimsp[i+1];
+         inpB += dimsp[i+1];
+      }
+
+      ASSERT_SNR(ref,output,(float16_t)SNR_THRESHOLD);
+
+      ASSERT_REL_ERROR(ref,output,REL_ERROR);
+    } 
+
+    void StatsTestsF16::test_logsumexp_dot_prod_f16()
+    {
+      const float16_t *inpA  = inputA.ptr();
+      const float16_t *inpB  = inputB.ptr();
+      const int16_t *dimsp  = dims.ptr();
+
+      float16_t *outp         = output.ptr();
+      float16_t *tmpp         = tmp.ptr();
+
+      for(int i=0;i < this->nbPatterns; i++)
+      {
+         *outp = arm_logsumexp_dot_prod_f16(inpA,inpB,dimsp[i+1],tmpp);
+         outp++;
+         inpA += dimsp[i+1];
+         inpB += dimsp[i+1];
+      }
+
+      ASSERT_SNR(ref,output,(float16_t)SNR_THRESHOLD);
+
+      ASSERT_REL_ERROR(ref,output,REL_ERROR);
+    } 
+
+  #endif
+  
+    void StatsTestsF16::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
+    {
+        (void)paramsArgs;
+        switch(id)
+        {
+            case StatsTestsF16::TEST_MAX_F16_1:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,7);
+              
+               maxIndexes.reload(StatsTestsF16::MAXINDEXES_S16_ID,mgr);
+               ref.reload(StatsTestsF16::MAXVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+               index.create(1,StatsTestsF16::OUT_S16_ID,mgr);
+
+               refOffset = 0;
+            }
+            break;
+
+            case StatsTestsF16::TEST_MAX_F16_2:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,16);
+              
+               maxIndexes.reload(StatsTestsF16::MAXINDEXES_S16_ID,mgr);
+               ref.reload(StatsTestsF16::MAXVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+               index.create(1,StatsTestsF16::OUT_S16_ID,mgr);
+
+               refOffset = 1;
+            }
+            break;
+
+            case StatsTestsF16::TEST_MAX_F16_3:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,23);
+              
+               maxIndexes.reload(StatsTestsF16::MAXINDEXES_S16_ID,mgr);
+               ref.reload(StatsTestsF16::MAXVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+               index.create(1,StatsTestsF16::OUT_S16_ID,mgr);
+
+               refOffset = 2;
+            }
+            break;
+
+            case StatsTestsF16::TEST_MEAN_F16_4:
+            {
+               inputA.reload(StatsTestsF16::INPUT2_F16_ID,mgr,7);
+              
+               ref.reload(StatsTestsF16::MEANVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 0;
+            }
+            break;
+
+            case StatsTestsF16::TEST_MEAN_F16_5:
+            {
+               inputA.reload(StatsTestsF16::INPUT2_F16_ID,mgr,16);
+              
+               ref.reload(StatsTestsF16::MEANVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 1;
+            }
+            break;
+
+            case StatsTestsF16::TEST_MEAN_F16_6:
+            {
+               inputA.reload(StatsTestsF16::INPUT2_F16_ID,mgr,23);
+              
+               ref.reload(StatsTestsF16::MEANVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 2;
+            }
+            break;
+
+            case StatsTestsF16::TEST_MIN_F16_7:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,7);
+              
+               minIndexes.reload(StatsTestsF16::MININDEXES_S16_ID,mgr);
+               ref.reload(StatsTestsF16::MINVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+               index.create(1,StatsTestsF16::OUT_S16_ID,mgr);
+
+               refOffset = 0;
+            }
+            break;
+
+            case StatsTestsF16::TEST_MIN_F16_8:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,16);
+              
+               minIndexes.reload(StatsTestsF16::MININDEXES_S16_ID,mgr);
+               ref.reload(StatsTestsF16::MINVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+               index.create(1,StatsTestsF16::OUT_S16_ID,mgr);
+
+               refOffset = 1;
+            }
+            break;
+
+            case StatsTestsF16::TEST_MIN_F16_9:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,23);
+              
+               minIndexes.reload(StatsTestsF16::MININDEXES_S16_ID,mgr);
+               ref.reload(StatsTestsF16::MINVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+               index.create(1,StatsTestsF16::OUT_S16_ID,mgr);
+
+               refOffset = 2;
+            }
+            break;
+
+            case StatsTestsF16::TEST_POWER_F16_10:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,7);
+              
+               ref.reload(StatsTestsF16::POWERVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 0;
+            }
+            break;
+
+            case StatsTestsF16::TEST_POWER_F16_11:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,16);
+              
+               ref.reload(StatsTestsF16::POWERVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 1;
+            }
+            break;
+
+            case StatsTestsF16::TEST_POWER_F16_12:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,23);
+              
+               ref.reload(StatsTestsF16::POWERVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 2;
+            }
+            break;
+
+            case StatsTestsF16::TEST_RMS_F16_13:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,7);
+              
+               ref.reload(StatsTestsF16::RMSVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 0;
+            }
+            break;
+
+            case StatsTestsF16::TEST_RMS_F16_14:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,16);
+              
+               ref.reload(StatsTestsF16::RMSVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 1;
+            }
+            break;
+
+            case StatsTestsF16::TEST_RMS_F16_15:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,23);
+              
+               ref.reload(StatsTestsF16::RMSVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 2;
+            }
+            break;
+
+            case StatsTestsF16::TEST_STD_F16_16:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,7);
+              
+               ref.reload(StatsTestsF16::STDVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 0;
+            }
+            break;
+
+            case StatsTestsF16::TEST_STD_F16_17:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,16);
+              
+               ref.reload(StatsTestsF16::STDVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 1;
+            }
+            break;
+
+            case StatsTestsF16::TEST_STD_F16_18:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,23);
+              
+               ref.reload(StatsTestsF16::STDVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 2;
+            }
+            break;
+
+            case StatsTestsF16::TEST_VAR_F16_19:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,7);
+              
+               ref.reload(StatsTestsF16::VARVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 0;
+            }
+            break;
+
+            case StatsTestsF16::TEST_VAR_F16_20:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,16);
+              
+               ref.reload(StatsTestsF16::VARVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 1;
+            }
+            break;
+
+            case StatsTestsF16::TEST_VAR_F16_21:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,23);
+              
+               ref.reload(StatsTestsF16::VARVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 2;
+            }
+            break;
+#if 0
+            case StatsTestsF16::TEST_ENTROPY_F16_22:
+            {
+               inputA.reload(StatsTestsF16::INPUT22_F16_ID,mgr);
+               dims.reload(StatsTestsF16::DIM22_S16_ID,mgr);
+               ref.reload(StatsTestsF16::REF22_ENTROPY_F16_ID,mgr);
+               output.create(ref.nbSamples(),StatsTestsF16::OUT_F16_ID,mgr);
+
+               const int16_t *dimsp  = dims.ptr();
+               this->nbPatterns=dimsp[0];
+            }
+            break;
+
+            case StatsTestsF16::TEST_LOGSUMEXP_F16_23:
+            {
+               inputA.reload(StatsTestsF16::INPUT23_F16_ID,mgr);
+               dims.reload(StatsTestsF16::DIM23_S16_ID,mgr);
+               ref.reload(StatsTestsF16::REF23_LOGSUMEXP_F16_ID,mgr);
+               output.create(ref.nbSamples(),StatsTestsF16::OUT_F16_ID,mgr);
+
+               const int16_t *dimsp  = dims.ptr();
+               this->nbPatterns=dimsp[0];
+            }
+            break;
+
+            case StatsTestsF16::TEST_KULLBACK_LEIBLER_F16_24:
+            {
+               inputA.reload(StatsTestsF16::INPUTA24_F16_ID,mgr);
+               inputB.reload(StatsTestsF16::INPUTB24_F16_ID,mgr);
+               dims.reload(StatsTestsF16::DIM24_S16_ID,mgr);
+               ref.reload(StatsTestsF16::REF24_KL_F16_ID,mgr);
+               output.create(ref.nbSamples(),StatsTestsF16::OUT_F16_ID,mgr);
+
+               const int16_t *dimsp  = dims.ptr();
+               this->nbPatterns=dimsp[0];
+            }
+            break;
+
+            case StatsTestsF16::TEST_LOGSUMEXP_DOT_PROD_F16_25:
+            {
+               inputA.reload(StatsTestsF16::INPUTA25_F16_ID,mgr);
+               inputB.reload(StatsTestsF16::INPUTB25_F16_ID,mgr);
+               dims.reload(StatsTestsF16::DIM25_S16_ID,mgr);
+               ref.reload(StatsTestsF16::REF25_LOGSUMEXP_DOT_F16_ID,mgr);
+               output.create(ref.nbSamples(),StatsTestsF16::OUT_F16_ID,mgr);
+
+               const int16_t *dimsp  = dims.ptr();
+               this->nbPatterns=dimsp[0];
+
+               /* 12 is max vecDim as defined in Python script generating the data */
+               tmp.create(12,StatsTestsF16::TMP_F16_ID,mgr);
+            }
+            break;
+
+            case StatsTestsF16::TEST_MAX_NO_IDX_F16_26:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,3);
+              
+               ref.reload(StatsTestsF16::MAXVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 0;
+            }
+            break;
+
+            case StatsTestsF16::TEST_MAX_NO_IDX_F16_27:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,8);
+              
+               ref.reload(StatsTestsF16::MAXVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 1;
+            }
+            break;
+
+            case StatsTestsF16::TEST_MAX_NO_IDX_F16_28:
+            {
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,11);
+              
+               ref.reload(StatsTestsF16::MAXVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 2;
+            }
+            break;
+#endif
+            case TEST_MEAN_F16_29:
+               inputA.reload(StatsTestsF16::INPUT2_F16_ID,mgr,100);
+              
+               ref.reload(StatsTestsF16::MEANVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 3;
+            break;
+
+            case TEST_RMS_F16_30:
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,100);
+              
+               ref.reload(StatsTestsF16::RMSVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 3;
+            break;
+
+            case TEST_STD_F16_31:
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,100);
+              
+               ref.reload(StatsTestsF16::STDVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 3;
+            break;
+
+            case TEST_VAR_F16_32:
+               inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,100);
+              
+               ref.reload(StatsTestsF16::VARVALS_F16_ID,mgr);
+               
+               output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
+
+               refOffset = 3;
+            break;
+        }
+        
+    }
+
+    void StatsTestsF16::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
+    {
+      (void)id;
+      switch(id)
+      {
+            case StatsTestsF16::TEST_MAX_F16_1:
+            case StatsTestsF16::TEST_MAX_F16_2:
+            case StatsTestsF16::TEST_MAX_F16_3:
+            case StatsTestsF16::TEST_MIN_F16_7:
+            case StatsTestsF16::TEST_MIN_F16_8:
+            case StatsTestsF16::TEST_MIN_F16_9:
+              index.dump(mgr);
+              output.dump(mgr);
+            break;
+
+            default:
+              output.dump(mgr);
+      }
+    }
diff --git a/CMSIS/DSP/Testing/desc_f16.txt b/CMSIS/DSP/Testing/desc_f16.txt
index 08101bd..e126261 100755
--- a/CMSIS/DSP/Testing/desc_f16.txt
+++ b/CMSIS/DSP/Testing/desc_f16.txt
@@ -5,6 +5,97 @@
         class = DSPTests
         folder = DSP
 
+        group Statistics Tests {
+           class = StatsTests
+           folder = Stats
+
+           suite Statistics Tests F16 {
+              class = StatsTestsF16
+              folder = StatsF16
+
+              Pattern INPUT1_F16_ID : Input1_f16.txt 
+              Pattern INPUT2_F16_ID : Input2_f16.txt 
+              Pattern MAXINDEXES_S16_ID : MaxIndexes1_s16.txt
+              Pattern MAXVALS_F16_ID : MaxVals1_f16.txt
+              Pattern MEANVALS_F16_ID : MeanVals2_f16.txt
+              Pattern MININDEXES_S16_ID : MinIndexes3_s16.txt
+              Pattern MINVALS_F16_ID : MinVals3_f16.txt
+              Pattern POWERVALS_F16_ID : PowerVals4_f16.txt
+              Pattern RMSVALS_F16_ID : RmsVals5_f16.txt
+              Pattern STDVALS_F16_ID : StdVals6_f16.txt
+              Pattern VARVALS_F16_ID : VarVals7_f16.txt
+
+              //Pattern INPUT22_F16_ID : Input22_f16.txt 
+              //Pattern DIM22_S16_ID : Dims22_s16.txt 
+              //Pattern REF22_ENTROPY_F16_ID : RefEntropy22_f16.txt
+//
+              //Pattern INPUT23_F16_ID : Input23_f16.txt 
+              //Pattern DIM23_S16_ID : Dims23_s16.txt 
+              //Pattern REF23_LOGSUMEXP_F16_ID : RefLogSumExp23_f16.txt
+//
+              //Pattern INPUTA24_F16_ID : InputA24_f16.txt 
+              //Pattern INPUTB24_F16_ID : InputB24_f16.txt
+              //Pattern DIM24_S16_ID : Dims24_s16.txt 
+              //Pattern REF24_KL_F16_ID : RefKL24_f16.txt
+//
+              //Pattern INPUTA25_F16_ID : InputA25_f16.txt 
+              //Pattern INPUTB25_F16_ID : InputB25_f16.txt
+              //Pattern DIM25_S16_ID : Dims25_s16.txt 
+              //Pattern REF25_LOGSUMEXP_DOT_F16_ID : RefLogSumExpDot25_f16.txt
+
+              Output  OUT_F16_ID : Output
+              Output  OUT_S16_ID : Index
+              Output  TMP_F16_ID : Temp
+
+              Functions {
+                Test nb=7    arm_max_f16:test_max_f16
+                Test nb=8n   arm_max_f16:test_max_f16
+                Test nb=8n+1 arm_max_f16:test_max_f16
+
+                Test nb=7    arm_mean_f16:test_mean_f16
+                Test nb=8n   arm_mean_f16:test_mean_f16
+                Test nb=8n+1 arm_mean_f16:test_mean_f16
+
+                Test nb=7    arm_min_f16:test_min_f16
+                Test nb=8n   arm_min_f16:test_min_f16
+                Test nb=8n+1 arm_min_f16:test_min_f16
+
+                Test nb=7    arm_power_f16:test_power_f16
+                Test nb=8n   arm_power_f16:test_power_f16
+                Test nb=8n+1 arm_power_f16:test_power_f16
+
+                Test nb=7    arm_rms_f16:test_rms_f16
+                Test nb=8n   arm_rms_f16:test_rms_f16
+                Test nb=8n+1 arm_rms_f16:test_rms_f16
+
+                Test nb=7    arm_std_f16:test_std_f16
+                Test nb=8n   arm_std_f16:test_std_f16
+                Test nb=8n+1 arm_std_f16:test_std_f16
+
+                Test nb=7    arm_var_f16:test_var_f16
+                Test nb=8n   arm_var_f16:test_var_f16
+                Test nb=8n+1 arm_var_f16:test_var_f16
+
+                disabled{arm_entropy_f16:test_entropy_f16}
+                disabled{arm_logsumexp_f16:test_logsumexp_f16}
+                disabled{arm_kullback_leibler_f16:test_kullback_leibler_f16}
+                disabled{arm_logsumexp_dot_prod_f16:test_logsumexp_dot_prod_f16}
+
+                disabled{Test nb=7    arm_max_no_idx_f16:test_max_no_idx_f16}
+                disabled{Test nb=8n   arm_max_no_idx_f16:test_max_no_idx_f16}
+                disabled{Test nb=8n+1 arm_max_no_idx_f16:test_max_no_idx_f16}
+
+                Test long  arm_mean_f16:test_mean_f16
+                Test long  arm_rms_f16:test_rms_f16
+                Test long  arm_std_f16:test_std_f16
+                Test long  arm_var_f16:test_var_f16
+
+                Test stability  arm_std_f16:test_std_stability_f16
+              }
+           }
+        }
+
+
         group Interpolation Tests{
           class = InterpolationTests
           folder = Interpolation
