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

📄 ofdm_sender.c

📁 ofdm的完整系统模型,包含信道参数,多径模型,doppler频移等都可以自由修改!是您做仿真的有力帮助.c语言运行速度快!
💻 C
字号:
#include "cgs.h"
#include "ofdm_system.h"
#include "fft.h"
#include "fft_c.h"

FILE		*fp_error = NULL;

void ofdm_pakgen(ranbit_seed, ofdm_buffer, origi_infor)
long *ranbit_seed;
Complex *ofdm_buffer;
Complex *origi_infor;
{
	int i, j, p_idx, d_idx;
	double 	xreal[SUBCARRIERS], ximag[SUBCARRIERS], 
			yreal[SUBCARRIERS], yimag[SUBCARRIERS];
	int source_integer, bit_order;
	
	/* generate randn bit */
	for (i = 0; i < DATA_SUBC_LEN; i++) {
		source_integer = 0;
		bit_order = 1;
		for (j = 0; j < MODULATE_ORDER; j++) {
			source_integer += (int) noiseRandBit(ranbit_seed, 0.5) * bit_order;
			bit_order = bit_order << 1;
		}
		if (MODULATE_ORDER == 4) {
			origi_infor[i] = QAMmap[source_integer];
		}
		else {
			origi_infor[i] = QPSKmap[source_integer];
		}
	}
	
	/* form ofdm frame */
	d_idx = 0;
	for (i = 0; i < SUBCARRIERS; i++) {
		if ((i-PILOT_PHASE) % PILOT_GAP ==  0) {
			p_idx = (int) (i-PILOT_PHASE) / PILOT_GAP;
			xreal[i] = cVpilot[p_idx].real;
			ximag[i] = cVpilot[p_idx].imag;
		}
		else {
			if (i < FREQ_GUARD_LEN || i >= (SUBCARRIERS-FREQ_GUARD_LEN)) {
				xreal[i] = 0;
				ximag[i] = 0;
			}
			else {
				xreal[i] = origi_infor[d_idx].real;
				ximag[i] = origi_infor[d_idx].imag;
				d_idx++;
			}
		}
	}
	
	/* log4debug */
	#ifdef LOG_IFFT_1
	{
		FILE *fp_ifft_1;
		
		fp_ifft_1 = fopen(LOG_IFFT_1, "w");
		for (i = 0; i < SUBCARRIERS; i++) {
			fprintf(fp_ifft_1, "%f  %f\n", xreal[i], ximag[i]);
		}
		fclose(fp_ifft_1);
	}
	#endif
	
	/* perform ifft */
	
	ifft(SUBCARRIERS, xreal, ximag, yreal, yimag);
	
	for (i = 0; i < SUBCARRIERS; i++) {
		ofdm_buffer[i+CP_LENGTH].real = yreal[i];
		ofdm_buffer[i+CP_LENGTH].imag = yimag[i];
	}
	for (i = 0; i < CP_LENGTH; i++) {
		ofdm_buffer[i].real = yreal[SUBCARRIERS-CP_LENGTH+i];
		ofdm_buffer[i].imag = yimag[SUBCARRIERS-CP_LENGTH+i];
	}
	
	/* log4debug */
	#ifdef LOG_IFFT_2
	{
		FILE *fp_ifft_2;
		
		fp_ifft_2 = fopen(LOG_IFFT_2, "w");
		for (i = 0; i < SUBCARRIERS+CP_LENGTH; i++) {
			fprintf(fp_ifft_2, "%f  %f\n", ofdm_buffer[i].real, ofdm_buffer[i].imag);
		}
		fclose(fp_ifft_2);
	}
	#endif
	
}


void logopen()
{
	fp_error = fopen(error_file,"a");
}

void logclose()
{
	fclose(fp_error);
	fp_error = NULL;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -