astyle --recursive --indent=spaces=2 --style=kr --indent-col1-comments --break-blocks --convert-tabs --max-code-length=200
This is done for better merging branch/LG_PRE_RELEASE_0.3 into trunk (same process is applied on this branch) git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7073 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
+124
-114
@@ -1,5 +1,5 @@
|
||||
/*******************************************************************************
|
||||
OpenAirInterface
|
||||
OpenAirInterface
|
||||
Copyright(c) 1999 - 2014 Eurecom
|
||||
|
||||
OpenAirInterface is free software: you can redistribute it and/or modify
|
||||
@@ -14,15 +14,15 @@
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenAirInterface.The full GNU General Public License is
|
||||
included in this distribution in the file called "COPYING". If not,
|
||||
along with OpenAirInterface.The full GNU General Public License is
|
||||
included in this distribution in the file called "COPYING". If not,
|
||||
see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Contact Information
|
||||
OpenAirInterface Admin: openair_admin@eurecom.fr
|
||||
OpenAirInterface Tech : openair_tech@eurecom.fr
|
||||
OpenAirInterface Dev : openair4g-devel@eurecom.fr
|
||||
|
||||
|
||||
Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
|
||||
|
||||
*******************************************************************************/
|
||||
@@ -38,13 +38,14 @@ This section deals with basic functions for OFDM Modulation.
|
||||
|
||||
#include "PHY/defs.h"
|
||||
#include "UTIL/LOG/log.h"
|
||||
|
||||
|
||||
//static short temp2[2048*4] __attribute__((aligned(16)));
|
||||
|
||||
//#define DEBUG_OFDM_MOD
|
||||
|
||||
|
||||
void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRAME_PARMS *frame_parms) {
|
||||
void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRAME_PARMS *frame_parms)
|
||||
{
|
||||
|
||||
uint8_t i;
|
||||
int short_offset=0;
|
||||
@@ -53,47 +54,48 @@ void normal_prefix_mod(int32_t *txdataF,int32_t *txdata,uint8_t nsymb,LTE_DL_FRA
|
||||
short_offset = 1;
|
||||
|
||||
// printf("nsymb %d\n",nsymb);
|
||||
for (i=0;i<((short_offset)+2*nsymb/frame_parms->symbols_per_tti);i++) {
|
||||
for (i=0; i<((short_offset)+2*nsymb/frame_parms->symbols_per_tti); i++) {
|
||||
|
||||
#ifdef DEBUG_OFDM_MOD
|
||||
printf("slot i %d (txdata offset %d, txoutput %p)\n",i,(i*(frame_parms->samples_per_tti>>1)),
|
||||
txdata+(i*(frame_parms->samples_per_tti>>1)));
|
||||
printf("slot i %d (txdata offset %d, txoutput %p)\n",i,(i*(frame_parms->samples_per_tti>>1)),
|
||||
txdata+(i*(frame_parms->samples_per_tti>>1)));
|
||||
#endif
|
||||
|
||||
|
||||
PHY_ofdm_mod(txdataF+(i*NUMBER_OF_OFDM_CARRIERS*frame_parms->symbols_per_tti>>1), // input
|
||||
txdata+(i*frame_parms->samples_per_tti>>1), // output
|
||||
frame_parms->log2_symbol_size, // log2_fft_size
|
||||
1, // number of symbols
|
||||
frame_parms->nb_prefix_samples0, // number of prefix samples
|
||||
frame_parms->twiddle_ifft, // IFFT twiddle factors
|
||||
frame_parms->rev, // bit-reversal permutation
|
||||
CYCLIC_PREFIX);
|
||||
txdata+(i*frame_parms->samples_per_tti>>1), // output
|
||||
frame_parms->log2_symbol_size, // log2_fft_size
|
||||
1, // number of symbols
|
||||
frame_parms->nb_prefix_samples0, // number of prefix samples
|
||||
frame_parms->twiddle_ifft, // IFFT twiddle factors
|
||||
frame_parms->rev, // bit-reversal permutation
|
||||
CYCLIC_PREFIX);
|
||||
#ifdef DEBUG_OFDM_MOD
|
||||
printf("slot i %d (txdata offset %d)\n",i,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0+(i*frame_parms->samples_per_tti>>1));
|
||||
#endif
|
||||
printf("slot i %d (txdata offset %d)\n",i,OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0+(i*frame_parms->samples_per_tti>>1));
|
||||
#endif
|
||||
|
||||
PHY_ofdm_mod(txdataF+NUMBER_OF_OFDM_CARRIERS+(i*NUMBER_OF_OFDM_CARRIERS*(frame_parms->symbols_per_tti>>1)), // input
|
||||
txdata+OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0+(i*(frame_parms->samples_per_tti>>1)), // output
|
||||
frame_parms->log2_symbol_size, // log2_fft_size
|
||||
(short_offset==1) ? 1 :(frame_parms->symbols_per_tti>>1)-1,//6, // number of symbols
|
||||
frame_parms->nb_prefix_samples, // number of prefix samples
|
||||
frame_parms->twiddle_ifft, // IFFT twiddle factors
|
||||
frame_parms->rev, // bit-reversal permutation
|
||||
CYCLIC_PREFIX);
|
||||
|
||||
txdata+OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES0+(i*(frame_parms->samples_per_tti>>1)), // output
|
||||
frame_parms->log2_symbol_size, // log2_fft_size
|
||||
(short_offset==1) ? 1 :(frame_parms->symbols_per_tti>>1)-1,//6, // number of symbols
|
||||
frame_parms->nb_prefix_samples, // number of prefix samples
|
||||
frame_parms->twiddle_ifft, // IFFT twiddle factors
|
||||
frame_parms->rev, // bit-reversal permutation
|
||||
CYCLIC_PREFIX);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void PHY_ofdm_mod(int *input, /// pointer to complex input
|
||||
int *output, /// pointer to complex output
|
||||
unsigned char log2fftsize, /// log2(FFT_SIZE)
|
||||
unsigned char nb_symbols, /// number of OFDM symbols
|
||||
unsigned short nb_prefix_samples, /// cyclic prefix length
|
||||
short *twiddle_ifft, /// pointer to precomputed twiddle table
|
||||
unsigned short *rev, /// pointer to bit-reversal table
|
||||
Extension_t etype /// type of extension
|
||||
) {
|
||||
int *output, /// pointer to complex output
|
||||
unsigned char log2fftsize, /// log2(FFT_SIZE)
|
||||
unsigned char nb_symbols, /// number of OFDM symbols
|
||||
unsigned short nb_prefix_samples, /// cyclic prefix length
|
||||
short *twiddle_ifft, /// pointer to precomputed twiddle table
|
||||
unsigned short *rev, /// pointer to bit-reversal table
|
||||
Extension_t etype /// type of extension
|
||||
)
|
||||
{
|
||||
|
||||
static short temp[2048*4] __attribute__((aligned(16)));
|
||||
unsigned short i,j;
|
||||
@@ -108,18 +110,23 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
|
||||
case 7:
|
||||
idft = idft128;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
idft = idft256;
|
||||
break;
|
||||
|
||||
case 9:
|
||||
idft = idft512;
|
||||
break;
|
||||
|
||||
case 10:
|
||||
idft = idft1024;
|
||||
break;
|
||||
|
||||
case 11:
|
||||
idft = idft2048;
|
||||
break;
|
||||
|
||||
default:
|
||||
idft = idft512;
|
||||
break;
|
||||
@@ -131,61 +138,63 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
for (i=0;i<nb_symbols;i++){
|
||||
|
||||
for (i=0; i<nb_symbols; i++) {
|
||||
|
||||
#ifdef DEBUG_OFDM_MOD
|
||||
msg("[PHY] symbol %d/%d (%p,%p -> %p)\n",i,nb_symbols,input,&input[i<<log2fftsize],&output[(i<<log2fftsize) + ((i)*nb_prefix_samples)]);
|
||||
#endif
|
||||
|
||||
idft((int16_t *)&input[i<<log2fftsize],
|
||||
(log2fftsize==7) ? (int16_t *)temp : (int16_t *)&output[(i<<log2fftsize) + ((1+i)*nb_prefix_samples)],
|
||||
1);
|
||||
(log2fftsize==7) ? (int16_t *)temp : (int16_t *)&output[(i<<log2fftsize) + ((1+i)*nb_prefix_samples)],
|
||||
1);
|
||||
// write_output("fft_out.m","fftout",temp,(1<<log2fftsize)*2,1,1);
|
||||
|
||||
//memset(temp,0,1<<log2fftsize);
|
||||
|
||||
|
||||
|
||||
|
||||
// Copy to frame buffer with Cyclic Extension
|
||||
// Note: will have to adjust for synchronization offset!
|
||||
|
||||
|
||||
switch (etype) {
|
||||
case CYCLIC_PREFIX:
|
||||
output_ptr = &output[(i<<log2fftsize) + ((1+i)*nb_prefix_samples)];
|
||||
temp_ptr = (int *)temp;
|
||||
|
||||
|
||||
|
||||
// msg("Doing cyclic prefix method\n");
|
||||
|
||||
if (log2fftsize==7) {
|
||||
for (j=0;j<((1<<log2fftsize)) ; j++) {
|
||||
output_ptr[j] = temp_ptr[j];
|
||||
}
|
||||
for (j=0; j<((1<<log2fftsize)) ; j++) {
|
||||
output_ptr[j] = temp_ptr[j];
|
||||
}
|
||||
}
|
||||
|
||||
j=(1<<log2fftsize);
|
||||
|
||||
for (k=-1;k>=-nb_prefix_samples;k--) {
|
||||
output_ptr[k] = output_ptr[--j];
|
||||
|
||||
for (k=-1; k>=-nb_prefix_samples; k--) {
|
||||
output_ptr[k] = output_ptr[--j];
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
|
||||
case CYCLIC_SUFFIX:
|
||||
|
||||
|
||||
|
||||
|
||||
output_ptr = &output[(i<<log2fftsize)+ (i*nb_prefix_samples)];
|
||||
|
||||
|
||||
temp_ptr = (int *)temp;
|
||||
|
||||
|
||||
// msg("Doing cyclic suffix method\n");
|
||||
|
||||
for (j=0;j<(1<<log2fftsize) ; j++) {
|
||||
output_ptr[j] = temp_ptr[2*j];
|
||||
for (j=0; j<(1<<log2fftsize) ; j++) {
|
||||
output_ptr[j] = temp_ptr[2*j];
|
||||
}
|
||||
|
||||
|
||||
for (j=0;j<nb_prefix_samples;j++)
|
||||
output_ptr[(1<<log2fftsize)+j] = output_ptr[j];
|
||||
|
||||
|
||||
|
||||
for (j=0; j<nb_prefix_samples; j++)
|
||||
output_ptr[(1<<log2fftsize)+j] = output_ptr[j];
|
||||
|
||||
break;
|
||||
|
||||
case ZEROS:
|
||||
@@ -198,9 +207,9 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
|
||||
output_ptr = &output[(i<<log2fftsize)];
|
||||
|
||||
temp_ptr = (int *)temp;
|
||||
|
||||
for (j=0;j<(1<<log2fftsize) ; j++) {
|
||||
output_ptr[j] = temp_ptr[2*j];
|
||||
|
||||
for (j=0; j<(1<<log2fftsize) ; j++) {
|
||||
output_ptr[j] = temp_ptr[2*j];
|
||||
|
||||
|
||||
}
|
||||
@@ -211,78 +220,79 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
printf("input %p, output %p, log2fftsize %d, nsymb %d\n",input,output,log2fftsize,nb_symbols);
|
||||
for (i=0;i<16;i++)
|
||||
printf("%d %d\n",((short *)input)[i<<1],((short *)input)[1+(i<<1)]);
|
||||
printf("------\n");
|
||||
for (i=0;i<16;i++)
|
||||
printf("%d %d\n",((short *)output)[i<<1],((short *)output)[1+(i<<1)]);
|
||||
printf("%d %d\n",((short *)output)[i<<1],((short *)output)[1+(i<<1)]);
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms) {
|
||||
void do_OFDM_mod(mod_sym_t **txdataF, int32_t **txdata, uint32_t frame,uint16_t next_slot, LTE_DL_FRAME_PARMS *frame_parms)
|
||||
{
|
||||
|
||||
int aa, slot_offset, slot_offset_F;
|
||||
|
||||
slot_offset_F = (next_slot)*(frame_parms->ofdm_symbol_size)*((frame_parms->Ncp==1) ? 6 : 7);
|
||||
slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1);
|
||||
|
||||
|
||||
for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
|
||||
if (is_pmch_subframe(frame,next_slot>>1,frame_parms)) {
|
||||
if (is_pmch_subframe(frame,next_slot>>1,frame_parms)) {
|
||||
if ((next_slot%2)==0) {
|
||||
LOG_D(PHY,"Frame %d, subframe %d: Doing MBSFN modulation (slot_offset %d)\n",frame,next_slot>>1,slot_offset);
|
||||
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
|
||||
&txdata[aa][slot_offset], // output
|
||||
frame_parms->log2_symbol_size, // log2_fft_size
|
||||
12, // number of symbols
|
||||
frame_parms->ofdm_symbol_size>>2, // number of prefix samples
|
||||
frame_parms->twiddle_ifft, // IFFT twiddle factors
|
||||
frame_parms->rev, // bit-reversal permutation
|
||||
CYCLIC_PREFIX);
|
||||
|
||||
if (frame_parms->Ncp == EXTENDED)
|
||||
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
|
||||
&txdata[aa][slot_offset], // output
|
||||
frame_parms->log2_symbol_size, // log2_fft_size
|
||||
2, // number of symbols
|
||||
frame_parms->nb_prefix_samples, // number of prefix samples
|
||||
frame_parms->twiddle_ifft, // IFFT twiddle factors
|
||||
frame_parms->rev, // bit-reversal permutation
|
||||
CYCLIC_PREFIX);
|
||||
else {
|
||||
LOG_D(PHY,"Frame %d, subframe %d: Doing PDCCH modulation\n",frame,next_slot>>1);
|
||||
normal_prefix_mod(&txdataF[aa][slot_offset_F],
|
||||
&txdata[aa][slot_offset],
|
||||
2,
|
||||
frame_parms);
|
||||
}
|
||||
LOG_D(PHY,"Frame %d, subframe %d: Doing MBSFN modulation (slot_offset %d)\n",frame,next_slot>>1,slot_offset);
|
||||
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
|
||||
&txdata[aa][slot_offset], // output
|
||||
frame_parms->log2_symbol_size, // log2_fft_size
|
||||
12, // number of symbols
|
||||
frame_parms->ofdm_symbol_size>>2, // number of prefix samples
|
||||
frame_parms->twiddle_ifft, // IFFT twiddle factors
|
||||
frame_parms->rev, // bit-reversal permutation
|
||||
CYCLIC_PREFIX);
|
||||
|
||||
if (frame_parms->Ncp == EXTENDED)
|
||||
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
|
||||
&txdata[aa][slot_offset], // output
|
||||
frame_parms->log2_symbol_size, // log2_fft_size
|
||||
2, // number of symbols
|
||||
frame_parms->nb_prefix_samples, // number of prefix samples
|
||||
frame_parms->twiddle_ifft, // IFFT twiddle factors
|
||||
frame_parms->rev, // bit-reversal permutation
|
||||
CYCLIC_PREFIX);
|
||||
else {
|
||||
LOG_D(PHY,"Frame %d, subframe %d: Doing PDCCH modulation\n",frame,next_slot>>1);
|
||||
normal_prefix_mod(&txdataF[aa][slot_offset_F],
|
||||
&txdata[aa][slot_offset],
|
||||
2,
|
||||
frame_parms);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (frame_parms->Ncp == EXTENDED)
|
||||
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
|
||||
&txdata[aa][slot_offset], // output
|
||||
frame_parms->log2_symbol_size, // log2_fft_size
|
||||
6, // number of symbols
|
||||
frame_parms->nb_prefix_samples, // number of prefix samples
|
||||
frame_parms->twiddle_ifft, // IFFT twiddle factors
|
||||
frame_parms->rev, // bit-reversal permutation
|
||||
CYCLIC_PREFIX);
|
||||
else {
|
||||
normal_prefix_mod(&txdataF[aa][slot_offset_F],
|
||||
&txdata[aa][slot_offset],
|
||||
7,
|
||||
frame_parms);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (frame_parms->Ncp == EXTENDED)
|
||||
PHY_ofdm_mod(&txdataF[aa][slot_offset_F], // input
|
||||
&txdata[aa][slot_offset], // output
|
||||
frame_parms->log2_symbol_size, // log2_fft_size
|
||||
6, // number of symbols
|
||||
frame_parms->nb_prefix_samples, // number of prefix samples
|
||||
frame_parms->twiddle_ifft, // IFFT twiddle factors
|
||||
frame_parms->rev, // bit-reversal permutation
|
||||
CYCLIC_PREFIX);
|
||||
else {
|
||||
normal_prefix_mod(&txdataF[aa][slot_offset_F],
|
||||
&txdata[aa][slot_offset],
|
||||
7,
|
||||
frame_parms);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
||||
Reference in New Issue
Block a user