目录
1. BLE收发处理流程
在BLE底层的调制技术中使用了GFSK技术,为了比避免连续过长的0或者1序列导致接收器同步失锁,在BLE底层加入了白化技术来解决该问题。如下图所示,在BLE发送数据的最后一步流程是进行白化处理(whitening),接收数据的第一步也是解白化数据处理。当然白化也可以与简单的加密过程与解密过程等价。

BLE 收发位处理流程(来自于BLE规则书)
2. 白化技术原理
白化处理数据具体的实现是将一个随机数与将要发送数据进行异或运算得到最终需要发送的数据,异或运算相当于是一个不带进位的二进制加法,白化运算在数学上也等价于将原数据加上一个随机数得到最终的数据,另外由于异或运算存在对称性的特性(异或原理参考:异或运算的原理以及应用-优快云博客),即对一个数连续异或两次将得到原数---,该对称性特性可以更好的用于解调。在BLE中这个随机数生成规则如下图所示:

在BLE中这个随机数生成器采用了8位的线性反馈移位寄存器(LFSR)来实现随机数序列的生成,每一帧蓝牙数据发送前或者接收数据前,会根据当前信道将该LFSR设定一个初值,初始值被定义为信道值与0x40进行位与运算结果。
3. BLE 8位伪随机生成器-C语言实现
以下是根据蓝牙中的LFSR 框图实现的伪随机生成器C语言源码,并没有性能问题:
void bleWhilteningPR(uint8_t chan,uint8_t len)
{
#define BIT(n) (0x01 << n)
int i = 0;
int j = 0;
uint8_t pr;
uint8_t temp = chan|0x40;
uint8_t bit3,bit0;
for(j=0;j<len;j++)
{
pr = 0;
for(i=0;i<8;i++)
{
pr |= (temp&BIT(0))<<i;
bit0 = temp & BIT(0);
bit3 = (temp & BIT(3))>>3;
temp = temp >> 1;
if(bit3^bit0)
temp |= BIT(2);
else
temp &= ~BIT(2);
if(bit0)
temp |= BIT(6);
else
temp &= ~BIT(6);
temp &= 0x7f;
//printf("temp:%02x pn:%02x\r\n",temp,ret);
}
printf("chan-index:%d pos:%d \tpseudo-random:%02x \t~pseudo-random:%02x \n",chan,j,pr,(uint8_t)~pr);
}
}
4. 反白化以及应用-非标AOA/AOD定位基础
白化的目的是为了防止射频上出现连续的0或者1序列,但在AOA/AOD定位中要求发送一段连续的正弦载波来进行信号相位估计,而这段正弦载波在蓝牙BLE中即为连续的0或者1序列(GFSK调制),在蓝牙5.1标准中正式引入了该模式(允许发连续的0或者1序列),但是在蓝牙5.1标准之前已经可以实现AOA/AOD定位,目前几乎所有主流的BLE AOA/AOD定位仍然使用这种非标准的模式,具体实现是利用了异或运算以下特性,即:
对于要发送连续0来实现正弦载波发送,可以将原始数据与伪随机数序列设置成一样,这样射频端就可以在通用数据段中发送连续0序列实现正弦载波发送完成AOA或者AOD。使用此方法在BLE广播信道原数数据如下:
37信道:8d d2 57 a1 3d a7 66 b0 75 31 11 48 96 77 f8 e3 46 e9 ab d0 9e 53 33 d8 ba 98 08 24 cb 3b fc 71 a3 f4 55 68 cf
38信道:d6 c5 44 20 59 de e1 8f 1b a5 af 42 7b 4e cd 60 eb 62 22 90 2c ef f0 c7 8d d2 57 a1 3d a7 66 b0 75 31 11 48 96
39信道:1f 37 4a 5f 85 f6 9c 9a c1 d6 c5 44 20 59 de e1 8f 1b a5 af 42 7b 4e cd 60 eb 62 22 90 2c ef f0 c7 8d d2 57 a1
对于要发送连续1来实现正弦载波发送,可以将原始数据设置成与伪随机生成序列完全相反的数值,原数数据设置成等于伪随机数按位取反结果,使用此方法仍然可以实现连续的正弦载波发送。使用此方法在BLE广播信道原数数据如下:
37信道:72 2d a8 5e c2 58 99 4f 8a ce ee b7 69 88 07 1c b9 16 54 2f 61 ac cc 27 45 67 f7 db 34 c4 03 8e 5c 0b aa 97 30
38信道:29 3a bb df a6 21 1e 70 e4 5a 50 bd 84 b1 32 9f 14 9d dd 6f d3 10 0f 38 72 2d a8 5e c2 58 99 4f 8a ce ee b7 69
39信道:e0 c8 b5 a0 7a 09 63 65 3e 29 3a bb df a6 21 1e 70 e4 5a 50 bd 84 b1 32 9f 14 9d dd 6f d3 10 0f 38 72 2d a8 5e