亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chest_rcv.c

?? 軟件無線電的平臺
?? C
?? 第 1 頁 / 共 2 頁
字號:
  swr_fft_complex( f_inv, logb( f_len ), SWR_FFT );  for ( i=0; i<f_len; i++ ){    f_inv[i] = pow(2,24)/f_inv[i];  }  swr_fft_complex( f_inv, logb( f_len ), SWR_IFFT );  f_max = 1;  for ( i=0; i<f_len; i++ ){    f_abs += cabs( f_inv[i] );    f_max = max( cabs( f_inv[i] ), (double)f_max );  }  for ( i=0; i<f_len; i++ ){    f_inv[i] /= f_max;    // filter_inv is just for displaying the filter    channel_inv[i].real = creal( f_inv[i] ) * 32767;    channel_inv[i].imag = cimag( f_inv[i] ) * 32767;    if ( i < 5 ){      PR_DBG_CL( 5, "%i: %i/%i\n", i, 		 channel_inv[i].real, channel_inv[i].imag );    }  }  f_abs /= f_max;  /******************Noise Variance Calculation Begins***************    noise1 = receivedvalue1 - h11*s1 - h12*s2 - h13s3 - h14s4 etc..         var(noise) = sum( noise ^ 2) - mean( noise )^2      Flat channel is assumed! Hence every 'L'the element starting at 0     of filter is the channel coefficient.    We are to calculate the variance of a complex noise variable.    We assume independent and equal components, hence we calculate     only the variance of the real component.  ******************************************************************/  //Mid points to the received midamble  mid            = in + data_len[0];  channel_offset = training_seq[ type ].L; //Channel Length  length         = 2 * training_seq[ type ].Nt;  for ( i = 0; i < training_seq[ type ].Nt; i++) {    //real_term = channel[0].real * seq[ 2*i ]  - channel[0].imag * seq[ 2*i + 1 ];    real_term = 0;    imag_term = 0;    for ( j = 0; j < num_of_antennas; j++) {      //Careful with cyclic shifts      seq_offset = training_seq[ type ].Nt - j * channel_offset;      real_term += channel[ j * channel_offset ].real * 	seq[ ( 2 * ( i + seq_offset) ) % length] -	channel[ j * channel_offset ].imag *	seq[ ( 2 * ( i + seq_offset) + 1 ) % length];            imag_term += channel[ j * channel_offset ].imag * 	seq[ ( 2 * ( i + seq_offset) ) % length] +	channel[ j * channel_offset ].real *	seq[ ( 2 * ( i + seq_offset) + 1 ) % length];    }        noise_term_real     += mid[ i ].real - real_term;    noise_term_imag     += mid[ i ].imag - imag_term;    var_noise_term_real += ( mid[ i ].real - real_term ) *       (mid[ i ].real - real_term);    var_noise_term_imag += ( mid[ i ].imag - imag_term ) *       (mid[ i ].imag - imag_term);        PR_DBG( 4, "in module var_noise:(%g,%g) mid.real:%i, real:%i\n", 	    var_noise_term_real, var_noise_term_imag,	    mid[i].real, real_term );  }  noise_term_real = noise_term_real / training_seq[ type ].Nt;  noise_term_real = noise_term_real * noise_term_real;  noise_term_imag = noise_term_imag / training_seq[ type ].Nt;  noise_term_imag = noise_term_imag * noise_term_imag;    noise_var_real = var_noise_term_real / training_seq[type].Nt - noise_term_real;  noise_var_imag = var_noise_term_imag / training_seq[type].Nt - noise_term_imag;  noise_var =  noise_var_real + noise_var_imag;   PR_DBG( 2, "in module noise_Var_real = %i, noise_var_imag = %i \n", 	  noise_var_real, noise_var_imag );  for ( i=0; i<num_of_antennas; i++ ){    j = training_seq[ type ].L * i;    PR_DBG( 2, "h[%i] = %i + %ii\n", i, channel[ j ].real, channel[ j ].imag );  }  /******************Noise Variance Calculation Ends******************/    sig_power = 0.;  for( i = 0; i < size_in(0);i++){    sig_power += in[i].real * in[i].real + in[i].imag * in[i].imag;  }  sig_power /= size_in(0);  //sig_power -= noise_var;   // Search for the peak in the midamble  peak_pos = 0;  peak_amp = 0;  mid_amp = 0;  for ( i=0; i<training_seq[ type ].L; i++ ){    int pos = i + private->index * training_seq[ type ].L;    mid_amp += hypot( channel[pos].real, channel[pos].imag );    if ( hypot( channel[pos].real, channel[pos].imag ) > peak_amp ){      peak_pos = pos;      peak_amp = hypot( channel[pos].real, channel[pos].imag );    }  }  mid_amp /= training_seq[ type ].L;  mid_amp *= mid_amp;  // Copy the data as-is, but perhaps shifted  PR_DBG( 4, "f Peak_position : %i\n", peak_pos );  if ( private->align ){    PR_DBG( 2, "Found maximum filter at %i\n", peak_pos );    if ( !private->calc_taps ){      in += ( peak_pos % training_seq[ type ].L ) - circ_ext;    }    peak_pos -= circ_ext;  }  /**   * If calc_taps is > 0, then we calculate a matched filter with length   * calc_taps   */  if ( private->calc_taps > 0 ){    complex double *f = f_inv + s_row - 1;    double m_amp = 0, nv = 0;    int train_len = training_seq[ type ].Nt;    SYMBOL_COMPLEX *matched_mid = private->mid,      *mid_seq = (SYMBOL_COMPLEX*)seq;    // First we search for the peak, so that we do the convolution with the    // right data    peak_pos = 0;    peak_amp = 0;    for ( i=0; i<MAX_NO_OF_ANT*MAX_NO_OF_TAPS; i++ ){      if ( cabs( f_inv[ i ] ) > peak_amp ){	peak_pos = i;	peak_amp = cabs( f_inv[ i ] );      }    }    peak_pos = MAX_NO_OF_ANT*MAX_NO_OF_TAPS - peak_pos - 1;    mid = in + data_len[0] + circ_ext + peak_pos;    for ( i=0; i<MAX_NO_OF_ANT*MAX_NO_OF_TAPS; i++ ){      if ( cabs( SC_TO_CD( mid[i] ) ) > m_amp ){	m_amp = cabs( SC_TO_CD( mid[i] ) );      }    }    f_abs *= m_amp / 16000.;        in -= circ_ext - 1;    if ( private->align ){      // Make sure we won't get out of the filter      int diff = max( 0, peak_pos - private->calc_taps / 2 );      in += diff;      f -= diff;    }    PR_DBG( 4, "f_inv Peak_position : %i\n", peak_pos );    // Do a matched filtering    // For the first half of the data    do_mafi( in, out, f, f_abs, private->calc_taps, data_len[0] );    // For the second half of the data    do_mafi( in + data_len[0] + train_len + circ_ext,	     out + data_len[0], 	     f, f_abs, private->calc_taps, data_len[1] );    // Calculate the matched filter of the training sequence    do_mafi( in + data_len[0] + circ_ext,	     matched_mid,	     f, f_abs, private->calc_taps, train_len );    // Do something with matched_mid    //    matched_mid[0:train_len-1 ] <->    //mid_seq[0:train_len-1];    // to check if the received midamble corresponds to the    // tranmsitted one    for ( i = 0; i < train_len; i++) {      PR_DBG( 4, "Tx_mid, Rx_mid: %i %i\n", mid_seq[i].imag,	      matched_mid[i].imag );    }        // compute the mid_amp    for ( i = 0; i < train_len; i++){      tmp +=  (int)mid_seq[i].real * (int)matched_mid[i].real +	(int)mid_seq[i].imag * (int)matched_mid[i].imag;    }    if ( tmp > 0 ){      mid_amp = (int)(tmp/train_len);    } else {      mid_amp = 1;    }    // calculate the noise variance    for ( i = 0; i < train_len; i++){      int re, im;      re = matched_mid[i].real - mid_amp * mid_seq[i].real;      im = matched_mid[i].imag - mid_amp * mid_seq[i].imag;      nv += re * re + im * im;    }    noise_var = nv / train_len;      } else {    int train_len = training_seq[ type ].Nt;    //Copy the first data stream to out    memcpy( out, in, data_len[0] * sizeof( SYMBOL_COMPLEX ) );    //Copy the second data stream to out    PR_DBG( 4, "Offset is: %i\n", data_len[0] + train_len + circ_ext );    memcpy( out + data_len[0],	    in + data_len[0] + train_len + circ_ext,	    data_len[1] * sizeof( SYMBOL_COMPLEX ) );  }  swr_sdb_get_stats_struct( context->id, (void**)&stats );  stats->noise_var      = noise_var;  stats->noise_var_real = noise_var_real;  stats->noise_var_imag = noise_var_imag;  stats->ch_length      = channel_offset;  if ( ( mid_amp > 0 ) && ( noise_var > 0 ) ){    stats->snr          = 10 * (log10(mid_amp)*2 - log10(noise_var) );   } else {    stats->snr          = -20;  }  stats->peak_pos       = peak_pos;  stats->peak_amp       = peak_amp;  stats->mid_amp        = mid_amp;  swr_sdb_free_stats_struct( context->id, (void**)&stats );  return(0);}/* int rcv_custom( swr_sdb_t *context *//* * This is the `destructor'. */int rcv_finalize( swr_sdb_t *context ) {  if ( sizeof( private_t ) > 0 )    swr_free( private );  MOD_DEC_USE_COUNT;  return 0;}/* * This function is called upon "insmod" and is used to register the * different parts of the module to the SPM. */swr_spc_id_t rcv_id;int rcv_module_init(void) {  swr_spc_desc_t *desc;  /**   * Get a description-part from SPM   * Give the following parameters:   * Input-ports, output-ports, config-params, stat-params   */  desc = swr_spc_get_new_desc( 1, 1, 6, 11 );  if ( !desc ) {    PR_DBG( 0, "Can't initialise the module. This is BAD!\n" );    return -1;  }  /**   * Define the different parts of config and stats. You have to define   * them in the same order as they appear in the structures. The names   * can be freely chosen.   *   * UM_CONFIG_{INT,DOUBLE,STRING128,POINTER}( "name" );   * UM_STATS_{INT,DOUBLE,STRING128,POINTER,BLOCK}( "name" );   */  UM_CONFIG_INT( "type" );  UM_CONFIG_INT( "num_of_antennas" );  UM_CONFIG_INT( "calc_taps" );  UM_CONFIG_INT( "align" );  UM_CONFIG_INT( "index" );  UM_CONFIG_INT( "circ_ext" );  UM_STATS_BLOCK( "channel" );  UM_STATS_BLOCK( "channel_inv" );  UM_STATS_BLOCK( "midamble" );  UM_STATS_DOUBLE( "snr" );  UM_STATS_INT( "noise_var" );  UM_STATS_INT( "noise_var_real" );  UM_STATS_INT( "noise_var_imag" );  UM_STATS_INT( "ch_length" );  UM_STATS_INT( "peak_pos" );  UM_STATS_INT( "peak_amp" );  UM_STATS_INT( "mid_amp" );    /**   * The in- and outputs have also to be defined in the right order. First   * port first. The additional flag is not used yet, but it will...   *   * UM_INPUT( SIG_{U8,SYMBOL_{S16,COMPLEX,MMX},SAMPLE_S12,S32}, 0 );   * UM_OUTPUT( SIG_{U8,SYMBOL_{S16,COMPLEX,MMX},SAMPLE_S12,S32}, 0 );   */  UM_INPUT( SIG_SYMBOL_COMPLEX, 0 );  UM_OUTPUT( SIG_SYMBOL_COMPLEX, 0 );  // Initialise the callback-functions. Delete the ones you don't use  desc->fn_init              = rcv_init;  desc->fn_reconfigure       = rcv_reconfig;  desc->fn_process_data      = rcv_pdata;  desc->fn_configure_inputs  = rcv_configure_inputs;  desc->fn_configure_outputs = rcv_configure_outputs;  desc->fn_finalize          = rcv_finalize;  // And register the module in the SPM. Change the name!  rcv_id = swr_cdb_register_spc( &desc, "chest_rcv" );  if ( rcv_id == SWR_SPM_INVALID_ID ) {    swr_spc_free_desc( desc );    PR_DBG( 0, "Couldn't register the module!\n" );    return 1;  }  PR_DBG( 4, "Ready\n" );  return 0;}/* * This is called upon rmmod */void rcv_module_exit( void ) {  PR_DBG( 4, "Freeing id: %i\n", rcv_id );  if ( swr_cdb_unregister_spc( rcv_id ) < 0 ) {    PR_DBG( 0, "Still in use somewhere\n" );  }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲男人天堂av网| 99久久99久久精品免费看蜜桃| 国产在线播放一区三区四| 91蝌蚪国产九色| 久久这里只精品最新地址| 一区二区三区精品视频在线| 国产69精品久久99不卡| 欧美电影一区二区| 亚洲免费看黄网站| 国产成人在线视频网址| 日韩一级免费一区| 久久国内精品自在自线400部| 国产精品一级二级三级| 欧美一区二区三区婷婷月色| 亚洲欧美日韩国产另类专区| 高清在线观看日韩| 精品国产成人系列| 亚洲福利电影网| 欧美亚洲愉拍一区二区| 亚洲色图清纯唯美| 国产成人在线影院| 日本一区二区免费在线观看视频 | 日本成人在线一区| 欧美日韩一级片在线观看| 国产精品久久久久久亚洲伦| 国产激情一区二区三区四区| 日韩欧美国产综合| 奇米777欧美一区二区| 欧美日韩国产成人在线91| 亚洲一区二区三区自拍| 91蜜桃免费观看视频| 国产精品国产精品国产专区不蜜 | 伊人色综合久久天天| 成人av午夜影院| 国产精品成人一区二区三区夜夜夜| 国产乱理伦片在线观看夜一区| 欧美tickling网站挠脚心| 极品瑜伽女神91| 精品国产免费一区二区三区四区| 老司机午夜精品99久久| 精品国产精品网麻豆系列| 国产在线精品国自产拍免费| 2欧美一区二区三区在线观看视频| 美女一区二区久久| 国产人妖乱国产精品人妖| 成人白浆超碰人人人人| 亚洲另类色综合网站| 91久久香蕉国产日韩欧美9色| 亚洲一区av在线| 日韩一区二区免费电影| 国产一区三区三区| 国产精品久久久久久久岛一牛影视| 91视频免费播放| 亚洲国产日韩综合久久精品| 日韩欧美激情在线| 国产69精品久久久久777| 夜夜亚洲天天久久| 日韩精品一区二区三区在线 | 福利91精品一区二区三区| 日韩一区有码在线| 337p亚洲精品色噜噜狠狠| 黑人巨大精品欧美黑白配亚洲| 国产精品剧情在线亚洲| 欧美三级电影精品| 国产成人午夜视频| 亚洲主播在线播放| 久久精品亚洲精品国产欧美| 97国产一区二区| 久久99国内精品| 亚洲视频狠狠干| 精品少妇一区二区三区在线播放 | 亚洲国产精品一区二区久久恐怖片| 91精品国产综合久久久蜜臀粉嫩 | 色久优优欧美色久优优| 日韩av一二三| 亚洲丝袜精品丝袜在线| 日韩三级在线观看| 欧洲人成人精品| 成人久久久精品乱码一区二区三区| 亚洲成人tv网| 国产精品久久久一本精品| 欧美精品久久天天躁| 成人h动漫精品一区二| 美腿丝袜亚洲综合| 一区二区在线看| 国产精品人妖ts系列视频| 欧美日韩国产成人在线免费| www.久久久久久久久| 国产精品系列在线观看| 日韩国产欧美在线播放| 亚洲视频香蕉人妖| 国产精品卡一卡二卡三| 久久青草国产手机看片福利盒子 | 成人午夜免费av| 九色|91porny| 青青青伊人色综合久久| 一区二区三区欧美久久| 亚洲天堂精品视频| 国产午夜亚洲精品羞羞网站| 欧美一二三区在线观看| 欧美日韩不卡在线| 在线视频一区二区免费| av在线播放一区二区三区| 国产aⅴ综合色| 国产精品自拍毛片| 狠狠狠色丁香婷婷综合久久五月| 日本一道高清亚洲日美韩| 亚洲电影你懂得| 亚洲丶国产丶欧美一区二区三区| 成人欧美一区二区三区黑人麻豆| 国产精品无遮挡| 国产欧美日韩在线| 国产精品丝袜一区| 国产精品免费久久| 亚洲欧洲国产日本综合| 亚洲欧美一区二区在线观看| 中文字幕在线一区免费| 最新中文字幕一区二区三区 | 欧美性一级生活| 欧美日韩一级大片网址| 欧美一区二区高清| 日韩欧美一区二区久久婷婷| 欧美mv日韩mv| 国产精品久久久一本精品 | 男女男精品视频网| 热久久国产精品| 精品影视av免费| 国产精品自拍一区| 99精品欧美一区二区三区小说| 91在线观看污| 色婷婷精品久久二区二区蜜臀av| 欧美性猛片aaaaaaa做受| 91精品国产全国免费观看| 日韩欧美黄色影院| 国产精品久久二区二区| 洋洋av久久久久久久一区| 五月婷婷久久综合| 精品一区二区三区日韩| 成人蜜臀av电影| 欧美日韩激情一区二区三区| 精品毛片乱码1区2区3区| 中文字幕不卡一区| 午夜伦理一区二区| 国精产品一区一区三区mba桃花| www.欧美色图| 69精品人人人人| 中文字幕不卡的av| 亚瑟在线精品视频| 成人午夜视频福利| 91麻豆精品国产自产在线| 久久精品免视看| 亚洲国产精品久久久久婷婷884| 久久99精品国产.久久久久久| gogogo免费视频观看亚洲一| 欧美日韩精品一区视频| 国产精品午夜电影| 日本免费在线视频不卡一不卡二| 成人av网在线| 91精品麻豆日日躁夜夜躁| 国产情人综合久久777777| 亚洲大型综合色站| 不卡视频一二三四| 日韩精品中文字幕一区| 亚洲黄色小视频| 国产91高潮流白浆在线麻豆 | 国产一区二区电影| 欧美在线视频不卡| 国产精品对白交换视频| 免费久久99精品国产| 一本大道综合伊人精品热热| 精品成人一区二区| 日韩国产欧美视频| 欧美性色黄大片| 亚洲人妖av一区二区| 精品一区二区三区视频在线观看| 欧美三级日韩三级国产三级| 国产精品视频看| 国产毛片精品国产一区二区三区| 欧美日韩一区二区电影| 一区二区三区四区精品在线视频| 成人激情免费视频| 久久视频一区二区| 激情小说欧美图片| 日韩视频123| 日韩经典一区二区| 欧美日韩一二三区| 亚洲国产另类精品专区| 91国偷自产一区二区三区观看| 中文字幕av一区二区三区高| 国产成人在线电影| 亚洲精品在线观| 精品一区二区三区的国产在线播放| 日本高清不卡在线观看| 亚洲色图欧洲色图婷婷| 91亚洲永久精品| 亚洲女性喷水在线观看一区| 91年精品国产| 亚洲午夜在线视频| 欧美羞羞免费网站| 首页国产丝袜综合|