Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- double phi (double x) {
- return -Math.log(Math.tanh(x/2));
- }
- boolean generateRandomNumbersAndTestThem() {
- //STEP A: GENERATE THEM
- BitSet cw = new BitSet(lengte);
- for (int i=0; i<G.m; i++)
- if (rand.nextBoolean())
- cw.xor(G.rows.get(i));
- doorgestuurdcodewoord = new MyBitSet(lengte);
- for (int i:cw)
- doorgestuurdcodewoord.set(i);
- double c = 2.0/(sigma*sigma);
- for(int i=0; i<lengte; i++) {
- double noise=sigma*Math.sqrt(-2*Math.log(Math.random()))*Math.cos(2*Math.PI*Math.random());
- double modulated=((doorgestuurdcodewoord.get(i))?1.0:-1.0)+noise;
- kansop1[i]=1/(1+Math.exp(-c*modulated));
- }
- for (int i=0; i<lengte; i++) {
- Lci[i]=Math.log((1-kansop1[i])/kansop1[i]);
- }
- for (int e=0; e<aantalEnen; e++) {
- Lqij[e] = Lci[edgeColumn[e]]; //checktopos=q_{ij}(1)
- }
- // STEP B: TEST THEM
- for (int iter=0; iter<MAX_ITER; iter++) {
- for (int e = 0; e<aantalEnen; e++) {
- if(Lqij[e]>0){
- aij[e]=false;
- phibetaij[e]=phi(Lqij[e]);
- }else{
- aij[e]=true;
- phibetaij[e]=phi(-Lqij[e]);
- }
- }
- boolean[] prod = new boolean[hoogte];
- double[] sum = new double[hoogte];
- for (int e=0; e<aantalEnen; e++) {
- prod[edgeRow[e]] ^= aij[e];
- sum[edgeRow[e]] += phibetaij[e];
- }
- for (int e=0; e<aantalEnen; e++) {
- Lrji[e] = phi(sum[edgeRow[e]]-phibetaij[e]);
- if (prod[edgeRow[e]]^aij[e]) Lrji[e]=-Lrji[e];
- }
- for (int i=0; i<lengte; i++) {
- LQi[i]=Lci[i];
- }
- for (int e=0; e<aantalEnen; e++) {
- LQi[edgeColumn[e]] += Lrji[e];
- }
- hardDecision = new BitSet(lengte);
- for (int i=0; i<lengte; i++) {
- if (LQi[i]<0) hardDecision.set(i);
- }
- if (isCodewoord(hardDecision)) return hardDecision;
- for (int e=0; e<aantalEnen; e++) {
- Lqij[e] = LQi[edgeColumn[e]]-Lrji[e];
- }
- }
- return null;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement