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); 
    } 
} 
 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines