Advertisement
Guest User

Untitled

a guest
Jan 6th, 2012
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.13 KB | None | 0 0
  1. double phi (double x) {
  2.     return -Math.log(Math.tanh(x/2));
  3. }
  4.  
  5. boolean generateRandomNumbersAndTestThem() {
  6.     //STEP A: GENERATE THEM
  7.  
  8.     BitSet cw = new BitSet(lengte);
  9.     for (int i=0; i<G.m; i++)
  10.         if (rand.nextBoolean())
  11.             cw.xor(G.rows.get(i));
  12.     doorgestuurdcodewoord = new MyBitSet(lengte);
  13.     for (int i:cw)
  14.         doorgestuurdcodewoord.set(i);
  15.     double c = 2.0/(sigma*sigma);
  16.     for(int i=0; i<lengte; i++) {
  17.         double noise=sigma*Math.sqrt(-2*Math.log(Math.random()))*Math.cos(2*Math.PI*Math.random());
  18.         double modulated=((doorgestuurdcodewoord.get(i))?1.0:-1.0)+noise;
  19.         kansop1[i]=1/(1+Math.exp(-c*modulated));
  20.     }
  21.     for (int i=0; i<lengte; i++) {
  22.         Lci[i]=Math.log((1-kansop1[i])/kansop1[i]);
  23.     }
  24.     for (int e=0; e<aantalEnen; e++) {
  25.         Lqij[e] = Lci[edgeColumn[e]]; //checktopos=q_{ij}(1)
  26.     }
  27.  
  28.     // STEP B: TEST THEM
  29.     for (int iter=0; iter<MAX_ITER; iter++) {
  30.         for (int e = 0; e<aantalEnen; e++) {
  31.             if(Lqij[e]>0){
  32.                 aij[e]=false;
  33.                 phibetaij[e]=phi(Lqij[e]);
  34.             }else{
  35.                 aij[e]=true;
  36.                 phibetaij[e]=phi(-Lqij[e]);
  37.             }
  38.         }
  39.         boolean[] prod = new boolean[hoogte];
  40.         double[] sum = new double[hoogte];
  41.        
  42.         for (int e=0; e<aantalEnen; e++) {
  43.             prod[edgeRow[e]] ^= aij[e];
  44.             sum[edgeRow[e]] += phibetaij[e];
  45.         }
  46.         for (int e=0; e<aantalEnen; e++) {
  47.             Lrji[e] = phi(sum[edgeRow[e]]-phibetaij[e]);
  48.             if (prod[edgeRow[e]]^aij[e]) Lrji[e]=-Lrji[e];
  49.         }
  50.         for (int i=0; i<lengte; i++) {
  51.             LQi[i]=Lci[i];
  52.         }
  53.         for (int e=0; e<aantalEnen; e++) {
  54.             LQi[edgeColumn[e]] += Lrji[e];
  55.         }
  56.         hardDecision = new BitSet(lengte);
  57.         for (int i=0; i<lengte; i++) {
  58.             if (LQi[i]<0) hardDecision.set(i);
  59.         }
  60.         if (isCodewoord(hardDecision)) return hardDecision;
  61.         for (int e=0; e<aantalEnen; e++) {
  62.             Lqij[e] = LQi[edgeColumn[e]]-Lrji[e];
  63.         }
  64.     }
  65.     return null;
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement