根据教材:
假设传输的数据为:
1001011
在2^n位上不放信息位,放校验位 则
1 | 0 | 0 | 0 | 0 | 1 | 1 |
这样可能还有点难看出规律
但是当校验位达到6位时
表格中n代表的就是校验位
此时校验位和其能校验的最大信息位为:
1->0
2->1
3->4
4->11
5->26
这样校验位和信息位的关系就能看出来了
设校验位的位数为n,其能表示的最大信息位为An
可以推断出An = (2^(n-1))-1+A(n-1)可能在此页面上还很难看出来
下面我将用笔算计算该数列的通项公式:
推导出结果与海明不等式相同
m<=2^k-k-1
至此 海明不等式推导完成 当然是站在先辈们的肩膀上计算的
如有不对,欢迎评论纠正
关于校验码和信息码之间的计算,我还写了一段简单的代码
各位可以试一试:
//传入校验码的位数 返回其可以校验的信息位位数
public static int hamming(int k) {
int m = 1;
if (k > 1) {
for (int i = 0; i < k - 1; i++) {
m *= 2;
}
return (m - 1) + hamming(k - 1);
} else {
return 0;
}
}
//传入信息位的位数 返回需要的校验位位数
public static int reHamming(int m) {
for (int i = 0; i < 100; i++) {
if (m > hamming(i) && m <= hamming(i + 1)) {
return i + 1;
}
}
return 0;
}