⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lr_en_de_code.cpp

📁 程序中给出了一个和积算法的LDPC程序
💻 CPP
字号:
#include "LR_en_de_CODE.h"
using namespace  std;
struct Anode_inf
{
	bool flag;
	int col_num;
	double q_dmeg;
	double r_meg0;
	double r_meg1;
};
struct Bnode_inf
{
	bool flag;
	int Acol_num;
    int Arow_num;
};
Anode_inf Anode_inf_mat[H_row][Hmax_rowdeg];
Bnode_inf Bnode_inf_mat[H_col][Hmax_coldeg];
unsigned char P_MAT[H_row][H_col-H_row];
int rearranged_col[H_row];
int *en_out,*de_out;
double *bit_noise;

void initi();
void HtoP();
void encode(int *out_address);
void add_noise(int * in_adderss,double N0,double * out_adderss);
void decode(double *in_address,double N0,int *out_address);

void read_P_MAT()
{ 		
	    int temp_int,i;char temp_char;
		ifstream Change_col("高斯交换列.txt",ios_base::in);
		for(i=0;i<H_row;i++)
		{
			Change_col>>rearranged_col[i];
			//cout<<i<<" "<<rearranged_col[i]<<endl;
		}
		Change_col.close();
	    ifstream Pcheck_mat("P_MAT.txt",ios_base::in); 
		for(i=0;i<H_row;i++)
		{
			//Pcheck_mat<<(i+1);
			Pcheck_mat>>temp_int;
            while(Pcheck_mat.peek()==',')
			{
				Pcheck_mat>>temp_char;
				Pcheck_mat>>temp_int;
					P_MAT[i][temp_int-1]=1;
			}
            //Pcheck_mat<<"\n";
		} 
    	Pcheck_mat.close();
}

void main()
{
	srand( (unsigned)time( NULL ) );
	double EbN0=1.0;
    double N0;
	en_out=(int *) malloc((sizeof(int))*H_col);
    de_out=(int *) malloc((sizeof(int))*H_col);
    bit_noise=(double *) malloc((sizeof(double))*H_col);
	
	initi();
	    //
	//read_P_MAT();
	    //or
	HtoP();
	    //
	for(int SNR_point=0;SNR_point<10;SNR_point++,EbN0=EbN0+0.2)
	{
	   double wrong_bit_num=0;

	  cout<<endl<<"信噪比为["<<EbN0<<"]dB"<<endl;	
	  N0=pow(10,(-(EbN0/10)))*(H_col/(H_col-H_row));

	  for(int smui_block_num=1;smui_block_num<=SIMULATION_BLOCK_NUM;smui_block_num++)
	  {
	      encode(en_out);
	      add_noise(en_out,N0,bit_noise);
	      decode(bit_noise,N0,de_out);
		  for(int check=0;check<H_col;check++)
		  {
			 if(*(de_out+check)!=*(en_out+check))
			 {
			   wrong_bit_num++;// break;
			 }
		  }
		  if(smui_block_num%50==0)
		  {
	         cout<<"["<<smui_block_num<<"]分组  ["<<wrong_bit_num<<"]误码"<<"  ";
	         cout<<"误码率["<<(wrong_bit_num)/smui_block_num/H_col<<"]"<<endl;
		  }
	  }//////****分组数循环****///////
	}////////****信噪比循环****///////
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -