⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fft.c

📁 完整的OFDM系统,含Matlab仿真代码和DSP源代码下载.平台Tms320C6000.含项目说明文档.绝对高质量的源代码.
💻 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 + -