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

📄 decode_4_21.c

📁 RCPC编码
💻 C
📖 第 1 页 / 共 2 页
字号:
	****************************************************************************************************************/	
		for(i=0;i<6;i++)//根据6个已知0序列,就可以将路径收敛至状态0
		{				
		/*=====================================这个部分是将接收到的比特流分组=============================*/
			weight1=a[1][(i+length-6)%period];//i%period体现了RCPC删除图形的周期性,记录第二个加法器的权重
			weight2=a[2][(i+length-6)%period];//记录第三个加法器的权重

			out0=*q;q++;//根据RCPC的删除图形,我们可以知道第一个加法器的输出是全部保留的。

			if(weight1==1)//i%period体现了RCPC删除图形的周期性,判断编码时对第二个加法器的编码是否进行删除
				{out1=*q;q++;}

			if(weight2==1)//判断编码时对第三个加法器的编码是否进行删除
				{out2=*q;q++;}
		/*================================================================================================*/

			for(j=0;j<(32>>i);j++)//由于已知序列均为0,所以根据蝶形运算法则,状态数将递减
			{   k=j*(2<<i);

				branch_metric[0]=mettab[code[k][0]][out0]+weight1*mettab[code[k][1]][out1]+weight2*mettab[code[k][2]][out2];
				branch_metric[1]=mettab[code[k][0]][out0]^1+weight1*(mettab[code[k][1]][out1]^1)+weight2*(mettab[code[k][2]][out2]^1);
								
				temp[k]=path_metric[k];
				temp_path[k]=path[k];

				if(branch_metric[0]<branch_metric[1])
				{       k=j*(1<<i);

					    temp[k]=path_metric[k];
					    path_metric[j*(2<<i)]=branch_metric[0]+temp[k];

						temp_path[k]=path[k];
						path[j*(2<<i)]=temp_path[k];
					}
					else
					{       k=j*(1<<i)+32;

						    temp[k]=path_metric[k];
							path_metric[j*(2<<i)]=branch_metric[1]+temp[k];

							temp_path[k]=path[k];
							path[j*(2<<i)]=path[k];
						}								
			}
			
		}
		
	/************************************************************************************************************
	                     这部分为处理路径收敛至path[0]后,输出其中存储的最后32个译码码字
     ***********************************************************************************************************/
		*p=(path[0]&0x80000000)>>31;//取出最高位(第32位,向左移动31位输出)
		*(p+1)=(path[0]&0x40000000)>>30;
		*(p+2)=(path[0]&0x20000000)>>29;
		*(p+3)=(path[0]&0x10000000)>>28;
		*(p+4)=(path[0]&0x08000000)>>27;
		*(p+5)=(path[0]&0x04000000)>>26;
		*(p+6)=(path[0]&0x02000000)>>25;
		*(p+7)=(path[0]&0x01000000)>>24;
		*(p+8)=(path[0]&0x00800000)>>23;
		*(p+9)=(path[0]&0x00400000)>>22;
		*(p+10)=(path[0]&0x00200000)>>21;
		*(p+11)=(path[0]&0x00100000)>>20;
		*(p+12)=(path[0]&0x00080000)>>19;
		*(p+13)=(path[0]&0x00040000)>>18;
		*(p+14)=(path[0]&0x00020000)>>17;
		*(p+15)=(path[0]&0x00010000)>>16;
		*(p+16)=(path[0]&0x00008000)>>15;
		*(p+17)=(path[0]&0x00004000)>>14;
		*(p+18)=(path[0]&0x00002000)>>13;
		*(p+19)=(path[0]&0x00001000)>>12;
		*(p+20)=(path[0]&0x00000800)>>11;
		*(p+21)=(path[0]&0x00000400)>>10;
		*(p+22)=(path[0]&0x00000200)>>9;
		*(p+23)=(path[0]&0x00000100)>>8;
		*(p+24)=(path[0]&0x00000080)>>7;
		*(p+25)=(path[0]&0x00000040)>>6;
		*(p+26)=(path[0]&0x00000020)>>5;
		*(p+27)=(path[0]&0x00000010)>>4;
		*(p+28)=(path[0]&0x00000008)>>3;
		*(p+29)=(path[0]&0x00000004)>>2;
		*(p+30)=(path[0]&0x0000002)>>1;
		*(p+31)=path[0]&0x00000001;

			
/********************************这部分将最后得到的译码码字decode[]输出*****************************************/	
		for(p=decode;p<length+decode;p++)
		{ printf("%d,",*p);}
		
}

/************************************************************************************
viterbi编码器的寄存器从全零状态开始,经过六级输入0或1比特后,历经64个状态的编码输出。
  当前状态			        输入			       编码输出			    下一状态						
   0						0						000						0
   0						1						111						1
   1						0						110						2
   1						1						001						3
   2						0						111						4
   2						1						000						5
   3						0						001						6
   3						1						110						7
   4						0						101						8
   4						1						010						9

   5						0						011						10
   5						1						100						11
   6						0						010						12
   6						1						101						13
   7						0						100						14
   7						1						011						15
   8						0						010						16
   8						1						101						17
   9						0						100						18
   9						1						011						19

   10						0						101						20
   10						1						010						21
   11						0						011						22
   11						1						100						23
   12						0						111						24
   12						1						000						25
   13						0						001						26
   13						1						110						27
   14						0						000						28
   14						1						111						29

   15						0						110						30
   15						1						001						31
   16						0						001						32
   16						1						110						33
   17						0						111						34
   17						1						000						35
   18						0						110						36
   18						1						001						37
   19						0						000						38
   19						1						111						39

   20						0						100						40
   20						1						011						41
   21						0						010						42
   21						1						101						43
   22						0						011						44
   22						1						100						45
   23						0						101						46
   23						1						010						47
   24						0						011						48
   24						1						100						49

   25						0						101						50
   25						1						010						51
   26						0						100						52
   26						1						011						53
   27						0						010						54
   27						1						101						55
   28						0						110						56
   28						1						001						57
   29						0						000						58
   29						1						111						59

   30						0						001						60
   30						1						110						61
   31						0						111						62
   31						1						000						63
*************************************************************************************/





	

⌨️ 快捷键说明

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