📄 fft.c
字号:
//fft.c
//
// Project Red 2002: High Performance OFDM Modem
// Against Channel Imperfections
// Auther: Linus Falk
/* Functions: */
/* digitrev_index() - Generate the necessary index for bit-reversing */
/* the output FFT sample data */
/* bitrev() - Bit-reversed the input array */
/* */
/* -------------------------------------------------------------------- */
/* -------------------------------------------------------------------- */
/* Includes header files */
/* -------------------------------------------------------------------- */
#include "fft.h"
/* Put the data to be processed in memory bank 0 [7]-7.6.3*/
//#pragma DATA_MEM_BANK(signalf, 0);
//volatile float signalf[BLOCK_SIZE];
/* Put the coefficient in memory bank 4 to avoid memory conflicts with the data to be processed*/
//#pragma DATA_MEM_BANK(dft, 4);
#pragma DATA_MEM_BANK(idft, 4);
//float dft[N];
float idft[N];
const short index[n];
int exponent2 = 0;
/* -------------------------------------------------------------------- */
/* Function prototypes */
/* -------------------------------------------------------------------- */
//void fft(volatile float signal[]);
void ifft(float signal[]);
void init_fft(void);
void init_coeff(void);
void init_index(void);
/*
void fft(volatile float signal[]){
int i;
cfftr2_dit(signal, dft, N); // FFT done in place, using dft coefficents
bitrev(signal, index, N);
//skala med 1/sqrt(N)
for(i=0; i<N*2; i++){
signal[i] *= ONE_OVER_SQRT_N;
}
}*/
void ifft(float signal[]){
int i;
cfftr2_dit(signal, idft, N);
bitrev(signal, index, N);
//skala med 1/sqrt(N)
for(i=0; i<N*2; i++){
signal[i] *= ONE_OVER_SQRT_N;
}
}
#pragma CODE_SECTION(init_fft,"SBSRAM_PROG_MEM");
void init_fft(void){
init_index();
init_coeff();
}
/* Generate the coefficient necessary for the FFT and inverse FFT routine */
#pragma CODE_SECTION(init_coeff,"SBSRAM_PROG_MEM");
void init_coeff(void){
int i;
for (i = 0 ; i < N/2 ; i++)
{
//dft[2*i] = cos(i * DELTA);
//dft[2*i+1] = sin(i * DELTA);
idft[2*i] = cos(i * DELTA);
idft[2*i+1] = - sin(i * DELTA);
}
/* Bit-reverse the coefficients */
//bitrev(dft, index, N/2);
bitrev(idft, index, N/2);
}
/* Create index which is necessary for the bit-reversal routine */
#pragma CODE_SECTION(init_index,"SBSRAM_PROG_MEM");
void init_index(void){
digitrev_index(index, N, 2);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -