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

📄 construct_matrix.cpp

📁 LDPC的c代码 包括编码 解码 加噪声 校验矩阵 生成矩阵
💻 CPP
字号:


#include "LDPC_head.h"
#include <stdlib.h>

node *space(struct matrix_bit *matrix)
{
	node *head;
	node *p1;
	node *p2;
	unsigned int i;
	unsigned int j;
//	unsigned int k;


	head=(struct node *)malloc (sizeof(struct node));
	head->row=-1;
	head->col=-1;
	head->left=NULL;
	head->right=NULL;
	head->up=NULL;
	head->down=NULL;
	head->Q=0;
	head->R=0;

	//分配行骨架节点
	head->right=(struct node *)malloc ((sizeof(struct node))*matrix->N);
	for(i=0;i<matrix->N;i++)
	{
		p1=head->right+i;
		p1->row=-1;
		p1->col=i;
		p1->up=NULL;
		p1->down=NULL;
		p1->Q=0;
		p1->R=0;

		if(i==0)
		{
			p1->left=head;
		}
		else
		{
			p1->left=p1-1;
		}
		if(i==matrix->N-1)
		{
			p1->right=head;
		}
		else
		{
			p1->right=p1+1;
		}
	}
	head->left=head->right+matrix->N-1;


    //分配列骨架节点
	head->down=(struct node *)malloc ((sizeof(struct node))*matrix->M);
	for(i=0;i<matrix->M;i++)
	{
		p1=head->down+i;
		p1->row=i;
		p1->col=-1;
		p1->left=NULL;
		p1->right=NULL;
		p1->Q=0;
		p1->R=0;
		if(i==0)
		{
			p1->up=head;
		}
		else
		{
			p1->up=p1-1;
		}
		if(i==matrix->M-1)
		{
			p1->down=head;
		}
		else
		{
			p1->down=p1+1;
		}
	}
	head->up=head->down+matrix->M-1;

    //构造体节点
	for(i=0;i<matrix->M;i++)
	{
		for(j=0;j<matrix->H_mrw;j++)
		{
			if(matrix->H[i*matrix->H_mrw+j]!=0)
			{
				p1=(struct node *)malloc (sizeof(struct node));
				p1->row=i;
				p1->col=matrix->H[i*matrix->H_mrw+j]-1;
				p1->R=0;
				p1->Q=0;


				p2=head->right+matrix->H[i*matrix->H_mrw+j]-1;
				while(p2->down!=NULL)
				{
					p2=p2->down;
				}
				p2->down=p1;
				p1->up=p2;
				p1->down=NULL;

				p2=head->down+i;
				while(p2->right!=NULL)
				{
					p2=p2->right;
				}
				p2->right=p1;
				p1->left=p2;
				p1->right=NULL;
			}
		}
	}
	p1=head->right;
	for(i=0;i<matrix->N;i++)
	{
		p2=p1->down;
		while(p2->down!=NULL)
		{
			p2=p2->down;
		}
		p2->down=p1;
		p1->up=p2;
		p1++;
	}

	p1=head->down;
	for(i=0;i<matrix->M;i++)
	{
		p2=p1->right;
		while(p2->right!=NULL)
		{
			p2=p2->right;
		}
		p2->right=p1;
		p1->left=p2;
		p1++;
	}

	return (head);
}

⌨️ 快捷键说明

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