arm_fft_bin_example_f32.c

| CMSIS-DSP Verison 1.1.0 CMSIS DSP Software Library

- CMSIS
- CORE
- DSP
- RTOS API
- SVD

- Main Page
- Reference

arm_fft_bin_example_f32.c

    /* ----------------------------------------------------------------------
    * Copyright (C) 2010 ARM Limited. All rights reserved.
    *
    * $Date:        29. November 2010
    * $Revision:    V1.0.3
    *
    * Project:          CMSIS DSP Library
    * Title:            arm_fft_bin_example_f32.c
    *
    * Description:  Example code demonstrating calculation of Max energy bin of
    *                               frequency domain of input signal.
    *
    * Target Processor: Cortex-M4/Cortex-M3
    *
    *
    * Version 1.0.3 2010/11/29
    *    Re-organized the CMSIS folders and updated documentation.
    *
    * Version 1.0.1 2010/10/05 KK
    *    Production release and review comments incorporated.
    *
    * Version 1.0.0 2010/09/20 KK
    *    Production release and review comments incorporated.
    * ------------------------------------------------------------------- */

    #include "arm_math.h"

    #define TEST_LENGTH_SAMPLES 2048

    /* -------------------------------------------------------------------
    * External Input and Output buffer Declarations for FFT Bin Example
    * ------------------------------------------------------------------- */
    extern float32_t testInput_f32_10khz[TEST_LENGTH_SAMPLES];
    static float32_t testOutput[TEST_LENGTH_SAMPLES/2];

    /* ------------------------------------------------------------------
    * Global variables for FFT Bin Example
    * ------------------------------------------------------------------- */
    uint32_t fftSize = 1024;
    uint32_t ifftFlag = 0;
    uint32_t doBitReverse = 1;

    /* Reference index at which max energy of bin ocuurs */
    uint32_t refIndex = 213, testIndex = 0;

    /* ----------------------------------------------------------------------
    * Max magnitude FFT Bin test
    * ------------------------------------------------------------------- */

    int32_t main(void)
    {

            arm_status status;
            arm_cfft_radix4_instance_f32 S;
            float32_t maxValue;

            status = ARM_MATH_SUCCESS;

            /* Initialize the CFFT/CIFFT module */
            status = arm_cfft_radix4_init_f32(&S, fftSize,
                                                                            ifftFlag, doBitReverse);

            /* Process the data through the CFFT/CIFFT module */
            arm_cfft_radix4_f32(&S, testInput_f32_10khz);

            /* Process the data through the Complex Magnitude Module for
            calculating the magnitude at each bin */
            arm_cmplx_mag_f32(testInput_f32_10khz, testOutput,
                                            fftSize);

            /* Calculates maxValue and returns corresponding BIN value */
            arm_max_f32(testOutput, fftSize, &maxValue, &testIndex);

            if(testIndex !=  refIndex)
            {
                    status = ARM_MATH_TEST_FAILURE;
            }

            /* ----------------------------------------------------------------------
            ** 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 */
    }