Jaspreet Singh / Mbed 2 deprecated fft_merge_main_codev1_FTPGTET

Dependencies:   SDFileSystem dspmodified mbed

Fork of fft_merge_main_codev1 by Testbed

main.cpp

Committer:
lalitkumar
Date:
2015-01-03
Revision:
0:0c34b823cf39
Child:
1:ea45662cad58

File content as of revision 0:0c34b823cf39:

#include "mbed.h"
#include "arm_math.h"
#include "arm_common_tables.h"
Serial pc(USBTX, USBRX);
uint32_t fftLen=2048;
uint32_t ifftFlag=0;
uint32_t bitRFlag=1;
float pi=3.1416;
    
float * fft(float *input_data, int N){
    float output_data[N];
    if(N==2048){
        arm_rfft_instance_f32 SR;
        arm_cfft_radix4_instance_f32 SR_CFFT; 
        arm_status status=arm_rfft_init_f32(&SR, &SR_CFFT, fftLen, ifftFlag, bitRFlag);
        arm_rfft_f32(&SR, input_data, output_data);
        return output_data;
        }
    else{
        float input_data1[N/2];
        float input_data2[N/2];
        float *output_data1;
        float *output_data2;
        for(int i=0;i<N;i++){
            input_data1[i]=input_data[2*i];
            input_data2[i]=input_data[2*i+1];
            }
        output_data1=fft(input_data1,N/2);
        output_data2=fft(input_data2,N/2);
        for(int i=0;i<N/2;i++){
            output_data[i]=output_data1[i]+output_data2[i]*cos(2*i*pi/N)-output_data2[i+1]*sin(2*i*pi/N);
            output_data[i+1]=output_data1[i+1]+output_data2[i]*sin(2*i*pi/N)+output_data2[i+1]*cos(2*i*pi/N);
            output_data[i+(N/2)]=output_data1[i]-output_data2[i]*cos(2*i*pi/N)+output_data2[i+1]*sin(2*i*pi/N);
            output_data[i+1+(N/2)]=output_data1[i+1]-output_data2[i]*sin(2*i*pi/N)-output_data2[i+1]*cos(2*i*pi/N);
            i++;
            }
        return output_data; 
        }
    }

int main(){
    //Timer a;
    //time_t fft_calc=0;
    pc.printf("Hello World\r\n");
    float input_data[8196];
    float *output_data;
    for(int i=0;i<8196;i++){
        input_data[i]=i%64;
        }
    pc.printf("stage 1\r\n");
    output_data=fft(input_data,8196);
    /*arm_rfft_instance_f32 SR;
    pc.printf("stage 2\r\n");
    a.start();
    arm_cfft_radix4_instance_f32 SR_CFFT; 
    //pc.printf("stage 3\r\n");
    arm_status status=arm_rfft_init_f32(&SR, &SR_CFFT, fftLen, ifftFlag, bitRFlag);
    //pc.printf("stage 4\r\n");
    arm_rfft_f32(&SR, input_data, output_data);
    //pc.printf("stage 5\r\n");
    a.stop();
    pc.printf("computation time %d\r\n", a.read_us());
    */
    for(int i=0;i<8196;i++){
        pc.printf("%d %d\r\n",i,int(output_data[i]));
        }
}