前面学习蓝牙通讯知识的时候,遇到前向纠错码(FEC) 编码知识点。
经典蓝牙中定义的FEC编码用于防止传输中产生错误,主要有两种:用于保护包头的1/3速率重复码,以及用于保护部分数据载荷的2/3速率缩短汉明码。
一、 1/3速率FEC:三倍重复码
这是一种结构非常简单、以可靠性优先的编码方案。它的核心思想是通过冗余来对抗错误。
编码过程就是简单的将每一个原始信息比特重复3次发送。例如,原始比特 1 会被编码为 111,0 则被编码为 000。
在接收端,通过“少数服从多数”的多数表决逻辑来解码:收到的3个比特中,如果至少有2个是 1,就判定原始信息为 1;反之则为 0。
这种编码一般用于蓝牙通讯中的“包头”段。
二、2/3速率FEC:缩短汉明码
这是一种效率更高的纠错码,在纠错能力和传输开销之间取得了更好的平衡。
它将10个比特的原始数据块编码成一个15个比特的码字。
编码通过一个线性反馈移位寄存器(LFSR)完成,其生成多项式为 g(D)=(D+1)(D4 +D+1)。
这个汉明码的能力是:可以纠正码字中的任何单个比特错误,同时能检测出2个比特的错误。
这比1/3重复码的效率高得多,因为只增加了50%的冗余(10变15),而1/3码增加了200%的冗余(1变3)。
这种编码可用于部分数据包的载荷部分,例如某些类型的ACL(异步无连接)数据包,以在有一定噪声的信道中提升数据传输的可靠性。
我要赚赏金
