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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? viterbi.cpp

?? viterbi譯碼算法是一種卷積碼的解碼算法
?? CPP
字號:
#include "viterbi216.h"

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

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

	//狀態(tài)發(fā)生器:產(chǎn)生2^k0*m_個狀態(tài)和分支值
	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;//幸存路徑預(yù)裝載個數(shù),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;

	//表示處理非連續(xù)卷積碼編碼數(shù)據(jù)或者連續(xù)卷積碼編碼數(shù)據(jù)的第一個緩存
	if((Star_Mode == 0) | (First_Use == 1)){
		//初始化幸存路徑結(jié)構(gòu)
		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比特,和接收序列對應(yīng)時刻的碼組比較漢明距離
			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的個數(shù)
		/*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;
	}
	//第二步:對數(shù)據(jù)進行糾錯譯碼
	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;
		}
		//接收序列各個時刻的循環(huán)
		//每個時刻輸出2比特,和接收序列對應(yīng)時刻的碼組比較得到漢明距離
		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條存入幸存路徑結(jié)構(gòu)緩存
		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++;
	}
	//第三步:對數(shù)據(jù)尾部的處理,
	//輸出漢明距離最小的幸存路徑的OutBit個比特(位權(quán)較低的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;
		}
	}
	//第四步:如果處理的是連續(xù)數(shù)據(jù),要將較小幸存路徑的漢明距離縮小,避免溢出
	/*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;
	//*/
	//維特比譯碼結(jié)束

	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”去掉
//--------------------------------------------------------------------------- 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一区二区久激情瑜伽| 精品嫩草影院久久| 欧美电影免费观看高清完整版在 | 欧美日韩精品欧美日韩精品| 久久综合久久99| 日韩精品亚洲一区| 白白色 亚洲乱淫| 精品国产乱码久久久久久久久 | 青青草91视频| 欧美日韩精品一区二区| 中文字幕一区不卡| 国产成人一区二区精品非洲| 91精品国产高清一区二区三区 | 国产永久精品大片wwwapp| 欧美日韩国产系列| 亚洲一级片在线观看| av不卡免费在线观看| 中文字幕av一区二区三区免费看| 热久久免费视频| 欧美一二三区精品| 日产国产高清一区二区三区| 欧美在线观看18| 亚洲国产精品久久人人爱蜜臀| 99re热这里只有精品免费视频| 国产精品色在线| 成人动漫一区二区三区| 亚洲国产精品t66y| 成人av午夜影院| 成人欧美一区二区三区视频网页| 成人美女在线观看| 欧美—级在线免费片| 成人午夜av影视| 国产精品午夜在线观看| 99久久精品国产麻豆演员表| 亚洲欧洲av在线| 99精品1区2区| 一区二区三区中文字幕精品精品 | 一区二区三区视频在线看| 97精品视频在线观看自产线路二 | 久久久精品国产免大香伊| 精品亚洲porn| 国产农村妇女毛片精品久久麻豆| 成人综合在线视频| 亚洲精品伦理在线| 欧美日本韩国一区二区三区视频| 日韩精品亚洲专区| 精品成a人在线观看| 国产大陆a不卡| 亚洲色图都市小说| 精品视频123区在线观看| 日韩在线a电影| 亚洲精品一区二区在线观看| 国产999精品久久久久久| 亚洲麻豆国产自偷在线| 欧美精品777| 国产成a人无v码亚洲福利| 亚洲精品一卡二卡| 3d成人h动漫网站入口| 精品亚洲成a人在线观看| 中文字幕在线一区免费| 8x福利精品第一导航| 国产一区二区三区不卡在线观看 | 欧美a一区二区| 中文无字幕一区二区三区| 在线观看亚洲精品| 精品一二三四区| 尤物视频一区二区| 日韩欧美的一区| 91高清视频免费看| 国产精品一区免费视频| 亚洲3atv精品一区二区三区| 国产色产综合色产在线视频| 欧美中文字幕一区二区三区| 激情六月婷婷久久| 亚洲第一久久影院| 欧美激情一区二区三区不卡| 欧美丰满嫩嫩电影| 色呦呦国产精品| 国产在线国偷精品免费看| 亚洲一区二区三区四区在线观看 | 欧美日韩精品欧美日韩精品一 | 国产尤物一区二区在线| 亚洲成av人片| 亚洲色欲色欲www在线观看| 日韩欧美高清dvd碟片| 日本道色综合久久| 成人激情黄色小说| 韩国视频一区二区| 天堂一区二区在线免费观看| 亚洲蜜臀av乱码久久精品蜜桃| 久久久精品免费网站| 日韩欧美一二三| 欧美精品一级二级| 欧美色男人天堂| 色老头久久综合| 99热这里都是精品| 国产成人在线观看免费网站| 美女视频一区在线观看| 午夜欧美一区二区三区在线播放| 亚洲人精品一区| 亚洲天堂av一区| 国产精品高潮呻吟| 国产精品国产三级国产普通话99 | 91精品国产综合久久福利| 欧美午夜片在线观看| 91久久一区二区| 在线观看日韩电影| 欧美在线不卡一区| 欧美日韩久久一区二区| 欧美亚洲一区三区| 欧美日韩国产美| 欧美一级欧美三级在线观看| 欧美日本一道本在线视频| 欧美日韩一级片网站| 欧美日韩aaaaa| 在线播放国产精品二区一二区四区 | 视频一区二区三区中文字幕| 亚洲国产欧美在线人成| 亚洲成人tv网| 奇米一区二区三区| 久久99精品一区二区三区| 黑人巨大精品欧美一区| 精品一区二区三区影院在线午夜 | 久久久国际精品| 国产精品入口麻豆九色| 中文字幕在线观看一区二区| 亚洲人成人一区二区在线观看| 亚洲激情自拍视频| 日韩中文字幕不卡| 韩国午夜理伦三级不卡影院| 高清在线成人网| 91视频免费看| 3d成人动漫网站| 国产免费久久精品| 伊人开心综合网| 老色鬼精品视频在线观看播放| 国产精品18久久久久久久久| 99久久久久久| 日韩免费看的电影| 国产精品成人午夜| 日韩高清不卡一区二区| 国产一区二三区好的| 色先锋资源久久综合| 欧美一区二区三区色| 中文一区二区在线观看| 亚洲主播在线观看| 国产精品456| 欧美日免费三级在线| 久久久美女毛片| 亚洲午夜久久久久中文字幕久| 韩国精品久久久| 在线视频一区二区三区| 精品国产伦一区二区三区观看体验| 最新日韩av在线| 黄一区二区三区| 在线观看日韩国产| 国产性天天综合网| 日韩高清欧美激情| 色综合天天综合网天天看片| 欧美一级xxx| 一区二区三区在线影院| 国产精品亚洲а∨天堂免在线| 欧美日韩在线不卡| 国产精品久久久爽爽爽麻豆色哟哟 | 一区二区三区蜜桃| 国产suv精品一区二区6| 这里只有精品99re| 一区二区三区精品久久久| 国产91色综合久久免费分享| 777xxx欧美| 亚洲国产精品久久人人爱| 懂色av一区二区夜夜嗨| 精品免费一区二区三区| 午夜欧美视频在线观看| 一本一道波多野结衣一区二区| 国产亚洲一区二区三区四区| 日本欧美大码aⅴ在线播放| 在线欧美日韩国产| 中文字幕av免费专区久久| 国产在线精品一区二区不卡了 | 欧美亚洲尤物久久| 亚洲美女视频在线观看| 成人国产一区二区三区精品| 久久亚区不卡日本| 国内外成人在线| 欧美成人aa大片| 捆绑调教一区二区三区| 日韩欧美亚洲另类制服综合在线| 五月婷婷综合网| 欧美日韩一二三| 亚洲一区av在线| 欧美私模裸体表演在线观看| 亚洲欧美日韩成人高清在线一区| 成人午夜激情视频| 国产精品私房写真福利视频| 大胆亚洲人体视频| 国产精品高清亚洲| 91视频.com| 亚洲精品中文字幕在线观看| 色老汉一区二区三区|