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

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

?? flat_rayleigh.cpp

?? c++下實現的瑞麗衰落信道
?? CPP
字號:
/*****************************************************************************
 * Author: Christos Komninakis                                               *
 * Date: January 4, 2000.                                                    *
 * Content: C++ code file for the CLASS "flat_rayleigh".                     *
 *****************************************************************************/

#include "flat_rayleigh.h"

#define PI 3.14159265358979

/**************** Constructor ***************************************/
flat_rayleigh::flat_rayleigh(int seeed, double fD, double pwr, bool flag_indep)
{
  chan_seed = seeed; //-23;
  PWR = pwr;
  IndepFlag = flag_indep;
  chan_val = Complex(0.0, 0.0);
  K = 7; H = 7; H2 = 2*H;
  if (fD > 0.2) {
	  cout << "Warning: Discrete Doppler fDT > 0.2, handled as fDT=0.2 exactly" << endl;
	  I = 1;
  } else
	  I = (int) (0.2 / fD);
  last_i = 0; IP = 0;
  int i, t, j, k;
  
  a = new double [K];
  b = new double [K];
  c = new double [K];
  d = new double [K];
  double A_o;
  st = new Complex* [3];
  for (i=0; i<3; i++)
    st[i] = new Complex [K];
  sinc_matrix = new double* [I];
  for (i=0; i<I; i++)
    sinc_matrix[i] = new double [H2];
  buff_f = new Complex [H2];

  /* Following are the values of a designed ROOT DOPPLER filter prototype,
     consisting of K=7 biquads, with fD = 0.2 */

  a[0] = 0.98323218491754;    b[0] = 0.13953807910136;
  c[0] = -0.60134822489663;   d[0] = 0.48938674026073;
  a[1] = -0.58056307877395;   b[1] = 0.99977164701498;
  c[1] = -0.42846077703117;   d[1] = 0.24612477470991;
  a[2] = -0.50498097209321;   b[2] = 0.99986531836969;
  c[2] = -0.63050157648166;   d[2] = 0.9350218659307;
  a[3] = 0.20534422769486;    b[3] = 0.98691526068222;
  c[3] = -0.096351029308223;  d[3] = -0.060828833103004;
  a[4] = 1.2667005604552;     b[4] = 0.93699896920708;
  c[4] = -0.64949215100022;   d[4] = 0.80427856161307;
  a[5] = -0.60545728027338;   b[5] = 0.99998818741754;
  c[5] = -0.61939958040555;   d[5] = 0.99895172368533;
  a[6] = -0.29077222501287;   b[6] = 0.99832970528904;
  c[6] = -0.62124137243814;   d[6] = 0.98111826315356;
  A_o = 0.028241759549181;

  /* now really start */
  Ao = PWR * A_o / sqrt(2.0);
  /* produce the table storing all the values of the interpolating function,
	 windowed and in reversed order, so that filtering is straightforward */
  double scale = 0.0;
  for (i=0; i<I; i++) {
	  for (j=0; j<H2; j++) {
		  if ((i == 0) & (j == H))
			  sinc_matrix[i][j] = 1.0;
		  else {
			  sinc_matrix[i][j] =
				   sin(PI*(j-H)+(PI/I)*i) / (PI*(j-H)+(PI/I)*i) * //;
                   (0.5 - 0.5*cos(2.0*PI*(i+I*j)/(H2*I))); // windowed, Hanning
                   //(0.54 - 0.46*cos(2.0*PI*(i+I*j)/(H2*I))); // windowed, Hamming
                   //(0.42 - 0.5*cos(2.0*PI*(i+I*j)/(H2*I)) + 0.08*cos(4.0*PI*(i+I*j)/(H2*I))); // windowed, Blackman
		  }
		  scale += (sinc_matrix[i][j])*(sinc_matrix[i][j]);
	  }
  }
  scale = sqrt(1.0/scale*I);
  // scale and swap
  double temp;
  for (i=0; i<I; i++) {
	  for (j=0; j<H; j++) {
		  temp = sinc_matrix[i][j];
		  sinc_matrix[i][j] = scale * sinc_matrix[i][H2-1-j];
		  sinc_matrix[i][H2-1-j] = scale * temp;
	  }
  }
  sinc_matrix[0][H] *= scale;

  /* work the channel for some time, to overcome transients */
  for (t=0; t<I*4*(4*K+H2); t++) {
    if (last_i == I-1) {
      last_i = 0;

      /* now produce new element, and insert it into the buffer: buff_f[IP] */
      st[0][0] = Complex(Gaussian(&chan_seed), Gaussian(&chan_seed))*Ao -
                 st[1][0]*c[0] - st[2][0]*d[0];
      for (k=1; k<K; k++)
        st[0][k] = st[0][k-1] + st[1][k-1]*a[k-1] + st[2][k-1]*b[k-1] -
                                st[1][k]*c[k] - st[2][k]*d[k];
      buff_f[IP] = st[0][K-1] + st[1][K-1]*a[K-1] + st[2][K-1]*b[K-1];
      for (k=0; k<K; k++) {
        st[2][k] = st[1][k];
        st[1][k] = st[0][k];
      }
      /* done, produced buff_f[IP], now move IP to next position */
      IP = (IP + 1) % H2;
    } else
      last_i++;
	// stop here, no need to interpolate, since idle run
  }
}



/******* Function pass_through, without providing any CSI ************/
void flat_rayleigh::pass_through(int length, Complex *inp, Complex *outp)
{
  register int k, j, t;

  if (IndepFlag) {
	  chan_seed += 1;	// reset the seed
	  // clean-up and then run idle, to ensure transients are dead
	  for (k=0; k<K; k++) {
		  st[0][k] = Complex(0.0, 0.0);
		  st[1][k] = Complex(0.0, 0.0);
		  st[2][k] = Complex(0.0, 0.0);
	  }
	  for (j=0; j<H2; j++)
		  buff_f[j] = Complex(0.0, 0.0);
	  // and now run idle for a little...
	  for (t=0; t<I*4*(4*K+H2); t++) {
		  if (last_i == I-1) {
			  last_i = 0;
			  /* produce new element, and insert it into buff_f[IP] */
			  st[0][0] = Complex( Gaussian(&chan_seed), Gaussian(&chan_seed) );
			  st[0][0] = st[0][0]*Ao - st[1][0]*c[0] - st[2][0]*d[0];
			  for (k=1; k<K; k++)
				  st[0][k] = st[0][k-1] + st[1][k-1]*a[k-1] + st[2][k-1]*b[k-1] -
						     st[1][k]*c[k] - st[2][k]*d[k];
			  buff_f[IP] = st[0][K-1] + st[1][K-1]*a[K-1] + st[2][K-1]*b[K-1];
			  for (k=0; k<K; k++) {
				  st[2][k] = st[1][k];
				  st[1][k] = st[0][k];
			  }
			  /* done, produced buff_f[IP], now move IP to next position */
			  IP = (IP + 1) % H2;
		  } else
			  last_i++;
		  // end here, don't produce chan_val, since idle run
	  }
  } /* end of dry run for independence */

  /* run for real now */
  for (t=0; t<length; t++) {
    if (last_i == I-1) {
      last_i = 0;

      /* now produce new element, and insert it into the buffer: buff_f[IP] */
      st[0][0] = st[0][0] = Complex( Gaussian(&chan_seed), Gaussian(&chan_seed) );
	  st[0][0] = st[0][0]*Ao - st[1][0]*c[0] - st[2][0]*d[0];
	  for (k=1; k<K; k++)
        st[0][k] = st[0][k-1] + st[1][k-1]*a[k-1] + st[2][k-1]*b[k-1] -
                                st[1][k]*c[k] - st[2][k]*d[k];
      buff_f[IP] = st[0][K-1] + st[1][K-1]*a[K-1] + st[2][K-1]*b[K-1];
      for (k=0; k<K; k++) {
        st[2][k] = st[1][k];
        st[1][k] = st[0][k];
      }
      /* done, produced buff_f[IP], now move IP to next position */
      IP = (IP + 1) % H2;
    } else
      last_i++;

    buff_sinc = sinc_matrix[last_i];
    chan_val = Complex(0.0, 0.0);
    for (j=0; j<H2; j++)
      chan_val += buff_f[(IP + j) % H2] * buff_sinc[j];
    outp[t] = inp[t] * chan_val;
  }
}



/******* Overloaded Function pass_through, providing CSI also ************/
void flat_rayleigh::pass_through(int length, Complex *inp,
                                    Complex *outp, Complex *csi)
{
  register int k, j, t;

  if (IndepFlag) {
	  chan_seed += 1;	// reset the seed
	  // clean-up and then run idle, to ensure transients are dead
	  for (k=0; k<K; k++) {
		  st[0][k] = Complex(0.0, 0.0);
		  st[1][k] = Complex(0.0, 0.0);
		  st[2][k] = Complex(0.0, 0.0);
	  }
	  for (j=0; j<H2; j++)
		  buff_f[j] = Complex(0.0, 0.0);
	  // and now run idle for a little...
	  for (t=0; t<I*4*(4*K+H2); t++) {
		  if (last_i == I-1) {
			  last_i = 0;
			  /* produce new element, and insert it into buff_f[IP] */
			  st[0][0] = Complex( Gaussian(&chan_seed), Gaussian(&chan_seed) );
			  st[0][0] = st[0][0]*Ao - st[1][0]*c[0] - st[2][0]*d[0];
			  for (k=1; k<K; k++)
				  st[0][k] = st[0][k-1] + st[1][k-1]*a[k-1] + st[2][k-1]*b[k-1] -
						     st[1][k]*c[k] - st[2][k]*d[k];
			  buff_f[IP] = st[0][K-1] + st[1][K-1]*a[K-1] + st[2][K-1]*b[K-1];
			  for (k=0; k<K; k++) {
				  st[2][k] = st[1][k];
				  st[1][k] = st[0][k];
			  }
			  /* done, produced buff_f[IP], now move IP to next position */
			  IP = (IP + 1) % H2;
		  } else
			  last_i++;
		  // end here, don't produce chan_val, since idle run
	  }
  } /* end of dry run for independence */
  
  for (t=0; t<length; t++) {
    if (last_i == I-1) {
      last_i = 0;

      /* now produce new element, and insert it into the buffer: buff_f[IP] */
      st[0][0] = Complex( Gaussian(&chan_seed), Gaussian(&chan_seed) )*Ao -
                 st[1][0]*c[0] - st[2][0]*d[0];
      for (k=1; k<K; k++)
        st[0][k] = st[0][k-1] + st[1][k-1]*a[k-1] + st[2][k-1]*b[k-1] -
                                st[1][k]*c[k] - st[2][k]*d[k];
      buff_f[IP] = st[0][K-1] + st[1][K-1]*a[K-1] + st[2][K-1]*b[K-1];
      for (k=0; k<K; k++) {
        st[2][k] = st[1][k];
        st[1][k] = st[0][k];
      }
      /* done, produced buff_f[IP], now move IP to next position */
      IP = (IP + 1) % H2;
    } else
      last_i++;

    buff_sinc = sinc_matrix[last_i];
    chan_val = Complex(0.0, 0.0);
    for (j=0; j<H2; j++)
      chan_val += buff_f[(IP + j) % H2] * buff_sinc[j];
    csi[t] = chan_val;
    outp[t] = inp[t] * chan_val;
  }
}



/***** Overloaded Function pass_through, providing AMPLITUDE CSI only *****/
void flat_rayleigh::pass_through(int length, Complex *inp,
                                 Complex *outp, double *amp_csi)
{
  register int k, j, t;

  if (IndepFlag) {
	  chan_seed += 1;	// reset the seed
	  // clean-up and then run idle, to ensure transients are dead
	  for (k=0; k<K; k++) {
		  st[0][k] = Complex(0.0, 0.0);
		  st[1][k] = Complex(0.0, 0.0);
		  st[2][k] = Complex(0.0, 0.0);
	  }
	  for (j=0; j<H2; j++)
		  buff_f[j] = Complex(0.0, 0.0);
	  // and now run idle for a little...
	  for (t=0; t<I*4*(4*K+H2); t++) {
		  if (last_i == I-1) {
			  last_i = 0;
			  /* produce new element, and insert it into buff_f[IP] */
			  st[0][0] = Complex( Gaussian(&chan_seed), Gaussian(&chan_seed) );
			  st[0][0] = st[0][0]*Ao - st[1][0]*c[0] - st[2][0]*d[0];
			  for (k=1; k<K; k++)
				  st[0][k] = st[0][k-1] + st[1][k-1]*a[k-1] + st[2][k-1]*b[k-1] -
						     st[1][k]*c[k] - st[2][k]*d[k];
			  buff_f[IP] = st[0][K-1] + st[1][K-1]*a[K-1] + st[2][K-1]*b[K-1];
			  for (k=0; k<K; k++) {
				  st[2][k] = st[1][k];
				  st[1][k] = st[0][k];
			  }
			  /* done, produced buff_f[IP], now move IP to next position */
			  IP = (IP + 1) % H2;
		  } else
			  last_i++;
		  // end here, don't produce chan_val, since idle run
	  }
  } /* end of dry run for independence */

  for (t=0; t<length; t++) {
    if (last_i == I-1) {
      last_i = 0;

      /* now produce new element, and insert it into the buffer: buff_f[IP] */
      st[0][0] = Complex( Gaussian(&chan_seed), Gaussian(&chan_seed) )*Ao -
                 st[1][0]*c[0] - st[2][0]*d[0];
      for (k=1; k<K; k++)
        st[0][k] = st[0][k-1] + st[1][k-1]*a[k-1] + st[2][k-1]*b[k-1] -
                                st[1][k]*c[k] - st[2][k]*d[k];
      buff_f[IP] = st[0][K-1] + st[1][K-1]*a[K-1] + st[2][K-1]*b[K-1];
      for (k=0; k<K; k++) {
        st[2][k] = st[1][k];
        st[1][k] = st[0][k];
      }
      /* done, produced buff_f[IP], now move IP to next position */
      IP = (IP + 1) % H2;
    } else
      last_i++;

    buff_sinc = sinc_matrix[last_i];
    chan_val = Complex(0.0, 0.0);
    for (j=0; j<H2; j++)
      chan_val += buff_f[(IP + j) % H2] * buff_sinc[j];
    amp_csi[t] = sqrt(abs(chan_val));
    outp[t] = inp[t] * chan_val;
  }
}
    
    

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文一区二区在线观看| 97久久超碰国产精品| 884aa四虎影成人精品一区| 亚洲一区中文日韩| 欧美三级电影网站| 日韩制服丝袜av| 精品国产一二三区| 国产91在线观看| 亚洲免费高清视频在线| 欧美三级在线视频| 精品无人区卡一卡二卡三乱码免费卡 | 97久久久精品综合88久久| 亚洲女女做受ⅹxx高潮| 欧美视频日韩视频| 男人的天堂久久精品| 久久日一线二线三线suv| 成人精品电影在线观看| 亚洲一区欧美一区| 日韩女同互慰一区二区| 成人免费看视频| 亚洲成人免费视频| www国产精品av| 色综合久久久久久久久久久| 日韩精品久久理论片| 久久综合av免费| 一本大道综合伊人精品热热| 免费成人美女在线观看| 国产精品久久影院| 91精品国产一区二区三区蜜臀 | 99精品国产视频| 日日夜夜免费精品| 国产精品免费视频一区| 欧美夫妻性生活| 成人av午夜电影| 日韩精品亚洲一区二区三区免费| 国产日韩成人精品| 51久久夜色精品国产麻豆| 国产精品亚洲专一区二区三区| 一区二区三区精品| 久久久久久毛片| 91精品国产综合久久久久久| av亚洲精华国产精华精| 激情综合网天天干| 亚洲一区二区三区三| 国产清纯美女被跳蛋高潮一区二区久久w | 日韩毛片精品高清免费| 欧美一级二级三级乱码| 色94色欧美sute亚洲线路一久 | 天堂成人免费av电影一区| 国产精品网站在线观看| 精品国产亚洲一区二区三区在线观看| 色妹子一区二区| 国产成人av一区二区| 久久99国产乱子伦精品免费| 一区二区三区四区不卡在线| 亚洲国产成人午夜在线一区| 欧美成人精精品一区二区频| 欧美色图在线观看| 波多野结衣精品在线| 国产一区二区免费看| 日本免费在线视频不卡一不卡二| 一区二区三区四区在线| 亚洲欧美另类图片小说| 国产精品视频在线看| 久久免费视频一区| 日韩欧美一区在线| 欧美二区三区91| 欧美色区777第一页| 日本韩国欧美一区| 日本电影亚洲天堂一区| 91麻豆国产福利在线观看| heyzo一本久久综合| 丁香婷婷综合网| 成人少妇影院yyyy| 成人涩涩免费视频| 91香蕉国产在线观看软件| 97精品超碰一区二区三区| 成人毛片老司机大片| 成人黄色免费短视频| 97se亚洲国产综合自在线| 99久久综合狠狠综合久久| 99国产欧美另类久久久精品 | 在线观看亚洲一区| 色香蕉成人二区免费| 91福利在线导航| 7777精品伊人久久久大香线蕉经典版下载 | 国产精品亚洲第一区在线暖暖韩国| 久久精品国产精品亚洲精品| 国产一区二区影院| 成人免费视频视频在线观看免费| 国产91清纯白嫩初高中在线观看| 成a人片国产精品| 色偷偷久久一区二区三区| 欧美三片在线视频观看 | 久久久久国产精品麻豆| 国产视频911| 亚洲欧美日韩一区二区| 亚洲国产美国国产综合一区二区| 日韩精品视频网| 国产精品123| 一本一道久久a久久精品| 欧美精品三级日韩久久| 精品国产一区二区亚洲人成毛片| 亚洲国产经典视频| 亚洲123区在线观看| 国产综合色精品一区二区三区| 成人小视频在线观看| 欧美三级中文字幕| 久久人人97超碰com| 亚洲美女在线国产| 麻豆久久久久久| 99精品国产91久久久久久| 91精品国产免费| 国产精品网站一区| 午夜电影一区二区三区| 国产精品一区二区男女羞羞无遮挡| 91视频91自| 欧美电影精品一区二区| 亚洲色欲色欲www| 久久精品国产99| 91在线精品一区二区三区| 日韩视频中午一区| 中文字幕一区二区三区视频| 午夜影视日本亚洲欧洲精品| 成人免费av网站| 欧美变态凌虐bdsm| 亚洲韩国一区二区三区| 国产精品一区一区| 欧美一区二区视频在线观看2022 | 久久久精品免费免费| 亚洲香肠在线观看| 北条麻妃一区二区三区| 日韩一区二区三区三四区视频在线观看 | 波多野结衣91| 2023国产精华国产精品| 天天综合色天天综合色h| av在线不卡电影| 久久午夜羞羞影院免费观看| 亚洲高清不卡在线观看| av不卡一区二区三区| 欧美精品一区二| 六月丁香综合在线视频| 欧美日韩一卡二卡| 中文字幕一区日韩精品欧美| 国产精品一区二区男女羞羞无遮挡| 777久久久精品| 亚洲成人av一区| 色综合久久综合| 亚洲区小说区图片区qvod| 国产福利91精品一区| 精品日产卡一卡二卡麻豆| 五月天久久比比资源色| 欧洲精品在线观看| 亚洲视频在线一区二区| 成人伦理片在线| 国产精品免费久久久久| 国产91精品久久久久久久网曝门| 日韩免费观看2025年上映的电影| 日韩在线播放一区二区| 精品视频一区二区三区免费| 亚洲综合色自拍一区| 在线精品视频一区二区三四| 亚洲色图.com| 91丨porny丨国产| 亚洲精品国产一区二区精华液 | 国产精品77777竹菊影视小说| 日韩一级免费观看| 精品一区二区三区影院在线午夜 | 欧洲精品一区二区三区在线观看| 亚洲人被黑人高潮完整版| 色激情天天射综合网| 一区二区三区.www| 欧美性大战久久久久久久| 一区二区理论电影在线观看| 欧美色精品在线视频| 日韩电影免费在线| 日韩欧美精品三级| 韩国视频一区二区| 国产亚洲欧美在线| av网站免费线看精品| 一区二区视频免费在线观看| 精品视频在线免费看| 美女mm1313爽爽久久久蜜臀| 久久久精品天堂| 色婷婷综合久久久久中文| 亚洲福利一区二区三区| 欧美伦理影视网| 精品一区二区三区的国产在线播放 | 精品久久99ma| 国产69精品一区二区亚洲孕妇| 国产精品的网站| 欧美日韩国产中文| 国模少妇一区二区三区| 亚洲日本中文字幕区| 欧美精品在线观看播放| 国产传媒欧美日韩成人| 亚洲精品成人天堂一二三| 欧美一区二区免费| 粉嫩蜜臀av国产精品网站| 亚洲图片欧美一区|