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

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

?? ldpc_2.cpp

?? 關于Q元LDPC碼的C++仿真程序
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
     if (i == rightbound_index)	continue;     Aux *= GetEdge(i).LeftBoundMessage;  }  Aux.Normalize();         return Aux;}void variable_node::CalcFinalMessage(){   FinalEstimate = CalcRightboundMessage( /* NO rightbound index */ -1 );   Symbol = FinalEstimate.Decision();}void variable_node::CalcAllRightboundMessages(){   for (int i = 0; i < GetDegree(); i++)      GetEdge(i).RightBoundMessage = CalcRightboundMessage( /* rightbound index */ i);   CalcFinalMessage();}

message &GenerateChannelMessage(GFq v,                                channel &TransmitChannel,                                 mapping &MapInUse,                                double ChannelOut ){   static message InitialMessage;   int q = MapInUse.GetQ();   double CandidateIn, ChannelIn;     ChannelIn = MapInUse.map(v);        // mapping of (0 + v) % q;     // Generate InitialMessage   InitialMessage.Set_q(q);   for (GFq i(0); i.val < q; i.val++)   {      CandidateIn  = MapInUse.map(i + v);      InitialMessage[i.val] = TransmitChannel.CalcProbForInput(		                       ChannelOut, CandidateIn );   }   InitialMessage.Normalize();    // Make valid probability vector    return InitialMessage;}void variable_node::Initialize( channel &TransmitChannel, double ChannelOut ){   InitialMessage = GenerateChannelMessage(v, TransmitChannel, *MapInUse, ChannelOut );   FinalEstimate = InitialMessage;     // Generate Rightbound messages   for (int j = 0; j < degree; j++)      GetEdge(j).RightBoundMessage = InitialMessage;}BOOLEAN variable_node::IsRightConnectedTo( node *n ){  for (int i = 0; i < degree; i++)    if (&edges[i]->RightNode() == n) return TRUE;  return FALSE;}/********************************************************************************** * * Graph * **********************************************************************************/void bipartite_graph::Reset( 	     int p_N,                            // number of variable nodes	     int lambda_degs[],                  // left-degrees, terminated by -1	     double lambda_wts[],                // weights corresponding to above degrees
	     int rho_degs[],       		  // right-degree, terminated by NULL	     double rho_wts[],                  // weights corresponding to above degrees
		 mapping &MapInUse){  //-----------------------------------------------------------------------  // Clean up  //-----------------------------------------------------------------------  Clear();  //-----------------------------------------------------------------------  // Calc M, N and E  //-----------------------------------------------------------------------  double Ratio;     // M/N  double Nominator, Denominator;  Nominator = 0;  for (int i = 0; rho_degs[i] != -1; i++)    Nominator += rho_wts[i] / rho_degs[i];  Denominator = 0;  for (int j = 0; lambda_degs[j] != -1; j++)    Denominator += lambda_wts[j] / lambda_degs[j];  Ratio = Nominator / Denominator;  N = p_N;  M = (int)ceil(Ratio * N);  E = (int)floor(N / Denominator);    //----------------------------------------------------------------------------------------  // Create variables, checks and edges  //----------------------------------------------------------------------------------------  edges = new edge[E];  variable_nodes = new variable_node[N];  check_nodes = new check_node[M];  EdgeStack = new edge* [E * 2];   // Buffer used to manage memory allocation for nodes  if ((edges == NULL) ||      (variable_nodes == NULL) ||      (check_nodes == NULL) ||      (EdgeStack == NULL))    {      cout << "Error allocating memory\n";      exit(1);    }  //--------------------------------------------------------------------------  // Generate sockets  //--------------------------------------------------------------------------  variable_node **left_sockets = new variable_node*[E];  check_node **right_sockets = new check_node*[E];  edge **EdgeStackPointer = EdgeStack;         // Auxiliary pointer to stack  int node_index, socket_index, count_nodes_of_degree;    node_index = 0;  socket_index = 0;  for (int i = 0; lambda_degs[i] != -1; i++)                // Loop through all left-degrees    {      int count_nodes_of_degree = (int)floor(lambda_wts[i] * E / lambda_degs[i]); // No. nodes of required degree      for (int j = 0; j < count_nodes_of_degree; j++)    // Number of nodes with required left-degree	{	  for (int k = 0; k < lambda_degs[i]; k++)              // Number of sockets for each degree	    left_sockets[socket_index++] = &variable_nodes[node_index];	  variable_nodes[node_index].AllocateEdges(EdgeStackPointer, lambda_degs[i]);	  variable_nodes[node_index].SetMapInUse(MapInUse);
	  variable_nodes[node_index].SetID(node_index);	  node_index++;	}    }  // Record no. of left sockets, may be different than E  // due to the fact that lambda * E may not be whole numbers  int count_left_sockets = socket_index;        // Modify N for same reason  N = node_index;  // Generate right sockets  node_index = 0;  socket_index = 0;  for (int i = 0; rho_degs[i] != -1; i++)                  // Loop through all right-degrees    {      int CurrentDegree  = rho_degs[i];      count_nodes_of_degree = (int)floor(rho_wts[i] * E / 					 CurrentDegree );  // No of nodes of required degree      for (int j = 0; j < count_nodes_of_degree; j++)         	{	  for (int k = 0; k < CurrentDegree; k++)      // Number of sockets for each degree	    right_sockets[socket_index++] = &check_nodes[node_index];	  check_nodes[node_index].AllocateEdges( EdgeStackPointer, CurrentDegree );	  check_nodes[node_index].SetID(node_index);	  	  node_index++;	}    }  // Record no. of right sockets, may be different than E  // due to the fact that lambda * E may not be whole numbers  int count_right_sockets = socket_index;        // Modify M,E for same reason  M = node_index;  E = min(count_left_sockets, count_right_sockets);  //----------------------------------------------------------------------------------------  // Generate permutations  //----------------------------------------------------------------------------------------  srand(time(NULL)); // Init random seed so that each call to function returns different set of values  cout << "Starting bipartite graph...";  int left_index, right_index;  for (int i = 0; i < E; i++)    {      // Randomly select socket from first E - left_index (last left_index sockets represent      // sockets that have already been selected)      //      cout << " i = " << i << " E = " << E;      int attempts = 0;      do	{	  // It is important to select left_index randomly and not only right_index,	  // because there is a significance to the order of bits within a code, sometimes with 	  // first or last bits better protected.  If left_index is not selected randomly,	  // the result would be a random tree, but in which lower degree left-nodes are of	  // lower index within each constituent code, contrary to complete randomness.	  left_index = uniform_random(E - i);	  //left_index = i;	  right_index = uniform_random(E - i);	  if ((attempts++) > 100)	    {	      cout << "Warning: cycles\n";	      break;	    }	}    while (left_sockets[left_index]->IsRightConnectedTo(right_sockets[right_index]));      if (right_index >= (E-i))	{	  cout << "right index or left_index exceed range\n"	       << "right_index = " << right_index	       << " left_index = " << left_index               << " E = " << E                << " left_index = " << left_index << "\n";	  exit(1);	}      edges[i].set_nodes(left_sockets[left_index], right_sockets[right_index]);      // Overwrite current sockets with last sockets, so that they are not selected again      right_sockets[right_index] = right_sockets[E - i - 1];      left_sockets[left_index] = left_sockets[E - i - 1];    }  cout << "Done\n";  // Clean-up  delete left_sockets;  delete right_sockets;}/************************************************************************ * * LDPC code * ************************************************************************/void LDPC_Code::Init_Messages( vector &ChannelOutput ){  if (ChannelOutput.GetSize() != Variables.GetLength())  {     cout << "LDPC_Code::Init_Messages: Incompatible sizes\n";     exit(1);  }  for (int i = 0; i < Variables.GetLength(); i++)
     Variables[i].Initialize( *Channel, ChannelOutput[i] );
}

void LDPC_Code::GetZeroCodeword( vector &Codeword ){   Codeword.Allocate(Variables.GetLength());   for (int i = 0; i < Variables.GetLength(); i++)      Codeword[i] = Variables[i].GetZeroSignal();}void LDPC_Code::Leftbound_Iteration(){  for (int i = 0; i < Checks.GetLength(); i++)    Checks[i].CalcAllLeftboundMessages();}void LDPC_Code::Rightbound_Iteration(){  for (int i = 0; i < Variables.GetLength(); i++)     Variables[i].CalcAllRightboundMessages();}void LDPC_Code::FinalIteration(){  for (int i = 0; i < Variables.GetLength(); i++)     Variables[i].CalcFinalMessage();}double LDPC_Code::Calc_Symbol_Error_Rate(){  double acc_correct = 0;  for (int i = 0; i < Variables.GetLength(); i++)     acc_correct += Variables[i].FinalEstimate.Decision().IsZero();  return 1.0 - acc_correct / (double)Variables.GetLength();}double LDPC_Code::Calc_Rightbound_Symbol_Error_Rate(){  double acc_correct = 0;  for (int i = 0; i < Graph.E; i++)    acc_correct += Graph.edges[i].RightBoundMessage.Decision().IsZero();  return 1.0 - acc_correct / Graph.E;}double LDPC_Code::Belief_Propagation_Decoder(int Count_Iterations){  static char buffer[500];  double Func_RC;  double LastMin = INF;  int CountIncreaseIterations = 0;  cout << "Initial symbol error rate = " << Calc_Symbol_Error_Rate() << "\n";  for (int i = 0; i < Count_Iterations; i++)  {      Leftbound_Iteration( );      Rightbound_Iteration();      Func_RC = Calc_Rightbound_Symbol_Error_Rate();      sprintf(buffer, "%d: Rightbound SER = %1.10f, %s", i+1, Func_RC, CharTime());      cout << buffer;      // Stop when Func_RC doesn't fall for some consecutive iterations      if (Func_RC < LastMin)      {         LastMin = Func_RC;         CountIncreaseIterations = 0;      }      else      {         CountIncreaseIterations++;         if (CountIncreaseIterations > 50)            break;      }      if (Func_RC < 1e-7) break;    }   return Func_RC;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看av不卡| 99久久婷婷国产综合精品电影| 亚洲日本在线a| 91麻豆自制传媒国产之光| 国产麻豆精品视频| 国产综合色在线| 精品一区二区三区视频| 蜜桃久久久久久久| 久久精品国产精品亚洲红杏| 国产精品一二三四| 久久99国产精品久久99| 午夜成人免费视频| 五月天精品一区二区三区| 天堂成人免费av电影一区| 午夜不卡av在线| 日本vs亚洲vs韩国一区三区二区 | 久久久久久久综合狠狠综合| 精品国产伦一区二区三区观看方式 | 欧美日韩成人在线| 欧洲一区二区三区在线| 欧美亚洲日本国产| 欧美日韩高清影院| 欧美一三区三区四区免费在线看 | 自拍av一区二区三区| 国产不卡视频一区| 亚洲一区欧美一区| 亚洲国产精品一区二区www在线| 亚洲福利国产精品| 免费一级片91| 国产91色综合久久免费分享| 97久久人人超碰| 欧美天堂一区二区三区| 欧美一区二区三区的| 久久亚洲一区二区三区明星换脸| 中文字幕不卡在线播放| 亚洲一区在线视频| 免费看欧美美女黄的网站| 91国偷自产一区二区三区成为亚洲经典 | 天天av天天翘天天综合网| 日本欧美在线观看| 国产不卡视频一区二区三区| 一本大道av伊人久久综合| 精品视频1区2区| 26uuu国产日韩综合| 韩日精品视频一区| 精品中文字幕一区二区小辣椒| 成人一区二区三区视频| 欧美日韩中字一区| 久久久久久黄色| 洋洋成人永久网站入口| 美国十次了思思久久精品导航| 国产风韵犹存在线视精品| 在线观看三级视频欧美| www一区二区| 亚洲在线成人精品| 国产在线看一区| 在线观看一区不卡| 国产亚洲视频系列| 亚洲成人av一区二区三区| 国产凹凸在线观看一区二区| 国产一区在线精品| 色综合久久88色综合天天免费| 日韩视频在线观看一区二区| 中文字幕一区二区三| 久久精品国产亚洲高清剧情介绍| eeuss鲁一区二区三区| 日韩色视频在线观看| 亚洲免费色视频| 欧美一区二区三区在线视频 | 韩日欧美一区二区三区| 久久99深爱久久99精品| 色拍拍在线精品视频8848| www久久精品| 蜜桃久久精品一区二区| 欧美性极品少妇| 中文字幕一区二区三区在线播放| 免费精品视频最新在线| 欧美无乱码久久久免费午夜一区| 国产精品麻豆欧美日韩ww| 久久99日本精品| 欧美日韩国产首页| 一区二区三区免费网站| 成人黄色片在线观看| www国产精品av| 久久久噜噜噜久噜久久综合| 偷拍一区二区三区| 91福利国产成人精品照片| 国产精品视频九色porn| 国内精品免费**视频| 日韩色视频在线观看| 日本在线播放一区二区三区| 色久综合一二码| a级高清视频欧美日韩| 日本久久一区二区三区| 亚洲欧洲精品天堂一级| 岛国一区二区三区| 久久久久国产成人精品亚洲午夜| 蜜臀久久久久久久| 5566中文字幕一区二区电影| 性久久久久久久久| 欧美日韩综合不卡| 亚洲第一久久影院| 欧美色图天堂网| 一区二区三区国产| 色播五月激情综合网| 悠悠色在线精品| 91成人在线观看喷潮| 亚洲码国产岛国毛片在线| 91视频免费看| 亚洲精品中文字幕在线观看| 欧美变态口味重另类| av在线不卡电影| 国产精品第13页| 99国产精品视频免费观看| 国产精品久久久久四虎| 91香蕉视频在线| 亚洲自拍另类综合| 欧美视频一区在线观看| 日韩经典一区二区| 日韩视频在线一区二区| 丁香激情综合国产| 亚洲另类春色校园小说| 色婷婷精品久久二区二区蜜臀av | 国产成人一区二区精品非洲| 国产亚洲精品7777| 成人自拍视频在线观看| 亚洲免费观看高清完整| 欧美主播一区二区三区美女| 午夜精品视频在线观看| 日韩精品一区二区三区在线| 国产精品性做久久久久久| 欧美激情综合在线| 一本色道亚洲精品aⅴ| 亚洲成人手机在线| 欧美r级在线观看| 国产99一区视频免费| 欧美一区二区三区白人| 久久99精品一区二区三区| 欧美国产日本视频| 在线精品亚洲一区二区不卡| 久久电影网站中文字幕| 国产精品理论片在线观看| 在线精品亚洲一区二区不卡| 麻豆精品视频在线| 国产精品丝袜黑色高跟| 亚洲国产一区在线观看| 福利一区在线观看| 亚洲一区二区三区三| 欧美电视剧免费观看| 99久久精品一区二区| 五月天丁香久久| 欧美激情综合五月色丁香小说| 91.成人天堂一区| 免费在线观看一区| 自拍偷拍国产精品| 欧美一级专区免费大片| av不卡在线播放| 毛片一区二区三区| 亚洲欧洲精品成人久久奇米网| 日韩欧美美女一区二区三区| av高清久久久| 韩国三级在线一区| 亚洲精品国产a久久久久久| 久久综合视频网| 欧美午夜寂寞影院| 国产成人免费视频网站| 精品国产不卡一区二区三区| 在线中文字幕一区二区| 国产伦精品一区二区三区视频青涩 | 久久亚洲综合av| 欧美影院精品一区| 国产精品资源在线看| 欧美猛男男办公室激情| 日韩毛片高清在线播放| 欧美成人伊人久久综合网| 91福利精品第一导航| 成人精品电影在线观看| 九九**精品视频免费播放| 亚洲va韩国va欧美va精品 | 日本欧美一区二区三区| 1024国产精品| 国产亚洲欧美在线| 欧美一区二区三区视频在线| 欧美熟乱第一页| 一本色道久久综合亚洲精品按摩 | 精品国内二区三区| 欧美三级在线播放| 91在线播放网址| 成人一二三区视频| 国模少妇一区二区三区| 日韩成人午夜电影| 日韩免费观看高清完整版在线观看| 色综合色狠狠综合色| 国产aⅴ综合色| 国产一区二三区| 久久国产精品99久久人人澡| 日韩国产精品91| 五月综合激情网| 亚洲国产毛片aaaaa无费看 | 亚洲三级视频在线观看|