IT++ Logo Newcom Logo

commfunc.cpp

Go to the documentation of this file.
00001 
00033 #include <itpp/comm/commfunc.h>
00034 #include <itpp/base/converters.h>
00035 #include <itpp/base/specmat.h>
00036 #include <itpp/base/matfunc.h>
00037 #include <itpp/base/binary.h>
00038 
00039 
00040 namespace itpp { 
00041 
00042   bmat graycode(int m)
00043   {
00044     if (m == 1) {
00045       smat temp = "0;1";
00046       return to_bmat(temp);
00047     } else {
00048       bvec temp(1<<(m-1));
00049       bmat bb   = graycode(m-1);
00050       bmat out(1<<m, m);
00051       out.zeros();
00052       out.set_col(0, concat(zeros_b(1<<(m-1)), ones_b(1<<(m-1))) );
00053       for (int i=0; i<m-1; i++) {
00054                                 temp = bb.get_col(i);
00055                                 out.set_col(i+1, concat(temp, reverse(temp)) );
00056       }
00057       return out;
00058     }
00059   }
00060 
00061   int hamming_distance(const bvec &a, const bvec &b)
00062   {
00063     int i, n=0;
00064 
00065     it_assert1(a.size() == b.size(), "hamming_distance()");
00066     for (i=0; i<a.size(); i++)
00067       if (a(i) != b(i))
00068                                 n++;
00069     
00070     return n;
00071   }
00072 
00073   int weight(const bvec &a)
00074   {
00075     int i, n=0;
00076 
00077     for (i=0; i<a.size(); i++)
00078       if (a(i)==bin(1))
00079                                 n++;
00080     
00081     return n;
00082   }
00083 
00084 } // namespace itpp
SourceForge Logo

Generated on Thu Apr 19 14:20:37 2007 for IT++ by Doxygen 1.4.6