蓝牙不抢信道,它跳着走:每秒换 1600 次频率,每次只停 625 微秒。 这样即使几个频点被占,也只丢一点点——这是它和 WiFi 共存的办法。
3.4.6 讲的是「干扰」,这一节讲一种「主动躲干扰」的技术。 它和 WiFi 用同一个频段,却能共存,靠的就是跳频。
一、跳频是怎么工作的
两个数字决定一切:
| 参数 | 数值 | 含义 |
|---|---|---|
| 信道数 | 79 个(每个 1 MHz) | 跳频的候选池 |
| 跳频速率 | 1600 跳/秒 | 每跳 625 微秒 |
| 时隙 | 625 微秒 | 一个时隙发一个包 |
1600 跳/秒换算成时间就是 625 微秒:1000000 除以 1600 等于 625。 所以「一个时隙」和「一跳」是同一个长度。 蓝牙的包就被设计成「整数个时隙」——1 个、3 个、5 个。 为什么这样设计能抗干扰:WiFi 占着某几个频点,但它在时间上是连续的。 蓝牙每一跳换一个频点,撞上的概率是「被占频点数除以 79」。 所以「20 个频点被占」时,撞上的概率只有四分之一, 而且撞了只丢 625 微秒的数据,下一个时隙换个频点就好了。
二、包越长效率越高
但长包有风险:
| 包类型 | 占时隙 | 载荷 | 有效速率 |
|---|---|---|---|
| DH1 | 1 | 27 字节 | 345.6 kbps |
| DH3 | 3 | 183 字节 | 780.8 kbps |
| DH5 | 5 | 339 字节 | 867.8 kbps |
第一行最慢、第三行最快:因为「每次跳频切换」有固定开销,包越长摊得越薄。 DH5 一次占 5 个时隙(3125 微秒),能装 339 字节, 有效速率接近 900 kbps,接近 1 Mbps 的线速。 但长包的风险是「一旦撞上,损失也大」:DH1 撞了只丢 625 微秒,DH5 撞了丢 5 倍。 所以链路质量差时,蓝牙会自动退到短包——这和 WiFi「信号差就降速率」是同一个思路。 第三列那个 339 字节不是随便定的:5 个时隙共 3125 微秒,1 Mbps 下最多 390 字节, 扣掉包头、校验、切换间隔,剩 339。 所以「蓝牙 5 个时隙」这个设计是被「时隙长度 × 速率」卡死的。
三、和 WiFi 怎么共存
两种机制,一个被动一个主动:
| 机制 | 做法 | 效果 | |---|---| | 跳频 | 换频点躲开 | 撞上的概率降到「被占比例」 | | 自适应跳频(AFH) | 先测出哪些频点被占,把它们从池子里去掉 | 几乎不撞 |
第一行是被动的:它不检测,只靠「随机跳」,撞了重传。 所以早期蓝牙和 WiFi 一起用,音质会断断续续。 第二行是主动的(蓝牙 1.2 之后):它会定期评估每个频点的质量,把差的那几个标记为「不用」。 于是「79 个频点里去掉 20 个」,剩下的照样跳。 这就是「4.0 之后蓝牙和 WiFi 互相干扰缓解很多」的原因。 但还是有两种干扰躲不掉:一是「两个蓝牙设备抢同一个频点」(蓝牙之间不协调); 二是「USB 3.0 的辐射」—— USB 3.0 的数据线会辐射 2.4 GHz 附近的噪声,这个蓝牙测不掉、也躲不开。 所以「插上移动硬盘,蓝牙鼠标就卡」是真实现象, 解决办法是把接收器插到远离 USB 3.0 口的那个口上。
四、动手 Demo:蓝牙每秒跳 1600 次,跳给谁看
先算「每跳多少微秒」,再算三种包的「有效速率」。 注意 DH5 的 867.8 kbps 已经接近 1 Mbps 线速。
hop = 1600
print('每跳 %.0f 微秒' % (1e6 / hop))
for name, slots, pay in (('DH1', 1, 27), ('DH3', 3, 183), ('DH5', 5, 339)):
kbps = pay * 8 / (slots * 0.625)
print('%-4s 占 %d 时隙 载荷 %3d 字节 有效 %.1f kbps'
% (name, slots, pay, kbps))
实跑输出:
--------------------------------------------------------------------
蓝牙每秒跳 1600 次,跳给谁看
--------------------------------------------------------------------
**蓝牙和 WiFi 都在 2.4 GHz,但它不「抢信道」,它「跳着走」。**
**每秒换 1600 次频率,每次只停 625 微秒**——这样即使某几个频点被占,也只丢一点点。
**1600 跳/秒,换算成每跳的时间:1000000 除以 1600 等于 625 微秒。**
包类型 占几个时隙 载荷字节 有效速率 kbps
-----------------------------------------------------
DH1 1 27 345.6
DH3 3 183 780.8
DH5 5 339 867.8
**第一行最慢、第三行最快**:**包越长,摊在每次「跳频切换」上的开销就越小。**
**DH5 一次占 5 个时隙(3125 微秒),能装 339 字节**,
**所以有效速率能到八百多 kbps,接近 1 Mbps 的线速。**
**跳频的真正作用是「抗干扰」**:**79 个信道里,就算有 20 个被 WiFi 占着,剩下 59 个照样能跳。**
**代价是「每次切换都要重新同步」,所以它不能像 WiFi 那样连续高速传。**
**这也是蓝牙和 WiFi 能共存的原理**:
**它们不是「分时」,是「分频」**——**蓝牙主动避开 WiFi 占用的频点(这叫自适应跳频)。**
**所以「蓝牙和 WiFi 互相干扰」这件事,在 4.0 之后已经缓解很多**,
**真正互相干扰的是「两个蓝牙设备抢同一个频点」和「USB 3.0 的辐射」。**
1000000 除以 1600 正好 625 微秒:这个数不是凑的,是「1 秒除以 1600」算出来的。 蓝牙的所有时间参数都是 625 微秒的整数倍——时隙、包长、连接间隔,全是。 DH1 只有 345.6 kbps,DH5 有 867.8:差 2.5 倍,全靠「摊薄切换开销」。 注意这里的算法是「载荷 ÷ 占用的时隙时间」, 假设另一个方向完全空闲——实际双向通信时,两个方向交替用时隙,速率要再减半。 这解释了一个日常现象:「蓝牙耳机音质不如有线」不只是编码问题, 还因为「双向通信时隙要对半分」。 耳机要一边收音频、一边发控制,真正能用来传音频的时隙只有一半。
30 秒实验
- 算一下:如果双向通信各占一半时隙,DH5 的有效速率变成多少?
- 想一下:为什么「USB 3.0 干扰蓝牙」这件事,AFH 躲不掉?
- 查一下你的蓝牙耳机支持哪些编码(SBC/AAC/aptX),看它们各要多少带宽。
常见误区
- 以为蓝牙和 WiFi 是「分时」。 是分频(跳频),蓝牙主动换频点躲开。
- 以为「包越长越好」。 撞上时损失也大,所以链路差时蓝牙会退回短包。
- 以为 AFH 能躲开所有干扰。 躲不掉「两个蓝牙互撞」和「USB 3.0 辐射」, 因为那些干扰它测不出来。
自测三问(点开对答案)
1. 蓝牙每秒跳多少次?每跳多长时间? —— **1600 次,每跳 625 微秒。** 时隙长度就是跳频周期。 2. 为什么 DH5 比 DH1 快那么多? —— **因为「每次跳频切换」有固定开销**,包越长摊得越薄。DH5 一次占 5 个时隙、装 339 字节。 3. 蓝牙和 WiFi 怎么共存? —— **跳频 + 自适应跳频(AFH)**:先测出被占的频点,把它们从池子里去掉。下一节看 WiMAX:它想做「无线版的宽带接入」,结果没成。
- ☐ (本节完,下一节 3.4.8 WiMAX)