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

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

?? viterbi216.cpp

?? vterbi譯碼 采用(2
?? CPP
字號:
#include "viterbi216.h"

//-----以下為函數部分-----
//---------------------------------------------------------------------------
CViterbi_216::CViterbi_216()
{
	Decode_States = 64;  //狀態數 2^m*k0
	Branch_Num = 2;    //從一個狀態延伸的分支數 n0
	Path_Length = 64;  //路徑保留長度 5*m < L < 10*m
	Path_Num = 32;    //保存幸存路徑個數
	First_Use = 1;

	Initial();
}
//---------------------------------------------------------------------------
CViterbi_216::~CViterbi_216()
{
	;
}
//---------------------------------------------------------------------------
void CViterbi_216::Initial()
{
	unsigned char NowStates;
	int OneNum;
	int i, j;

	//狀態發生器:產生2^k0*m_個狀態和分支值
	for(i=0; i<Decode_States; i++){
		for(j=0; j<Branch_Num; j++){
			NowStates = (i<<1) | j;
			OneNum = WeightInt(NowStates & G1);
			Branch_Tab[i][j] = OneNum % 2;
			OneNum = WeightInt(NowStates & G2);
			Branch_Tab[i][j] = (Branch_Tab[i][j] << 1) | (OneNum % 2);
		}
	}
	Init_Num = 0;//幸存路徑預裝載個數,Init_Num 的計算方法如下 2^Init_Num = Path_Num
	i = Path_Num;
	while(i > 1){
		Init_Num++;
		i = i / 2;
	}
}
//---------------------------------------------------------------------------
int CViterbi_216::Viterbi216(unsigned char *InBuf, int InLength, unsigned char *OutBuf, int Star_Mode)
{
	int i, j, p;
	int ReadBit = 0;
	int WriteByte = 0;
	int OutBit = 0;
	int Now_States = 0;
	int Temp_d, Temp_Hm, Temp_Lm;
	unsigned char NowCod;

	//表示處理非連續卷積碼編碼數據或者連續卷積碼編碼數據的第一個緩存
	if((Star_Mode == 0) | (First_Use == 1)){
		//初始化幸存路徑結構
		for(i=0; i<Path_Num; i++){
			Survivor_Save[i].Sum_d = 0;
			Survivor_Save[i].H_m32 = 0;
			Survivor_Save[i].L_m32 = 0;
		}
		//首先:將幸存路徑存儲緩存裝載滿
		for(i=0,j=1; i<Init_Num; i++){
			//每個時刻輸出2比特,和接收序列對應時刻的碼組比較漢明距離
			NowCod = InBuf[ReadBit/8] >> (6-ReadBit%8);//從接收序列中取出一個碼組
			NowCod = NowCod & 0x03;
			ReadBit += 2;
			//累加器:進行距離累加
			for(p=0; p<j; p++){
				Survivor_Save[p].Sum_d = Survivor_Temp[p].Sum_d;
				Survivor_Save[p].H_m32 = Survivor_Temp[p].H_m32; 
				Survivor_Save[p].L_m32 = Survivor_Temp[p].L_m32;

				Now_States = char(Survivor_Save[p].L_m32 & 0x3f);

				Survivor_Temp[p].Sum_d = Survivor_Save[p].Sum_d + 
					WeightInt(NowCod ^ Branch_Tab[Now_States][0]);
				Survivor_Temp[p].L_m32 = (Survivor_Save[p].L_m32<<1) | 0;
				Survivor_Temp[p+j].Sum_d = Survivor_Save[p].Sum_d + 
					WeightInt(NowCod ^ Branch_Tab[Now_States][1]);
				Survivor_Temp[p+j].L_m32 = (Survivor_Save[p].L_m32<<1) | 1;
			}
			j = 2 * j;
			for(p=0; p<j; p++){
				Survivor_Save[p].Sum_d = Survivor_Temp[p].Sum_d;
				Survivor_Save[p].H_m32 = Survivor_Temp[p].H_m32;
				Survivor_Save[p].L_m32 = Survivor_Temp[p].L_m32;
			}        
		}
		//用選擇法對Survivor_Save[].Sum_d按由小到大排序
		//在此可以不排序,但是排序后效果更好,可以減少Path_Num的個數
		/*for(i=0; i<Path_Num-1; i++){
		for(j=i+1; j<Path_Num; j++){
		if(Survivor_Save[j].Sum_d < Survivor_Save[i].Sum_d){
		Temp_d = Survivor_Save[i].Sum_d;
		Temp_Hm = Survivor_Save[i].H_m32;
		Temp_Lm = Survivor_Save[i].L_m32;
		Survivor_Save[i].Sum_d = Survivor_Save[j].Sum_d;
		Survivor_Save[i].H_m32 = Survivor_Save[j].H_m32;
		Survivor_Save[i].L_m32 = Survivor_Save[j].L_m32;
		Survivor_Save[j].Sum_d = Temp_d;
		Survivor_Save[j].H_m32 = Temp_Hm;
		Survivor_Save[j].L_m32 = Temp_Lm;
		}
		}
		}//*/
		OutBit = Init_Num;
		First_Use = 0;
	}
	//第二步:對數據進行糾錯譯碼
	for( ; ReadBit<InLength*8; ){
		//判決器:輸出漢明距離最小的幸存路徑的高32比特,有多個最小時輸出任意一個
		if(OutBit == Path_Length){
			//輸出最小路徑的高32比特信息序列
			OutBuf[WriteByte++] = char(Survivor_Save[0].H_m32>>24);
			OutBuf[WriteByte++] = char(Survivor_Save[0].H_m32>>16);
			OutBuf[WriteByte++] = char(Survivor_Save[0].H_m32>>8);
			OutBuf[WriteByte++] = char(Survivor_Save[0].H_m32);
			OutBit = 32;
		}
		//接收序列各個時刻的循環
		//每個時刻輸出2比特,和接收序列對應時刻的碼組比較得到漢明距離
		NowCod = InBuf[ReadBit/8] >> (6-ReadBit%8);//從接收序列中取出一個碼組
		NowCod = NowCod & 0x03;
		ReadBit += 2;
		//累加器:進行距離累加
		for(j=0; j<Path_Num; j++){
			Now_States = char(Survivor_Save[j].L_m32 & 0x3f);

			Survivor_Temp[j].Sum_d = Survivor_Save[j].Sum_d + 
				WeightInt(NowCod ^ Branch_Tab[Now_States][0]);
			Survivor_Temp[j].H_m32 = Survivor_Save[j].H_m32<<1 | 
				Survivor_Save[j].L_m32>>31;
			Survivor_Temp[j].L_m32 = Survivor_Save[j].L_m32<<1;
			Survivor_Temp[j+Path_Num].Sum_d = Survivor_Save[j].Sum_d + 
				WeightInt(NowCod ^ Branch_Tab[Now_States][1]);
			Survivor_Temp[j+Path_Num].H_m32 = Survivor_Save[j].H_m32<<1 | 
				Survivor_Save[j].L_m32>>31;
			Survivor_Temp[j+Path_Num].L_m32 = (Survivor_Save[j].L_m32<<1) | 1;
		}
		//比較器:比較各條路徑的距離,保留相對較小的Path_Num條
		//用選擇法對Survivor_Temp[].Sum_d按由小到大排序
		for(i=0; i<Path_Num; i++){
			for(j=i+1; j<2*Path_Num; j++){
				if(Survivor_Temp[j].Sum_d < Survivor_Temp[i].Sum_d){
					Temp_d = Survivor_Temp[i].Sum_d;
					Temp_Hm = Survivor_Temp[i].H_m32;
					Temp_Lm = Survivor_Temp[i].L_m32;
					Survivor_Temp[i].Sum_d = Survivor_Temp[j].Sum_d;
					Survivor_Temp[i].H_m32 = Survivor_Temp[j].H_m32;
					Survivor_Temp[i].L_m32 = Survivor_Temp[j].L_m32;
					Survivor_Temp[j].Sum_d = Temp_d;
					Survivor_Temp[j].H_m32 = Temp_Hm;
					Survivor_Temp[j].L_m32 = Temp_Lm;
				}
			}
		}
		//將較小的Path_Num條存入幸存路徑結構緩存
		for(i=0; i<Path_Num; i++){
			Survivor_Save[i].Sum_d = Survivor_Temp[i].Sum_d;
			Survivor_Save[i].H_m32 = Survivor_Temp[i].H_m32;
			Survivor_Save[i].L_m32 = Survivor_Temp[i].L_m32;
		}
		OutBit++;
	}
	//第三步:對數據尾部的處理,
	//輸出漢明距離最小的幸存路徑的OutBit個比特(位權較低的OutBit個),有多個最小的輸出任意一個
	if(OutBit == 64){
		OutBuf[WriteByte++] = char(Survivor_Save[0].H_m32>>24);
		OutBuf[WriteByte++] = char(Survivor_Save[0].H_m32>>16);
		OutBuf[WriteByte++] = char(Survivor_Save[0].H_m32>>8);
		OutBuf[WriteByte++] = char(Survivor_Save[0].H_m32);
		OutBuf[WriteByte++] = char(Survivor_Save[0].L_m32>>24);
		OutBuf[WriteByte++] = char(Survivor_Save[0].L_m32>>16);
		OutBuf[WriteByte++] = char(Survivor_Save[0].L_m32>>8);
		OutBuf[WriteByte++] = char(Survivor_Save[0].L_m32);
	}
	else{
		if(OutBit > 32){
			Temp_Hm = (Survivor_Save[0].H_m32<<(64-OutBit)) | (Survivor_Save[0].L_m32>>(OutBit-32));
			OutBuf[WriteByte++] = char(Temp_Hm>>24);
			OutBuf[WriteByte++] = char(Temp_Hm>>16);
			OutBuf[WriteByte++] = char(Temp_Hm>>8);
			OutBuf[WriteByte++] = char(Temp_Hm);
			OutBit -= 32; 
		}
		Temp_Lm = Survivor_Save[0].L_m32 << (32-OutBit);
		while(OutBit > 0){
			OutBuf[WriteByte++] = char(Temp_Lm>>24);
			Temp_Lm = Temp_Lm << 8;
			OutBit -= 8;
		}
	}
	//第四步:如果處理的是連續數據,要將較小幸存路徑的漢明距離縮小,避免溢出
	/*for(i=1; i<Path_Num; i++){
	if((Survivor_Save[i].Sum_d - Survivor_Save[0].Sum_d) > Path_Length)
	Survivor_Save[i].Sum_d = Path_Length;
	else
	Survivor_Save[i].Sum_d -= Survivor_Save[0].Sum_d;
	}
	Survivor_Save[0].Sum_d = 0;
	//*/
	//維特比譯碼結束

	return WriteByte;
}
//---------------------------------------------------------------------------
int CViterbi_216::Encode_216(unsigned char * InBuf, int InLength, unsigned char * OutBuf, int Now_State)
{
	int ReadBit;
	int ReadByte;
	int WriteBit;
	unsigned char Now_m;
	unsigned char Now_Encode;

	for(ReadByte=0,WriteBit=0; ReadByte<InLength; ReadByte++){
		for(ReadBit=0; ReadBit<8; ReadBit++){
			Now_m = InBuf[ReadByte]>>(7-ReadBit);
			Now_m = Now_m & 0x01;

			Now_Encode = Branch_Tab[Now_State][Now_m];

			Now_State = Now_State<<1 | Now_m;
			Now_State = Now_State & 0x3f;

			OutBuf[WriteBit/8] = (OutBuf[WriteBit/8]<<2) | Now_Encode;
			WriteBit += 2;
		}
	}
	if(WriteBit != 2*8*InLength)
		return 0xff;

	return Now_State;
}
//---------------------------------------------------------------------------
int WeightInt(int x)
{
	int countx = 0;
	while(x)
	{
		countx ++;
		x = x&(x-1); 
	}
	return countx;
}
//每次將最低位的“1”去掉
//--------------------------------------------------------------------------- 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产亚洲精品bt天堂精选| 一区二区三区**美女毛片| 欧美激情在线看| 一区二区三区四区激情| 麻豆精品蜜桃视频网站| 99精品国产视频| xnxx国产精品| 五月激情丁香一区二区三区| 成人一区二区三区中文字幕| 在线91免费看| 亚洲免费看黄网站| 成人精品电影在线观看| 精品久久久三级丝袜| 天堂av在线一区| 色诱视频网站一区| 亚洲欧洲日本在线| 大陆成人av片| 国产日本一区二区| 国产在线一区二区| 日韩一区和二区| 日本特黄久久久高潮| 欧美精品免费视频| 亚洲亚洲人成综合网络| 99r国产精品| 国产精品久久久99| 岛国精品在线播放| 中文字幕国产一区二区| 国产自产v一区二区三区c| 日韩一区二区精品在线观看| 丝袜a∨在线一区二区三区不卡| 91久久久免费一区二区| 亚洲精品日韩一| 在线免费观看成人短视频| 亚洲日本青草视频在线怡红院| 成人午夜看片网址| 国产精品午夜在线| www.欧美日韩国产在线| 亚洲色图制服丝袜| 91久久精品网| 亚洲成人精品在线观看| 欧美日产在线观看| 理论片日本一区| 国产午夜精品一区二区三区嫩草| 国产综合色在线| 国产精品高潮呻吟久久| 色乱码一区二区三区88| 亚洲国产欧美在线人成| 91精品国产麻豆国产自产在线| 三级在线观看一区二区| 亚洲精品一区二区三区99| 国产激情一区二区三区| 综合电影一区二区三区 | 欧美va亚洲va国产综合| 久久疯狂做爰流白浆xx| 久久精品无码一区二区三区 | 亚洲成av人片| 日韩午夜激情视频| 国产精品亚洲一区二区三区在线| 久久久不卡网国产精品一区| 99在线精品一区二区三区| 亚洲第一久久影院| 久久品道一品道久久精品| 97精品久久久久中文字幕| 亚洲一区二区欧美日韩| 精品欧美久久久| 99久久99久久综合| 久久精品国产亚洲一区二区三区| 欧美极品另类videosde| 欧美日韩高清一区二区三区| 另类小说一区二区三区| 亚洲精品国产视频| 2024国产精品| 欧美日韩中文一区| 国产不卡视频在线播放| 亚洲国产精品久久人人爱蜜臀| 精品剧情v国产在线观看在线| 97se狠狠狠综合亚洲狠狠| 秋霞午夜鲁丝一区二区老狼| 国产欧美日韩精品a在线观看| 欧美日韩一区二区三区四区 | 国产喂奶挤奶一区二区三区| 日本精品一级二级| 国产成人午夜精品影院观看视频| 亚洲www啪成人一区二区麻豆| 欧美国产精品一区二区三区| 欧美区一区二区三区| 成人动漫一区二区在线| 奇米影视一区二区三区小说| 亚洲精品你懂的| 国产精品黄色在线观看| 亚洲精品一区二区三区蜜桃下载| 色婷婷综合久久久| 东方aⅴ免费观看久久av| 免费精品视频在线| 亚洲午夜精品久久久久久久久| 欧美激情自拍偷拍| 精品国产百合女同互慰| 欧美精品三级日韩久久| 色妹子一区二区| 99国产麻豆精品| 国产成人av电影在线| 久久国产成人午夜av影院| 午夜精品久久久久久久| 一区二区三区日韩精品视频| 国产精品毛片高清在线完整版| 久久天堂av综合合色蜜桃网| 日韩三级在线观看| 欧美一区二区三区小说| 8x8x8国产精品| 日韩一区二区免费高清| 91麻豆精品国产91久久久| 欧美日韩亚洲丝袜制服| 欧美性猛交xxxx黑人交| 欧美三级日韩在线| 欧美日本一区二区| 欧美日韩免费观看一区二区三区| 日本韩国精品在线| 欧美性猛交xxxx黑人交| 在线成人午夜影院| 日韩欧美在线一区二区三区| 91麻豆精品国产91久久久久久| 欧美一区二区三区小说| 欧美精品一区二区高清在线观看| 26uuu亚洲综合色欧美| 国产午夜精品久久久久久免费视| 国产三级久久久| 中文字幕一区二区日韩精品绯色| 中文字幕日韩一区| 一区二区欧美精品| 秋霞电影网一区二区| 久久精品久久久精品美女| 国产在线播精品第三| 粉嫩蜜臀av国产精品网站| 91丝袜美腿高跟国产极品老师| 色偷偷成人一区二区三区91| 欧美另类z0zxhd电影| 精品免费视频.| 国产精品伦一区二区三级视频| 亚洲精品中文字幕乱码三区| 五月婷婷综合网| 激情文学综合网| 99久久婷婷国产精品综合| 欧美日韩国产综合一区二区| 精品欧美乱码久久久久久1区2区| 国产精品久久久久久一区二区三区 | 色婷婷激情久久| 欧美精品免费视频| 国产天堂亚洲国产碰碰| 亚洲欧美日韩电影| 免费成人在线观看| eeuss鲁片一区二区三区在线看| 欧洲视频一区二区| 久久亚洲精品国产精品紫薇| 国产精品电影一区二区| 日本视频中文字幕一区二区三区| 国产99久久久久| 56国语精品自产拍在线观看| 久久久高清一区二区三区| 亚洲成人你懂的| www.欧美精品一二区| 日韩欧美国产成人一区二区| 18成人在线观看| 久久综合综合久久综合| 在线观看国产一区二区| 久久久精品人体av艺术| 日韩精品午夜视频| 94色蜜桃网一区二区三区| 日韩亚洲电影在线| 亚洲国产精品久久人人爱| 成人综合在线网站| 欧美刺激脚交jootjob| 亚洲午夜私人影院| av电影天堂一区二区在线观看| 欧美一区二区视频在线观看 | 成人av第一页| 精品99一区二区| 婷婷国产v国产偷v亚洲高清| 91在线视频观看| 亚洲国产成人私人影院tom| 乱一区二区av| 精品污污网站免费看| 亚洲欧美另类图片小说| 国产成人精品1024| 久久蜜桃香蕉精品一区二区三区| 偷拍亚洲欧洲综合| 欧美午夜视频网站| 亚洲美女视频一区| 91网页版在线| 亚洲男人的天堂网| 99riav一区二区三区| 国产精品天天看| 豆国产96在线|亚洲| 中文字幕精品在线不卡| 国产成人综合自拍| 国产欧美一区二区精品性色| 久久99久久精品| 精品免费日韩av| 国产v综合v亚洲欧| 国产精品乱码一区二区三区软件| 国产精品香蕉一区二区三区|