/* ---------------------------------------------------------------------- * 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() * * Refer * \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 */ }