CMSIS-DSP  Verison 1.1.0
CMSIS DSP Software Library
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 */
}