← 返回知识卡片总目录

DS1号 · 自学教材系列 | 计算机软硬件

第 14 章 输入输出设备原理

计算机再聪明,也得和人对话。这一章看键盘、鼠标、屏幕这些「输入输出设备」,是怎么把物理世界的动作和光,翻译成 0 和 1——以及反过来,把 0 和 1 变成你看到的图像。这里藏着「模拟」与「数字」两座世界之间的桥梁。

🎯 本章学习目标

  1. 理解输入输出设备在「模拟世界」与「数字世界」之间的转换角色。
  2. 掌握键盘「矩阵扫描」的检测原理。
  3. 理解鼠标如何把位移变成数字,屏幕如何由像素组成。
  4. 理解模数转换(ADC)与数模转换(DAC)的本质。

14.1输入输出:人与机器的界面

计算机内部是纯数字世界:只有 0 和 1、离散的电平。但外面的世界是模拟的、连续的——你的手指按下键有力度、你移动鼠标有连续轨迹、你看到的颜色有无数种深浅。所以输入输出设备的本质任务,就是在这两座世界之间做翻译:

核心思想 输入输出 = 模拟世界与数字世界之间的翻译官。这一章所有设备,本质都在做「连续 ↔ 离散」的转换。记住这条主线,具体设备就都容易理解了。

深化:为什么「翻译」非做不可

先回答一个更根本的问题:既然外面的世界本来就是连续的,计算机为什么非要费劲把一切变成 0 和 1?答案在于两种信号在抗干扰上的天壤之别。模拟信号(比如一段连续变化的电压)一旦混入噪声,噪声就永远叠加在信号上,放大信号的同时噪声也被放大,一代一代传下去只会越来越脏。数字信号则不同:0 和 1 用「低电平 / 高电平」两个区间表示,只要噪声没有大到把电平推出区间,每一级电路都能把它干净地再生——读出来是 1,就重新输出一个标准高电平。这就是「阈值再生」:数字信号可以无损地传输、复制、存储一万次,模拟信号做不到。数字化不是嫌模拟不好,而是数字量在鲁棒性上碾压模拟量。

于是输入输出设备就站在两座世界的边界上,扮演「海关」:所有入境(输入)的信息要「模拟 → 数字」,所有出境(输出)的信息要「数字 → 模拟」。而且你会发现,所有输入设备干的其实是同样三件事:感知(把物理量变成电压,如按键把「按下」变成电平变化)、采样(每隔一小段时间看一眼)、量化(把连续值归到最近的档位);所有输出设备则反着来:数字档位 → 连续的物理量。本章后面每一节,都是这三步在不同设备上的变奏。

当然,翻译有代价——细节的丢失。采样不够密,快速变化的信号会「拍糊」;量化不够细,平缓的渐变会出现台阶。屏幕的刷新率、鼠标的回报率、CD 的采样率,背后都是同一个问题:在成本约束下,「多密、多细」才算够用?这道取舍题贯穿整个输入输出世界。

📐 例题 1 按键消抖:一次按压要「确认」多久

机械按键按下时触点会弹跳(抖动),最长持续 5ms。控制器每 2ms 读一次引脚电平,规定「连续 4 次读到同一电平」才确认一次按下或释放。问:从触点物理接通,到控制器确认「按下了」,最坏情况要多久?

思路 最坏情况是:抖动期把 5ms 占满(期间读数忽高忽低),从第一个稳定读数起还要再连续采满 4 次。

解 抖动期结束后,第 1 个稳定读数立即就能采到(最坏时恰好赶上一个采样点),之后还要等 3 个采样周期才凑满 4 次。最坏确认时延 = 抖动时间 + (N − 1) × T = 5 + 3 × 2 = 11ms。

答:最坏约 11ms。 ⚠ 易错点:别写成 5 + 4 × 2 = 13ms——第 1 个稳定读数本身就计入「连续 4 次」,只需再等 3 个周期。也别把消抖延迟无限拉长:确认太慢,手感就「迟钝」,工程上要在防抖与响应之间折中。

工程中的它

你以后在任何操控面板上按下的每一个按钮——从电梯楼层键到飞行舱的告警确认键——背后都有这套「采样 + 连续一致确认」的消抖逻辑。人操作面板时手指会不自觉地「轻碰」一下,若没有消抖,一次轻碰可能被数成按了五六次,告警被误清除或误触发。反过来,对操作速度敏感的场合(乐器键盘、竞技外设)会尽力把扫描周期和确认次数压低,把确认延迟做到 1ms 级——快与稳,永远是这对矛盾的两端。

再想一层:设备的参数为什么「恰好」定成这些数?其实很多都锚定在人的感知边界上。人眼的视觉暂留约十几毫秒,所以屏幕每 16.7ms 刷新一次(60Hz)人眼就觉得是连续画面;人耳听得见的频率上限约 20kHz,所以音频采样定在 40kHz 出头;人手能分辨的响应延迟下限大约几十毫秒,所以按键确认压到 1~13ms 就「无感」。工程参数常常不是越高越好,而是「人的边界 × 一点余量」——省下的每一分带宽和成本,都可以花在别处。

辨析 数字抗噪 vs 模拟易损:模拟量叠加噪声后无法分离,只能靠屏蔽、滤波缓解;数字量靠阈值再生,噪声不超过「半个区间」就等于不存在。这就是为什么现代系统都在源头附近尽早完成数字化——「尽早翻译成 0/1,后面就百毒不侵」。

🧠 一句话记忆 输入 = 物理→数字;输出 = 数字→物理。

14.2键盘:矩阵扫描的原理

键盘有上百个键,如果每个键都单独接一根线到主机,线就太多了。聪明的做法是 矩阵扫描(matrix scanning):把按键排成行 × 列的网格,每个键就是一个「行列交叉点」上的开关。

检测方法:控制器逐行发送信号(点亮一行),然后检查各列有没有收到信号。如果某个键被按下,那一行和那一列就「接通」了,控制器据此判断出「第几行、第几列的键被按下了」。

键盘矩阵扫描 按键排成行列网格,逐行扫描、查列确定按下的键。 列1 列2 列3 行1 行2 行3 按 逐行发信号 + 查列:行列交叉点「接通」= 该键被按下
图 14-1键盘矩阵扫描:按键排成行列网格,逐行发信号、查列,交叉点接通即定位被按的键。

这本质上又是第 5 章「译码器 / 多路选择器」思想的运用——用行列交叉把「N 个键」变成「行 + 列」两个小数字,大大减少连线。

再往深处挖一层:为什么行列网格能省线?设 r 行 c 列,能覆盖 r × c 个键,而只花 r + c 根线。键数越多,优势越夸张——100 个键,一线一键要 100 根线;10 × 10 网格只要 20 根。线数随键数「开平方」增长,这是所有矩阵方案(键盘、LED 大屏、触摸屏)共同的数学底色。

具体扫描时序也很讲究:平时所有行线都拉高;控制器把某一行拉低,马上去读各列——若某列也变成低,说明这一行与该列交叉处的开关闭合了。接着拉低下一行,直到扫完全部行。整个键盘就像被一台高速巡逻灯一遍遍扫过。扫描的「巡回速度」决定了按键响应的下限:扫得越快,漏检窗口越小。

矩阵还有一个特有的坑——鬼键(ghost key)。若三个键恰好构成一个矩形的三个角,电流会沿着「L 形」路径绕行,让第四个角上的没按的键看起来也被按下了。工程解法很朴素:每个按键串联一只二极管,让电流只许单向走,绕路被堵死。所以「矩阵扫描省的是线,补的是二极管」——天下没有免费的午餐。

按键抖动与消抖确认 按键信号在按下瞬间抖动约5毫秒,控制器按固定周期采样,连续4次一致才确认。 时间 高电平(松开) 低电平(按下) 抖动区(最长5ms) 读数:高、高…抖动期忽高忽低(不确认) 连续4次一致 → 确认按下
图 14-2消抖:按下瞬间触点抖动约 5ms,控制器按固定周期采样,读数「忽高忽低」的一律不认,连续 4 次一致才确认——对应例题 1 的最坏 11ms。

📐 例题 2 104 键键盘的扫描账本

某 104 键键盘排成 13 行 × 8 列的矩阵,控制器扫描一行需 0.5ms。(a) 与「一线一键」相比省了多少引脚?(b) 全键盘扫描一遍多久?(c) 每秒能完整扫多少遍?(d) 某键恰好在一次扫描「走过它」之后才按下,最坏要多久才被发现?

思路 矩阵引脚 = 行 + 列;全键盘扫描 = 每行依次拉低的时间总和;最坏检测 = 错过本轮后等下一轮。

解 (a) 引脚 13 + 8 = 21 个,一线一键要 104 个,省 83 个。(b) 13 × 0.5 = 6.5ms。(c) 1000 ÷ 6.5 ≈ 154 次/秒。(d) 最坏错过一轮,等下一轮扫到(6.5ms),再计入例题 1 那样的消抖确认,量级约再一轮 6.5ms,合计约 13ms。

答:21 vs 104 个引脚;一遍 6.5ms;约 154 遍/秒;最坏检测约 13ms。 ⚠ 易错点:扫描速度决定「看到」的下限,消抖策略决定「确认」的下限,两者叠加才是按键的完整延迟。人打字最快约每秒 10 击(间隔 100ms),13ms 完全无感;但对竞技外设,厂商会把这个数压到 1ms 级。

工程中的它

「行列复用 + 逐行扫描」是个可迁移的通用方案:LED 大屏用同样的行列复用来省驱动线(数万颗灯珠共享行列母线);仪表面板上成排的告警灯与按键,常合用一套扫描电路。而键盘控制器找到「行列坐标」后,还要做一次「翻译」——把坐标换成扫描码,通过中断送给操作系统,再由操作系统的键盘布局表换成字符码。你敲下一个键,实际走完了「矩阵扫描 → 译码(第 5 章思想)→ 中断(第 12 章机制)→ 查表翻译」的完整流水线。

还有一个分工细节值得咀嚼:为什么不让 CPU 直接来扫键盘?因为扫描是件琐碎的重复劳动——每秒上百遍、每遍都要掐着微秒级的时序。工程解法是给键盘配一颗专用单片机,让它默默承担全部扫描与消抖,只在「确认有事件」时向主机发一次中断、递上整理好的扫描码。主机的 CPU 对「键是怎么扫出来的」一无所知,也毫不关心——软硬件各守一层、只交换结果,这正是第 12 章「抽象」在硬件协作上的又一次落地。顺带一提,同一把键盘换到不同布局(或换台电脑),物理扫描不变、字符映射却可以全变——「硬件报位置、软件定含义」,这种解耦让同一套产线能供应全世界。

辨析 抖动 vs 鬼键:抖动是物理问题(触点弹跳),靠「连续一致确认」解决;鬼键是矩阵拓扑问题(电流绕路),靠「每键串二极管」解决。两者都表现为「按一下出来两个字符」,但病因完全不同——排查故障时要先分清是哪一种。

🧠 一句话记忆 键盘 = 行×列网格;逐行扫描 + 查列,交叉点接通 = 找到了键。

14.3鼠标:把位移变成数字

鼠标要回答的问题是:「我往哪个方向、移动了多远?」现代光学鼠标的做法是:

  1. 底部有一盏小灯(LED/激光)照亮桌面,一个微型摄像头以每秒上千次的速度拍下桌面的微小纹理。
  2. 内部芯片对比前后两张照片,算出纹理「往哪边、移了多少」——这就是位移。
  3. 把位移转换成两个方向上的数字(X 轴、Y 轴),通过接口发给电脑。

于是屏幕上光标的位置,就是位移不断累加的结果。你手的连续运动,被「采样」成一个个离散的位移数字——这正是「模拟→数字」的一个实例。

📖 名词溯源:采样(sampling) 采样,就像拍照:连续的运动本来没有「一格一格」,但你每秒拍上千张照片、对比相邻两张,就把它切成了一连串离散的「帧」。离散化是「模拟转数字」的通用手段——鼠标、麦克风、摄像头都在干这件事。

深化:光学引擎到底在算什么

把光学鼠标拆开看,核心是三件套:一个照明用的红外 LED、一个微距 CMOS 感光芯片(就是缩小版摄像头)、一个专门做图像比对的 DSP 芯片。它拍的不是「桌面照片」,而是桌面微观纹理的特写——放大后木头、布纹、纸面都像起伏的山脉地图。芯片把相邻两帧拿来对比:如果第 2 帧的纹理图案整体向左挪了 3 个像素,就说明鼠标向右移动了对应距离——这叫相关运算,本质是「在两幅图里找同一块图案,看它挪了多远」。帧率高达每秒数千张,所以再快的甩动也跟得上。

这也解释了一个生活现象:光电鼠标在干净的玻璃上会失灵。玻璃表面平整透明,拍不出任何纹理——没有「山脉」可比对,相关运算找不到答案。在镜面上打字的鼠标必须靠特殊的激光散射设计,或者干脆垫一张纸。

再说两个关键参数。DPI(dots per inch)是硬件的「测量密度」:800 DPI 意思是鼠标物理移动 1 英寸,传感器累计报告 800 个计数单位。回报率(轮询率)是「多久汇报一次」:125Hz 即每 8ms 汇报一次,1000Hz 即每 1ms 一次。注意 DPI 和回报率是两个独立的维度——一个管「量得多细」,一个管「报得多勤」,别混为一谈。

📐 例题 3 DPI:从 counts 到屏幕像素

一只 800 DPI 的光电鼠标在桌垫上移动了 5 厘米。(a) 它向主机报告了多少个计数(counts)?(b) 若操作系统指针速度设为「4 counts = 1 像素」,要让光标横穿 1920 像素宽的屏幕,鼠标需要物理移动多远?

思路 先把厘米换成英寸(1 英寸 = 2.54cm),乘 DPI 得 counts;再由像素反推 counts、反推英寸。

解  5 ÷ 2.54 ≈ 1.97 英寸,1.97 × 800 ≈ 1575 counts。 横穿屏幕需要 1920 ÷ 4 = 480 counts,对应物理位移 480 ÷ 800 = 0.6 英寸 = 0.6 × 2.54 ≈ 1.52cm。

答:约 1575 counts;约 1.52cm。 ⚠ 易错点:DPI 按「英寸」计,公制单位别忘了换算;「屏幕像素」不等于「鼠标 counts」,中间隔着操作系统的灵敏度缩放——这也是为什么同一只鼠标插在不同电脑上手感不同。

工程中的它

「把连续位移变成数字」这一招,在工程里遍地都是:老式轨迹球、驾驶杆、方向舵脚蹬,本质都在回答同一个问题——「操作者把机构移动了多少?」。传统方案用电位器:杆子一动,滑臂在电阻膜上滑动,输出连续变化的电压,再由 ADC(下节主角)转成数字;现代高性能方案则改用非接触的光电编码器或磁传感器,避免机械磨损。航空语境里,驾驶杆的 X/Y 两轴位移被持续采样成数字量送进飞控计算机,采样率与分辨率直接决定「操纵跟不跟手」——这和游戏鼠标追求高回报率是同一个道理。

回报率还牵出一笔「延迟预算账」:125Hz 意味着平均等 4ms(最坏 8ms)才轮到你这次的位移被报告;1000Hz 把这一项压到平均 0.5ms。但光标的整体延迟是好几段之和——传感器曝光、回报排队、系统合成、渲染、屏幕刷新,每一项都往总账上加码。单独把回报率从 125Hz 拉到 1000Hz,玩家感受到的差别其实只有几毫秒;高手真正敏感的是总和的降低。这也提醒我们:优化一个系统,先要找到账本上占比最大的那一项,而不是只盯着某一行使劲。

辨析 DPI(测量密度)vs 灵敏度(显示缩放):DPI 是传感器物理上「每英寸采多少点」,出厂即定;手感上的「快慢」是操作系统把 counts 换算成像素的比例。鼠标「调 DPI」若只改软件缩放,量测密度并没变——就像把尺子的刻度描粗,并不等于尺子变准了。另外,机械鼠标(滚球带动光栅盘遮光数脉冲)与光电鼠标殊途同归:都是「运动 → 脉冲计数」,只是光电方案没有机械磨损。

🧠 一句话记忆 鼠标 = 每秒拍上千张照片,对比相邻两张算出位移,再转成数字。

14.4屏幕:像素、LCD 与 OLED

屏幕的原理与鼠标相反:把数字(图像数据)还原成光。屏幕的最小单位是 像素(pixel)——一个个极小的发光点,排列成密密麻麻的网格。所谓「1920×1080 分辨率」,就是横向 1920 个、纵向 1080 个像素。

每个像素由红(R)、绿(G)、蓝(B)三个子像素组成。控制三者的亮度,就能混合出几乎任何颜色——红+绿=黄,红+蓝=品红,三者都亮=白,都暗=黑。屏幕上每一帧,就是给几百万个像素分别设定 RGB 数值的结果。

两种主流屏幕的实现:

LCD vs OLED
类型原理特点
LCD(液晶)液晶不发光,靠背光照亮;液晶扭转控制光的通过量黑色不够黑(背光漏光)
OLED(有机发光)每个像素自己发光,电流驱动有机材料发光能完全关闭像素=纯黑,更省电
像素与 RGB 子像素 屏幕由像素组成,每个像素含红绿蓝三个子像素。 R G B 一个像素 = 红、绿、蓝三个子像素 红+绿 = 黄 红+蓝 = 品红 三者全亮 = 白 三者全灭 = 黑
图 14-3一个像素由红绿蓝三个子像素组成,混合不同亮度呈现各种颜色。

深化:LCD 与 OLED 各自的物理戏法

LCD(Liquid Crystal Display,液晶显示器)自己不发光,全靠背光板供光。光从背光出来,先过一片下偏振片(只让某个方向振动的光通过),然后穿过液晶层:液晶分子像一排排小栅栏,不加电压时把光的振动方向扭转 90°,加了电压就站直不动。光的振动方向若与上偏振片一致就能通过,不一致就被挡住。所以「控制每个子像素的电压」=「控制出光多少」。看懂这一层,LCD 的缺点就自明了:所谓「黑」只是「挡得最严」,背光仍在后面亮着,难免漏光;显示纯黑画面时整块背光白耗电。

OLED(Organic Light-Emitting Diode,有机发光二极管)走的是另一条路:每个像素是一颗自己会发光的小灯(有机材料通电发光),显示黑就干脆「关灯」——纯黑、零漏光、还省电。代价是有机材料会老化,长时间显示固定画面(如台标、任务栏)的像素老化更快,就会留下「残影」,俗称烧屏。液晶分子扭转有毫秒级惯性(响应时间偏长),OLED 关灯开灯是微秒级(响应快)——两者的差异,全部能从物理机制上找到根源。

深化:刷新率背后是一笔带宽账

「60Hz 刷新率」意味着屏幕每 16.7ms 把整幅画面从上到下重刷一遍,显卡必须每秒 60 次把每个像素的新亮度值「推」给屏幕。这就引出一个工程核心公式:像素带宽 = 水平分辨率 × 垂直分辨率 × 刷新率 × 每像素位数。分辨率、刷新率、色深(每像素 bit 数)三个因子是相乘关系——任何一个翻倍,总带宽就翻倍。这也是为什么视频接口每隔几年就要换代:屏幕参数每上一个台阶,旧接口的「水管」就不够粗了。

📐 例题 4 1920×1080@60Hz 要多大的水管

一块 1920×1080、60Hz 刷新、RGB 各 8bit 的屏幕。(a) 一帧画面的原始数据量是多少?(b) 每秒要向屏幕搬运多少数据?(c) 升级到 3840×2160@60Hz(4K),数据量变成几倍?(d) 只用 USB 2.0(480Mbps,实际有效约 80%)带这块 1080p 屏,可行吗?

思路 每像素 = R+G+B 三个字节;带宽 = 每帧数据量 × 帧率。

解  每帧字节数 = 1920 × 1080 × 3 = 6220800 B ≈ 5.93MB。 每秒 = 6220800 × 60 ≈ 373MB/s,即 1920 × 1080 × 60 × 24 bit = 2.99Gbit/s。 4K 是 1080p 的 4 倍像素,带宽 ≈ 11.9Gbit/s。 USB 2.0 有效带宽 480 × 0.8 = 384Mbps ≈ 0.38Gbit/s,只有需求的约 1/8(差约 7.8 倍)——不可行,视频必须走专门的显示接口(HDMI/DP)。

答:每帧约 5.93MB;每秒约 2.99Gbit/s;4K 约 11.9Gbit/s(4 倍);USB 2.0 差约 7.8 倍,带不动。 ⚠ 易错点:Mbps 与 MB/s 相差 8 倍,混用必错;别把 RGB 三字节/像素漏成一字节/像素;「标称带宽」还要打折(协议开销、编码开销),工程上习惯留 20% 余量。

深化:触摸屏——矩阵扫描在电容世界的翻版

手机屏幕怎么知道你按了哪里?主流的投射式互电容触摸屏,是在玻璃上蚀刻出纵横交错的透明电极(ITO 氧化铟锡):横向一排「行电极」、纵向一排「列电极」,每个交叉点天然构成一个极小的电容。平时控制器给各行依次施加激励信号、在列上测感应量——这正是「逐行激励、逐列测量」。手指是导体,按到某处会「吸走」该处交叉点的部分电场,使那里的互电容变小;控制器扫完一遍,变化最大的交叉点坐标就是触点。你发现了吗?这与 14.2 的键盘矩阵扫描完全同构:行列网格、逐行扫描、查列定位——只不过键盘检测的是「开关闭合」,触摸屏检测的是「电容变化」。

这也解释了电容屏的两个脾气:戴厚手套点不动(绝缘的手套让手指无法「参与电场」);冬天指尖太干燥也会变迟钝(导电性下降)。所谓「支持十指触控」,就是全屏交叉点能同时分辨出多个电容变化点——这套网格天然支持多点。有些触摸屏还备有一种省电的「自电容」模式:只给单层电极充电、测它自己的电容,扫描快、耗电小,但两指同按时可能误判出一对「镜像点」——于是又要在省电与多点之间做一笔取舍。

电容触摸屏的行列网格 纵横电极交叉构成互电容,手指吸走电场使交叉点电容变小,逐行激励逐列测量定位触点。 指 列电极(测量) 行电极(激励) 灰色小格=交叉点互电容 手指按处电容变小 逐行激励 + 逐列测量 → 变化最大的交叉点 = 触点坐标(与键盘矩阵扫描同构)
图 14-4投射式互电容触摸屏:行列电极交叉形成互电容,手指吸走电场使交叉点电容变小,「逐行激励、逐列测量」定位触点——矩阵扫描思想在电容世界的翻版。

工程中的它

驾驶舱里的多功能显示器是这套原理的集大成者:高分辨率屏幕负责「数字 → 光」,表面再叠一层触摸层负责「手指 → 数字」,供高亮环境下(阳光直射)阅读的屏幕往往要做到数百尼特的亮度——亮度、抗反射镀膜、视角范围都是工程师反复较劲的指标。另外注意「刷新率」与「帧率」是两件事:显卡渲染出画面的速度(帧率)与屏幕重刷速度(刷新率)不同步时,画面上半截是这一帧、下半截是上一帧,就会出现「撕裂」——工程上的对策叫垂直同步:翻页必须等屏幕刷新到最后一行时才切换。

还有一笔小账叫色深:RGB 各 8bit 即「约 1670 万色」,但单个通道只有 256 级渐变——在天空这类大面积的平缓渐变上,相邻档位的色差肉眼可辨,画面会出现一圈一圈的「色带」(banding)。工程上的补救叫抖动(dithering):让相邻像素在两个相邻档位间按比例交错,利用人眼的平均效应「混」出中间色。10bit 色深的显示器把每通道提到 1024 级,色带自然更淡——你看,量化位数不足的后果(14.5 节的正题)在屏幕上早就演过一遍了。

辨析 刷新率 vs 帧率:刷新率是屏幕每秒重画次数(硬件节拍器),帧率是显卡每秒渲染张数(内容供给)。两者最好相等或成整数倍,否则要么浪费、要么撕裂。另一个易混点:分辨率高 ≠ 看起来更清晰——清晰度还取决于屏幕尺寸与观看距离,像素小到低于视网膜分辨极限后,再堆像素只是浪费带宽。

🧠 一句话记忆 屏幕 = 百万像素的 RGB 拼图;LCD 靠背光,OLED 自己发光(所以黑更黑)。

14.5模数与数模转换:两座世界的桥

现在把「翻译」这个核心概念具象化,它由两个专门的电路完成:

ADC 采样与量化 连续的波形被采样成离散的点,再量化成数字。 连续波形(模拟) 采样点(离散化) 每个采样点再量化成数字
图 14-5ADC:连续波形被「采样」成离散点,再「量化」成数字——模拟转数字的核心过程。

核心思想 采样 + 量化,是所有「模拟转数字」的通用方法。采样决定「多密」(时间离散),量化决定「多细」(幅度离散)。采样越密、量化越细,还原越逼真,但数据量也越大。

深化:采样定理——「多密」的底线

采样到底要「多密」才够?这个问题有精确答案,叫采样定理(又称奈奎斯特定理):要把最高频率为 fmax 的信号无失真地恢复出来,采样率必须不低于它的两倍,即 fs ≥ 2fmax。为什么是两倍?直觉解释:一段上下振荡的波形,每个「波峰+波谷」至少要各踩一个采样点,才能保住它的形状;点再稀,波峰波谷之间就「看不见」了。而比这更糟的是混叠(aliasing):采样点太少时,高频波动在采样后会被「错看成」一种低频波动——就像高速旋转的车轮在视频里像是在倒转、细密条纹衬衫在照片里出现莫尔波纹,都是「采样跟不上变化」的现实演示。混叠一旦发生,真假信息纠缠在一起,事后无法挽回。所以工程铁律是:采样之前先用「抗混叠滤波器」把超过 fs/2 的成分滤掉——先滤再采,不可倒置。

用这把尺子量一量 CD:人耳能听到的频率上限约 20kHz,理论上 fs ≥ 40kHz 就够。那为什么选了 44.1kHz 这个「怪数」?两个原因:一是抗混叠滤波器不可能做成理想「砖墙」(在 20kHz 处一刀切干净),必须留一段过渡带让衰减逐渐完成,于是留了 2050Hz 的余量(44100 ÷ 2 = 22050 > 20000);二是历史沿革——早年数字音频母带借视频录像机录制,44100 恰好能塞进视频信号的行频结构里,标准沿用至今。影视行业用 48000Hz,道理相同、历史路线不同。

再看「多细」:量化位数决定幅度方向上分多少档。8bit 分 256 档,16bit 分 65536 档。档数越多,每个台阶越矮,量化误差(把连续值归到最近档位时的偏差,最大不超过半个最小档)越小。一个经验规律:每加 1 个 bit,档数翻倍,可分辨的强弱动态范围约再加 6dB——16bit 的 CD 动态范围约 96dB,大致覆盖从耳语到喷气发动机的巨大跨度,对听感「够用」了。

📐 例题 5 CD 音质的数据量

CD 音质的标准是:采样率 44.1kHz、量化 16bit、双声道。(a) 每秒产生多少数据?(b) 一首 4 分钟的歌不压缩共多少 MB?(按 1MB = 1024KB)(c) 用采样定理检验 44.1kHz 为什么「够」。

思路 数据率 = 每秒采样次数 × 每次 bit 数 × 声道数;总量 = 数据率 × 时长。

解  数据率 = 44100 × 16 × 2 = 1411200 bit/s ÷ 8 = 176400 B/s = 176.4KB/s。 4 分钟 = 240s,总量 = 176.4 × 240 = 42336KB ÷ 1024 ≈ 41.3MB。 检验:44100 ÷ 2 = 22050Hz > 20000Hz ✓,且余量 2050Hz 正好留给抗混叠滤波器的过渡带。

答:176.4KB/s;约 41.3MB;22050Hz 高于人耳上限,且留有滤波过渡带。 ⚠ 易错点:别忘了乘「双声道 ×2」;KB→MB 按 1024 除;这道账也解释了为什么 MP3 等压缩格式会诞生——41MB 一首歌在拨号上网时代根本传不动。

深化:DAC 是怎么「合」出波形的

输出端的 DAC 常被一笔带过,其实它非常优雅。最经典的结构叫 R-2R 梯形网络:一串阻值只有 R 和 2R 两种的电阻搭成梯子,数字量的每一位控制一个开关,把对应的「加权电压」接进网络。最高位的权重是 1/2,次高位 1/4,再往下 1/8……各位按位权加权求和,输出的电压正好等于数字量对应的模拟值。你应当感到眼熟——这正是第 2 章「二进制的位权」在电路里的复活:1011 0000 不是抽象数字,而是 0.5、0.25、0.125 各路电流的「合奏」。DAC 的位数决定了输出台阶的粗细,最后再过一道平滑滤波,台阶就被抹成了连续波。

顺带补一句 ADC 前端的细节:真正采样的一瞬间,电路里有一小节「采样保持」(sample-and-hold)电路——像一只手在按下快门的刹那把信号「冻结」住,让后面的量化电路对一段稳定值安心工作。若不冻结、边采边量化,信号在量化中途悄悄变了,结果就两头不沾。快门、冻结、再测量——这个「先定格再读数」的小动作,是所有 ADC 共同的心法。

工程中的它

这条「采样 → 量化 → 编码」流水线在工程里无处不在:机舱里的语音告警,是存储的数字语音经 DAC、功放、喇叭还原(数字存储的告警词不会随磁带老化走样,可靠性远超模拟录音);示波器的心脏是一颗高速 ADC(每秒数十亿次采样,才能看清纳秒级的信号边沿);老式电话把采样率压到 8kHz 也勉强能听懂——因为电话频带只保留约 300~3400Hz,8kHz 对 4kHz 留了余量,代价是「高音全无」的闷罐子音色。同一套定理,不同的参数取舍,就是不同的设备性格。

辨析 采样率 vs 量化位数:一个管时间轴的「密度」,一个管幅度轴的「档位」,都会失真,但失真的样子不同——采样不足丢的是「高频率」(混叠),量化不足丢的是「弱变化」(底噪台阶)。调设备参数时要分别问:这信号最高变化多快?强弱对比多大?前者定采样率,后者定位数。

🧠 一句话记忆 ADC = 采样+量化,把连续变离散;DAC 反过来把离散变连续。

14.6接口与总线:外设如何连上主机

这么多外设,怎么和 CPU、内存连起来?靠 接口(interface)和 总线(bus)。

总线是一组并排的导线,让多个部件共享来传输数据(回顾第 7 章的数据流)。常见的接口:USB(连接键盘、鼠标、U 盘、打印机等几乎一切)、HDMI(连显示器)、PCIe(连接显卡、SSD 等高速设备)。

当外设通过总线传来数据,CPU 并不是「死等」,而是靠第 12 章学的中断:外设就绪时发出中断,CPU 暂停手头工作来处理它。整条链路,就是前面所有章节的合体。

深化:接口不只是「插头」,是三位一体的约定

「接口」这个词容易被理解成那个物理插头,其实它指一套完整的约定:插头形状与引脚(机械)、电压电流与差分方式(电气)、以及双方怎么对话(协议)——三位一体,缺一不可。为什么值得费这么大劲做标准化?想想键盘:任何厂商的 USB 键盘插到任何电脑上都能用,因为在物理形状之下,它俩按同一套协议栈完成了「自我介绍」:USB 枚举。插上的瞬间,主机先给设备供电、发复位信号,设备报上自己的「履历」(设备描述符:我是谁、什么类别、需要多少带宽),操作系统据此加载对应驱动,最后给设备分配一个总线地址。你听到的「叮咚」一声,背后是几十步的机器对话。这正是第 12 章的「分层」思想落到硬件世界的样子:只要约定不变,谁是谁都无所谓。

高速接口几乎清一色用差分信号传输:一根线上传信号、另一根传它的「镜像反转」,接收端只看两根线的差值。空间电磁干扰会同时叠加到两根线上(同向),一做减法就被抵消——这是「共模抑制」思想,让几 Gbps 的信号在普通铜线上跑成可能。工程上与它配套的手段还有双绞(两根线相绞,让干扰均摊)与屏蔽层,机载线缆的布线规范里满是这类抗干扰章法。

「热插拔」也不是理所当然的:USB 插头的触点特意做成长短不一——最长的两根是电源,最短的才是数据。插进去时电源先接通、数据后接通,拔出时数据先断、电源后断,插拔瞬间设备永远不会在「半供电」状态下误收发数据。老式的键盘口(PS/2)没有这套设计,带电插拔轻则失灵、重则烧口——一个机械细节的差别,决定了两种接口完全不同的使用守则。

还有一个大问题:外设数据怎么进内存?键盘一次几字节,让 CPU 用中断取一下即可;但屏幕刷新每秒几百 MB、SSD 读写动辄上百 MB,若还要 CPU 一个字节一个字节搬运,它就什么都别干了。答案是 DMA(Direct Memory Access,直接存储器访问):CPU 只下达「把这 1MB 从 SSD 搬到内存某处」的指令,剩下的由专门的 DMA 控制器在总线上自己完成,搬完再中断通知 CPU「好了」。于是外设传输的三种方式按「CPU 参与度」从高到低排成:轮询(CPU 反复问「好了没」)→ 中断(设备好了才喊 CPU)→ DMA(CPU 只管布置任务和收结果)。流量越大,越要用靠后的方式。

常见接口的速率量级(标称值)
接口标称速率典型用途
USB 2.0480Mbps键盘鼠标、U 盘
USB 3.05Gbps移动硬盘、摄像头
SATA6Gbps内置 SSD/HDD
HDMI 2.018Gbps4K 显示器
PCIe 3.0 ×4约32Gbps高速 SSD、采集卡

📐 例题 6 接口带宽账:拷一个 100MB 文件

把一个 100MB 的文件从 U 盘拷进电脑。USB 2.0 标称 480Mbps、USB 3.0 标称 5Gbps,实际有效带宽按标称的 80% 估算。(a) 两种接口各需多久?(b) 用 USB 2.0 实时传输 1080p60 的未压缩画面(约 2.99Gbit/s)为什么不可能?

思路 先算有效带宽(Mbps→MB/s 要除以 8),再用「数据量 ÷ 速度」求时间。

解 USB 2.0:480 × 0.8 = 384Mbps = 48MB/s → 100 ÷ 48 ≈ 2.08s。 USB 3.0:5000 × 0.8 = 4000Mbps = 500MB/s → 100 ÷ 500 = 0.2s。 USB 2.0 有效带宽 0.384Gbit/s,而 1080p60 需要 2.99Gbit/s,差约 7.8 倍——水管太细,浇不动这块田。

答:约 2.08s vs 0.2s;USB 2.0 与视频需求差约 7.8 倍。 ⚠ 易错点:Mbps 除以 8 才是 MB/s;「标称」永远要打折——80% 只是粗略估计,实际还受文件碎块、控制器质量影响。

工程中的它

把视角拉高:飞行器内部就是一张「总线 + 中断 + DMA」的大网。各设备共享几条数据总线,按优先级仲裁谁先说话;传感器数据(往往经由 ADC,见上节)由 DMA 批量搬进内存;关键事件用中断唤醒处理机。你在第 7~12 章认识的每个部件——总线、中断、DMA、驱动——在真实的机载网络里各就各位。而现代航电向「以太网化」演进,正是让第 15 章要讲的网络技术反过来「上天」:分层的思想,从机房飞进了云端。

顺带一提「总线仲裁」:多台设备共享一组总线,谁先开口需要裁决——通常由总线控制器按优先级排队,关键设备(如操作面板的输入)排在后台批量数据之前。排队等候的那段时间就是「排队延迟」,你在 14.3 的延迟预算账里见过它,下一章在网络上还会遇到它的孪生兄弟——共享资源永远伴随排队,这是并发世界的通用税。再看「热插拔」背后的功夫:USB 的电源针脚比数据针脚略长,插入瞬间先通电、后对话,设备「醒过来」再自报家门;老式接口没设计这一套,带电插拔轻则失灵、重则烧口——能不能热插拔不是玄学,是插拔时序有没有被认真设计的问题。

辨析 中断 vs 轮询 vs DMA:轮询是「CPU 反复去看」——简单但空耗;中断是「设备主动喊」——高效但要保存/恢复现场(第 12 章);DMA 是「别人代搬」——CPU 最省,但要占用总线带宽。键盘用中断,屏幕用 DMA,都是「按流量选工具」的必然。

🧠 一句话记忆 外设靠「接口 + 总线」连主机,靠「中断」通知 CPU——前几章的伏笔全部收拢。

本章小结

  1. 输入输出设备的本质是模拟世界与数字世界之间的翻译:输入=物理→数字,输出=数字→物理。
  2. 键盘用行列「矩阵扫描」定位按键。
  3. 鼠标通过连续拍照、对比位移,把连续运动采样成离散数字。
  4. 屏幕由像素组成,每个像素是 RGB 三个子像素;LCD 靠背光、OLED 自己发光。
  5. ADC(采样+量化)与 DAC 是「连续↔离散」转换的核心电路;外设经「接口+总线」连主机、靠「中断」通知 CPU。
  6. 数字量靠阈值再生抗噪碾压模拟量——这就是要尽早数字化的根本原因。
  7. 消抖靠「连续 N 次一致才确认」,最坏时延 = 抖动时长 + (N−1)×扫描周期。
  8. 像素带宽 = 分辨率 × 刷新率 × 每像素位数;接口速率决定「水管粗细」。
  9. 采样定理:fs ≥ 2fmax;44.1kHz = 2×20kHz 再留滤波过渡带。大流量外设用 DMA 搬运数据。

读完本章,你应该能……

思考题

1. 为什么说输入输出设备的本质是「翻译」?

提示:输入把连续物理量转成 0/1,输出把 0/1 还原成光/声。

2. 键盘矩阵扫描为什么比「每个键单独接线」更省?

提示:行列交叉,用「行数+列数」个信号覆盖「行数×列数」个键。

3. 光学鼠标如何知道它移动了多远?

提示:每秒拍上千张照片,对比相邻两张算出纹理位移。

4. ADC 的「采样」和「量化」分别决定什么?

提示:采样决定时间多密,量化决定幅度多细。

5. 电容触摸屏的「逐行激励、逐列测量」和键盘矩阵扫描有什么相似之处?

提示:两者都是行列网格 + 逐行扫描 + 查列定位;区别只是一个检测「开关闭合」,一个检测「交叉点电容变小」。

6. 采样率 44.1kHz 为什么对录制音乐「够用」?

提示:人耳上限约 20kHz,采样定理要求 ≥ 40kHz,再留 2050Hz 给抗混叠滤波器的过渡带 → 44.1kHz。

7. 屏幕刷新每秒几百 MB 的数据,为什么不用 CPU 逐字节搬运?

提示:CPU 搬运会把时间全耗在「搬运工」上;DMA 控制器接管传输,CPU 只下达指令、等中断通知结果。