From 76177aa280494bb36d7a0bcbda1078d4db717020 Mon Sep 17 00:00:00 2001 From: Ali Labbene Date: Mon, 9 Dec 2019 11:25:19 +0100 Subject: Official ARM version: v4.5 --- .../html/arm_matrix_example_f32_8c-example.html | 309 +++++++++++++++++++++ 1 file changed, 309 insertions(+) create mode 100644 Documentation/DSP/html/arm_matrix_example_f32_8c-example.html (limited to 'Documentation/DSP/html/arm_matrix_example_f32_8c-example.html') diff --git a/Documentation/DSP/html/arm_matrix_example_f32_8c-example.html b/Documentation/DSP/html/arm_matrix_example_f32_8c-example.html new file mode 100644 index 0000000..18b8b05 --- /dev/null +++ b/Documentation/DSP/html/arm_matrix_example_f32_8c-example.html @@ -0,0 +1,309 @@ + + + + + +arm_matrix_example_f32.c +CMSIS-DSP: arm_matrix_example_f32.c + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
CMSIS-DSP +  Version 1.4.7 +
+
CMSIS DSP Software Library
+
+
+ +
+
    + +
+
+ + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
arm_matrix_example_f32.c
+
+
+
/* ----------------------------------------------------------------------
+
* Copyright (C) 2010-2012 ARM Limited. All rights reserved.
+
*
+
* $Date: 17. January 2013
+
* $Revision: V1.4.0
+
*
+
* Project: CMSIS DSP Library
+
* Title: arm_matrix_example_f32.c
+
*
+
* Description: Example code demonstrating least square fit to data
+
* using matrix functions
+
*
+
* 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.
+
* -------------------------------------------------------------------- */
+
+
#include "arm_math.h"
+
#include "math_helper.h"
+
+
#define SNR_THRESHOLD 90
+
+
/* --------------------------------------------------------------------------------
+
* Test input data(Cycles) taken from FIR Q15 module for differant cases of blockSize
+
* and tapSize
+
* --------------------------------------------------------------------------------- */
+
+
const float32_t B_f32[4] =
+
{
+
782.0, 7577.0, 470.0, 4505.0
+
};
+
+
/* --------------------------------------------------------------------------------
+
* Formula to fit is C1 + C2 * numTaps + C3 * blockSize + C4 * numTaps * blockSize
+
* -------------------------------------------------------------------------------- */
+
+
const float32_t A_f32[16] =
+
{
+
/* Const, numTaps, blockSize, numTaps*blockSize */
+
1.0, 32.0, 4.0, 128.0,
+
1.0, 32.0, 64.0, 2048.0,
+
1.0, 16.0, 4.0, 64.0,
+
1.0, 16.0, 64.0, 1024.0,
+
};
+
+
+
/* ----------------------------------------------------------------------
+
* Temporary buffers for storing intermediate values
+
* ------------------------------------------------------------------- */
+
/* Transpose of A Buffer */
+ +
/* (Transpose of A * A) Buffer */
+ +
/* Inverse(Transpose of A * A) Buffer */
+ +
/* Test Output Buffer */
+ +
+
/* ----------------------------------------------------------------------
+
* Reference ouput buffer C1, C2, C3 and C4 taken from MATLAB
+
* ------------------------------------------------------------------- */
+
const float32_t xRef_f32[4] = {73.0, 8.0, 21.25, 2.875};
+
+ +
+
+
/* ----------------------------------------------------------------------
+
* Max magnitude FFT Bin test
+
* ------------------------------------------------------------------- */
+
+
int32_t main(void)
+
{
+
+
arm_matrix_instance_f32 A; /* Matrix A Instance */
+
arm_matrix_instance_f32 AT; /* Matrix AT(A transpose) instance */
+
arm_matrix_instance_f32 ATMA; /* Matrix ATMA( AT multiply with A) instance */
+
arm_matrix_instance_f32 ATMAI; /* Matrix ATMAI(Inverse of ATMA) instance */
+
arm_matrix_instance_f32 B; /* Matrix B instance */
+
arm_matrix_instance_f32 X; /* Matrix X(Unknown Matrix) instance */
+
+
uint32_t srcRows, srcColumns; /* Temporary variables */
+ +
+
/* Initialise A Matrix Instance with numRows, numCols and data array(A_f32) */
+
srcRows = 4;
+
srcColumns = 4;
+
arm_mat_init_f32(&A, srcRows, srcColumns, (float32_t *)A_f32);
+
+
/* Initialise Matrix Instance AT with numRows, numCols and data array(AT_f32) */
+
srcRows = 4;
+
srcColumns = 4;
+
arm_mat_init_f32(&AT, srcRows, srcColumns, AT_f32);
+
+
/* calculation of A transpose */
+
status = arm_mat_trans_f32(&A, &AT);
+
+
+
/* Initialise ATMA Matrix Instance with numRows, numCols and data array(ATMA_f32) */
+
srcRows = 4;
+
srcColumns = 4;
+
arm_mat_init_f32(&ATMA, srcRows, srcColumns, ATMA_f32);
+
+
/* calculation of AT Multiply with A */
+
status = arm_mat_mult_f32(&AT, &A, &ATMA);
+
+
/* Initialise ATMAI Matrix Instance with numRows, numCols and data array(ATMAI_f32) */
+
srcRows = 4;
+
srcColumns = 4;
+
arm_mat_init_f32(&ATMAI, srcRows, srcColumns, ATMAI_f32);
+
+
/* calculation of Inverse((Transpose(A) * A) */
+
status = arm_mat_inverse_f32(&ATMA, &ATMAI);
+
+
/* calculation of (Inverse((Transpose(A) * A)) * Transpose(A)) */
+
status = arm_mat_mult_f32(&ATMAI, &AT, &ATMA);
+
+
/* Initialise B Matrix Instance with numRows, numCols and data array(B_f32) */
+
srcRows = 4;
+
srcColumns = 1;
+
arm_mat_init_f32(&B, srcRows, srcColumns, (float32_t *)B_f32);
+
+
/* Initialise X Matrix Instance with numRows, numCols and data array(X_f32) */
+
srcRows = 4;
+
srcColumns = 1;
+
arm_mat_init_f32(&X, srcRows, srcColumns, X_f32);
+
+
/* calculation ((Inverse((Transpose(A) * A)) * Transpose(A)) * B) */
+
status = arm_mat_mult_f32(&ATMA, &B, &X);
+
+
/* Comparison of reference with test output */
+ +
+
/*------------------------------------------------------------------------------
+
* Initialise status depending on SNR calculations
+
*------------------------------------------------------------------------------*/
+ +
{
+
status = ARM_MATH_SUCCESS;
+
}
+
else
+
{
+ +
}
+
+
+
/* ----------------------------------------------------------------------
+
** Loop here if the signals fail the PASS check.
+
** This denotes a test failure
+
** ------------------------------------------------------------------- */
+
if( status != ARM_MATH_SUCCESS)
+
{
+
while(1);
+
}
+
+
while(1); /* main function does not return */
+
}
+
+
+
+ + + + -- cgit