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

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

?? channel_real_input.c

?? matlab實現wcdma的全過程
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* | Project:     WCDMA simulation environment | Module:     | Author:      Maarit Melvasalo | Date:        February 1999 | | History: |              March 18,  1999 Maarit Melvasalo  |                      Channel memory vector changed to mode were  |                      several different vectors can be memorized   |       |              May 3, 1999 Maarit Melvasalo                  |                      Channel model changed |              June 16, 1999 Maarit Melvasalo   |                      Documentation added and cleaning up the code | | Copyright disclaimer: |   This software was developed at the National Institute of Standards |   and Technology by employees of the Federal Government in the course |   of their official duties. Pursuant to title 17 Section 105 of the |   United States Code this software is not subject to copyright |   protection and is in the public domain. | |   We would appreciate acknowledgement if the software is used. |/* * Static data structures. */#include <stdlib.h> #include <math.h>#include <stdio.h>#include "config_wcdma.h"#include "channel.h"#ifndef TRUE#define TRUE 1#define FALSE 0#endif /* TRUE *//* Channel matrix to keep in memory the channel impulses   (both amplitudes and delays and their changes)    and previous chips etc /**/static channel_matrix_double  channel_data_double[MAX_CHANNELS];/* List that keeps record which channel instances are used /**/static enum instance_state channel_alloc_list_double[MAX_CHANNELS] ;/* General initialization flag /**/static int general_channel_init_flag_double = FALSE;/* Total number of occupied channels/**/static int channel_index_double = 0;/* -------------------------------------------------------------------- *//* * Function:    wcdma_channel_init * Desc.:       Channel initialization *              Allocates memory for the chips that effect the future call time inputs   *  * Return:      instance number or -1 if all instances are already occupied. * * Note:       *//* -------------------------------------------------------------------- */int wcdma_channel_init_double(		      double channel_impulse[],	/* IN: Channel impulse vector*/		      int  channel_delays[],/* IN: Delay taps */		      int  nTaps,           /* IN: channel impulse vector size */		      int  nImpulse,        /* IN: number of channel impulse vectors */		      double impulse_prob[],/* IN: Channel impulse vector probabilities*/		      int  steps,           /* IN: Total number of frames send during ssim/**/		      double esno,          /* IN: SNR/**/		      double power,         /* IN: Power/**/		      int  nCode            /* IN: Length of the spreading code/**/){  int i,j,instance,n_intervals,delay_diff;    /*     * If first call, initialize static data.     */    if (general_channel_init_flag_double == FALSE) {        for (i=0; i < MAX_CHANNELS; i++) {            channel_alloc_list_double[i] = FREE_INSTANCE;        } /* for */        general_channel_init_flag_double = TRUE;    } /* if general_init_flag */    /*     * Find first free instance number.     */    instance = -1;    for (i=0; i < MAX_CHANNELS; i++) {        if (channel_alloc_list_double[i] == FREE_INSTANCE) {            instance = i;            break;        } }    if (instance == -1) return(-1); /* no free instances */    if (nCode < 0) return(-1); /* Spreading code length incorrect/**/      /*        Store the channel data	Note if the channel is changed there might be some old data	left in the memory, but this do not effect the calculations.	/**/    channel_data_double[instance].n_taps = nTaps;    channel_data_double[instance].n_impulses = nImpulse;    channel_data_double[instance].cur_impulse = 0;    /*        Standard noise deviation is calculated for each chip.       See  Michel C. Jeruchim:               "Simulation of communication Systems", Plenum 1992	      page. 283       Power  =  noise power       nCode = code length         esno = Signal to noise ratio       The random number is scaled between -1 and 1 and multiplied by noise_std       calculated here.      /**/    channel_data_double[instance].noise_std =        sqrt(power / nCode / 2 / pow(10.0,(esno/10.0)) ) ; /**/                /* Select the channel mode       CONSTANT       RANDOM       INTERPOL       /**/       if( nImpulse == 1)      { channel_data_double[instance].mode = CONST;} /* CONSTANT channel model /**/          else if (steps == 0)          /* RANDOM channel model /**/      { channel_data_double[instance].mode = RANDOM;      /* 	 Calculate cumulative impulse vector probalitites 	 /**/      channel_data_double[instance].cumul_prob[0] = impulse_prob[0];      for (i = 1; i < nImpulse; i++){	channel_data_double[instance].cumul_prob[i] = 	  impulse_prob[i] +  channel_data_double[instance].cumul_prob[i-1];      }}        else {        /* INTERPOLATING channel model /**/      channel_data_double[instance].mode = INTERPOL;       /* 	 Define the number of iteration steps in between two channel impulses	 /**/      n_intervals = ceil (steps / (nImpulse - 1)) + min(1, steps % (nImpulse - 1));/**/      for(j = 0; j<nImpulse; j++){	channel_data_double[instance].max[j] = n_intervals;	channel_data_double[instance].use[j] = 0;}    }    /*      Update the channel data matrix for all channel taps      /**/    for(i = 0; i < nTaps; i++){      channel_data_double[instance].cur_channel[i] = channel_impulse[i];      channel_data_double[instance].cur_delays[i] = channel_delays[i];      if( channel_data_double[instance].mode == RANDOM){	/* RANDOM channel model  	   Save all the impulses and delays	   /**/	for(j = 0; j < nImpulse-1; j++){	  channel_data_double[instance].amplitudes[j][i] = channel_impulse[j * nTaps + i]; 	  channel_data_double[instance].delays[j][i] = channel_delays[j * nTaps + i];	}}      else if( channel_data_double[instance].mode == INTERPOL){ 	/* INTERPOLATING channel model 	   Calculate the derivates of the amplitudes and the  	   number of timesteps between delay tap changes (and the direction of the change)	   /**/	for(j = 0; j< nImpulse-1; j++){	  channel_data_double[instance].amplitudes[j][i] = 	      (channel_impulse[(j+1) * nTaps + i] - channel_impulse[j * nTaps + i])/n_intervals;	  delay_diff = channel_delays[(j+1) * nTaps + i] - channel_delays[j * nTaps + i] ;	  if( delay_diff != 0) {	    channel_data_double[instance].delays[j][i] =  	      ( n_intervals / (abs(delay_diff)+1) + min(1, n_intervals % (abs(delay_diff)+1))) ;            if( delay_diff < 0 )  {	      channel_data_double[instance].delays[j][i] = -  channel_data_double[instance].delays[j][i] ;}	  }	  else {channel_data_double[instance].delays[j][i] = 0;}	}}    } /*Update for each channel tap/**/        /*        Find the longest delay in the channel (to allocate enough memory for stored chips)       /**/    channel_data_double[instance].max_memory = channel_delays[nTaps-1];    for (j = 2; j <= nImpulse; j++){      if ( channel_delays[j * nTaps - 1]  > channel_data_double[instance].max_memory )	    channel_data_double[instance].max_memory = channel_delays[j * nTaps-1];     }    /*      Allocate memory for the memory storage of previous time chips      /**/    channel_data_double[instance].I_prev_chips  =       (double*)calloc( channel_data_double[instance].max_memory, sizeof(double));    channel_data_double[instance].Q_prev_chips  =       (double*)calloc( channel_data_double[instance].max_memory, sizeof(double));    /*        Update the static tables to keep in mind which channel instances are in use       /**/        channel_alloc_list_double[instance] = INSTANCE_IN_USE;    channel_index_double ++;    /*      If you want to check what has been updated call:      channel_print(instance);/**/    return(instance);}/* -------------------------------------------------------------------- *//* * Function:    wcdma_channel * Desc.:       Channel response *              The function which performs the givne channel *              for the input signal and upstaes the channel *              and stores the last chips for next call.   * * Note: *         channel_impulse and tap_delay vectors need to same length and *         their elements are corresponding, i.e. the tap_delay[i]  *         indicates how many chipintervals the channel_impulse  *         is delayd. The channel_impulse[i] indicates the attennuation *         coefficient.  * *        THE LAST ELEMENT OF tap_delay[i] VECTOR IMPLIES WHAT IS THE TOTAL *        DELAY FOR THE CHANNEL.  *//* -------------------------------------------------------------------- */int wcdma_channel_double( 	     double  Inputs[],	        /* IN: input chip vector */	     double  Qnputs[],	        /* IN: input chip vector */	     int  nInputs,	        /* IN: input vector size */	     int  instance,	        /* IN:  */	     double channel[],          /* OUT: Channel impulse vector*/	     int  delay[],              /* OUT: Delays of channel taps*/	     double Iout[],             /* OUT: output bit vector */ 	     double Qout[]              /* OUT: output bit vector */){    int i,  memory_length, nTaps ;    double std_noise;    double *prev_I,*prev_Q;    channel_matrix_double *channel_datum_double;    /*      Get the channel data for given channel instance      /**/    channel_datum_double = &channel_data_double[instance];    nTaps = channel_datum_double->n_taps;    std_noise = channel_datum_double->noise_std ;    /*        If AWGN noise is added to the channel       /**/    if(std_noise > 0 )      i = wcdma_channel_conv_double(Inputs,Qnputs,nInputs,instance,Iout,Qout);    /*        If no noise is added /**/ 	    else      i = wcdma_channel_conv_nonoise_double(Inputs,Qnputs,nInputs,instance,Iout,Qout);        /*        Return the used channel amplitude and delay vectors       /**/    for(i=0;i<nTaps;i++){      channel[i] = channel_datum_double->cur_channel[i];      delay[i] = channel_datum_double->cur_delays[i];    }    /*        Update the channel amplitude and delay vectors if not CONSTANT channel       /**/        if (channel_datum_double->mode > CONST){      wcdma_update_channel_double(channel_datum_double);    }    /*        Save the last chips of this input block to next function call       /**/    i = wcdma_update_memory_chips_double(Inputs,Qnputs,nInputs,channel_datum_double);    /**/        return(0);}/* -------------------------------------------------------------------- *//* * Function:    wcdma_channel_conv_nonoise  * Desc.:       Channel response *              Performs the channel concolution and adds no noise to it *              (i.e. is almost the same as function wcdma_channel_conv) * Note: *         channel_impulse and tap_delay vectors need to same length and *         their elements are corresponding, i.e. the tap_delay[i]  *         indicates how many chipintervals the channel_impulse  *         is delayd. The channel_impulse[i] indicates the attennuation *         coefficient.  * *        THE LAST ELEMENT OF tap_delay[i] VECTOR IMPLIES WHAT IS THE TOTAL *        DELAY FOR THE CHANNEL.  *//* -------------------------------------------------------------------- */int wcdma_channel_conv_nonoise_double( 	     double  Inputs[],	        /* IN: input chip vector */	     double  Qnputs[],	        /* IN: input chip vector */	     int  nInputs,	        /* IN: input vector size */	     int  instance,	        /* IN: indicates the channel instance used/**/ 	     double Iout[],             /* OUT: output bit vector */	     double Qout[]              /* OUT: output bit vector */){    int i, j, i_tmp, tmp_delay,d_zero;    int  taps, mem_len;    double I_collect , Q_collect , noise,std_noise;    int  *delay;     double  *channel, *prev_I, *prev_Q;    channel_matrix_double *channel_datum_double;    /*      Get infromation about the used channel from the channel matrix      /**/          channel_datum_double = &channel_data_double[instance];    taps = channel_datum_double->n_taps;    /*        Current channel amplitudes and delays       /**/    channel = &channel_datum_double->cur_channel[0];    delay = &channel_datum_double->cur_delays[0];    mem_len = delay[taps -1];    /*      The chips saved from previous function call      /**/    prev_I = &(channel_datum_double->I_prev_chips[0]);    prev_Q = &(channel_datum_double->Q_prev_chips[0]);    /*        The first mem_len chips are effected also by the        previous input chips.        /**/    for(i = mem_len ; i > 0; i--) {      I_collect = 0;  /* gathers all the multipaths signals for I /**/      Q_collect = 0;  /* and for Q/**/      d_zero = i - mem_len;      for(j = 0; j < taps; j++) {	    i_tmp = d_zero + delay[j];             if( i_tmp > 0) {	      /* Use the stored chips to update the output		 /**/	      I_collect += prev_I[i_tmp - 1] * channel[j];	      Q_collect += prev_Q[i_tmp - 1] * channel[j];	    } 	    else {	      /* Use the new input chips  to update the output		 /**/	      i_tmp = abs(i_tmp);	      I_collect += Inputs[i_tmp] * channel[j];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看日韩毛片| 欧美日韩一区中文字幕| 欧美伊人久久大香线蕉综合69| 这里只有精品电影| 国产欧美一区二区精品性| 一区二区三区欧美| 国产乱人伦偷精品视频不卡| 在线免费精品视频| 国产欧美一区二区三区鸳鸯浴 | 成人丝袜高跟foot| 91精品国产手机| 亚洲免费在线观看| 国产成人激情av| 欧美一区二区三区在线看| 最新欧美精品一区二区三区| 韩国三级电影一区二区| 欧美疯狂性受xxxxx喷水图片| 中文字幕综合网| 国产盗摄一区二区| 日韩欧美黄色影院| 日本午夜一本久久久综合| 91视视频在线观看入口直接观看www| 日韩精品在线看片z| 亚洲午夜电影在线| 91亚洲大成网污www| 日本一区二区三区高清不卡| 久久99精品一区二区三区三区| 欧美主播一区二区三区美女| 亚洲欧美影音先锋| youjizz久久| 欧美激情一区二区三区在线| 国产一区二区三区日韩| 欧美tickling网站挠脚心| 丝袜美腿亚洲色图| 欧美日韩午夜在线| 亚洲一区在线免费观看| 在线一区二区三区四区| 亚洲精品第一国产综合野| 色噜噜狠狠色综合欧洲selulu| 亚洲特级片在线| 91在线视频免费91| 一区二区三区不卡视频| 欧美日韩小视频| 国产精品美女久久久久aⅴ国产馆| 亚洲麻豆国产自偷在线| 91在线视频观看| 亚洲欧美电影一区二区| 色狠狠av一区二区三区| 亚洲激情在线激情| 在线视频国内自拍亚洲视频| 亚洲18女电影在线观看| 欧美午夜精品久久久久久孕妇| 不卡一二三区首页| 成人性生交大片| 色婷婷综合五月| 亚洲视频在线一区观看| 91美女片黄在线观看91美女| 夜夜嗨av一区二区三区网页| 欧美美女一区二区在线观看| 奇米888四色在线精品| 欧美xxxxxxxx| 不卡区在线中文字幕| 亚洲另类在线一区| 欧美日韩国产影片| 久久99最新地址| 日韩理论在线观看| 欧美精品18+| 国产黄色精品视频| 亚洲午夜影视影院在线观看| 日韩欧美国产综合一区| 播五月开心婷婷综合| 午夜久久久久久| 国产色爱av资源综合区| 欧美在线观看一二区| 久久精品国产色蜜蜜麻豆| 国产精品国产自产拍在线| 欧美裸体一区二区三区| 国产91精品一区二区麻豆网站| 亚洲在线视频一区| 久久精品免费在线观看| 欧美亚一区二区| 成人动漫av在线| 免费成人你懂的| 中文字幕亚洲精品在线观看| 欧美日韩一区高清| 日本va欧美va精品发布| 欧美视频一区二区三区在线观看| 美女久久久精品| 国产精品久久久久久久浪潮网站| 欧美日韩在线播| 国产一区二区三区电影在线观看| 国产精品久久三| 欧美色区777第一页| 国产原创一区二区三区| 中文字幕在线不卡| 欧美午夜免费电影| 成人黄色在线看| 日韩一区精品视频| 国产亚洲一区二区三区| 91成人在线精品| 久久99久久99| 亚洲国产成人91porn| 中文字幕在线不卡视频| 日韩欧美一级二级三级| 北条麻妃一区二区三区| 日本欧美久久久久免费播放网| 久久久激情视频| 9191精品国产综合久久久久久| 日韩精品乱码免费| 国产精品久久久久久久午夜片| 欧美丰满少妇xxxxx高潮对白| 成人av网站在线观看免费| 日本成人在线电影网| 亚洲欧美在线高清| 国产午夜精品久久| 日韩一区二区电影在线| 欧美一区二区视频网站| 在线观看亚洲专区| 国产999精品久久久久久绿帽| 亚洲国产一区视频| 亚洲三级在线看| 久久精品欧美日韩| 在线综合视频播放| 91蜜桃网址入口| 成人性生交大片免费看在线播放| 久久精品国产99国产| 日韩高清不卡在线| 亚洲综合免费观看高清完整版在线 | 亚洲一级电影视频| 亚洲黄一区二区三区| 国产精品国产成人国产三级 | 99国产欧美另类久久久精品 | 国产精品福利一区二区| 久久久久九九视频| 久久这里都是精品| 国产精品区一区二区三区| 久久精品一二三| 久久毛片高清国产| 久久久久久久综合日本| 日韩欧美的一区| 日韩欧美成人午夜| 欧美日韩精品系列| 欧美不卡在线视频| 亚洲精品在线免费播放| 精品精品国产高清一毛片一天堂| 欧美一级国产精品| 日韩欧美电影一区| 久久久久久黄色| 国产欧美精品在线观看| 国产精品嫩草影院av蜜臀| 国产精品免费视频观看| 专区另类欧美日韩| 亚洲高清免费一级二级三级| 午夜电影久久久| 高清视频一区二区| 99精品国产视频| 欧美日韩亚洲国产综合| 欧美一级久久久| 欧美经典三级视频一区二区三区| 亚洲综合色噜噜狠狠| 日韩va欧美va亚洲va久久| 久久99精品国产麻豆婷婷洗澡| 精品写真视频在线观看| 成人动漫在线一区| 欧美日韩视频在线一区二区| 久久久九九九九| 成人免费小视频| 亚洲va欧美va人人爽| 九九视频精品免费| jiyouzz国产精品久久| 欧美视频中文一区二区三区在线观看| www.99精品| 在线观看免费亚洲| 欧美一区二区三区在线观看| 亚洲精品一区二区三区香蕉| 亚洲欧美另类小说| 亚洲午夜av在线| 成人av在线影院| 日韩一区二区精品葵司在线| 国产精品网站在线播放| 香蕉成人啪国产精品视频综合网 | 午夜精品成人在线视频| 国产一区在线看| 91福利区一区二区三区| 国产亚洲综合性久久久影院| 一区二区激情小说| 免费在线观看精品| 欧美日韩视频在线一区二区 | 亚洲午夜久久久久久久久电影院| 国产成人精品免费| 91精品国产一区二区三区蜜臀| 国产精品素人一区二区| 日韩精品电影在线观看| av中文字幕在线不卡| 欧美韩日一区二区三区| 一区二区三区不卡在线观看 | 欧美日韩国产精品成人| 久久亚洲影视婷婷| 精品一区精品二区高清| 欧美自拍丝袜亚洲|