首页<<

到底什么是比特率和波特率?


前言

这个问题一直困扰了我非常之久,关于比特率和波特率,网上和课本上众说纷纭,今天我来谈谈我对它们的理解


问题的抛出

请告诉我如下波形的比特率是多少? (4s内传输完成)
Alt text

1bit/s?
不对!
为什么不对
因为这里没有说明具体的协议是什么,你没有办法脱离协议告诉我这里有几个比特,如果我这里高电平代表1,低电平代表0,那么在这种情况下就是4个比特位,即1 0 0 1,比特率=1bit/s

但如果我告诉你这是曼彻斯特编码呢?如果这里是曼彻斯特编码,这段波形就会被解读成1 0 两位比特 比特率就是0.5bit/s

请注意,有比特率的前提是,必须有确定的协议

那我问你,不告诉你协议,这里的波特率是多少?(前提是最短周期1s内没有其它可能的符号形状)

你是可以在不知道具体协议的情况下给出我波特率的,即为1 Baud/s

为什么?


比特率

我们先来看看比特的定义
I=log2PI=-\log_2P

其中I是比特,P是事件发生的概率,比如说如果这个信号只有0和1两种可能,那么这件事情就是fifty-fifty 50%的概率发生
带入公式我们可以算出
I=log212=1bitI=-\log_2\frac{1}{2}=1bit
我们再来看看之前那个图

Alt text
当我告诉你这是曼彻斯特编码方式,最小的一种情况的最短周期是2s,所以此时2s内的上升/下降波形具有50%的概率蕴含了事件的真正状态是0还是1,所以1bit是信息量,这里只有两个信息量,所以比特率是2bit/4s=0.5bit/s

如果我没有告诉你具体的编码协议方式,你压根不知道信息传输的最小单元是什么,也不知道这个波形出现的概率,从本质上就没有比特率一说

波特率

通俗易懂的说法是,波特率是在信道内传输的真实物理信号的最小单元的传输速率
最小单元就是所谓的符号也被叫做码元,它取决于周期最小的,能被区分出来的物理实体信号

问,下面波形传输了几个波特?

Alt text

在这里能被区分出来的最小物理实体的时间是1s,因为0-1s和1-2s的波形所占用的时间小于2-4s的波形

即:找到一段实际传输电压高低不变的波形,保证它的时间最小,那它就是一个符号的基本单元!

这里显然是4个符号,前提是这是一次传输中全部的波形,不然必须考虑协议,因为有可能有电压(即形状)不同的波形没有展示出来

分析曼彻斯特编码的比特率和波特率

以下是4s传输的曼彻斯特编码的波形
Alt text

我们根据协议转换成真实的数据1 0 那么这时候的
比特率=2bit/4s=0.5bit/s比特率=2bit/4s=0.5bit/s
这种依照协议的方法和用公式计算没什么本质上的不同,因为公式也得依赖协议去计算信息出现的概率

我们找到维持时间最短的一段电平不变的波形,0-1s或者是3-4s,记录下这个维持最短的时间,就是我们要找的一个符号的持续时间,即为1s
这时候经过了4s就传输了4个符号,
波特率=4baud/4s=1baud/s波特率=4baud/4s=1baud/s
此时,
波特率=比特率2波特率=比特率*2
这也是曼彻斯特编码的特点

分析二进制编码的比特率和波特率

为了让大家理解更透彻,我们再重新分析这个4s传输完成的波形

Alt text

首先我得告诉你它的编码方式,此编码有4种可能出现的波形,本次传输波形有一种并未出现过波形或者说电压不属于1v 2v 3v而是5v
我列一个映射表格如下

二进制编码 真实电压高低(v)
00 1
01 2
10 3
11 5

然后我们看随便1s内出现其中一种电压的概率是1/4, 当这个电压真的出现的时候代表了1/4概率的信息量,代入公式计算这个信息量是多少bit
L=log2(1/4)=2bitL=-\log_2 (1/4)=2bit

所以在这里,4s内传输了8个bit,
比特率=2bit/s比特率=2bit/s
接下来到波特率,我们找到一段电平不变,且维持时间最短的波形,记录下它的时间,在这里就是0-1s 和1-2s的波形的时间小于2-4s波形的时间,
所以
0-1s是一个符号
1-2s是一个符号,
2-3s是一个符号,
3-4s是一个符号,也就是物理信号上能区分出来的最小分度时间的信号
这里的符号的最小分度时间是:1s

所以,这里4s传输了4个符号,
波特率=4Baud/4s=1Baud/s波特率=4Baud/4s=1Baud/s

此时
波特率=比特率12波特率=比特率*\frac{1}{2}

请记住,波特率于协议具体内容无关,比特率与协议具体内容有关,比特率只表示传输信息的有效信息量,波特率才是实际传输过程种的最小符号单位

深入思考

为什么串口通讯协议里要设置波特率而不是比特率?
没看过RS232的同学可以结合这篇文章和什么是 RS232 串口通讯一起看,理解更加透彻 !

我们来回顾一下RS232的数据结构

起始位 数据位1 ... 数据位8 停止位 停止位 空闲位(不限)
0 1/0 1/0 1/0 1 1 1

那我问问你,下面一个RS232数据有几个比特?

起始位 数据位1 ... 数据位8 停止位
0 1 0 1 1

你不会告诉我有10个比特吧?

我认为是8个,为什么?
我说过比特是对信息的概率的一种信息度量, 所以呢?这里的起始位和停止位永远都是0和1,根本不能提供任何数据层面上的有效信息,它们没有概率是其它的情况,即永远是0或者永远是1,所以这里不能被算进去

但这里传输了几个符号?10个波特,所以规定波特率(1s内传输的符号个数)来进行传输接收的速率匹配是非常自然且合理的想法,在这里我并不会认同比特率=波特率的说法,因为从比特的定义出发,这就是不合理的说法


总结

关于比特率和波特率到底怎么计算真的困扰了我非常之久,今天总算是从比较原始的角度出发去推导如何计算比特率和波特率,真的有非常多的文章,解释的都不清楚,至少很少有文章拿曼彻斯特编码和普通的4元编码来做对比的,而且对于比特波特的本质也丝毫不提。
本文有很多地方不那么严谨,主要是考虑到大家理解的难度上,当真正理解了再去追求严谨性,否则严谨反而会阻碍理解(不了解为什么要这样做)


参考文章

1.比特率和波特率


关于

作者:bigonion
邮箱:bigonion@bigonion.cn
NameSpace: 大聪花的家
Origin: 大聪花的博客
Powered by markdown 在线

声明:未经本人同意,禁止转载、搬运、抄袭!

/* * @description 博客配置 * @Type.d.ts * interface Tagtype { tagName: String; color: String; } * * @param isNew boolean * @param display boolean * @param onTop boolean * @param recommendation String * @param tags Tagtype * @param pic String * @param time String */

到底什么是比特率和波特率?

问题的抛出