/* ----------------------------------------------------------------------
|
* Copyright (C) 2010-2012 ARM Limited. All rights reserved.
|
*
|
* $Date: 17. January 2013
|
* $Revision: V1.4.0
|
*
|
* Project: CMSIS DSP Library
|
* Title: arm_class_marks_example_f32.c
|
*
|
* Description: Example code to calculate Minimum, Maximum
|
* Mean, std and variance of marks obtained in a class
|
*
|
* Target Processor: Cortex-M4/Cortex-M3
|
*
|
* Redistribution and use in source and binary forms, with or without
|
* modification, are permitted provided that the following conditions
|
* are met:
|
* - Redistributions of source code must retain the above copyright
|
* notice, this list of conditions and the following disclaimer.
|
* - Redistributions in binary form must reproduce the above copyright
|
* notice, this list of conditions and the following disclaimer in
|
* the documentation and/or other materials provided with the
|
* distribution.
|
* - Neither the name of ARM LIMITED nor the names of its contributors
|
* may be used to endorse or promote products derived from this
|
* software without specific prior written permission.
|
*
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
* POSSIBILITY OF SUCH DAMAGE.
|
* -------------------------------------------------------------------- */
|
|
/**
|
* @ingroup groupExamples
|
*/
|
|
/**
|
* @defgroup ClassMarks Class Marks Example
|
*
|
* \par Description:
|
* \par
|
* Demonstrates the use the Maximum, Minimum, Mean, Standard Deviation, Variance
|
* and Matrix functions to calculate statistical values of marks obtained in a class.
|
*
|
* \note This example also demonstrates the usage of static initialization.
|
*
|
* \par Variables Description:
|
* \par
|
* \li \c testMarks_f32 points to the marks scored by 20 students in 4 subjects
|
* \li \c max_marks Maximum of all marks
|
* \li \c min_marks Minimum of all marks
|
* \li \c mean Mean of all marks
|
* \li \c var Variance of the marks
|
* \li \c std Standard deviation of the marks
|
* \li \c numStudents Total number of students in the class
|
*
|
* \par CMSIS DSP Software Library Functions Used:
|
* \par
|
* - arm_mat_init_f32()
|
* - arm_mat_mult_f32()
|
* - arm_max_f32()
|
* - arm_min_f32()
|
* - arm_mean_f32()
|
* - arm_std_f32()
|
* - arm_var_f32()
|
*
|
* <b> Refer </b>
|
* \link arm_class_marks_example_f32.c \endlink
|
*
|
*/
|
|
|
/** \example arm_class_marks_example_f32.c
|
*/
|
#include "arm_math.h"
|
|
#define USE_STATIC_INIT
|
|
/* ----------------------------------------------------------------------
|
** Global defines
|
** ------------------------------------------------------------------- */
|
|
#define TEST_LENGTH_SAMPLES (20*4)
|
|
/* ----------------------------------------------------------------------
|
** List of Marks scored by 20 students for 4 subjects
|
** ------------------------------------------------------------------- */
|
const float32_t testMarks_f32[TEST_LENGTH_SAMPLES] =
|
{
|
42.000000, 37.000000, 81.000000, 28.000000,
|
83.000000, 72.000000, 36.000000, 38.000000,
|
32.000000, 51.000000, 63.000000, 64.000000,
|
97.000000, 82.000000, 95.000000, 90.000000,
|
66.000000, 51.000000, 54.000000, 42.000000,
|
67.000000, 56.000000, 45.000000, 57.000000,
|
67.000000, 69.000000, 35.000000, 52.000000,
|
29.000000, 81.000000, 58.000000, 47.000000,
|
38.000000, 76.000000, 100.000000, 29.000000,
|
33.000000, 47.000000, 29.000000, 50.000000,
|
34.000000, 41.000000, 61.000000, 46.000000,
|
52.000000, 50.000000, 48.000000, 36.000000,
|
47.000000, 55.000000, 44.000000, 40.000000,
|
100.000000, 94.000000, 84.000000, 37.000000,
|
32.000000, 71.000000, 47.000000, 77.000000,
|
31.000000, 50.000000, 49.000000, 35.000000,
|
63.000000, 67.000000, 40.000000, 31.000000,
|
29.000000, 68.000000, 61.000000, 38.000000,
|
31.000000, 28.000000, 28.000000, 76.000000,
|
55.000000, 33.000000, 29.000000, 39.000000
|
};
|
|
|
/* ----------------------------------------------------------------------
|
* Number of subjects X 1
|
* ------------------------------------------------------------------- */
|
const float32_t testUnity_f32[4] =
|
{
|
1.000, 1.000, 1.000, 1.000
|
};
|
|
|
/* ----------------------------------------------------------------------
|
** f32 Output buffer
|
** ------------------------------------------------------------------- */
|
static float32_t testOutput[TEST_LENGTH_SAMPLES];
|
|
|
/* ------------------------------------------------------------------
|
* Global defines
|
*------------------------------------------------------------------- */
|
#define NUMSTUDENTS 20
|
#define NUMSUBJECTS 4
|
|
/* ------------------------------------------------------------------
|
* Global variables
|
*------------------------------------------------------------------- */
|
|
uint32_t numStudents = 20;
|
uint32_t numSubjects = 4;
|
float32_t max_marks, min_marks, mean, std, var;
|
uint32_t student_num;
|
|
/* ----------------------------------------------------------------------------------
|
* Main f32 test function. It returns maximum marks secured and student number
|
* ------------------------------------------------------------------------------- */
|
|
int32_t main()
|
{
|
|
#ifndef USE_STATIC_INIT
|
|
arm_matrix_instance_f32 srcA;
|
arm_matrix_instance_f32 srcB;
|
arm_matrix_instance_f32 dstC;
|
|
/* Input and output matrices initializations */
|
arm_mat_init_f32(&srcA, numStudents, numSubjects, (float32_t *)testMarks_f32);
|
arm_mat_init_f32(&srcB, numSubjects, 1, (float32_t *)testUnity_f32);
|
arm_mat_init_f32(&dstC, numStudents, 1, testOutput);
|
|
#else
|
|
/* Static Initializations of Input and output matrix sizes and array */
|
arm_matrix_instance_f32 srcA = {NUMSTUDENTS, NUMSUBJECTS, (float32_t *)testMarks_f32};
|
arm_matrix_instance_f32 srcB = {NUMSUBJECTS, 1, (float32_t *)testUnity_f32};
|
arm_matrix_instance_f32 dstC = {NUMSTUDENTS, 1, testOutput};
|
|
#endif
|
|
|
/* ----------------------------------------------------------------------
|
*Call the Matrix multiplication process function
|
* ------------------------------------------------------------------- */
|
arm_mat_mult_f32(&srcA, &srcB, &dstC);
|
|
/* ----------------------------------------------------------------------
|
** Call the Max function to calculate max marks among numStudents
|
** ------------------------------------------------------------------- */
|
arm_max_f32(testOutput, numStudents, &max_marks, &student_num);
|
|
/* ----------------------------------------------------------------------
|
** Call the Min function to calculate min marks among numStudents
|
** ------------------------------------------------------------------- */
|
arm_min_f32(testOutput, numStudents, &min_marks, &student_num);
|
|
/* ----------------------------------------------------------------------
|
** Call the Mean function to calculate mean
|
** ------------------------------------------------------------------- */
|
arm_mean_f32(testOutput, numStudents, &mean);
|
|
/* ----------------------------------------------------------------------
|
** Call the std function to calculate standard deviation
|
** ------------------------------------------------------------------- */
|
arm_std_f32(testOutput, numStudents, &std);
|
|
/* ----------------------------------------------------------------------
|
** Call the var function to calculate variance
|
** ------------------------------------------------------------------- */
|
arm_var_f32(testOutput, numStudents, &var);
|
|
while (1); /* main function does not return */
|
}
|