zoukankan      html  css  js  c++  java
  • (2,1,2)卷积码译码器的JAVA实现

    本人编写。

    package Veteribi;
    import java.util.ArrayList;
    public class Veterbi {
    	public static void decoder(StringBuffer received) {
    		 //  记录四种状态的路径
    		StringBuffer route1 = new StringBuffer("0000");  // x00
    		StringBuffer route2 = new StringBuffer("0011");  // x10
    		StringBuffer route3 = new StringBuffer("1110");  // x01
    		StringBuffer route4 = new StringBuffer("1101");  // x11
    		
    		StringBuffer realway1 = new StringBuffer("00");
    		StringBuffer realway2 = new StringBuffer("01");
    		StringBuffer realway3 = new StringBuffer("10");
    		StringBuffer realway4 = new StringBuffer("11");
    		
    		
    
    			System.out.println("接收到的数据长度为: " + received.length());
    			System.out.println("接收到的数据为 : " + received);
    		
    		int [] distance = {0,0,0,0,0};;  //记录4种状态的最小码距
    
    		int length = received.length();
    
    		distance[0] = 0;
    		distance[1] +=  (route1.charAt(0)^received.charAt(0) ) + (route1.charAt(1)^received.charAt(1))
    					        + (route1.charAt(2)^received.charAt(2)) +(route1.charAt(3)^received.charAt(3)) ;
    		distance[2] +=  (route2.charAt(0)^received.charAt(0) ) + (route2.charAt(1)^received.charAt(1))
    		        + (route2.charAt(2)^received.charAt(2)) +(route2.charAt(3)^received.charAt(3)) ;
    		distance[3] +=  (route3.charAt(0)^received.charAt(0) ) + (route3.charAt(1)^received.charAt(1))
    		        + (route3.charAt(2)^received.charAt(2)) +(route3.charAt(3)^received.charAt(3)) ;
    		distance[4] +=  (route4.charAt(0)^received.charAt(0) ) + (route4.charAt(1)^received.charAt(1))
    		        + (route4.charAt(2)^received.charAt(2)) +(route4.charAt(3)^received.charAt(3)) ;
    		
    
    		int i;
    		System.out.println();
    		for(i=4 ; i< length ; i++) 
    		{ 
    			int temp1=distance[1];
    			int temp2=distance[2];
    			int temp3=distance[3];
    			int temp4=distance[4];
    			System.out.println("i =" + i + "最短路径分别为:" + temp1 + temp2 + temp3 +temp4);
    		    String copy1 = route1.toString();
    		    String copy2 = route2.toString();
    		    String copy3 = route3.toString();
    		    String copy4 = route4.toString();
    		    String copyway1 = realway1.toString();
    		    String copyway2 = realway2.toString();
    		    String copyway3 = realway3.toString();
    		    String copyway4 = realway4.toString();
    
    			/*   选择下一跳最短码距的路径   */
    			
    				// jump to S1
    				// 1/000 --> 1/00
    				// 3/001 --> 1/11 
    				if(   temp1 + ('0' ^ received.charAt(i) )  +  ('0' ^received.charAt(i+1))  >
    					  temp3 + ('1' ^ received.charAt(i) )  +  ( '1'^received.charAt(i+1))  )
    				{
    					  route1.replace(0, i, copy3);
    					  route1.append("11");
    					  realway1.replace(0, i/2, copyway3);
    					  realway1.append("0");
    					  distance[1] = temp3 + ('1' ^ received.charAt(i) )  +  ( '1'^received.charAt(i+1)) ;
    				}
    				else
    				{ 
    					 route1.replace(0, i, copy1);
    					 route1.append("00");
    					 realway1.replace(0, i/2,copyway1);
    					 realway1.append("0");
    					 distance[1] =temp1 + ('0' ^ received.charAt(i) )  +  ('0' ^received.charAt(i+1)) ;
    				}
    				System.out.println("此时i = " + i + " ,路径1的原码:" + route1 + " ,路径1的译码结果:" + realway1);	
    
    
    
    				// jump to S2
    				// 1/100 --> 2/10
    				// 3/101 --> 2/00
    				if(  temp1 + ( '1' ^ received.charAt(i) ) + ( '1' ^ received.charAt(i+1))   >
    					 temp3 + ( '0' ^ received.charAt(i) ) + ( '0' ^ received.charAt(i+1))    )
    				{
    					  route2.replace(0, i , copy3);
    					  route2.append("00");
    					  realway2.replace(0, i/2, copyway3);
    					  realway2.append("1");
    					  distance[2] = temp3 + ( '0' ^ received.charAt(i) ) + ( '0' ^ received.charAt(i+1)) ;
    				}
    				else
    				{ 
    					 route2.replace(0, i , copy1);
    					 route2.append("11");
    					 realway2.replace(0, i/2, copyway1);
    					 realway2.append("1");
    					 distance[2] =  temp1 + ( '1' ^ received.charAt(i) ) + ( '1' ^ received.charAt(i+1));
    				}
    				System.out.println("此时i = " + i + " ,路径2的原码:" + route2 + " ,路径2的译码结果:" + realway2);	
    
    				//jump to S3
    				// 2/010 --> 3/10
    				// 4/011 --> 3/01
    				if(  temp2 + ('1' ^ received.charAt(i)) + ('0' ^ received.charAt(i+1))  >
    					 temp4 + ('0' ^ received.charAt(i)) + ('1' ^ received.charAt(i+1))  )
    				{
    					  route3.replace(0, i, copy4);
    					  route3.append("01");
    					  realway3.replace(0, i/2, copyway4);
    					  realway3.append("0");
    					  distance[3] =temp4 + ('0' ^ received.charAt(i)) + ('1' ^ received.charAt(i+1)) ;
    				}
    				else
    				{ 
    					 route3.replace(0, i, copy2);
    					 route3.append("10");
    					 realway3.replace(0, i/2, copyway2);
    					 realway3.append("0");
    					 distance[3] =temp2 + ('1' ^ received.charAt(i)) + ('0' ^ received.charAt(i+1)) ;
    				}
    				System.out.println("此时i = " + i + " ,路径3的原码:" + route3 + " ,路径3的译码结果:" + realway3);	
    
    				//jump to S4
    			    // 2/101 --> 4/01
    			    // 4/111 --> 4/10
    				if(  temp2 + ('0' ^ received.charAt(i)) + ('1' ^ received.charAt(i+1))  >
    					 temp4 + ('1' ^ received.charAt(i)) + ('0' ^ received.charAt(i+1))   )
    				{
    					  route4.replace(0, i, copy4);
    					  route4.append("10");
    					  realway4.replace(0, i/2, copyway4);
    					  realway4.append("1");
    					  distance[4] =  temp4 + ('1' ^ received.charAt(i)) + ('0' ^ received.charAt(i+1))  ;
    				}
    				else
    				{ 
    					 route4.replace(0, i, copy2);
    					 route4.append("01");
    					 realway4.replace(0, i/2, copyway2);
    					 realway4.append("1");
    					 distance[4] = temp2 + ('0' ^ received.charAt(i)) + ('1' ^ received.charAt(i+1)) ;
    				}
    				System.out.println("此时i = " + i + " ,路径4的原码:" + route4 + " ,路径4的译码结果:" + realway4);			
    				
    				++i;
    		
    		}
    		
    		System.out.println(received.length() + "bit的最短距离分别是" + distance[1] + "  " +  distance[2] + "  " + distance[3] + "  " + distance[4]);		
    		
    		}		
    }
    
  • 相关阅读:
    URAL——DFS找规律——Nudnik Photographer
    URAL1353——DP——Milliard Vasya's Function
    URAL1203——DPor贪心——Scientific Conference
    递推DP HDOJ 5389 Zero Escape
    区间DP UVA 1351 String Compression
    树形DP UVA 1292 Strategic game
    Manacher HDOJ 5371 Hotaru's problem
    同余模定理 HDOJ 5373 The shortest problem
    递推DP HDOJ 5375 Gray code
    最大子序列和 HDOJ 1003 Max Sum
  • 原文地址:https://www.cnblogs.com/l20902/p/10610884.html
Copyright © 2011-2022 走看看