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

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

?? btcdecode.c

?? wimax802.16e中的BTC編碼仿真程序
?? C
字號:
/*
*********************************************************************************
* Copyright (c) National Mobile Communications Research Laboratory. 
* All rights reserved.
* 
* FILE NAME : BTCdecode.c
* ABSTRUCT:
*	This file is the C file for BTC decoding.
*	
* AUTHOR:	Zhang Tao	2007-02-13
*
*********************************************************************************
*/

/*
*********************************************************************************
*                               INCLUDE FILES
*********************************************************************************
*/

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include "..\..\GlobalDef.h"
#include "..\..\GlobalVar.h"
#include "BTCstruct.h"
#include "BTCinit.h"
#include "chase.h"
/*
*********************************************************************************
*                              Function Definition
*********************************************************************************
*/
/*
*********************************************************************************
* NAME:		DBMatrixTrans
* PURPOSE:	perform the transposition of a double style matrix.
*
* Input:	data_in[]:  data input.
*			row : the row number of the matrix.
*			col : the column number of the matrix.
*				
* Output:	data_out[]: data output.
*					
* AUTHOR: 	Zhang Tao	2007-02-12	
* 
*********************************************************************************
*/
void DBMatrixTrans(double data_in[],int row,int col,double data_out[])
{
	int index1;
	int index2;
	int len1 = 0;
	int len2 = 0;

	for(index1=0;index1<row;index1++)
	{
		len2 = 0;
		for(index2=0;index2<col;index2++)
		{
			data_out[index1+len2] = data_in[len1+index2];
			len2 += row;
		}
		len1 += col;
	}
}
/*
*********************************************************************************
* NAME:		GenZeroSoft
* PURPOSE:	obtain the soft value of the zero bit.
*
* Input:	rowsoft[]:  soft value of the sequence in row order.
*			BTC :  the parameter for BTC.
*				
* Output:	
*					
* AUTHOR: 	Zhang Tao	2007-02-13	
* 
*********************************************************************************
*/
void GenZeroSoft(double rowsoft[],BTCstruct BTC)
{
	double softvalue = 2.0;
	int index;
	int i;
	int j;

	index = BTC.nx * BTC.Iy + BTC.Ix + BTC.B + BTC.Q;
	for(i=0;i<index;i++)
	{
		rowsoft[i] = softvalue;
	}
	index = BTC.nx * (BTC.Iy + 1);
	for(j=BTC.Iy+1;j<BTC.ny;j++)
	{
		for(i=0;i<BTC.Ix;i++)
		{
			rowsoft[index+i] = softvalue;
		}
		index += BTC.nx;
	}
}
/*
*********************************************************************************
* NAME:		oneBTCdecode
* PURPOSE:	one BTC block decoding without slot concatenation.
*
* Input:	code_in[]:  the code for decoding.
*			BTC :  the parameter for BTC.
*				
* Output:	data_out[]: one block data output.
*					
* AUTHOR: 	Zhang Tao	2007-02-13	
* 
*********************************************************************************
*/
void oneBTCdecode(double code_in[],int data_out[],BTCstruct BTC)
{
	int matrix_len = BTC.nx * BTC.ny; //the whole length of one BTC block.
	double *matrix_seq; //the whole sequence with received code and zero bits.
	double zero_soft = 1.0; //the soft value for the zero bits.
	int *mid_seq; //the middle decoded code vector.
	double *rowsoft; //extrinsic information from row decoding.
	double *colsoft; //extrinsic information from column decoding.
	double *reliable;//the sequence for the reliable value.
	double *matrix_seq_trans; //the transposition of the matrix_seq.
	double alfa1[4] = {0.0,0.3,0.7,1.0};
	double alfa2[4] = {0.2,0.5,0.9,1.0};
	double beta1[4] = {0.2,0.6,1.0,1.0};
	double beta2[4] = {0.4,0.8,1.0,1.0};
	int iterate = 0; //the counter for the iteration number.
	int index1,index2;
	int len;
	int i,j;

	//generate the matrix_seq
	matrix_seq = (double *)malloc(matrix_len * sizeof(double));
	index1 = BTC.nx * BTC.Iy + BTC.Ix + BTC.B + BTC.Q;
	index2 = BTC.Q;
	for(i=0;i<index1;i++)
	{
		matrix_seq[i] = zero_soft;
	}
	//first row
	len = BTC.nx - (BTC.Ix + BTC.B + BTC.Q);
	memcpy(matrix_seq+index1,code_in+index2,len*sizeof(double));
	//remaining rows
	index1 += len;
	index2 += len;
	len = BTC.nx - BTC.Ix;
	for(i=BTC.Iy+1;i<BTC.ny;i++)
	{
		for(j=0;j<BTC.Ix;j++)
		{
			matrix_seq[index1+j] = zero_soft;
		}
		index1 += BTC.Ix;
		memcpy((matrix_seq+index1),(code_in+index2),len*sizeof(double));
		index1 += len;
		index2 += len;
	}

	//initialization
	mid_seq = (int *)malloc(matrix_len * sizeof(int));
	rowsoft = (double *)malloc(matrix_len * sizeof(double));
	colsoft = (double *)malloc(matrix_len * sizeof(double));
	memset(colsoft, 0, matrix_len * sizeof(double));
	reliable = (double *)malloc(matrix_len * sizeof(double));
	matrix_seq_trans = (double *)malloc(matrix_len * sizeof(double));
	
	DBMatrixTrans(matrix_seq,BTC.ny,BTC.nx,matrix_seq_trans);

	//iterative decoding
	while(iterate<4)
	{
		DBMatrixTrans(colsoft,BTC.nx,BTC.ny,rowsoft);
		
		GenZeroSoft(rowsoft,BTC);
		
		//generate reliable value sequence.
		for(i=0;i<matrix_len;i++)
		{
			reliable[i] = matrix_seq[i] + alfa1[iterate] * rowsoft[i];
		}
		
		//row decoding
		index1 = BTC.nx * BTC.Iy;
		for(i=BTC.Iy;i<BTC.ny;i++)
		{
			Chase((reliable+index1),0,beta1[iterate],BTC,(mid_seq+index1),(rowsoft+index1));
			index1 += BTC.nx;
		}

		GenZeroSoft(rowsoft,BTC);

		DBMatrixTrans(rowsoft,BTC.ny,BTC.nx,colsoft);

		//generate reliable value sequence.
		for(i=0;i<matrix_len;i++)
		{
			reliable[i] = matrix_seq_trans[i] + alfa2[iterate] * colsoft[i];
		}

		//column decoding
		index1 = BTC.ny * BTC.Ix;
		for(i=BTC.Ix;i<BTC.nx;i++)
		{
			Chase((reliable+index1),1,beta2[iterate],BTC,(mid_seq+index1),(colsoft+index1));
			index1 += BTC.ny;
		}

		iterate++;
	}

	//output
	index1 = BTC.ny * (BTC.Ix + BTC.B + BTC.Q) + BTC.Iy;
	len = BTC.kx - (BTC.Ix + BTC.B + BTC.Q);
	for(i=0;i<len;i++)
	{
		data_out[i] = mid_seq[index1];
		index1 += BTC.ny;
	}
	
	index2 = len;
	len = BTC.kx - BTC.Ix;
	for(j=BTC.Iy+1;j<BTC.ky;j++)
	{
		index1 = BTC.ny * BTC.Ix + j;
		for(i=0;i<len;i++)
		{
			data_out[index2+i] = mid_seq[index1];
			index1 += BTC.ny;
		}
		index2 += len;
	}


	free(matrix_seq);
	free(mid_seq);
	free(rowsoft);
	free(colsoft);
	free(reliable);
	free(matrix_seq_trans);
}

/*
*********************************************************************************
* NAME:		BTCdecode
* PURPOSE:	decoding BTC with concatenation of slots.
*
* Input:	data_in[]:  the received data for decoding.
*			nslot: the slot number for the encoded and modulated data.
*			rep: the repetition factor.
*			fec: the struct for the FEC type.
*				
* Output:	data_out[]: the data output.
*					
* AUTHOR: 	Zhang Tao	2007-02-13	
* 
*********************************************************************************
*/
void BTCdecode(double data_in[],int nslot,int rep,FEC_TYPE fec,int data_out[])
{
	int n_slot = 0;//n_slot=nslot/rep;
	int cnt_block = 0;
	int para_j = 0;//parameter dependent on the modulation and FEC rate
	int para_k = 0;//floor(n_slot/para_j).
	int para_m = 0;//n_slot modulo para_j.
	double *pdata_in = data_in;
	int *pdata_out = data_out;
	BTCstruct BTC; //BTC parameter.
	int slot_num = 0;
	int encoded_len;
	
	switch(fec.modID)
	{
	case 2:
		if(fec.rateID==1)
			para_j = 6;
		else
			para_j = 4;
		break;
	case 4:
		if(fec.rateID==1)
			para_j = 3;
		else
			para_j = 2;
		break;
	case 6:
		if(fec.rateID==1)
			para_j = 2;
		else if(fec.rateID==2)
			para_j = 1;
		else
			para_j = 1;
		break;
	}


	n_slot = nslot / rep;
	para_k = n_slot / para_j;
	para_m = n_slot % para_j;
	
	if(n_slot<=para_j)
	{
		encoded_len = n_slot * fec.modID * 48;
		BTCInit(encoded_len,fec.rateID,&BTC);
		oneBTCdecode(pdata_in,pdata_out,BTC);	
	}
	else if(n_slot>para_j && para_m==0)
	{
		encoded_len = para_j * fec.modID * 48;
		BTCInit(encoded_len,fec.rateID,&BTC);
		for(cnt_block=0;cnt_block<para_k;cnt_block++)
		{
			pdata_in = data_in + cnt_block * encoded_len;
			oneBTCdecode(pdata_in,pdata_out,BTC);
			pdata_out += BTC.msg_len;
		}
	}
	else
	{
		encoded_len = para_j * fec.modID * 48;
		BTCInit(encoded_len,fec.rateID,&BTC);
		for(cnt_block=0;cnt_block<para_k-1;cnt_block++)
		{
			pdata_in = data_in + cnt_block * encoded_len;
			oneBTCdecode(pdata_in,pdata_out,BTC);
			pdata_out += BTC.msg_len;
		}

		pdata_in += encoded_len;
		slot_num = (para_m+para_j) / 2;
		encoded_len = slot_num * 48 * fec.modID;
		BTCInit(encoded_len,fec.rateID,&BTC);
		oneBTCdecode(pdata_in,pdata_out,BTC);
		pdata_out += BTC.msg_len;

		pdata_in += encoded_len;
		slot_num = n_slot - para_j*(para_k-1) - (para_m+para_j) / 2;
		encoded_len = slot_num * 48 * fec.modID;
		BTCInit(encoded_len,fec.rateID,&BTC);
		oneBTCdecode(pdata_in,pdata_out,BTC);
		
	}

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产伦精一区二区三区| 成人精品视频一区二区三区尤物| 蜜臀av性久久久久蜜臀aⅴ四虎 | 蜜臀av性久久久久av蜜臀妖精| 欧美专区亚洲专区| 日韩一卡二卡三卡四卡| 亚洲猫色日本管| 日韩成人一区二区三区在线观看| 丁香激情综合国产| 精品日韩99亚洲| 日韩二区在线观看| 色噜噜久久综合| 国产精品美女久久久久久久| 精品亚洲aⅴ乱码一区二区三区| 欧美怡红院视频| 欧美一区二区三区在| 亚洲欧洲99久久| 国产精品乡下勾搭老头1| 欧美一区二区国产| 日本在线观看不卡视频| 欧美亚洲综合另类| 伊人婷婷欧美激情| 91麻豆高清视频| 亚洲乱码国产乱码精品精的特点 | 欧美三日本三级三级在线播放| 国产日韩亚洲欧美综合| 久草在线在线精品观看| 日韩免费观看高清完整版在线观看| 天堂久久一区二区三区| 欧美日韩国产片| 日韩精品成人一区二区三区 | 国产拍揄自揄精品视频麻豆| 日韩免费看网站| 国产精品久久久久桃色tv| 国产伦理精品不卡| 久久久久国色av免费看影院| 美腿丝袜亚洲三区| 欧美电影免费观看高清完整版| 丝袜亚洲另类丝袜在线| 欧美日韩一区 二区 三区 久久精品| 亚洲女同ⅹxx女同tv| 91蜜桃免费观看视频| 亚洲欧美一区二区在线观看| 青青草原综合久久大伊人精品| 7878成人国产在线观看| 看电视剧不卡顿的网站| 久久精品亚洲乱码伦伦中文| 国产成人免费视频一区| 17c精品麻豆一区二区免费| 91香蕉视频mp4| 亚洲电影视频在线| 日韩免费视频一区二区| 成人免费黄色大片| 亚洲综合免费观看高清在线观看| 欧美日韩综合一区| 欧美精品一区二区三区在线播放| 欧美日本免费一区二区三区| 日韩综合小视频| 26uuu亚洲婷婷狠狠天堂| 高清不卡一二三区| 一区二区三区中文免费| 日韩欧美国产综合在线一区二区三区| 国产成人夜色高潮福利影视| 亚洲天堂免费看| 在线综合视频播放| 成人性生交大合| 日韩激情视频在线观看| 中文乱码免费一区二区| 欧美亚洲丝袜传媒另类| 六月婷婷色综合| 日韩理论片一区二区| 欧美久久一二区| 成人做爰69片免费看网站| 亚洲午夜久久久| 国产日韩高清在线| 欧美日韩视频一区二区| 国产99精品在线观看| 午夜视频在线观看一区二区| 欧美高清在线一区| 欧美一区二区三区思思人| 91在线观看下载| 国产在线精品一区二区夜色 | 欧美一区国产二区| 欧美一区二区三区在线看| 蜜臀久久久99精品久久久久久| 国产精品国产三级国产有无不卡| 欧美精品乱码久久久久久按摩 | 国产日韩欧美制服另类| 欧美亚洲一区二区三区四区| 国产精品18久久久久久vr| 日韩成人伦理电影在线观看| 激情综合五月婷婷| 欧美高清一级片在线| 国产成人免费9x9x人网站视频| 五月婷婷激情综合网| 伊人性伊人情综合网| 国产精品无码永久免费888| 日本在线不卡视频| 亚洲宅男天堂在线观看无病毒| 国产精品无人区| 国产亚洲综合性久久久影院| 日韩天堂在线观看| 91麻豆精品国产综合久久久久久 | 麻豆久久久久久| 亚洲成人动漫在线免费观看| 亚洲自拍另类综合| 亚洲免费在线播放| 中文字幕欧美一| 国产精品久久久久久久第一福利| 久久久久久久久久久久电影 | 亚洲午夜羞羞片| 一区二区欧美国产| 国产福利91精品一区二区三区| 91免费视频网址| 国产成+人+日韩+欧美+亚洲| 久久精品国产一区二区三| 蜜桃av一区二区| 久久99国产精品成人| 奇米精品一区二区三区在线观看一| 亚洲va韩国va欧美va精品| 五月天丁香久久| 捆绑紧缚一区二区三区视频| 国内欧美视频一区二区| 国产91在线观看| 91视视频在线观看入口直接观看www| 99免费精品在线| 欧美日韩久久不卡| 日韩欧美一区中文| 国产午夜亚洲精品午夜鲁丝片| 国产人久久人人人人爽| 亚洲欧美乱综合| 五月天激情小说综合| 寂寞少妇一区二区三区| 欧美久久久久久久久中文字幕| 成人免费福利片| 色综合视频在线观看| 宅男在线国产精品| 国产亚洲女人久久久久毛片| **性色生活片久久毛片| 午夜影视日本亚洲欧洲精品| 麻豆一区二区在线| 波多野结衣91| 91精品国产色综合久久| 国产三级一区二区| 亚洲一区二区三区小说| 精品中文av资源站在线观看| 成人激情免费视频| 欧美一区二区三区成人| 国产午夜久久久久| 亚洲va在线va天堂| 国产成人99久久亚洲综合精品| 欧美三级中文字幕在线观看| 久久久久久影视| 亚洲国产精品综合小说图片区| 国产美女视频91| 欧美久久免费观看| 国产精品美女www爽爽爽| 肉色丝袜一区二区| 国产iv一区二区三区| 在线播放亚洲一区| 国产精品美女久久福利网站| 免费看日韩精品| 在线视频国内一区二区| 国产亚洲综合在线| 奇米精品一区二区三区在线观看 | 一本色道久久加勒比精品| 欧美电视剧在线看免费| 一区二区三区国产精华| 成人免费va视频| 337p日本欧洲亚洲大胆精品| 亚洲成人av电影| 91免费精品国自产拍在线不卡| 久久久久久久av麻豆果冻| 日韩精品欧美成人高清一区二区| 91污在线观看| 国产精品无遮挡| 国产一区二区精品久久91| 欧美一级黄色片| 成人理论电影网| 成人激情校园春色| www久久精品| 青青草原综合久久大伊人精品| 色婷婷av久久久久久久| 成人欧美一区二区三区1314 | 欧美亚洲尤物久久| 亚洲欧美日韩成人高清在线一区| 欧美一级片免费看| 欧美性做爰猛烈叫床潮| 狠狠色丁香九九婷婷综合五月 | 日本麻豆一区二区三区视频| 色综合激情五月| 国产精品理伦片| 高清不卡在线观看| 国产精品视频第一区| 国产成人精品亚洲日本在线桃色| 亚洲精品一区二区三区99| 另类小说色综合网站| 91精品黄色片免费大全| 蜜臀av一区二区| 欧美不卡一二三|