我们知道,声音、温度、压力、速度等非电的物理量需要通过各种传感器和芯片转换成电信号进行传输、交换、存储、计算、控制和提取,电信号的表现形式是随着时间而变化的电压或电流。
电压和电流,从本质上来说也是模拟信号(信号是连续的且具有无限范围的值),需要将其转换成以二进制数字“0”和“1”表示的数字信号。为什么计算机系统采用的是二进制数制呢?因为数字芯片是通过晶体管来实现数字信号的输入、存储、计算和输出的,而晶体管只有开和关两种状态,正好对应二进制数据中的1和0;而设置十进制机器过于复杂,需要10种具有稳定状态的元件来表示0-9这10种状态,所以计算机运算基础采用二进制。
本期我们就来看下模拟信号是如何转换为数字信号的吧。
从模拟信号到数字信号大概需要经过采样、量化、编码三个步骤。
图1:模拟信号数字化步骤
图片来源:根据公开资料整理绘制
首先是采样。一般以固定周期的采样脉冲采集模拟信号,从而得到在时间上连续的信号,但他还不是数字信号,因为这样的信号在幅值上还是连续的,可以称其为抽样信号。为什么说信号的幅值还是连续的呢?因为在每个采样时间点上,采集到的模拟信号精度很高,如果能够用数字信号表示这样精度的模拟信号,那这两种信号之间就没有什么差别了。
图2:信号采样
图片来源:根据公开资料整理绘制
接着是量化。举个例子,假设规定在0至10V之间的电压信号是有效的,以0.625V为量化间隔,将10V的参考电压分成16个级别(0.625*16=10),0~0.625V是第一级,0.625 ~1.25V是第二级……9.375~10V是第十六级。如果输入电压是0.3V和0.6V,那么他们经过量化后都会被归类成第一级,而0.7V的输入电压则会被归类为第二级,这就是量化的含义。
为了使量化后的信号和输入的信号尽量相似,不至于改变原始信号的特性,那么在合理范围内要最大程度上减小量化间隔。量化间隔越小,量化误差就越小,输出信号和输入信号就越相像,也就是系统的精度越高。上例中的量化间隔是0.625V,输入电压被分成了16份,是2的4次方(16=),4表示二进制的位数,亦即模数转换器(ADC, Analog-to-Digital Converter)的分辨率(单位:bit);如果将电压分成32份(),那么二进制位数就是5,分辨率就是5bit。分辨率是ADC能够分辨量化的最小信号的能力,即分辨率越高,就可以将电压分出更多份数,得到的数字信号用数模转换器(DAC,Digital-to-Analog Converter)转换后就越接近原来输入的模拟信号,还原度就越高。
经过量化后,模拟信号已经成功数字化了。
图3:信号量化
图片来源:根据公开资料整理绘制
下一步是编码。编码就是用0和1的组合为每个量化区间编号,代替相应区间的电压值。二进制进位规则是“逢2进1”(例如0001+1=0002,逢2进1后,就变成0010)。案例的分辨率是4bit,那么就需要使用4位的0、1为每个量化区间编码:0.625V及以下电压被编码为0000,(0.625,1.25】之间的电压被编码为0001,(1.25,1.875】之间的电压被编码为0010……由于总电压被分成了16份,所以总共有16个输出代码,见下表:
模拟信号经过上述采样、量化、编码后,就得到一个与其对应的数字信号。
图4:模拟信号数字化过程汇总
图片来源:根据公开资料整理绘制
二进制
二进制的位数一般是8位、16位、32位、64位····也就是8的倍数,这是因为计算机所处理信息的基本单位就是8位二进制数。8位二进制数被称为一个字节。用字节单位处理数据时,如果二进制位数小于存储数据的字节数(即二进制位数非8的倍数),那么高位上就用0填补。例如,100111这个6位二进制数,用8位二进制表示时为00100111。我们经常听到32位、64位操作系统,意思是这两类计算机的CPU在单位时间内能处理的二进制数据最大位数分别为32 位、64位。
在程序中,即使是用十进制和文字等记录信息,在编译后也会转换成二进制数据。对于用二进制表示的信息,计算机不会区分它是数值、文字,还是某种图片的模式,而是“根据程序对计算机发出的指示进行信息的处理”。例如,对于00100111这样的二进制数,到底是将其当做“数值”做加法运算呢,还是当成“文字”显示,取决于“程序的编写方式”。
图片来源:前端柒八九
参考资料:
科普创世纪
百度百科
Smacq 思迈科华《连接模拟与数字世界的桥梁——ADC》
前端柒八九《计算机底层知识之二进制》


