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:
Lionel Gauthier
2015-04-09 09:29:12 +00:00
parent f0a8a0b3b5
commit 059a0a3fdc
2044 changed files with 1182666 additions and 1145123 deletions
+271 -231
View File
@@ -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
*******************************************************************************/
@@ -63,7 +63,8 @@
//#define DEBUG_SIM
void Process_Func(int node_id,int port,double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im,
node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms){
node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms)
{
if(node_id<MAX_eNB)
eNB_Inst(node_id,port,r_re0,r_im0,r_re,r_im,s_re,s_im,enb_data,abstraction_flag,frame_parms);
@@ -73,13 +74,14 @@ void Process_Func(int node_id,int port,double **r_re0,double **r_im0,double **r_
}
void UE_Inst(int node_id,int port,double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im,
node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms){
node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms)
{
int next_slot,last_slot,slot=0,UE_id=0,eNB_id=0;
lte_subframe_t direction;
printf("UE [ %d ] Starts \n",node_id-MAX_eNB);
// init_mmap(node_id,frame_parms, &s_re, &s_im, &r_re, &r_im, &r_re0, &r_im0);
// init_mmap(node_id,frame_parms, &s_re, &s_im, &r_re, &r_im, &r_re0, &r_im0);
init_channel_vars (frame_parms, &s_re, &s_im, &r_re, &r_im, &r_re0, &r_im0);
mmap_ue(node_id,&PHY_vars_UE_g[0]->lte_ue_common_vars.txdata,&PHY_vars_UE_g[0]->lte_ue_common_vars.rxdata,frame_parms);
@@ -94,47 +96,52 @@ void UE_Inst(int node_id,int port,double **r_re0,double **r_im0,double **r_re,do
fd_pipe=open(p_input,O_RDWR,0);
// IntInitAll();
mac_xface->frame=0;
while(1){
// wait_4slot(&slot,&mac_xface->frame);
read(fd_pipe,&slot,sizeof(slot));
last_slot = (slot - 1)%20;
if (last_slot <0)
last_slot+=20;
next_slot = (slot + 1)%20;
while(1) {
// wait_4slot(&slot,&mac_xface->frame);
read(fd_pipe,&slot,sizeof(slot));
direction = subframe_select(frame_parms,next_slot>>1);
last_slot = (slot - 1)%20;
if (last_slot <0)
last_slot+=20;
next_slot = (slot + 1)%20;
direction = subframe_select(frame_parms,next_slot>>1);
#ifdef DEBUG_SIM
printf("\n\n[SIM] EMU PHY procedures UE %d for frame %d, slot %d (subframe %d)\n",
UE_id,mac_xface->frame, slot, (next_slot >> 1));
printf("\n\n[SIM] EMU PHY procedures UE %d for frame %d, slot %d (subframe %d)\n",
UE_id,mac_xface->frame, slot, (next_slot >> 1));
#endif
if (PHY_vars_UE_g[UE_id]->UE_mode[0] != NOT_SYNCHED) {
if ((mac_xface->frame)>0) {
phy_procedures_UE_lte ((last_slot),(next_slot), PHY_vars_UE_g[UE_id], 0, abstraction_flag);
}
if (PHY_vars_UE_g[UE_id]->UE_mode[0] != NOT_SYNCHED) {
if ((mac_xface->frame)>0) {
phy_procedures_UE_lte ((last_slot),(next_slot), PHY_vars_UE_g[UE_id], 0, abstraction_flag);
}
else {
if (((mac_xface->frame)>0) && ((last_slot) == (SLOTS_PER_FRAME-1))) {
initial_sync(PHY_vars_UE_g[UE_id]);
}
} else {
if (((mac_xface->frame)>0) && ((last_slot) == (SLOTS_PER_FRAME-1))) {
initial_sync(PHY_vars_UE_g[UE_id]);
}
}
if( direction == SF_UL || (direction == SF_S && next_slot%2!=0)){
do_OFDM_mod(PHY_vars_UE_g[UE_id]->lte_ue_common_vars.txdataF,PHY_vars_UE_g[UE_id]->lte_ue_common_vars.txdata,next_slot,&PHY_vars_UE_g[UE_id]->lte_frame_parms);
}
if( direction == SF_UL || (direction == SF_S && next_slot%2!=0)) {
do_OFDM_mod(PHY_vars_UE_g[UE_id]->lte_ue_common_vars.txdataF,PHY_vars_UE_g[UE_id]->lte_ue_common_vars.txdata,next_slot,&PHY_vars_UE_g[UE_id]->lte_frame_parms);
}
write(fd_channel,&node_id,sizeof(node_id));
// send_exec_complete(CHANNEL_PORT);
if(slot==19)
(mac_xface->frame)++;
write(fd_channel,&node_id,sizeof(node_id));
// send_exec_complete(CHANNEL_PORT);
if(slot==19)
(mac_xface->frame)++;
}
}
void eNB_Inst(int node_id,int port,double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im,
node_desc_t *enb_data[NUMBER_OF_eNB_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms){
node_desc_t *enb_data[NUMBER_OF_eNB_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms)
{
int next_slot,last_slot,slot=0,UE_id=0,eNB_id=0;
lte_subframe_t direction;
printf("eNB [ %d ] Starts \n",node_id);
@@ -156,41 +163,45 @@ void eNB_Inst(int node_id,int port,double **r_re0,double **r_im0,double **r_re,d
fd_pipe=open(p_input, O_RDWR,0);
mac_xface->frame=0;
while(1){
// wait_4slot(&slot,&mac_xface->frame);
read(fd_pipe,&slot,sizeof(slot));
while(1) {
// wait_4slot(&slot,&mac_xface->frame);
read(fd_pipe,&slot,sizeof(slot));
last_slot = (slot - 1)%20;
if (last_slot <0)
last_slot+=20;
next_slot = (slot + 1)%20;
direction = subframe_select(frame_parms,next_slot>>1);
last_slot = (slot - 1)%20;
if (last_slot <0)
last_slot+=20;
next_slot = (slot + 1)%20;
direction = subframe_select(frame_parms,next_slot>>1);
#ifdef DEBUG_SIM
printf
("\n\n [SIM]EMU PHY procedures eNB %d for frame %d, slot %d (subframe %d) (rxdataF_ext %p) Nid_cell %d\n",
eNB_id, mac_xface->frame, slot, next_slot >> 1,
PHY_vars_eNB_g[0]->lte_eNB_ulsch_vars[0]->rxdataF_ext, PHY_vars_eNB_g[eNB_id]->lte_frame_parms.Nid_cell);
printf
("\n\n [SIM]EMU PHY procedures eNB %d for frame %d, slot %d (subframe %d) (rxdataF_ext %p) Nid_cell %d\n",
eNB_id, mac_xface->frame, slot, next_slot >> 1,
PHY_vars_eNB_g[0]->lte_eNB_ulsch_vars[0]->rxdataF_ext, PHY_vars_eNB_g[eNB_id]->lte_frame_parms.Nid_cell);
#endif
phy_procedures_eNB_lte (last_slot, next_slot, PHY_vars_eNB_g[eNB_id], abstraction_flag);
phy_procedures_eNB_lte (last_slot, next_slot, PHY_vars_eNB_g[eNB_id], abstraction_flag);
if( direction == SF_DL || (direction == SF_S && next_slot%2==0)){
do_OFDM_mod(PHY_vars_eNB_g[eNB_id]->lte_eNB_common_vars.txdataF[0],
PHY_vars_eNB_g[eNB_id]->lte_eNB_common_vars.txdata[0],
next_slot,
&PHY_vars_eNB_g[eNB_id]->lte_frame_parms);
}
if( direction == SF_DL || (direction == SF_S && next_slot%2==0)) {
do_OFDM_mod(PHY_vars_eNB_g[eNB_id]->lte_eNB_common_vars.txdataF[0],
PHY_vars_eNB_g[eNB_id]->lte_eNB_common_vars.txdata[0],
next_slot,
&PHY_vars_eNB_g[eNB_id]->lte_frame_parms);
}
write(fd_channel,&node_id,sizeof(node_id));
// send_exec_complete(CHANNEL_PORT);
if(slot==19)
(mac_xface->frame)++;
write(fd_channel,&node_id,sizeof(node_id));
// send_exec_complete(CHANNEL_PORT);
if(slot==19)
(mac_xface->frame)++;
}
}
void Channel_Inst(int node_id,int port,double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],double **r_re[MAX_eNB+MAX_UE],double **r_im[MAX_eNB+MAX_UE],double **r_re0,double **r_im0,
double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms){
double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms)
{
// Interface_init(port,node_id);
// IntInitAll();
@@ -202,46 +213,47 @@ void Channel_Inst(int node_id,int port,double **s_re[MAX_eNB+MAX_UE],double **s_
char in_buffer[100];
int ci,ji=0;
for(ci=0;ci<NB_eNB_INST;ci++)
{
mmap_enb(ji,tx[ci],rx[ci],frame_parms);
init_channel_vars (frame_parms, &(s_re[ci]), &(s_im[ci]), &(r_re[ci]), &(r_im[ci]), &(r_re0), &(r_im0));
// init_mmap_channel(ji,frame_parms, &(s_re[ci]), &(s_im[ci]), &(r_re[ci]), &(r_im[ci]), &(r_re0), &(r_im0));
sprintf(in_buffer, "/tmp/pipe_%d",ji);
mkfifo(in_buffer, 0666);
fd_NB[ci]=open(in_buffer, O_RDWR ,0);
ji++;
}
ji=0;
for(ci=NB_eNB_INST;ci<(NB_eNB_INST+NB_UE_INST);ci++)
{
mmap_enb(MAX_eNB+ji,tx[ci],rx[ci],frame_parms);
init_channel_vars (frame_parms, &(s_re[ci]), &(s_im[ci]), &(r_re[ci]), &(r_im[ci]), &(r_re0), &(r_im0));
// init_mmap_channel(MAX_eNB+ji,frame_parms, &(s_re[ci]), &(s_im[ci]), &(r_re[ci]), &(r_im[ci]), &(r_re0), &(r_im0));
sprintf(in_buffer, "/tmp/pipe_%d",MAX_eNB+ji);
mkfifo(in_buffer, 0666);
fd_NB[ci]=open(in_buffer, O_RDWR ,0);
ji++;
}
for(ci=0; ci<NB_eNB_INST; ci++) {
mmap_enb(ji,tx[ci],rx[ci],frame_parms);
init_channel_vars (frame_parms, &(s_re[ci]), &(s_im[ci]), &(r_re[ci]), &(r_im[ci]), &(r_re0), &(r_im0));
// init_mmap_channel(ji,frame_parms, &(s_re[ci]), &(s_im[ci]), &(r_re[ci]), &(r_im[ci]), &(r_re0), &(r_im0));
sprintf(in_buffer, "/tmp/pipe_%d",ji);
mkfifo(in_buffer, 0666);
fd_NB[ci]=open(in_buffer, O_RDWR ,0);
ji++;
}
ji=0;
for(ci=NB_eNB_INST; ci<(NB_eNB_INST+NB_UE_INST); ci++) {
mmap_enb(MAX_eNB+ji,tx[ci],rx[ci],frame_parms);
init_channel_vars (frame_parms, &(s_re[ci]), &(s_im[ci]), &(r_re[ci]), &(r_im[ci]), &(r_re0), &(r_im0));
// init_mmap_channel(MAX_eNB+ji,frame_parms, &(s_re[ci]), &(s_im[ci]), &(r_re[ci]), &(r_im[ci]), &(r_re0), &(r_im0));
sprintf(in_buffer, "/tmp/pipe_%d",MAX_eNB+ji);
mkfifo(in_buffer, 0666);
fd_NB[ci]=open(in_buffer, O_RDWR ,0);
ji++;
}
for (eNB_id = 0; eNB_id < NB_eNB_INST; eNB_id++) {
for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) {
init_rre(frame_parms,&(r_re0_u[eNB_id][UE_id]),&(r_im0_u[eNB_id][UE_id]));
init_rre(frame_parms,&(r_re0_d[UE_id][eNB_id]),&(r_im0_d[UE_id][eNB_id]));
}
for (UE_id = 0; UE_id < NB_UE_INST; UE_id++) {
init_rre(frame_parms,&(r_re0_u[eNB_id][UE_id]),&(r_im0_u[eNB_id][UE_id]));
init_rre(frame_parms,&(r_re0_d[UE_id][eNB_id]),&(r_im0_d[UE_id][eNB_id]));
}
}
for(eNB_id=0;eNB_id<NB_eNB_INST;eNB_id++){
for(UE_id=0;UE_id<NB_UE_INST;UE_id++){
e2u_t[eNB_id][UE_id]=(ch_thread*)calloc(1,sizeof(ch_thread));
}
for(eNB_id=0; eNB_id<NB_eNB_INST; eNB_id++) {
for(UE_id=0; UE_id<NB_UE_INST; UE_id++) {
e2u_t[eNB_id][UE_id]=(ch_thread*)calloc(1,sizeof(ch_thread));
}
}
for(UE_id=0;UE_id<NB_UE_INST;UE_id++){
for(eNB_id=0;eNB_id<NB_eNB_INST;eNB_id++){
u2e_t[UE_id][eNB_id]=(ch_thread*)calloc(1,sizeof(ch_thread));
}
for(UE_id=0; UE_id<NB_UE_INST; UE_id++) {
for(eNB_id=0; eNB_id<NB_eNB_INST; eNB_id++) {
u2e_t[UE_id][eNB_id]=(ch_thread*)calloc(1,sizeof(ch_thread));
}
}
pthread_t cthr_u[NB_eNB_INST][NB_UE_INST];
@@ -253,70 +265,83 @@ void Channel_Inst(int node_id,int port,double **s_re[MAX_eNB+MAX_UE],double **s_
pthread_mutex_init(&exclusive,NULL);
if (pthread_cond_init (&downlink_cond_channel, NULL)) exit(1);
if (pthread_cond_init (&uplink_cond_channel, NULL)) exit(1);
if (pthread_mutex_lock(&downlink_mutex_channel)) exit(1);
if (pthread_mutex_lock(&uplink_mutex_channel)) exit(1);
NUM_THREAD_DOWNLINK=0;
for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
u2e_t[UE_id][eNB_id]->thread_id=NUM_THREAD_DOWNLINK;
u2e_t[UE_id][eNB_id]->eNB_id=eNB_id;
u2e_t[UE_id][eNB_id]->UE_id=UE_id;
u2e_t[UE_id][eNB_id]->r_re0=r_re0_d[UE_id][eNB_id];
u2e_t[UE_id][eNB_id]->r_im0=r_im0_d[UE_id][eNB_id];
u2e_t[UE_id][eNB_id]->r_re=r_re[NB_eNB_INST+UE_id];
u2e_t[UE_id][eNB_id]->r_im=r_im[NB_eNB_INST+UE_id];
u2e_t[UE_id][eNB_id]->s_im=s_im[eNB_id];
u2e_t[UE_id][eNB_id]->s_re=s_re[eNB_id];
u2e_t[UE_id][eNB_id]->eNB2UE=eNB2UE[eNB_id][UE_id];
u2e_t[UE_id][eNB_id]->UE2eNB=UE2eNB[UE_id][eNB_id];
u2e_t[UE_id][eNB_id]->enb_data=enb_data[eNB_id];
u2e_t[UE_id][eNB_id]->ue_data=ue_data[UE_id];
u2e_t[UE_id][eNB_id]->next_slot=&next_slot;
u2e_t[UE_id][eNB_id]->abstraction_flag=&abstraction_flag;
u2e_t[UE_id][eNB_id]->frame_parms=frame_parms;
u2e_t[UE_id][eNB_id]->tx_data[3]=tx[eNB_id][3];
u2e_t[UE_id][eNB_id]->rx_data[3]=rx[NB_eNB_INST+UE_id][3];
if(pthread_cond_init (&downlink_cond[eNB_id][UE_id], NULL)) exit(1);
if(pthread_mutex_lock(&downlink_mutex[eNB_id][UE_id])) exit(1);
pthread_create (&cthr_d[UE_id][eNB_id], NULL, do_DL_sig_channel_T,(void*)(u2e_t[UE_id][eNB_id]));
NUM_THREAD_DOWNLINK++;
}
for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++) {
for (eNB_id=0; eNB_id<(NB_eNB_INST); eNB_id++) {
u2e_t[UE_id][eNB_id]->thread_id=NUM_THREAD_DOWNLINK;
u2e_t[UE_id][eNB_id]->eNB_id=eNB_id;
u2e_t[UE_id][eNB_id]->UE_id=UE_id;
u2e_t[UE_id][eNB_id]->r_re0=r_re0_d[UE_id][eNB_id];
u2e_t[UE_id][eNB_id]->r_im0=r_im0_d[UE_id][eNB_id];
u2e_t[UE_id][eNB_id]->r_re=r_re[NB_eNB_INST+UE_id];
u2e_t[UE_id][eNB_id]->r_im=r_im[NB_eNB_INST+UE_id];
u2e_t[UE_id][eNB_id]->s_im=s_im[eNB_id];
u2e_t[UE_id][eNB_id]->s_re=s_re[eNB_id];
u2e_t[UE_id][eNB_id]->eNB2UE=eNB2UE[eNB_id][UE_id];
u2e_t[UE_id][eNB_id]->UE2eNB=UE2eNB[UE_id][eNB_id];
u2e_t[UE_id][eNB_id]->enb_data=enb_data[eNB_id];
u2e_t[UE_id][eNB_id]->ue_data=ue_data[UE_id];
u2e_t[UE_id][eNB_id]->next_slot=&next_slot;
u2e_t[UE_id][eNB_id]->abstraction_flag=&abstraction_flag;
u2e_t[UE_id][eNB_id]->frame_parms=frame_parms;
u2e_t[UE_id][eNB_id]->tx_data[3]=tx[eNB_id][3];
u2e_t[UE_id][eNB_id]->rx_data[3]=rx[NB_eNB_INST+UE_id][3];
if(pthread_cond_init (&downlink_cond[eNB_id][UE_id], NULL)) exit(1);
if(pthread_mutex_lock(&downlink_mutex[eNB_id][UE_id])) exit(1);
pthread_create (&cthr_d[UE_id][eNB_id], NULL, do_DL_sig_channel_T,(void*)(u2e_t[UE_id][eNB_id]));
NUM_THREAD_DOWNLINK++;
}
}
NUM_THREAD_UPLINK=0;
for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
e2u_t[eNB_id][UE_id]->thread_id=NUM_THREAD_UPLINK;
e2u_t[eNB_id][UE_id]->eNB_id=eNB_id;
e2u_t[eNB_id][UE_id]->UE_id=UE_id;
e2u_t[eNB_id][UE_id]->r_re=r_re[eNB_id];
e2u_t[eNB_id][UE_id]->r_im=r_im[eNB_id];
e2u_t[eNB_id][UE_id]->r_re0=r_re0_u[eNB_id][UE_id];
e2u_t[eNB_id][UE_id]->r_im0=r_im0_u[eNB_id][UE_id];
e2u_t[eNB_id][UE_id]->s_im=s_im[NB_eNB_INST+UE_id];
e2u_t[eNB_id][UE_id]->s_re=s_re[NB_eNB_INST+UE_id];
e2u_t[eNB_id][UE_id]->eNB2UE=eNB2UE[eNB_id][UE_id];
e2u_t[eNB_id][UE_id]->UE2eNB=UE2eNB[UE_id][eNB_id];
e2u_t[eNB_id][UE_id]->enb_data=enb_data[eNB_id];
e2u_t[eNB_id][UE_id]->ue_data=ue_data[UE_id];
e2u_t[eNB_id][UE_id]->next_slot=&next_slot;
e2u_t[eNB_id][UE_id]->abstraction_flag=&abstraction_flag;
e2u_t[eNB_id][UE_id]->frame_parms=frame_parms;
e2u_t[eNB_id][UE_id]->tx_data[3]=tx[NB_eNB_INST+UE_id][3];
e2u_t[eNB_id][UE_id]->rx_data[3]=rx[eNB_id][3];
if(pthread_cond_init (&uplink_cond[UE_id][eNB_id], NULL)) exit(1);
if(pthread_mutex_lock(&uplink_mutex[UE_id][eNB_id])) exit(1);
pthread_create (&cthr_u[eNB_id][UE_id], NULL, do_UL_sig_channel_T,(void*)e2u_t[eNB_id][UE_id]);
NUM_THREAD_UPLINK++;
}
for (eNB_id=0; eNB_id<(NB_eNB_INST); eNB_id++) {
for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++) {
e2u_t[eNB_id][UE_id]->thread_id=NUM_THREAD_UPLINK;
e2u_t[eNB_id][UE_id]->eNB_id=eNB_id;
e2u_t[eNB_id][UE_id]->UE_id=UE_id;
e2u_t[eNB_id][UE_id]->r_re=r_re[eNB_id];
e2u_t[eNB_id][UE_id]->r_im=r_im[eNB_id];
e2u_t[eNB_id][UE_id]->r_re0=r_re0_u[eNB_id][UE_id];
e2u_t[eNB_id][UE_id]->r_im0=r_im0_u[eNB_id][UE_id];
e2u_t[eNB_id][UE_id]->s_im=s_im[NB_eNB_INST+UE_id];
e2u_t[eNB_id][UE_id]->s_re=s_re[NB_eNB_INST+UE_id];
e2u_t[eNB_id][UE_id]->eNB2UE=eNB2UE[eNB_id][UE_id];
e2u_t[eNB_id][UE_id]->UE2eNB=UE2eNB[UE_id][eNB_id];
e2u_t[eNB_id][UE_id]->enb_data=enb_data[eNB_id];
e2u_t[eNB_id][UE_id]->ue_data=ue_data[UE_id];
e2u_t[eNB_id][UE_id]->next_slot=&next_slot;
e2u_t[eNB_id][UE_id]->abstraction_flag=&abstraction_flag;
e2u_t[eNB_id][UE_id]->frame_parms=frame_parms;
e2u_t[eNB_id][UE_id]->tx_data[3]=tx[NB_eNB_INST+UE_id][3];
e2u_t[eNB_id][UE_id]->rx_data[3]=rx[eNB_id][3];
if(pthread_cond_init (&uplink_cond[UE_id][eNB_id], NULL)) exit(1);
if(pthread_mutex_lock(&uplink_mutex[UE_id][eNB_id])) exit(1);
pthread_create (&cthr_u[eNB_id][UE_id], NULL, do_UL_sig_channel_T,(void*)e2u_t[eNB_id][UE_id]);
NUM_THREAD_UPLINK++;
}
}
}
void Channel_DL(double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],double **r_re[MAX_eNB+MAX_UE],double **r_im[MAX_eNB+MAX_UE],double **r_re0,double **r_im0,
double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,int slot){
double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,
int slot)
{
int count=0;
int next_slot,last_slot,UE_id=0,eNB_id=0;
@@ -327,76 +352,82 @@ void Channel_DL(double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],doub
u32 i;
u32 slot_offset;
for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
write(fd_NB[eNB_id],&slot,sizeof(slot));
count++;
//send_exec_msg(mac_xface->frame,slot,eNB_PORT+eNB_id);
for (eNB_id=0; eNB_id<(NB_eNB_INST); eNB_id++) {
write(fd_NB[eNB_id],&slot,sizeof(slot));
count++;
//send_exec_msg(mac_xface->frame,slot,eNB_PORT+eNB_id);
}
while(count--){
int dummy=1;
read(fd_channel,&dummy,sizeof(dummy));
//wait_4Msg();
while(count--) {
int dummy=1;
read(fd_channel,&dummy,sizeof(dummy));
//wait_4Msg();
}
for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
frame_parms = &PHY_vars_eNB_g[eNB_id]->lte_frame_parms;
slot_offset = (nslot)*(frame_parms->samples_per_tti>>1);
txdata =tx[eNB_id][0];
tx_pwr = dac_fixed_gain(s_re[eNB_id],
s_im[eNB_id],
txdata,
slot_offset,
frame_parms->nb_antennas_tx,
frame_parms->samples_per_tti>>1,
14,
40);
printf("[SIM][DL] eNB %d: tx_pwr %f dB for slot %d (subframe %d)\n",eNB_id,10*log10(tx_pwr),nslot,nslot>>1);
for (eNB_id=0; eNB_id<(NB_eNB_INST); eNB_id++) {
frame_parms = &PHY_vars_eNB_g[eNB_id]->lte_frame_parms;
slot_offset = (nslot)*(frame_parms->samples_per_tti>>1);
txdata =tx[eNB_id][0];
tx_pwr = dac_fixed_gain(s_re[eNB_id],
s_im[eNB_id],
txdata,
slot_offset,
frame_parms->nb_antennas_tx,
frame_parms->samples_per_tti>>1,
14,
40);
printf("[SIM][DL] eNB %d: tx_pwr %f dB for slot %d (subframe %d)\n",eNB_id,10*log10(tx_pwr),nslot,nslot>>1);
}
_COT=0;
for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
if(pthread_cond_signal(&downlink_cond[eNB_id][UE_id])) exit(1);
if(pthread_mutex_unlock(&downlink_mutex[eNB_id][UE_id])) exit(1);
}
for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++) {
for (eNB_id=0; eNB_id<(NB_eNB_INST); eNB_id++) {
if(pthread_cond_signal(&downlink_cond[eNB_id][UE_id])) exit(1);
if(pthread_mutex_unlock(&downlink_mutex[eNB_id][UE_id])) exit(1);
}
}
if(pthread_cond_wait(&downlink_cond_channel, &downlink_mutex_channel)) exit(1);
for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
Clean_Param(r_re[NB_eNB_INST+UE_id],r_im[NB_eNB_INST+UE_id],frame_parms);
for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
Channel_Out(SF_DL,eNB_id,UE_id,r_re[NB_eNB_INST+UE_id],r_im[NB_eNB_INST+UE_id],r_re0_d[UE_id][eNB_id],r_im0_d[UE_id][eNB_id],frame_parms);
// adc_channel(eNB_id,UE_id,r_re[NB_eNB_INST+UE_id],r_im[NB_eNB_INST+UE_id]);
for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++) {
Clean_Param(r_re[NB_eNB_INST+UE_id],r_im[NB_eNB_INST+UE_id],frame_parms);
}
for (eNB_id=0; eNB_id<(NB_eNB_INST); eNB_id++) {
Channel_Out(SF_DL,eNB_id,UE_id,r_re[NB_eNB_INST+UE_id],r_im[NB_eNB_INST+UE_id],r_re0_d[UE_id][eNB_id],r_im0_d[UE_id][eNB_id],frame_parms);
// adc_channel(eNB_id,UE_id,r_re[NB_eNB_INST+UE_id],r_im[NB_eNB_INST+UE_id]);
}
}
count=0;
for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++)
if (mac_xface->frame >= (UE_id * 10)) {
write(fd_NB[NB_eNB_INST+UE_id],&slot,sizeof(slot));
//send_exec_msg(mac_xface->frame,slot,UE_PORT+UE_id);
count++;
write(fd_NB[NB_eNB_INST+UE_id],&slot,sizeof(slot));
//send_exec_msg(mac_xface->frame,slot,UE_PORT+UE_id);
count++;
}
while(count--){
int dummy=1;
read(fd_channel,&dummy,sizeof(dummy));
//wait_4Msg();
while(count--) {
int dummy=1;
read(fd_channel,&dummy,sizeof(dummy));
//wait_4Msg();
}
}
void Channel_UL(double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],double **r_re[MAX_eNB+MAX_UE],double **r_im[MAX_eNB+MAX_UE],double **r_re0,double **r_im0,
double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,int slot){
double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,
int slot)
{
int count=0;
int next_slot,last_slot,UE_id=0,eNB_id=0;
lte_subframe_t direction;
@@ -408,85 +439,94 @@ void Channel_UL(double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],doub
for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++)
if (mac_xface->frame >= (UE_id * 10)) {
write(fd_NB[NB_eNB_INST+UE_id],&slot,sizeof(slot));
//send_exec_msg(mac_xface->frame,slot,UE_PORT+UE_id);
count++;
write(fd_NB[NB_eNB_INST+UE_id],&slot,sizeof(slot));
//send_exec_msg(mac_xface->frame,slot,UE_PORT+UE_id);
count++;
}
while(count--){
int dummy=1;
read(fd_channel,&dummy,sizeof(dummy));
//wait_4Msg();
while(count--) {
int dummy=1;
read(fd_channel,&dummy,sizeof(dummy));
//wait_4Msg();
}
for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
frame_parms = &PHY_vars_UE_g[UE_id]->lte_frame_parms;
slot_offset = (nslot)*(frame_parms->samples_per_tti>>1);
txdata =tx[NB_eNB_INST+UE_id][0]; //PHY_vars_UE_g[UE_id]->lte_ue_common_vars.txdata;
tx_pwr = dac_fixed_gain(s_re[NB_eNB_INST+UE_id],
s_im[NB_eNB_INST+UE_id],
txdata,
slot_offset,
frame_parms->nb_antennas_tx,
frame_parms->samples_per_tti>>1,
14,
18);
printf("[SIM][UL] UE %d tx_pwr %f dB for slot %d (subframe %d)\n",UE_id,10*log10(tx_pwr),nslot,nslot>>1);
rx_pwr = signal_energy_fp(s_re[NB_eNB_INST+UE_id],s_im[NB_eNB_INST+UE_id],frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0);
printf("[SIM][UL] UE %d tx_pwr %f dB for slot %d (subframe %d)\n",UE_id,10*log10(rx_pwr),nslot,nslot>>1);
for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++) {
frame_parms = &PHY_vars_UE_g[UE_id]->lte_frame_parms;
slot_offset = (nslot)*(frame_parms->samples_per_tti>>1);
txdata =tx[NB_eNB_INST+UE_id][0]; //PHY_vars_UE_g[UE_id]->lte_ue_common_vars.txdata;
tx_pwr = dac_fixed_gain(s_re[NB_eNB_INST+UE_id],
s_im[NB_eNB_INST+UE_id],
txdata,
slot_offset,
frame_parms->nb_antennas_tx,
frame_parms->samples_per_tti>>1,
14,
18);
printf("[SIM][UL] UE %d tx_pwr %f dB for slot %d (subframe %d)\n",UE_id,10*log10(tx_pwr),nslot,nslot>>1);
rx_pwr = signal_energy_fp(s_re[NB_eNB_INST+UE_id],s_im[NB_eNB_INST+UE_id],frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0);
printf("[SIM][UL] UE %d tx_pwr %f dB for slot %d (subframe %d)\n",UE_id,10*log10(rx_pwr),nslot,nslot>>1);
}
_COT_U=0;
for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
if ( pthread_cond_signal(&uplink_cond[UE_id][eNB_id])) exit(1);
if ( pthread_mutex_unlock(&uplink_mutex[UE_id][eNB_id])) exit(1);
}}
for (eNB_id=0; eNB_id<(NB_eNB_INST); eNB_id++) {
for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++) {
if ( pthread_cond_signal(&uplink_cond[UE_id][eNB_id])) exit(1);
if ( pthread_mutex_unlock(&uplink_mutex[UE_id][eNB_id])) exit(1);
}
}
if ( pthread_cond_wait(&uplink_cond_channel, &uplink_mutex_channel)) exit(1);
for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
Clean_Param(r_re[eNB_id],r_im[eNB_id],frame_parms);
for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++){
Channel_Out(SF_UL,eNB_id,UE_id,r_re[eNB_id],r_im[eNB_id],r_re0_u[eNB_id][UE_id],r_im0_u[eNB_id][UE_id],frame_parms); printf("[SIM][DL] eNB %d: tx_pwr %f dB for slot %d (subframe %d)\n",eNB_id,10*log10(tx_pwr),next_slot,next_slot>>1);
}
for (eNB_id=0; eNB_id<(NB_eNB_INST); eNB_id++) {
Clean_Param(r_re[eNB_id],r_im[eNB_id],frame_parms);
for (UE_id = 0; UE_id < (NB_UE_INST); UE_id++) {
Channel_Out(SF_UL,eNB_id,UE_id,r_re[eNB_id],r_im[eNB_id],r_re0_u[eNB_id][UE_id],r_im0_u[eNB_id][UE_id],frame_parms);
printf("[SIM][DL] eNB %d: tx_pwr %f dB for slot %d (subframe %d)\n",eNB_id,10*log10(tx_pwr),next_slot,next_slot>>1);
}
}
count=0;
for (eNB_id=0;eNB_id<(NB_eNB_INST);eNB_id++) {
write(fd_NB[eNB_id],&slot,sizeof(slot));
// send_exec_msg(mac_xface->frame,slot,eNB_PORT+eNB_id);
count++;
for (eNB_id=0; eNB_id<(NB_eNB_INST); eNB_id++) {
write(fd_NB[eNB_id],&slot,sizeof(slot));
// send_exec_msg(mac_xface->frame,slot,eNB_PORT+eNB_id);
count++;
}
while(count--){
int dummy=1;
read(fd_channel,&dummy,sizeof(dummy));
// wait_4Msg();
while(count--) {
int dummy=1;
read(fd_channel,&dummy,sizeof(dummy));
// wait_4Msg();
}
}
void Channel_Func(double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],double **r_re[MAX_eNB+MAX_UE],double **r_im[MAX_eNB+MAX_UE],double **r_re0,double **r_im0,
double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,int slot){
double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],u8 abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,
int slot)
{
int last_slot;
lte_subframe_t direction;
last_slot = (slot - 1)%20;
if (last_slot <0)
last_slot+=20;
nslot = (slot + 1)%20;
direction = subframe_select(frame_parms,nslot>>1);
if( direction == SF_DL || (direction == SF_S && nslot%2==0)){
Channel_DL(s_re,s_im,r_re,r_im,r_re0,r_im0,r_re0_d,r_im0_d,r_re0_u,r_im0_u,eNB2UE,UE2eNB,enb_data,ue_data,abstraction_flag,frame_parms,slot);
}
else{
Channel_UL(s_re,s_im,r_re,r_im,r_re0,r_im0,r_re0_d,r_im0_d,r_re0_u,r_im0_u,eNB2UE,UE2eNB,enb_data,ue_data,abstraction_flag,frame_parms,slot);
if( direction == SF_DL || (direction == SF_S && nslot%2==0)) {
Channel_DL(s_re,s_im,r_re,r_im,r_re0,r_im0,r_re0_d,r_im0_d,r_re0_u,r_im0_u,eNB2UE,UE2eNB,enb_data,ue_data,abstraction_flag,frame_parms,slot);
} else {
Channel_UL(s_re,s_im,r_re,r_im,r_re0,r_im0,r_re0_d,r_im0_d,r_re0_u,r_im0_u,eNB2UE,UE2eNB,enb_data,ue_data,abstraction_flag,frame_parms,slot);
}
}
+18 -15
View File
@@ -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
*******************************************************************************/
@@ -36,29 +36,32 @@ int32_t **tx[MAX_eNB+MAX_UE][3],**rx[MAX_eNB+MAX_UE][3];
int nslot;
void Process_Func(int node_id,int port,double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im,
node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms);
node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms);
void UE_Inst(int node_id,int port,double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im,
node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms);
node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms);
void eNB_Inst(int node_id,int port,double **r_re0,double **r_im0,double **r_re,double **r_im,double **s_re,double **s_im,
node_desc_t *enb_data[NUMBER_OF_eNB_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms);
node_desc_t *enb_data[NUMBER_OF_eNB_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms);
void Channel_Inst(int node_id,int port,double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],double **r_re[MAX_eNB+MAX_UE],double **r_im[MAX_eNB+MAX_UE],double **r_re0,double **r_im0,
double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms);
double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms);
void Channel_DL(double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],double **r_re[MAX_eNB+MAX_UE],double **r_im[MAX_eNB+MAX_UE],double **r_re0,double **r_im0,
double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,int slot);
double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,
int slot);
void Channel_UL(double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],double **r_re[MAX_eNB+MAX_UE],double **r_im[MAX_eNB+MAX_UE],double **r_re0,double **r_im0,
double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,int slot);
double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,
int slot);
void Channel_Func(double **s_re[MAX_eNB+MAX_UE],double **s_im[MAX_eNB+MAX_UE],double **r_re[MAX_eNB+MAX_UE],double **r_im[MAX_eNB+MAX_UE],double **r_re0,double **r_im0,
double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,int slot);
double **r_re0_d[MAX_UE][MAX_eNB],double **r_im0_d[MAX_UE][MAX_eNB],double **r_re0_u[MAX_eNB][MAX_UE],double **r_im0_u[MAX_eNB][MAX_UE],channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX],
channel_desc_t *UE2eNB[NUMBER_OF_UE_MAX][NUMBER_OF_eNB_MAX],node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],uint8_t abstraction_flag,LTE_DL_FRAME_PARMS *frame_parms,
int slot);
#endif
+4 -4
View File
@@ -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
*******************************************************************************/
+376 -363
View File
@@ -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
*******************************************************************************/
@@ -65,14 +65,15 @@
//#define DEBUG_SIM
void init_rre(LTE_DL_FRAME_PARMS *frame_parms,double ***r_re0,double ***r_im0) {
void init_rre(LTE_DL_FRAME_PARMS *frame_parms,double ***r_re0,double ***r_im0)
{
int i;
int i;
(*r_re0) = malloc(2*sizeof(double*));
(*r_im0) = malloc(2*sizeof(double*));
for (i=0;i<2;i++) {
for (i=0; i<2; i++) {
(*r_re0)[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double));
bzero((*r_re0)[i],FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double));
(*r_im0)[i] = malloc(FRAME_LENGTH_COMPLEX_SAMPLES*sizeof(double));
@@ -82,348 +83,360 @@ void init_rre(LTE_DL_FRAME_PARMS *frame_parms,double ***r_re0,double ***r_im0) {
}
void mmap_enb(int id,int **tx_data[3],int **rx_data[3],LTE_DL_FRAME_PARMS *frame_parms) {
void mmap_enb(int id,int **tx_data[3],int **rx_data[3],LTE_DL_FRAME_PARMS *frame_parms)
{
int i;
int fd[20];
int result;
unsigned int FILESIZE;
int i;
int fd[20];
int result;
unsigned int FILESIZE;
FILESIZE=FRAME_LENGTH_COMPLEX_SAMPLES*(sizeof(s32));
FILESIZE=FRAME_LENGTH_COMPLEX_SAMPLES*(sizeof(s32));
char buffer[100];
int j=0,k=0;
char buffer[100];
int j=0,k=0;
char sect=1;
for(k=0;k<sect;k++){
(*(tx_data+k)) = malloc(2*sizeof(s32*));
(*(rx_data+k)) = malloc(2*sizeof(s32*));
}
char sect=1;
for (k=0;k<sect;k++){
for (i=0;i<2;i++) {
sprintf(buffer,"/tmp/tx_data_%d_%d_%d.bin",id,k,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
(*(tx_data+k))[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0);
j++;
sprintf(buffer,"/tmp/rx_data_%d_%d_%d.bin",id,k,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
(*(rx_data+k))[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0);
j++;
for(k=0; k<sect; k++) {
(*(tx_data+k)) = malloc(2*sizeof(s32*));
(*(rx_data+k)) = malloc(2*sizeof(s32*));
}
for (k=0; k<sect; k++) {
for (i=0; i<2; i++) {
sprintf(buffer,"/tmp/tx_data_%d_%d_%d.bin",id,k,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
(*(tx_data+k))[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0);
j++;
sprintf(buffer,"/tmp/rx_data_%d_%d_%d.bin",id,k,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
(*(rx_data+k))[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0);
j++;
}
}
}
void mmap_ue(int id,int ***tx_data,int ***rx_data,LTE_DL_FRAME_PARMS *frame_parms) {
void mmap_ue(int id,int ***tx_data,int ***rx_data,LTE_DL_FRAME_PARMS *frame_parms)
{
int i;
int fd[20];
int result;
unsigned int FILESIZE;
int i;
int fd[20];
int result;
unsigned int FILESIZE;
FILESIZE=FRAME_LENGTH_COMPLEX_SAMPLES*(sizeof(s32));
FILESIZE=FRAME_LENGTH_COMPLEX_SAMPLES*(sizeof(s32));
char buffer[100];
int j=0,k=0;
char buffer[100];
int j=0,k=0;
(*tx_data) = malloc(2*sizeof(s32*));
(*rx_data) = malloc(2*sizeof(s32*));
(*tx_data) = malloc(2*sizeof(s32*));
(*rx_data) = malloc(2*sizeof(s32*));
for (i=0;i<2;i++) {
sprintf(buffer,"/tmp/tx_data_%d_%d_%d.bin",id,k,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
(*tx_data)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0);
j++;
for (i=0; i<2; i++) {
sprintf(buffer,"/tmp/tx_data_%d_%d_%d.bin",id,k,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
(*tx_data)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0);
j++;
sprintf(buffer,"/tmp/rx_data_%d_%d_%d.bin",id,k,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
(*rx_data)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0);
j++;
sprintf(buffer,"/tmp/rx_data_%d_%d_%d.bin",id,k,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
(*rx_data)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0);
j++;
}
}
void do_DL_sig_channel_T(void *param){
void do_DL_sig_channel_T(void *param)
{
ch_thread* cthread = (ch_thread*)param;
int count;
u8 eNB_i,UE_i;
int thread_id;
double **r_re0,**r_re,**r_im,**r_im0,**s_re,**s_im;
channel_desc_t *eNB2UE[3][8];
node_desc_t *enb_data[3];
node_desc_t *ue_data[8];
int *next_slot,abstraction_flag;
LTE_DL_FRAME_PARMS *frame_parms;
int **tx_data[3],**rx_data[3];
node_desc_t *enb_data_2[3];
eNB_i=(cthread->eNB_id);
UE_i=(cthread->UE_id);
r_re0=cthread->r_re0;
r_re=cthread->r_re;
r_im=cthread->r_im;
r_im0=cthread->r_im0;
s_im=cthread->s_im;
s_re=cthread->s_re;
eNB2UE[eNB_i][UE_i]=cthread->eNB2UE;
enb_data[0]=(cthread->enb_data);
enb_data_2[eNB_i]=cthread->enb_data;
ch_thread* cthread = (ch_thread*)param;
int count;
u8 eNB_i,UE_i;
int thread_id;
double **r_re0,**r_re,**r_im,**r_im0,**s_re,**s_im;
channel_desc_t *eNB2UE[3][8];
node_desc_t *enb_data[3];
node_desc_t *ue_data[8];
int *next_slot,abstraction_flag;
LTE_DL_FRAME_PARMS *frame_parms;
int **tx_data[3],**rx_data[3];
node_desc_t *enb_data_2[3];
eNB_i=(cthread->eNB_id);
UE_i=(cthread->UE_id);
r_re0=cthread->r_re0;
r_re=cthread->r_re;
r_im=cthread->r_im;
r_im0=cthread->r_im0;
s_im=cthread->s_im;
s_re=cthread->s_re;
eNB2UE[eNB_i][UE_i]=cthread->eNB2UE;
enb_data[0]=(cthread->enb_data);
enb_data_2[eNB_i]=cthread->enb_data;
ue_data[UE_i]=cthread->ue_data;
frame_parms=cthread->frame_parms;
next_slot=(cthread->next_slot);
abstraction_flag=*(cthread->abstraction_flag);
thread_id=(cthread->thread_id);
tx_data[3]=cthread->tx_data[3];
rx_data[3]=cthread->rx_data[3];
s32 att_eNB_id=-1;
s32 **txdata,**rxdata;
ue_data[UE_i]=cthread->ue_data;
frame_parms=cthread->frame_parms;
next_slot=(cthread->next_slot);
abstraction_flag=*(cthread->abstraction_flag);
thread_id=(cthread->thread_id);
tx_data[3]=cthread->tx_data[3];
rx_data[3]=cthread->rx_data[3];
s32 att_eNB_id=-1;
s32 **txdata,**rxdata;
double tx_pwr, rx_pwr;
s32 rx_pwr2;
u32 i,aa;
u32 slot_offset;
double tx_pwr, rx_pwr;
s32 rx_pwr2;
u32 i,aa;
u32 slot_offset;
while(1){
while(1) {
if(pthread_cond_wait(&downlink_cond[eNB_i][UE_i], &downlink_mutex[eNB_i][UE_i])) exit(1);
slot_offset = (nslot)*(frame_parms->samples_per_tti>>1);
// pthread_mutex_lock(&exclusive);
if(pthread_cond_wait(&downlink_cond[eNB_i][UE_i], &downlink_mutex[eNB_i][UE_i])) exit(1);
multipath_channel(eNB2UE[eNB_i][UE_i],s_re,s_im,r_re0,r_im0,
frame_parms->samples_per_tti>>1,0);
slot_offset = (nslot)*(frame_parms->samples_per_tti>>1);
// pthread_mutex_lock(&exclusive);
multipath_channel(eNB2UE[eNB_i][UE_i],s_re,s_im,r_re0,r_im0,
frame_parms->samples_per_tti>>1,0);
rx_pwr = signal_energy_fp2(eNB2UE[eNB_i][UE_i]->ch[0],eNB2UE[eNB_i][UE_i]->channel_length)*eNB2UE[eNB_i][UE_i]->channel_length;
rx_pwr = signal_energy_fp2(eNB2UE[eNB_i][UE_i]->ch[0],eNB2UE[eNB_i][UE_i]->channel_length)*eNB2UE[eNB_i][UE_i]->channel_length;
printf("[SIM][DL] Channel eNB %d => UE %d : tx_power %f dBm, path_loss %f dB\n",
eNB_i,UE_i,
enb_data_2[eNB_i]->tx_power_dBm,
eNB2UE[eNB_i][UE_i]->path_loss_dB);
printf("[SIM][DL] Channel eNB %d => UE %d : Channel gain %f dB (%f)\n",eNB_i,UE_i,10*log10(rx_pwr),rx_pwr);
printf("[SIM][DL] Channel eNB %d => UE %d : tx_power %f dBm, path_loss %f dB\n",
eNB_i,UE_i,
enb_data_2[eNB_i]->tx_power_dBm,
eNB2UE[eNB_i][UE_i]->path_loss_dB);
printf("[SIM][DL] Channel eNB %d => UE %d : Channel gain %f dB (%f)\n",eNB_i,UE_i,10*log10(rx_pwr),rx_pwr);
rx_pwr = signal_energy_fp(r_re0,r_im0,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0);
rx_pwr = signal_energy_fp(r_re0,r_im0,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0);
printf("[SIM][DL] UE %d : rx_pwr %f dB for slot %d (subframe %d)\n",UE_i,10*log10(rx_pwr),nslot,nslot>>1);
printf("[SIM][DL] UE %d : rx_pwr %f dB for slot %d (subframe %d)\n",UE_i,10*log10(rx_pwr),nslot,nslot>>1);
if (eNB2UE[eNB_i][UE_i]->first_run == 1)
eNB2UE[eNB_i][UE_i]->first_run = 0;
if (eNB2UE[eNB_i][UE_i]->first_run == 1)
eNB2UE[eNB_i][UE_i]->first_run = 0;
rf_rx(r_re0,
r_im0,
NULL,
NULL,
0,
frame_parms->nb_antennas_rx,
frame_parms->samples_per_tti>>1,
1e3/eNB2UE[eNB_i][UE_i]->BW, // sampling time (ns)
0.0, // freq offset (Hz) (-20kHz..20kHz)
0.0, // drift (Hz) NOT YET IMPLEMENTED
ue_data[UE_i]->rx_noise_level, // noise_figure NOT YET IMPLEMENTED
110.00 - 66.227, // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later)
200, // IP3_dBm (dBm)
&eNB2UE[eNB_i][UE_i]->ip, // initial phase
30.0e3, // pn_cutoff (kHz)
-500.0, // pn_amp (dBc) default: 50
0.0, // IQ imbalance (dB),
0.0); // IQ phase imbalance (rad)
rf_rx(r_re0,
r_im0,
NULL,
NULL,
0,
frame_parms->nb_antennas_rx,
frame_parms->samples_per_tti>>1,
1e3/eNB2UE[eNB_i][UE_i]->BW, // sampling time (ns)
0.0, // freq offset (Hz) (-20kHz..20kHz)
0.0, // drift (Hz) NOT YET IMPLEMENTED
ue_data[UE_i]->rx_noise_level, // noise_figure NOT YET IMPLEMENTED
110.00 - 66.227, // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later)
200, // IP3_dBm (dBm)
&eNB2UE[eNB_i][UE_i]->ip, // initial phase
30.0e3, // pn_cutoff (kHz)
-500.0, // pn_amp (dBc) default: 50
0.0, // IQ imbalance (dB),
0.0); // IQ phase imbalance (rad)
rx_pwr = signal_energy_fp(r_re0,r_im0,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0);
rx_pwr = signal_energy_fp(r_re0,r_im0,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0);
printf("[SIM][DL] UE %d : ADC in (eNB %d) %f dB for slot %d (subframe %d)\n",UE_i,eNB_i,10*log10(rx_pwr),nslot,nslot>>1);
//count = __sync_add_and_fetch(&_COT, 1);
//COMPILER_BARRIER();
printf("[SIM][DL] UE %d : ADC in (eNB %d) %f dB for slot %d (subframe %d)\n",UE_i,eNB_i,10*log10(rx_pwr),nslot,nslot>>1);
//count = __sync_add_and_fetch(&_COT, 1);
//COMPILER_BARRIER();
if (pthread_mutex_lock(&downlink_mutex_channel)) exit(1);
_COT++;
if(_COT==NUM_THREAD_DOWNLINK){
// if(count==NUM_THREAD_DOWNLINK){
if(pthread_cond_signal(&downlink_cond_channel)) exit(1);
}
if(pthread_mutex_unlock(&downlink_mutex_channel)) exit(1);
if (pthread_mutex_lock(&downlink_mutex_channel)) exit(1);
// pthread_mutex_unlock(&exclusive);
}
_COT++;
if(_COT==NUM_THREAD_DOWNLINK) {
// if(count==NUM_THREAD_DOWNLINK){
if(pthread_cond_signal(&downlink_cond_channel)) exit(1);
}
if(pthread_mutex_unlock(&downlink_mutex_channel)) exit(1);
// pthread_mutex_unlock(&exclusive);
}
}
void do_UL_sig_channel_T(void *param){
void do_UL_sig_channel_T(void *param)
{
ch_thread* cthread = (ch_thread*)param;
int count=0;
u8 eNB_i,UE_i;
double **r_re0,**r_re,**r_im,**r_im0,**s_re,**s_im;
channel_desc_t *UE2eNB[8][3];
node_desc_t *enb_data2[3];
node_desc_t *ue_data[8];
u16 next_slot,abstraction_flag;
LTE_DL_FRAME_PARMS *frame_parms;
int thread_id;
ch_thread* cthread = (ch_thread*)param;
int count=0;
u8 eNB_i,UE_i;
double **r_re0,**r_re,**r_im,**r_im0,**s_re,**s_im;
channel_desc_t *UE2eNB[8][3];
node_desc_t *enb_data2[3];
node_desc_t *ue_data[8];
u16 next_slot,abstraction_flag;
LTE_DL_FRAME_PARMS *frame_parms;
int thread_id;
eNB_i=(cthread->eNB_id);
UE_i=(cthread->UE_id);
r_re0=cthread->r_re0;
r_re=cthread->r_re;
r_im=cthread->r_im;
r_im0=cthread->r_im0;
s_im=cthread->s_im;
s_re=cthread->s_re;
UE2eNB[UE_i][eNB_i]=cthread->UE2eNB;
enb_data2[eNB_i]=cthread->enb_data;
ue_data[UE_i]=cthread->ue_data;
next_slot=*(cthread->next_slot);
abstraction_flag=*(cthread->abstraction_flag);
frame_parms=cthread->frame_parms;
thread_id=(cthread->thread_id);
eNB_i=(cthread->eNB_id);
UE_i=(cthread->UE_id);
r_re0=cthread->r_re0;
r_re=cthread->r_re;
r_im=cthread->r_im;
r_im0=cthread->r_im0;
s_im=cthread->s_im;
s_re=cthread->s_re;
UE2eNB[UE_i][eNB_i]=cthread->UE2eNB;
enb_data2[eNB_i]=cthread->enb_data;
ue_data[UE_i]=cthread->ue_data;
next_slot=*(cthread->next_slot);
abstraction_flag=*(cthread->abstraction_flag);
frame_parms=cthread->frame_parms;
thread_id=(cthread->thread_id);
s32 **txdata,**rxdata;
s32 **txdata,**rxdata;
u8 UE_id=0,eNB_id=0,aa;
double tx_pwr, rx_pwr;
s32 rx_pwr2;
u32 i;
u32 slot_offset;
double nf = 0; //currently unused
u8 UE_id=0,eNB_id=0,aa;
double tx_pwr, rx_pwr;
s32 rx_pwr2;
u32 i;
u32 slot_offset;
double nf = 0; //currently unused
while(1){
while(1) {
slot_offset = (nslot)*(frame_parms->samples_per_tti>>1);
slot_offset = (nslot)*(frame_parms->samples_per_tti>>1);
if(pthread_cond_wait(&uplink_cond[UE_i][eNB_i], &uplink_mutex[UE_i][eNB_i])) exit(1);//[UE_i][eNB_i]);
if(pthread_cond_wait(&uplink_cond[UE_i][eNB_i], &uplink_mutex[UE_i][eNB_i])) exit(1);//[UE_i][eNB_i]);
// pthread_mutex_lock(&exclusive);
// pthread_mutex_lock(&exclusive);
multipath_channel(UE2eNB[UE_i][eNB_i],s_re,s_im,r_re0,r_im0,
frame_parms->samples_per_tti>>1,0);
multipath_channel(UE2eNB[UE_i][eNB_i],s_re,s_im,r_re0,r_im0,
frame_parms->samples_per_tti>>1,0);
printf("[SIM][UL] Channel UE %d => eNB %d : %f dB\n",UE_i,eNB_i,10*log10(rx_pwr));
printf("[SIM][UL] Channel UE %d => eNB %d : %f dB\n",UE_i,eNB_i,10*log10(rx_pwr));
rx_pwr = signal_energy_fp(r_re0,r_im0,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0);
rx_pwr = signal_energy_fp(r_re0,r_im0,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0);
printf("[SIM][UL] eNB %d : eNB out %f dB for slot %d (subframe %d), sptti %d\n",eNB_i,10*log10(rx_pwr),nslot,nslot>>1,frame_parms->samples_per_tti);
printf("[SIM][UL] eNB %d : eNB out %f dB for slot %d (subframe %d), sptti %d\n",eNB_i,10*log10(rx_pwr),nslot,nslot>>1,frame_parms->samples_per_tti);
if (UE2eNB[UE_i][eNB_i]->first_run == 1)
UE2eNB[UE_i][eNB_i]->first_run = 0;
if (UE2eNB[UE_i][eNB_i]->first_run == 1)
UE2eNB[UE_i][eNB_i]->first_run = 0;
// RF model
rf_rx(r_re0,
r_im0,
NULL,
NULL,
0,
frame_parms->nb_antennas_rx,
frame_parms->samples_per_tti>>1,
(UE_id==0) ? (1.0/7.68e6 * 1e9) : 1e9, // sampling time (ns) + set noise bandwidth to 0 for UE>0 (i.e. no noise except for first UE)
0.0, // freq offset (Hz) (-20kHz..20kHz)
0.0, // drift (Hz) NOT YET IMPLEMENTED
nf, // noise_figure NOT YET IMPLEMENTED
150.00 - 66.227, // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later)
200, // IP3_dBm (dBm)
&UE2eNB[UE_i][eNB_i]->ip, // initial phase
30.0e3, // pn_cutoff (kHz)
-500.0, // pn_amp (dBc) default: 50
0.0, // IQ imbalance (dB),
0.0); // IQ phase imbalance (rad)
// RF model
rf_rx(r_re0,
r_im0,
NULL,
NULL,
0,
frame_parms->nb_antennas_rx,
frame_parms->samples_per_tti>>1,
(UE_id==0) ? (1.0/7.68e6 * 1e9) : 1e9, // sampling time (ns) + set noise bandwidth to 0 for UE>0 (i.e. no noise except for first UE)
0.0, // freq offset (Hz) (-20kHz..20kHz)
0.0, // drift (Hz) NOT YET IMPLEMENTED
nf, // noise_figure NOT YET IMPLEMENTED
150.00 - 66.227, // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later)
200, // IP3_dBm (dBm)
&UE2eNB[UE_i][eNB_i]->ip, // initial phase
30.0e3, // pn_cutoff (kHz)
-500.0, // pn_amp (dBc) default: 50
0.0, // IQ imbalance (dB),
0.0); // IQ phase imbalance (rad)
rx_pwr = signal_energy_fp(r_re,r_im,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0);
rx_pwr = signal_energy_fp(r_re,r_im,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0);
printf("[SIM][UL] rx_pwr (ADC in) %f dB for slot %d (subframe %d)\n",10*log10(rx_pwr),nslot,nslot>>1);
printf("[SIM][UL] rx_pwr (ADC in) %f dB for slot %d (subframe %d)\n",10*log10(rx_pwr),nslot,nslot>>1);
// count = __sync_add_and_fetch(&_COT_U, 1);
// COMPILER_BARRIER();
// count = __sync_add_and_fetch(&_COT_U, 1);
// COMPILER_BARRIER();
if (pthread_mutex_lock(&uplink_mutex_channel)) exit(1);
_COT_U++;
if (pthread_mutex_lock(&uplink_mutex_channel)) exit(1);
if(_COT_U==NUM_THREAD_UPLINK){
//if(count==NUM_THREAD_UPLINK){
if (pthread_cond_signal(&uplink_cond_channel)) exit(1);
}
if(pthread_mutex_unlock(&uplink_mutex_channel)) exit(1);
_COT_U++;
// pthread_mutex_unlock(&exclusive);
if(_COT_U==NUM_THREAD_UPLINK) {
//if(count==NUM_THREAD_UPLINK){
if (pthread_cond_signal(&uplink_cond_channel)) exit(1);
}
}
if(pthread_mutex_unlock(&uplink_mutex_channel)) exit(1);
// pthread_mutex_unlock(&exclusive);
}
}
void Clean_Param(double **r_re,double **r_im,LTE_DL_FRAME_PARMS *frame_parms)
{
u32 i,aa;
u32 i,aa;
for (i=0;i<(frame_parms->samples_per_tti>>1);i++) {
for (aa=0;aa<frame_parms->nb_antennas_rx;aa++) {
r_re[aa][i]=0.0;
r_im[aa][i]=0.0;
}
}
for (i=0; i<(frame_parms->samples_per_tti>>1); i++) {
for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
r_re[aa][i]=0.0;
r_im[aa][i]=0.0;
}
}
}
void Channel_Out(lte_subframe_t direction,int eNB_id,int UE_id,double **r_re,double **r_im,double **r_re0,double **r_im0,LTE_DL_FRAME_PARMS *frame_parms)
{
u32 i,aa;
double alpha=0.0;
u32 slot_offset;
frame_parms = &PHY_vars_UE_g[0]->lte_frame_parms;
slot_offset = (nslot)*(frame_parms->samples_per_tti>>1);
s32 rx_pwr2;
s32 **rxdata;
if(eNB_id==(UE_id % NB_eNB_INST))
alpha=1;
u32 i,aa;
double alpha=0.0;
u32 slot_offset;
frame_parms = &PHY_vars_UE_g[0]->lte_frame_parms;
slot_offset = (nslot)*(frame_parms->samples_per_tti>>1);
s32 rx_pwr2;
s32 **rxdata;
for (i=0;i<(frame_parms->samples_per_tti>>1);i++) {
for (aa=0;aa<frame_parms->nb_antennas_rx;aa++) {
r_re[aa][i]+=(r_re0[aa][i]*alpha);
r_im[aa][i]+=(r_im0[aa][i]*alpha);
if(eNB_id==(UE_id % NB_eNB_INST))
alpha=1;
}
}
for (i=0; i<(frame_parms->samples_per_tti>>1); i++) {
for (aa=0; aa<frame_parms->nb_antennas_rx; aa++) {
r_re[aa][i]+=(r_re0[aa][i]*alpha);
r_im[aa][i]+=(r_im0[aa][i]*alpha);
rxdata=rx[eNB_id][0];
if (direction == SF_DL ) {
frame_parms = &PHY_vars_eNB_g[0]->lte_frame_parms;
slot_offset = (nslot)*(frame_parms->samples_per_tti>>1);
adc(r_re,
r_im,
0,
slot_offset,
rx[NB_eNB_INST+UE_id][0],
frame_parms->nb_antennas_rx,
frame_parms->samples_per_tti>>1,
12);
}
else{
frame_parms = &PHY_vars_UE_g[0]->lte_frame_parms;
slot_offset = (nslot)*(frame_parms->samples_per_tti>>1);
adc(r_re,
r_im,
0,
slot_offset,
rx[eNB_id][0],
frame_parms->nb_antennas_rx,
frame_parms->samples_per_tti>>1,
12);
}
}
}
rxdata=rx[eNB_id][0];
if (direction == SF_DL ) {
frame_parms = &PHY_vars_eNB_g[0]->lte_frame_parms;
slot_offset = (nslot)*(frame_parms->samples_per_tti>>1);
adc(r_re,
r_im,
0,
slot_offset,
rx[NB_eNB_INST+UE_id][0],
frame_parms->nb_antennas_rx,
frame_parms->samples_per_tti>>1,
12);
} else {
frame_parms = &PHY_vars_UE_g[0]->lte_frame_parms;
slot_offset = (nslot)*(frame_parms->samples_per_tti>>1);
adc(r_re,
r_im,
0,
slot_offset,
rx[eNB_id][0],
frame_parms->nb_antennas_rx,
frame_parms->samples_per_tti>>1,
12);
}
rx_pwr2 = signal_energy(rxdata[0]+slot_offset,frame_parms->samples_per_tti>>1);
// printf("[SIM][DL/UL] UE/eNB %d : rx_pwr (ADC out) %f dB (%d) for slot %d (subframe %d), writing to %p\n",UE_id, 10*log10((double)rx_pwr2),rx_pwr2,nslot,nslot>>1,rxdata);
rx_pwr2 = signal_energy(rxdata[0]+slot_offset,frame_parms->samples_per_tti>>1);
// printf("[SIM][DL/UL] UE/eNB %d : rx_pwr (ADC out) %f dB (%d) for slot %d (subframe %d), writing to %p\n",UE_id, 10*log10((double)rx_pwr2),rx_pwr2,nslot,nslot>>1,rxdata);
}
/*
@@ -438,41 +451,41 @@ void do_UL_sig_channel(u8 eNB_i,u8 UE_i,double **r_re0,double **r_im0,double **r
u32 slot_offset;
double nf = 0; //currently unused
slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1);
slot_offset = (next_slot)*(frame_parms->samples_per_tti>>1);
multipath_channel(UE2eNB[UE_i][eNB_i],s_re,s_im,r_re0,r_im0,
frame_parms->samples_per_tti>>1,0);
multipath_channel(UE2eNB[UE_i][eNB_i],s_re,s_im,r_re0,r_im0,
frame_parms->samples_per_tti>>1,0);
rx_pwr = signal_energy_fp(r_re0,r_im0,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0);
rx_pwr = signal_energy_fp(r_re0,r_im0,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0);
if (UE2eNB[UE_i][eNB_i]->first_run == 1)
UE2eNB[UE_i][eNB_i]->first_run = 0;
if (UE2eNB[UE_i][eNB_i]->first_run == 1)
UE2eNB[UE_i][eNB_i]->first_run = 0;
// RF model
rf_rx(r_re0,
r_im0,
NULL,
NULL,
0,
frame_parms->nb_antennas_rx,
frame_parms->samples_per_tti>>1,
(UE_id==0) ? (1.0/7.68e6 * 1e9) : 1e9, // sampling time (ns) + set noise bandwidth to 0 for UE>0 (i.e. no noise except for first UE)
0.0, // freq offset (Hz) (-20kHz..20kHz)
0.0, // drift (Hz) NOT YET IMPLEMENTED
nf, // noise_figure NOT YET IMPLEMENTED
150.00 - 66.227, // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later)
200, // IP3_dBm (dBm)
&UE2eNB[UE_i][eNB_i]->ip, // initial phase
30.0e3, // pn_cutoff (kHz)
-500.0, // pn_amp (dBc) default: 50
0.0, // IQ imbalance (dB),
0.0); // IQ phase imbalance (rad)
// RF model
rf_rx(r_re0,
r_im0,
NULL,
NULL,
0,
frame_parms->nb_antennas_rx,
frame_parms->samples_per_tti>>1,
(UE_id==0) ? (1.0/7.68e6 * 1e9) : 1e9, // sampling time (ns) + set noise bandwidth to 0 for UE>0 (i.e. no noise except for first UE)
0.0, // freq offset (Hz) (-20kHz..20kHz)
0.0, // drift (Hz) NOT YET IMPLEMENTED
nf, // noise_figure NOT YET IMPLEMENTED
150.00 - 66.227, // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later)
200, // IP3_dBm (dBm)
&UE2eNB[UE_i][eNB_i]->ip, // initial phase
30.0e3, // pn_cutoff (kHz)
-500.0, // pn_amp (dBc) default: 50
0.0, // IQ imbalance (dB),
0.0); // IQ phase imbalance (rad)
rx_pwr = signal_energy_fp(r_re,r_im,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0);
printf("[SIM][UL] rx_pwr (ADC in) %f dB for slot %d (subframe %d)\n",10*log10(rx_pwr),next_slot,next_slot>>1);
printf("[SIM][UL] rx_pwr (ADC in) %f dB for slot %d (subframe %d)\n",10*log10(rx_pwr),next_slot,next_slot>>1);
}
*/
@@ -490,45 +503,45 @@ node_desc_t *enb_data[NUMBER_OF_eNB_MAX],node_desc_t *ue_data[NUMBER_OF_UE_MAX],
u32 slot_offset;
multipath_channel(eNB2UE[eNB_i][UE_i],s_re,s_im,r_re0,r_im0,
frame_parms->samples_per_tti>>1,0);
multipath_channel(eNB2UE[eNB_i][UE_i],s_re,s_im,r_re0,r_im0,
frame_parms->samples_per_tti>>1,0);
rx_pwr = signal_energy_fp2(eNB2UE[eNB_i][UE_i]->ch[0],eNB2UE[eNB_i][UE_i]->channel_length)*eNB2UE[eNB_i][UE_i]->channel_length;
rx_pwr = signal_energy_fp2(eNB2UE[eNB_i][UE_i]->ch[0],eNB2UE[eNB_i][UE_i]->channel_length)*eNB2UE[eNB_i][UE_i]->channel_length;
printf("[SIM][DL] Channel eNB %d => UE %d : tx_power %f dBm, path_loss %f dB\n",
eNB_i,UE_i,
enb_data[eNB_id]->tx_power_dBm,
eNB2UE[eNB_id][UE_id]->path_loss_dB);
printf("[SIM][DL] Channel eNB %d => UE %d : Channel gain %f dB (%f)\n",eNB_id,UE_id,10*log10(rx_pwr),rx_pwr);
printf("[SIM][DL] Channel eNB %d => UE %d : tx_power %f dBm, path_loss %f dB\n",
eNB_i,UE_i,
enb_data[eNB_id]->tx_power_dBm,
eNB2UE[eNB_id][UE_id]->path_loss_dB);
printf("[SIM][DL] Channel eNB %d => UE %d : Channel gain %f dB (%f)\n",eNB_id,UE_id,10*log10(rx_pwr),rx_pwr);
rx_pwr = signal_energy_fp(r_re0,r_im0,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0);
printf("[SIM][DL] UE %d : rx_pwr %f dB for slot %d (subframe %d)\n",UE_id,10*log10(rx_pwr),next_slot,next_slot>>1);
rx_pwr = signal_energy_fp(r_re0,r_im0,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0);
printf("[SIM][DL] UE %d : rx_pwr %f dB for slot %d (subframe %d)\n",UE_id,10*log10(rx_pwr),next_slot,next_slot>>1);
if (eNB2UE[eNB_id][UE_id]->first_run == 1)
eNB2UE[eNB_id][UE_id]->first_run = 0;
if (eNB2UE[eNB_id][UE_id]->first_run == 1)
eNB2UE[eNB_id][UE_id]->first_run = 0;
rf_rx(r_re0,
r_im0,
NULL,
NULL,
0,
frame_parms->nb_antennas_rx,
frame_parms->samples_per_tti>>1,
1e3/eNB2UE[eNB_i][UE_i]->BW, // sampling time (ns)
0.0, // freq offset (Hz) (-20kHz..20kHz)
0.0, // drift (Hz) NOT YET IMPLEMENTED
ue_data[UE_id]->rx_noise_level, // noise_figure NOT YET IMPLEMENTED
110.00 - 66.227, // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later)
200, // IP3_dBm (dBm)
&eNB2UE[eNB_i][UE_i]->ip, // initial phase
30.0e3, // pn_cutoff (kHz)
-500.0, // pn_amp (dBc) default: 50
0.0, // IQ imbalance (dB),
0.0); // IQ phase imbalance (rad)
rf_rx(r_re0,
r_im0,
NULL,
NULL,
0,
frame_parms->nb_antennas_rx,
frame_parms->samples_per_tti>>1,
1e3/eNB2UE[eNB_i][UE_i]->BW, // sampling time (ns)
0.0, // freq offset (Hz) (-20kHz..20kHz)
0.0, // drift (Hz) NOT YET IMPLEMENTED
ue_data[UE_id]->rx_noise_level, // noise_figure NOT YET IMPLEMENTED
110.00 - 66.227, // rx_gain (dB) (66.227 = 20*log10(pow2(11)) = gain from the adc that will be applied later)
200, // IP3_dBm (dBm)
&eNB2UE[eNB_i][UE_i]->ip, // initial phase
30.0e3, // pn_cutoff (kHz)
-500.0, // pn_amp (dBc) default: 50
0.0, // IQ imbalance (dB),
0.0); // IQ phase imbalance (rad)
rx_pwr = signal_energy_fp(r_re0,r_im0,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0);
printf("[SIM][DL] UE %d : ADC in (eNB %d) %f dB for slot %d (subframe %d)\n",UE_id,eNB_id,10*log10(rx_pwr),next_slot,next_slot>>1);
rx_pwr = signal_energy_fp(r_re0,r_im0,frame_parms->nb_antennas_rx,frame_parms->samples_per_tti>>1,0);
printf("[SIM][DL] UE %d : ADC in (eNB %d) %f dB for slot %d (subframe %d)\n",UE_id,eNB_id,10*log10(rx_pwr),next_slot,next_slot>>1);
}
@@ -557,7 +570,7 @@ void init_mmap_channel(int id,LTE_DL_FRAME_PARMS *frame_parms, double ***s_re,do
int j=0;
for (i=0;i<2;i++) {
sprintf(buffer,"/tmp/s_re_%d_%d.bin",id,i);
sprintf(buffer,"/tmp/s_re_%d_%d.bin",id,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
@@ -565,30 +578,30 @@ void init_mmap_channel(int id,LTE_DL_FRAME_PARMS *frame_parms, double ***s_re,do
j++;
sprintf(buffer,"/tmp/s_im_%d_%d.bin",id,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
(*s_im)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0);
sprintf(buffer,"/tmp/s_im_%d_%d.bin",id,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
(*s_im)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0);
j++;
j++;
sprintf(buffer,"/tmp/r_re_%d_%d.bin",id,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
(*r_re)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0);
sprintf(buffer,"/tmp/r_re_%d_%d.bin",id,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
(*r_re)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0);
j++;
j++;
sprintf(buffer,"/tmp/r_im_%d_%d.bin",id,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
(*r_im)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0);
sprintf(buffer,"/tmp/r_im_%d_%d.bin",id,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
(*r_im)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0);
j++;
j++;
}
for (i=0;i<2;i++) {
@@ -620,7 +633,7 @@ void init_mmap(int id,LTE_DL_FRAME_PARMS *frame_parms, double ***s_re,double ***
int j=0;
for (i=0;i<2;i++) {
sprintf(buffer,"/tmp/s_re_%d_%d.bin",id,i);
sprintf(buffer,"/tmp/s_re_%d_%d.bin",id,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
@@ -628,29 +641,29 @@ void init_mmap(int id,LTE_DL_FRAME_PARMS *frame_parms, double ***s_re,double ***
j++;
sprintf(buffer,"/tmp/s_im_%d_%d.bin",id,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
(*s_im)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0);
sprintf(buffer,"/tmp/s_im_%d_%d.bin",id,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
(*s_im)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0);
j++;
j++;
sprintf(buffer,"/tmp/r_re_%d_%d.bin",id,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
(*r_re)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0);
sprintf(buffer,"/tmp/r_re_%d_%d.bin",id,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
(*r_re)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0);
j++;
j++;
sprintf(buffer,"/tmp/r_im_%d_%d.bin",id,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
(*r_im)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0);
sprintf(buffer,"/tmp/r_im_%d_%d.bin",id,i);
fd[j] = open(buffer, O_RDWR | O_CREAT | O_TRUNC, (mode_t)0600);
result = lseek(fd[j], FILESIZE-1, SEEK_SET);
result = write(fd[j], "", 1);
(*r_im)[i] = mmap(0, FILESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd[j], 0);
j++;
j++;
}
for (i=0;i<2;i++) {
+4 -4
View File
@@ -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
*******************************************************************************/
+44 -44
View File
@@ -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
*******************************************************************************/
@@ -32,59 +32,59 @@
typedef struct {
void* pointer;
} memory_reference_t2;
void* pointer;
} memory_reference_t2;
typedef struct {
memory_reference_t2 mem_ref;
}obj_ref_t2;
memory_reference_t2 mem_ref;
} obj_ref_t2;
typedef struct{
typedef struct {
obj_ref_t2 *gm;
}HO;
} HO;
typedef struct {
void* pointer;
int port;
int Exec_Msg_Flag;
int node_id;
int node_role ;
int next_slot;
int last_slot;
int frame;
int sub_frame;
int slot;
int Exec_FLAG;
int EResp_FLAG;
int ue_id;
}s_t;
void* pointer;
int port;
int Exec_Msg_Flag;
int node_id;
int node_role ;
int next_slot;
int last_slot;
int frame;
int sub_frame;
int slot;
int Exec_FLAG;
int EResp_FLAG;
int ue_id;
} s_t;
HO Instance[3];
typedef struct{
int thread_id;
int eNB_id;
int UE_id;
double **s_re;
double **s_im;
double **r_re;
double **r_im;
double **r_re0;
double **r_im0;
struct channel_desc_t *eNB2UE;
struct channel_desc_t *UE2eNB;
struct node_desc_t *enb_data;
struct node_desc_t *ue_data;
int *next_slot;
int *abstraction_flag;
struct LTE_DL_FRAME_PARMS *frame_parms;
int **tx_data[3];
int **rx_data[3];
}ch_thread;
typedef struct {
int thread_id;
int eNB_id;
int UE_id;
double **s_re;
double **s_im;
double **r_re;
double **r_im;
double **r_re0;
double **r_im0;
struct channel_desc_t *eNB2UE;
struct channel_desc_t *UE2eNB;
struct node_desc_t *enb_data;
struct node_desc_t *ue_data;
int *next_slot;
int *abstraction_flag;
struct LTE_DL_FRAME_PARMS *frame_parms;
int **tx_data[3];
int **rx_data[3];
} ch_thread;
#define CHANNEL_PORT 37800