📄 ofdm_sender.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 + -