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

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

?? chest_rcv_mimo.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+ch_off].real = creal( f_inv[i] ) * 32767;	  channel_inv[i+ch_off].imag = cimag( f_inv[i] ) * 32767;	  if ( i < 5 ){	    PR_DBG_CL( 5, "%i: %i/%i\n", i, 		       channel_inv[i+ch_off].real, channel_inv[i+ch_off].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 = seq_ch_taps; //Channel Length  length         = 2 * seq_length;  for ( i = 0; i < seq_length; 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 = seq_length - 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 / seq_length;  noise_term_real = noise_term_real * noise_term_real;  noise_term_imag = noise_term_imag / seq_length;  noise_term_imag = noise_term_imag * noise_term_imag;    noise_var_real = var_noise_term_real / seq_length - noise_term_real;  noise_var_imag = var_noise_term_imag / seq_length - 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 = seq_ch_taps * 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<seq_ch_taps; i++ ){    int pos = i + private->index * seq_ch_taps;    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 /= seq_ch_taps;  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 % seq_ch_taps ) - 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 ){    for ( ch=0; ch<num_of_antennas; ch++ ){      if ( out[ch] ){	// f points to the end of the filter	complex double *f_inv = f_invs[ch];	complex double *f = f_inv + seq_ch_taps - 1;	double m_amp = 0, nv = 0;	int train_len = seq_length;	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<seq_ch_taps; i++ ){	  if ( cabs( f_inv[ i ] ) > peak_amp ){	    peak_pos = i;	    peak_amp = cabs( f_inv[ i ] );	  }	}	peak_pos = seq_ch_taps - peak_pos - 1;	mid = in + data_len[0] + circ_ext + peak_pos;	for ( i=0; i<seq_ch_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[ch], 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[ch] + 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 {    for ( ch=0; ch<MAX_CHANNELS; ch++ ){      if ( out[ch] ){	//Copy the first data stream to out	memcpy( out[ch], in, data_len[0] * sizeof( SYMBOL_COMPLEX ) );	//Copy the second data stream to out	PR_DBG( 4, "Offset is: %i\n", data_len[0] + seq_length + circ_ext );	memcpy( out[ch] + data_len[0],		in + data_len[0] + seq_length + 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;  stats->var11          = noise_var_real + noise_var_imag * I;  swr_sdb_free_stats_struct( context->id, (void**)&stats );  return(0);}/* int rcv_mimo_custom( swr_sdb_t *context *//* * This is the `destructor'. */int rcv_mimo_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_mimo_id;int rcv_mimo_module_init(void) {  swr_spc_desc_t *desc;  int out;  /**   * 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, MAX_CHANNELS, 5, 12 );  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( "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" );  UM_STATS_DOUBLE_COMPLEX( "var11" );    /**   * 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 );  for ( out = 0; out < MAX_CHANNELS; out++ ){    UM_OUTPUT( SIG_SYMBOL_COMPLEX, 0 );  }  // Initialise the callback-functions. Delete the ones you don't use  desc->fn_init              = rcv_mimo_init;  desc->fn_reconfigure       = rcv_mimo_reconfig;  desc->fn_process_data      = rcv_mimo_pdata;  desc->fn_configure_inputs  = rcv_mimo_configure_inputs;  desc->fn_configure_outputs = rcv_mimo_configure_outputs;  desc->fn_finalize          = rcv_mimo_finalize;  // And register the module in the SPM. Change the name!  rcv_mimo_id = swr_cdb_register_spc( &desc, "chest_rcv_mimo" );  if ( rcv_mimo_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_mimo_module_exit( void ) {  PR_DBG( 4, "Freeing id: %i\n", rcv_mimo_id );  if ( swr_cdb_unregister_spc( rcv_mimo_id ) < 0 ) {    PR_DBG( 0, "Still in use somewhere\n" );  }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
综合久久给合久久狠狠狠97色| 日韩精品一区二区在线观看| 日韩1区2区3区| 久久精品在线观看| 欧美日韩精品是欧美日韩精品| 国产成人综合在线播放| 午夜精品一区在线观看| 国产精品拍天天在线| 日韩亚洲欧美中文三级| 一道本成人在线| 国产成人在线视频网址| 爽好多水快深点欧美视频| 成人免费一区二区三区视频| 26uuu欧美| 欧美一区二区三区在线观看视频| 一本色道a无线码一区v| 国产伦精品一区二区三区视频青涩| 亚洲国产va精品久久久不卡综合| 国产精品国产a| 国产午夜亚洲精品理论片色戒| 在线成人小视频| 欧美中文字幕一区二区三区| 成人免费黄色大片| 国产自产高清不卡| 精品一区二区在线视频| 五月天久久比比资源色| 亚洲激情中文1区| **性色生活片久久毛片| 国产精品美女视频| 国产女人aaa级久久久级| 久久免费午夜影院| 欧美精品一区二区三区高清aⅴ| 欧美日韩美少妇| 欧美日韩精品福利| 在线播放国产精品二区一二区四区| 色婷婷av一区二区三区大白胸| 99热国产精品| av一区二区三区黑人| 成人免费高清在线| 成人国产一区二区三区精品| 国产成人在线视频免费播放| 国产真实乱子伦精品视频| 久久福利视频一区二区| 激情综合色综合久久综合| 美女一区二区视频| 激情综合色综合久久| 老司机午夜精品| 激情久久五月天| 国产乱色国产精品免费视频| 国产精品伊人色| 国产91对白在线观看九色| 国产**成人网毛片九色 | 欧美一区二区免费| 91精品国产色综合久久| 日韩一区二区三区视频| 精品久久久久久久久久久久久久久 | 国产精品免费人成网站| 久久久久9999亚洲精品| 欧美日韩国产精品成人| 欧美日韩国产影片| 欧美美女黄视频| 日韩午夜在线观看| 久久婷婷国产综合国色天香| 国产色产综合产在线视频| 国产精品素人一区二区| 国产精品电影一区二区三区| 一区二区三区产品免费精品久久75| 亚洲黄色录像片| 视频一区欧美精品| 免费人成网站在线观看欧美高清| 久久99精品久久久久婷婷| 久久国产日韩欧美精品| 国产福利一区在线| 国产99精品在线观看| 色综合色综合色综合| 欧美中文字幕一区二区三区| 欧美tickle裸体挠脚心vk| 久久久久97国产精华液好用吗 | 亚洲另类春色校园小说| 亚洲成av人片一区二区| 免费观看在线色综合| 成人sese在线| 欧美在线播放高清精品| 精品国产一区二区三区忘忧草| 国产三级一区二区三区| 性做久久久久久免费观看| 久久精品国产亚洲高清剧情介绍| jlzzjlzz欧美大全| 欧美三级韩国三级日本一级| 亚洲精品一区二区三区在线观看| 国产精品色噜噜| 日韩国产在线一| 国产成人久久精品77777最新版本| 欧美影片第一页| 2024国产精品| 亚洲妇女屁股眼交7| 韩日欧美一区二区三区| 欧美午夜在线一二页| 精品国产成人系列| 亚洲成人免费观看| 国产激情视频一区二区在线观看| 欧美日韩免费观看一区三区| 久久久久久久精| 日本在线不卡视频| 97久久人人超碰| 国产亚洲人成网站| 五月婷婷另类国产| 一本久久a久久精品亚洲| 欧美大片在线观看| 午夜精品123| 99久久免费精品| 国产欧美一区二区在线观看| 亚洲国产va精品久久久不卡综合| 99在线精品观看| 欧美精品一区二区精品网| 石原莉奈一区二区三区在线观看| 国产成人av电影| 久久亚洲影视婷婷| 午夜影院久久久| 日本韩国精品在线| 国产欧美一区二区精品秋霞影院| 麻豆成人av在线| 91成人国产精品| 亚洲丝袜自拍清纯另类| 狠狠久久亚洲欧美| 精品99一区二区| 日一区二区三区| 欧美精品久久99| 中文字幕在线观看一区| 粉嫩aⅴ一区二区三区四区五区| 国产自产视频一区二区三区| 精品奇米国产一区二区三区| 亚洲精品亚洲人成人网在线播放| 精品写真视频在线观看| 91福利视频网站| 国产精品毛片大码女人| 成人免费视频一区| 久久久国产一区二区三区四区小说 | 亚洲精品一二三区| 91视频一区二区| 亚洲六月丁香色婷婷综合久久| 不卡视频一二三| 亚洲欧美一区二区三区极速播放 | 日韩av电影天堂| 制服.丝袜.亚洲.中文.综合| 亚洲精品水蜜桃| 欧美性猛交xxxxxx富婆| 一区二区三区免费看视频| 在线日韩一区二区| 亚洲小少妇裸体bbw| 91麻豆国产香蕉久久精品| 亚洲欧洲99久久| 色一情一伦一子一伦一区| 亚洲精选一二三| 制服丝袜日韩国产| 国产精品91xxx| 国产欧美日韩视频在线观看| 色综合久久久久综合| 亚洲色图视频网| 欧美另类videos死尸| 日本人妖一区二区| 久久久久久久久免费| 国产宾馆实践打屁股91| 亚洲欧美一区二区三区孕妇| 成人激情av网| 亚洲国产欧美一区二区三区丁香婷| 一本色道久久综合亚洲91| 亚洲国产日日夜夜| 欧美电影免费观看高清完整版在线 | 欧美精品丝袜中出| 免费观看成人鲁鲁鲁鲁鲁视频| 国产网红主播福利一区二区| 懂色av一区二区三区蜜臀| 夜夜操天天操亚洲| 欧美专区日韩专区| 国产真实乱子伦精品视频| 亚洲嫩草精品久久| 欧美老人xxxx18| 99久久久无码国产精品| 亚洲一区二区三区四区五区黄 | 亚洲美女电影在线| 91精品国产色综合久久久蜜香臀| 精品在线免费观看| 亚洲女性喷水在线观看一区| 欧美精品三级日韩久久| 成人午夜视频在线观看| 一区二区三区蜜桃| 亚洲国产精品高清| 欧美在线观看一二区| 国产麻豆视频一区二区| 成人免费一区二区三区视频| 91麻豆精品国产91久久久更新时间| 国产成人欧美日韩在线电影| 亚洲视频一区二区在线观看| 日韩一区二区三| 91浏览器在线视频| 国产精品456露脸| 亚洲一级电影视频| 中文字幕一区不卡| 日韩一区二区在线观看视频|