Commit e8ef1cdb authored by lfarizav's avatar lfarizav

Optimizing channel functions

parent d4a81046
......@@ -118,6 +118,42 @@ void adc_SSE_float(float *r_re[2],
//printf("Adc outputs %d %e %d \n",i,((short *)output[0])[((i+output_offset)<<1)], ((i+output_offset)<<1) );
}
}
void adc_SSE_float_test(float *r_re[2],
float *r_im[2],
unsigned int input_offset,
unsigned int output_offset,
unsigned int **output,
unsigned int nb_rx_antennas,
unsigned int length,
unsigned char B)
{
int i;
int aa;
__m128 r_re128,r_im128,gain128;
__m128i r_re128i, r_im128i,output128;
float gain = (float)(1<<(B-1));
gain128=_mm_set1_ps(gain);
for (i=0; i<(length>>2); i++) {
for (aa=0; aa<nb_rx_antennas; aa++) {
r_re128=_mm_loadu_ps(&r_re[aa][4*i+input_offset]);
r_im128=_mm_loadu_ps(&r_im[aa][4*i+input_offset]);
r_re128=_mm_mul_ps(r_re128,gain128);
r_im128=_mm_mul_ps(r_im128,gain128);
r_re128i=_mm_cvtps_epi32(r_re128);
r_im128i=_mm_cvtps_epi32(r_im128);
output128=_mm_packs_epi32(r_im128i,r_re128i);
_mm_store_si128(&output[aa][4*i+input_offset],output128);
}
}
for (i=0; i<(length>>2); i++) {
for (aa=0; aa<nb_rx_antennas; aa++) {
}
}
/*for (i=0; i<length; i++) {
printf("output[%d] %d\n",i,((short *)output[0])[((4*i+output_offset)<<1)]);
}*/
}
void adc_freq(double *r_re[2],
double *r_im[2],
unsigned int input_offset,
......
......@@ -419,8 +419,8 @@ clock_t start=clock();*/
rx128_re = _mm_loadu_ps(&r_re[a][4*i]);//r_re[a][i],r_re[a][i+1]
rx128_im = _mm_loadu_ps(&r_im[a][4*i]);//r_im[a][i],r_im[a][i+1]
rx128_gain_lin = _mm_set1_ps(rx_gain_lin);
gauss_0_128_sqrt_NOW = _mm_set_ps(ziggurat(0.0,1.0),ziggurat(0.0,1.0),ziggurat(0.0,1.0),ziggurat(0.0,1.0));
gauss_1_128_sqrt_NOW = _mm_set_ps(ziggurat(0.0,1.0),ziggurat(0.0,1.0),ziggurat(0.0,1.0),ziggurat(0.0,1.0));
gauss_0_128_sqrt_NOW = _mm_set1_ps(ziggurat(0.0,1.0));
gauss_1_128_sqrt_NOW = _mm_set1_ps(ziggurat(0.0,1.0));
gauss_0_128_sqrt_NOW = _mm_mul_ps(gauss_0_128_sqrt_NOW,_mm_set1_ps(sqrt_NOW));
gauss_1_128_sqrt_NOW = _mm_mul_ps(gauss_1_128_sqrt_NOW,_mm_set1_ps(sqrt_NOW));
// Amplify by receiver gain and apply 3rd order non-linearity
......
This diff is collapsed.
......@@ -1266,8 +1266,8 @@ int random_channel(channel_desc_t *desc, uint8_t abstraction_flag) {
for (aarx=0;aarx<desc->nb_rx;aarx++) {
for (aatx=0;aatx<desc->nb_tx;aatx++) {
anew[aarx+(aatx*desc->nb_rx)].x = sqrt(desc->ricean_factor*desc->amps[i]/2) * gaussdouble(0.0,1.0);
anew[aarx+(aatx*desc->nb_rx)].y = sqrt(desc->ricean_factor*desc->amps[i]/2) * gaussdouble(0.0,1.0);
anew[aarx+(aatx*desc->nb_rx)].x = sqrt(desc->ricean_factor*desc->amps[i]/2) * ziggurat(0.0,1.0);
anew[aarx+(aatx*desc->nb_rx)].y = sqrt(desc->ricean_factor*desc->amps[i]/2) * ziggurat(0.0,1.0);
if ((i==0) && (desc->ricean_factor != 1.0)) {
if (desc->random_aoa==1) {
......
......@@ -225,8 +225,6 @@ void table_nor(unsigned long seed)
}
double ziggurat(double mean, double variance)
{
//double nor=NOR;
//printf("NOR %e\n",nor);
return NOR;
}
/*
......@@ -237,7 +235,7 @@ double ziggurat(double mean, double variance)
/*!\brief Gaussian random number generator based on modified Box-Muller transformation.Returns a double-precision floating-point number. */
//#define random_SSE
#ifdef random_SSE
double gaussdouble(double mean, double variance)//It is necessary to improve the function.
double gaussdouble(double mean, double variance)
{
static int iset=0;
static double gset;
......
......@@ -544,14 +544,13 @@ void do_DL_sig_freq(channel_desc_t *eNB2UE[NUMBER_OF_eNB_MAX][NUMBER_OF_UE_MAX][
frame_parms->ofdm_symbol_size*frame_parms->symbols_per_tti,hold_channel,eNB_id,UE_id,CC_id,subframe&0x1);
#endif
stop_meas(&eNB2UE[eNB_id][UE_id][CC_id]->DL_multipath_channel_freq);
//print_meas (&eNB2UE[eNB_id][UE_id][CC_id]->DL_multipath_channel_freq,"[DL][multipath_channel_freq]", &eNB2UE[eNB_id][UE_id][CC_id]->DL_multipath_channel_freq, &eNB2UE[eNB_id][UE_id][CC_id]->DL_multipath_channel_freq);
/*clock_t stop=clock();
printf("multipath_channel DL time is %f s, AVERAGE time is %f s, count %d, sum %e\n",(float) (stop-start)/CLOCKS_PER_SEC,(float) (sum+stop-start)/(count*CLOCKS_PER_SEC),count,sum+stop-start);
sum=(sum+stop-start);*/
//for (int x=0;x<frame_parms->N_RB_DL*12;x++){
// fprintf(file1,"%d\t%e\t%e\n",x,eNB2UE[eNB_id][UE_id][CC_id]->chF[0][x].x,eNB2UE[eNB_id][UE_id][CC_id]->chF[0][x].y);
//}
/*for (int x=0;x<frame_parms->N_RB_DL*12;x++){
fprintf(file1,"%d\t%e\t%e\n",x,eNB2UE[eNB_id][UE_id][CC_id]->chF[0][x].x,eNB2UE[eNB_id][UE_id][CC_id]->chF[0][x].y);
}*/
#ifdef DEBUG_SIM
rx_pwr = signal_energy_fp2(eNB2UE[eNB_id][UE_id][CC_id]->chF[0],
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment