ese 519 include files

Dependents:   PROJECT_3D_AUDIO COG4050_adxl355_tilt COG4050_adxl355_tilt COG4050_adxl355_tilt_4050

fft.h

Committer:
niv17
Date:
2015-04-07
Revision:
0:5347612e39a3

File content as of revision 0:5347612e39a3:

//   fft.h - declaration of class
//   of fast Fourier transform - FFT
//
//   The code is property of LIBROW
//   You can use it on your own
//   When utilizing credit LIBROW site

#ifndef FFT_H
#define FFT_H

//#include "complex.h"
#include "complextype.h"
#include <string>

class CFFT
{
	public:
		//Convolution functions
		//NFFT is the FFT size (will be modified if invalid!), nSIG is the size for the input, NFIL is the size of the filter
		//Zero padding is automatically taken care of in the convolution function.
		//T means the function returns result in time domain; F is the result in the frequency domain.
		static Complex* convolutionF(const Complex *input,const Complex *filter, long nSIG, long NFIL, long &NFFT);
		static Complex* convolutionT(const Complex *input,const Complex *filter, long nSIG, long NFIL, long &NFFT);
		static Complex* stereoConvMonoInputF(const Complex *input, const Complex *filterLeft, const Complex *filterRight, long nSIG, long NFILL, long NFILR, long &NFFT);
		static Complex* stereoConvMonoInputT(const Complex *input, const Complex *filterLeft, const Complex *filterRight, long nSIG,long NFILL, long NFILR, long &NFFT);
		static Complex* stereoConvStereoInputF(const Complex *input, const Complex *filterLeft, const Complex *filterRight, long nSIG, long NFILL, long NFILR, long &NFFT);
		static Complex* stereoConvStereoInputT(const Complex *input, const Complex *filterLeft, const Complex *filterRight, long nSIG, long NFILL, long NFILR, long &NFFT);
		
		
		//storing the an array into a text file
		//filename is the file name you want to store the data into
		//datatype represents the data you wanna store: real/real+imag/amplitude
    static void storingData(Complex *data, int NFFT, std::string temp, char datatype);
		
		//   FORWARD FOURIER TRANSFORM
		//     Input  - input data
		//     Output - transform result
		//     N      - length of both input data and result
		static bool Forward(const Complex *const Input, Complex *const Output, const unsigned int N);
	
		//   FORWARD FOURIER TRANSFORM, INPLACE VERSION
		//     Data - both input data and output
		//     N    - length of input data
		static bool Forward(Complex *const Data, const unsigned int N);
	
		//   INVERSE FOURIER TRANSFORM
		//     Input  - input data
		//     Output - transform result
		//     N      - length of both input data and result
		//     Scale  - if to scale result
		static bool Inverse(const Complex *const Input, Complex *const Output, const unsigned int N, const bool Scale = true);
	
		//   INVERSE FOURIER TRANSFORM, INPLACE VERSION
		//     Data  - both input data and output
		//     N     - length of both input data and result
		//     Scale - if to scale result
		static bool Inverse(Complex *const Data, const unsigned int N, const bool Scale = true);

	protected:
		//   Rearrange function and its inplace version
		static void Rearrange(const Complex *const Input, Complex *const Output, const unsigned int N);

		static void Rearrange(Complex *Data, const unsigned int N);

	
	
		//   FFT implementation
		static void Perform(Complex *const Data, const unsigned int N, const bool Inverse = false);
	
		//   Scaling of inverse FFT result
		static void Scale(Complex *const Data, const unsigned int N);
};

#endif