git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4042 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
@@ -186,7 +186,7 @@ int data_detection(RX_VECTOR_t *rxv,uint8_t *data_ind,uint32_t* rx_data,int fram
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// log2_maxh=10;
|
||||
// log2_maxh=7;
|
||||
mult_cpx_vector_norep_unprepared_conjx2(rxDATA_F,(int16_t*)chest,(int16_t*)rxDATA_F_comp,64,log2_maxh);
|
||||
#ifdef EXECTIME
|
||||
#ifdef RTAI
|
||||
@@ -225,7 +225,7 @@ int data_detection(RX_VECTOR_t *rxv,uint8_t *data_ind,uint32_t* rx_data,int fram
|
||||
scale = FOUR_OVER_SQRT_42;
|
||||
|
||||
for (i=0;i<48;i++) {
|
||||
// printf("mag[%d] = %d\n",i,rxDATA_F_mag[i]);
|
||||
// printf("mag[%d] = %d\n",i,rxDATA_F_mag[i]);
|
||||
rxDATA_F_mag[i] = (int16_t)((rxDATA_F_mag[i]*scale)>>15);
|
||||
}
|
||||
if ((rxv->rate>>1) == 3)
|
||||
@@ -301,6 +301,8 @@ int data_detection(RX_VECTOR_t *rxv,uint8_t *data_ind,uint32_t* rx_data,int fram
|
||||
rotate_cpx_vector_norep(rxDATA_F_comp2,&cfo_Q15,rxDATA_F_comp3,48,log2_maxh>>1);
|
||||
|
||||
#ifdef DEBUG_DATA
|
||||
if (s==0)
|
||||
write_output("rxDATA_F_mag.m","rxDAT_mag",rxDATA_F_mag,48,1,0);
|
||||
sprintf(fname,"rxDATA_F%d.m",s);
|
||||
sprintf(vname,"rxDAT_F_%d",s);
|
||||
write_output(fname,vname, rxDATA_F,128,2,1);
|
||||
@@ -376,14 +378,14 @@ int data_detection(RX_VECTOR_t *rxv,uint8_t *data_ind,uint32_t* rx_data,int fram
|
||||
pos = interleaver_16qam[k];
|
||||
// printf("k %d, pos %d\n",k,pos);
|
||||
if ((pos&1)==1) {
|
||||
tmp = ((int16_t*)rxDATA_F_comp3)[pos>>1]>>4;
|
||||
//printf("pos (msb) %d : %d\n",pos>>1,tmp);
|
||||
tmp = ((int16_t*)rxDATA_F_comp2)[pos>>1]>>4;
|
||||
// printf("pos (msb) %d : %d\n",pos>>1,tmp);
|
||||
}
|
||||
else {
|
||||
tmp = ((int16_t*)rxDATA_F_comp3)[pos>>1];
|
||||
tmp = ((int16_t*)rxDATA_F_comp2)[pos>>1];
|
||||
tmp = (tmp<0)? tmp : -tmp;
|
||||
tmp = (tmp + rxDATA_F_mag[pos>>2])>>4;
|
||||
//printf("pos (lsb) %d : rxDATA_F_mag[%d] %d : %d (%d)\n",pos>>1,pos>>2,rxDATA_F_mag[pos>>2],tmp,((int16_t*)rxDATA_F_comp2)[pos>>1]);
|
||||
// printf("pos (lsb) %d : rxDATA_F_mag[%d] %d : %d (%d)\n",pos>>1,pos>>2,rxDATA_F_mag[pos>>2],tmp,((int16_t*)rxDATA_F_comp2)[pos>>1]);
|
||||
}
|
||||
|
||||
if (tmp<-8)
|
||||
@@ -401,10 +403,10 @@ int data_detection(RX_VECTOR_t *rxv,uint8_t *data_ind,uint32_t* rx_data,int fram
|
||||
rxDATA_llr[k] = (int8_t)tmp;
|
||||
*/
|
||||
}
|
||||
if (rxv->rate==3) { // rate 3/4, so add zeros for punctured bits
|
||||
if (rxv->rate==5) { // rate 3/4, so add zeros for punctured bits
|
||||
llr_ptr = rxDATA_llr2;
|
||||
memset(rxDATA_llr2,0,144);
|
||||
for (k=0,k2=0;k<96;k++,k2++) {
|
||||
memset(rxDATA_llr2,0,288);
|
||||
for (k=0,k2=0;k<192;k++,k2++) {
|
||||
rxDATA_llr2[k2] = rxDATA_llr[k];
|
||||
if ((k&3) == 2)
|
||||
k2+=2;
|
||||
|
||||
@@ -268,7 +268,7 @@ CHANNEL_STATUS_t initial_sync(RX_VECTOR_t **rx_vector,
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if ((dB_fixed(mean_energy) > 15) && (peak_energy>(50*mean_energy))) {
|
||||
if ((dB_fixed(mean_energy) > 10) && (peak_energy>(50*mean_energy))) {
|
||||
#ifdef DEBUG_SYNC
|
||||
write_output("STSLTScorr.m","STSLTScorrT", corrT,512,2,1);
|
||||
#endif
|
||||
|
||||
@@ -403,8 +403,11 @@ int phy_tx_start_bot(TX_VECTOR_t *tx_vector,int16_t *output_ptr,uint32_t tx_offs
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
#ifdef DEBUG_TX
|
||||
if (s<12) {
|
||||
for (i=0;i<64;i++)
|
||||
|
||||
@@ -3,7 +3,7 @@ CC = gcc
|
||||
|
||||
SSE3PROC = $(shell echo `grep ssse3 /proc/cpuinfo`)
|
||||
SSE4PROC = $(shell echo `grep sse4 /proc/cpuinfo`)
|
||||
CPUFLAGS = -mmmx -msse -msse2 -m32 -mssse3 #-msse4
|
||||
CPUFLAGS = -mmmx -msse -msse2 -m32 -mssse3 -msse4.1
|
||||
#CPUFLAGS += $(shell if [ -z $(SSE3PROC) ]; then echo "" ; else echo "-mssse3"; fi)
|
||||
#CPUFLAGS += $(shell if [ -z $(SSE4PROC) ]; then echo "" ; else echo "-msse4"; fi)
|
||||
|
||||
|
||||
@@ -55,6 +55,15 @@ int main(int argc, char **argv) {
|
||||
int off,off2;
|
||||
double txg,txg_dB;
|
||||
int log2_maxh;
|
||||
double snr_array[100];
|
||||
int errors_array[100];
|
||||
int trials_array[100];
|
||||
int misdetected_errors_array[100];
|
||||
int signal_errors_array[100];
|
||||
int missed_packets_array[100];
|
||||
int cnt=0;
|
||||
char fname[100],vname[100];
|
||||
int stop=0;
|
||||
|
||||
data_ind = (uint8_t*)malloc(4095+2+1);
|
||||
data_ind_rx = (uint8_t*)malloc(4095+2+1);
|
||||
@@ -230,7 +239,7 @@ int main(int argc, char **argv) {
|
||||
}
|
||||
|
||||
|
||||
phy_tx_start(&tx_vector,txdata,0,data_ind);
|
||||
phy_tx_start(&tx_vector,txdata,0,FRAME_LENGTH_SAMPLES_MAX,data_ind);
|
||||
|
||||
tx_lev = signal_energy((int32_t*)txdata,320);
|
||||
tx_lev_dB = (unsigned int) dB_fixed(tx_lev);
|
||||
@@ -246,11 +255,12 @@ int main(int argc, char **argv) {
|
||||
|
||||
for (SNR=snr0;SNR<snr1;SNR+=.2) {
|
||||
|
||||
printf("n_frames %d SNR %f\n",n_frames,SNR);
|
||||
printf("n_frames %d SNR %f sdu_length %d rate %d\n",n_frames,SNR,tx_vector.sdu_length,tx_vector.rate);
|
||||
errors=0;
|
||||
misdetected_errors=0;
|
||||
signal_errors=0;
|
||||
missed_packets=0;
|
||||
stop=0;
|
||||
for (trial=0; trial<n_frames; trial++) {
|
||||
// printf("Trial %d (errors %d), sdu_length_samples %d\n",trial,errors,sdu_length_samples);
|
||||
sigma2_dB = 25; //10*log10((double)tx_lev) - SNR;
|
||||
@@ -311,13 +321,19 @@ int main(int argc, char **argv) {
|
||||
else
|
||||
off2=off;
|
||||
if ((initial_sync(&rxv,&rx_offset,&log2_maxh,(uint32_t*)rxdata[0],FRAME_LENGTH_SAMPLES_MAX,off2,1) == BUSY)) {
|
||||
// printf("Channel is busy, rxv %p, offset %d\n",(void*)rxv,rx_offset);
|
||||
if (n_frames==1)
|
||||
printf("Channel is busy, rxv %p, offset %d\n",(void*)rxv,rx_offset);
|
||||
no_detection=0;
|
||||
if (rxv) {
|
||||
// printf("Rate %d, SDU_LENGTH %d\n",rxv->rate,rxv->sdu_length);
|
||||
if (n_frames==1)
|
||||
printf("Rate %d, SDU_LENGTH %d\n",rxv->rate,rxv->sdu_length);
|
||||
if ( (rxv->rate != tx_vector.rate)||(rxv->sdu_length != tx_vector.sdu_length)) {
|
||||
signal_errors++;
|
||||
printf("SIGNAL error: rx_offset %d, tx_offset %d (off2 %d)\n",rx_offset,tx_offset,off2);
|
||||
if ((signal_errors > (n_frames/10)) && (trial>=100)) {
|
||||
stop=1;
|
||||
}
|
||||
if (n_frames == 1)
|
||||
printf("SIGNAL error: rx_offset %d, tx_offset %d (off2 %d)\n",rx_offset,tx_offset,off2);
|
||||
break;
|
||||
}
|
||||
else {
|
||||
@@ -325,20 +341,32 @@ int main(int argc, char **argv) {
|
||||
if (data_detection(rxv,data_ind_rx,(uint32_t*)rxdata[0],FRAME_LENGTH_SAMPLES_MAX,rx_offset,log2_maxh,NULL)) {
|
||||
for (i=0;i<rxv->sdu_length+6;i++) {
|
||||
if (data_ind[i]!=data_ind_rx[i]) {
|
||||
printf("error position %d : %x,%x\n",i,data_ind[i],data_ind_rx[i]);
|
||||
//printf("error position %d : %x,%x\n",i,data_ind[i],data_ind_rx[i]);
|
||||
misdetected_errors++;
|
||||
errors++;
|
||||
}
|
||||
}
|
||||
if ((errors > (n_frames/10)) && (trial>100)) {
|
||||
stop=1;
|
||||
break;
|
||||
}
|
||||
} // initial_synch returns IDLE
|
||||
else {
|
||||
/* printf("Running data_detection fails\n");
|
||||
for (i=0;i<rxv->sdu_length+6;i++) {
|
||||
if (data_ind[i]!=data_ind_rx[i]) {
|
||||
printf("error position %d : %x,%x\n",i,data_ind[i],data_ind_rx[i]);
|
||||
errors++;
|
||||
if (n_frames == 1) {
|
||||
printf("Running data_detection fails\n");
|
||||
|
||||
for (i=0;i<rxv->sdu_length+6;i++) {
|
||||
if (data_ind[i]!=data_ind_rx[i]) {
|
||||
printf("error position %d : %x,%x\n",i,data_ind[i],data_ind_rx[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
if ((errors > (n_frames/10)) && (trial>=100)) {
|
||||
stop=1;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -350,15 +378,43 @@ int main(int argc, char **argv) {
|
||||
}
|
||||
if (no_detection==1)
|
||||
missed_packets++;
|
||||
if (stop==1)
|
||||
break;
|
||||
}
|
||||
|
||||
printf("\nSNR %f dB: errors %d/%d, misdetected errors %d/%d,signal_errors %d/%d, missed_packets %d/%d\n",SNR,errors,n_frames-signal_errors,misdetected_errors,n_frames-signal_errors,signal_errors,n_frames,missed_packets,n_frames);
|
||||
printf("\nSNR %f dB: errors %d/%d, misdetected errors %d/%d,signal_errors %d/%d, missed_packets %d/%d\n",SNR,errors,trial-signal_errors,misdetected_errors,trial-signal_errors,signal_errors,trial,missed_packets,trial);
|
||||
snr_array[cnt] = SNR;
|
||||
errors_array[cnt] = errors;
|
||||
trials_array[cnt] = trial;
|
||||
misdetected_errors_array[cnt] = misdetected_errors;
|
||||
signal_errors_array[cnt] = signal_errors;
|
||||
missed_packets_array[cnt] = missed_packets;
|
||||
cnt++;
|
||||
if (cnt>99) {
|
||||
printf("too many SNR points, exiting ...\n");
|
||||
break;
|
||||
}
|
||||
if (errors == 0)
|
||||
break;
|
||||
#ifdef EXECTIME
|
||||
print_is_stats();
|
||||
print_dd_stats();
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
sprintf(fname,"SNR_%d_%d.m",tx_vector.rate,tx_vector.sdu_length);
|
||||
sprintf(vname,"SNR_%d_%d_v",tx_vector.rate,tx_vector.sdu_length);
|
||||
write_output(fname,vname,snr_array,cnt,1,7);
|
||||
sprintf(fname,"errors_%d_%d.m",tx_vector.rate,tx_vector.sdu_length);
|
||||
sprintf(vname,"errors_%d_%d_v",tx_vector.rate,tx_vector.sdu_length);
|
||||
write_output(fname,vname,errors_array,cnt,1,2);
|
||||
sprintf(fname,"trials_%d_%d.m",tx_vector.rate,tx_vector.sdu_length);
|
||||
sprintf(vname,"trials_%d_%d_v",tx_vector.rate,tx_vector.sdu_length);
|
||||
write_output(fname,vname,trials_array,cnt,1,2);
|
||||
sprintf(fname,"signal_errors_%d_%d.m",tx_vector.rate,tx_vector.sdu_length);
|
||||
sprintf(vname,"signal_errors_%d_%d_v",tx_vector.rate,tx_vector.sdu_length);
|
||||
write_output(fname,vname,signal_errors_array,cnt,1,2);
|
||||
free(data_ind);
|
||||
free(data_ind_rx);
|
||||
// free_channel_desc_scm(ch);
|
||||
|
||||
Reference in New Issue
Block a user