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
Generated on Fri Jun 8 00:27:15 2007 for IT++ by Doxygen 1.5.2