资讯动态

ASK/FSK/PSK键控调制原理与无线工程选型指南

发布时间:2026/9/29 18:28:25 来源:尧图企业网站定制
如果你正在做无线遥控、传感器数据回传或者单纯想把两块单片机之间的线彻底去掉那么翻任何一款射频模块的数据手册十有八九会撞见三个缩写ASK、FSK、PSK。这三个词是数字无线通信最底层的键控法也是很多嵌入式工程师从“会用模块”到“懂射频”的必经门槛。这篇文章我想用尽量少的公式把三种键控法的原理、波形、带宽和工程选型一次讲明白适合刚接触无线通信的读者也适合那些已经把nRF24L01跑起来、但还没搞懂为什么模块里用的是GFSK的人。很多初学者一看到“调制”两个字就头大其实可以把它理解成把要发送的0/1信息装到一辆高频载波车上。之所以不能直接用0/1的方波发射是因为基带信号频率太低、天线尺寸会大到离谱而且根本没法区分不同设备。键控法就是用数字基带信号去控制载波的幅度、频率或相位分别对应ASK、FSK、PSK。下面我会从一条完整的信号链条出发把三种方式的操作、特点和坑点都讲透最后再回到实际项目里看看选型到底应该怎么拍板。1. 先搞清楚一件事为什么非要把数据“搬”到高频载波上1.1 基带信号为什么不能直接发射很多人第一次做无线模块时都会有个疑问单片机已经输出了0和1的方波为什么不直接把这根线接到天线上原因是物理世界里的天线尺寸和波长直接相关我们常说的“1/4波长天线”是最基础的单极子天线形式。如果信号频率是1kHz波长是300km那四分之一波长也是75km显然不可能把天线拉这么长。但是把信号搬到433MHz波长约0.69m四分之一波长只要17cm左右搬到2.4GHz四分之一波长只有3cm。这就是为什么无线通信一定要有一个高频载波。除了天线尺寸频率资源也是必须考虑的问题。不同业务需要划分在不同的频段里比如遥控器用315MHz/433MHz、蓝牙和Wi-Fi用2.4GHz、卫星用更高的C/Ku波段。如果所有设备都在基带的低频段直接发射相互干扰会非常严重。把信号调制到不同载波频率上就相当于给每个设备分配了不同的“车道”接收端只需要在对应频率上做解调就能把别人家信号过滤掉。所以“调制”这件事的本质是让0/1信息去控制载波的某个参数。键控Keying这个词也很有意思它来源于“电报按键”就像用电键控制载波一样发送1时按键按下发送0时按键抬起。数字调制三种最基础的方式就是对载波的幅度、频率、相位这三个参数做“开关键控”这就是ASK、FSK、PSK名字的由来。1.2 三种键控法各自的“一句大白话”我平时喜欢用生活化类比帮人记这三种调制方式效果很好方式全称被调参数生活类比ASKAmplitude Shift Keying幅移键控载波幅度手电筒开关亮是1灭是0FSKFrequency Shift Keying频移键控载波频率高音代表1低音代表0PSKPhase Shift Keying相移键控载波相位正着说是1反着说是0打个比方ASK就像一个只会“开灯/关灯”的信号灯1就把灯点亮0就把灯熄灭FSK像两个不同音调的喇叭1吹高音0吹低音PSK更隐蔽它不改变灯的亮灭也不改变音调高低而是把一段音轨整体倒过来播放用正着放和倒着放区分0和1。这三种方式在二进制情况下都是每一个符号传输1bit信息所以码元速率等于比特速率。如果你之后接触QPSK一个符号就能传2bit那就是从“键控”往“高阶调制”迈进了。现在我们要做的是把这三种方式背后的原理、带宽、解调难度和抗干扰能力逐一拆开看尤其要知道“为什么PSK抗噪最好”“为什么FSK频谱效率低”“为什么ASK便宜但不好用”。2. 三种键控法的原理拆解波形、带宽和那个容易被忽略的难点2.1 ASK实现最简单但抗干扰能力也最弱ASK的原理非常直觉数字信号为1时发送一个等幅载波数字信号为0时载波幅度变成0或者降到一个很低的幅度。最极端的情况就是OOKOn-Off Keying也就是1发0停。早期莫尔斯电报、红外遥控、很多315MHz/433MHz遥控模块用的都是这类方式。时域上可以写成s_ASK(t) A * m(t) * cos(2πfc t)其中m(t)是单极性不归零码1或0。调制电路相当简单最常见的方式是用一个模拟开关或者三极管把待发送的基带信号和载波“乘”在一起。1时开关导通载波通过0时开关关断输出为0。解调也简单接收端用二极管、电容做一个包络检波器再把检波后的包络和比较器门限比较就能恢复出0/1。这种低成本方案在短距离遥控器里到处都是单个芯片几分钱就能搞定。但便宜是要付出代价的。ASK把信息放在幅度上噪声和信道衰减恰恰最擅长破坏幅度。只要环境里有一点干扰比如电机火花、继电器吸合、LED驱动噪声这些幅度扰动都会被包络检波器当成数据。ASK的频谱宽度大约等于2倍码元速率频谱利用率本来就不高再加上它抗干扰弱所以实际应用中只适合短距离、低速、低成本场景。另一个容易被忽略的问题是接收端的门限设置距离远了信号衰减包络变小固定的比较器门限会让0和1区分不出来。专业设备会加自动增益控制而低成本模块基本靠天吃饭这也是为什么几十米的遥控器和几百米的数据模块差距如此之大。2.2 FSK恒包络的实在派代价是带宽FSK的思路是让载波的幅度一直不变用频率的跳变来表示信息。发送1时载波频率是f1发送0时载波频率是f2接收端只要判断当前收到的信号频率是高还是低就能还原数据。因为载波幅度从头到尾都是恒定的所以FSK对幅度干扰完全不敏感这一点非常有用。工程上把这类特性叫“恒包络”恒包络信号可以用效率很高的C类功放来放大电池供电设备很欢迎这种特性。FSK的调制方式大体有两种。最简单的做法是拿两个晶振或者两个振荡器用数据信号去切换输出但这样会在切换瞬间产生相位跳变导致频谱扩展带外辐射变大。更常用的做法是把数据先变成一个控制电压去调制压控振荡器VCO的频率这样频率变化是连续的频谱会干净很多。后面把基带信号先经过高斯低通滤波器再调频就成了GFSKnRF24L01和蓝牙都在用这种方式。解调FSK也比解调PSK容易不需要恢复出严格的同频同相载波。可以用过零检测数一数单位时间内波形穿过零点的次数频率高自然过零多也可以用鉴频器把频率变化转成电压变化再做判决。这种非相干解调方式让接收机结构简单、成本低、功耗低特别适合2.4G这样要求低成本的芯片。代价是FSK的带宽比ASK和PSK大理想情况下双频FSK的带宽约等于|f2-f1|加上2倍码元速率。如果为了节约带宽把f2和f1靠得很近两个频率之间的区分度又会下降误码率会上升所以FSK在三种方式里频谱效率是最低的。还好大多数FSK应用都在Sub-GHz或2.4G的低速率传感器网里对带宽要求没那么苛刻。2.3 PSK抗噪最强难点在相位恢复PSK是三种方式里“技术含量”最高的一种。BPSK用两个相差180度的载波相位表示0和1比如1发的是cos(2πfc t)0发的是cos(2πfc t π)也就是一个反相的cos。因为相位反转波形本身并不像ASK那样有通断也不像FSK那样有明显频率变化看起来似乎都是等幅的cos波只有在1和0切换的瞬间波形会突然“倒”一下。从星座图上看BPSK的两个点分别落在实轴的1和-1欧氏距离最大所以在同样信号能量下BPSK的抗噪声性能是三种方式里最好的。BPSK的调制其实也不难把双极性不归零码1对应1-1对应0和一个载波相乘就行。难点几乎全在接收端要正确判断相位必须先恢复出一个和发送端同频同相的载波这个过程叫载波同步。常用的Costas环、平方环都是为了做这件事。问题是相位同步电路不是免费午餐它在低信噪比下很容易失锁而且会带来一个著名的坑——相位模糊。Costas环会告诉你“载波同步了”但它分不清恢复出来的是0度还是180度结果就是解调出来的数据可能整体取反所有1都变成0所有0都变成1。为了解决相位模糊实际系统很少直接用绝对BPSK而是用差分编码的DBPSK。差分编码不直接让载波相位表示0/1而是用相邻两个符号之间的相位“有没有变化”来表示信息。这样即使接收端把相位整体反转了相邻符号之间的变化关系依然不变数据还是能正确解出来。代价是差分编码会带来一定误码率损失但换来的是系统稳定性非常值得。PSK的频谱宽度和ASK差不多大约也是2倍码元速率但它抗噪声能力更强所以同样带宽、同样功率下能传得更远更稳。再往上走就是QPSK一个符号同时用4种相位表示2bit频谱效率翻倍Wi-Fi、卫星、4G/5G基本都在用PSK/QAM这套体系。3. 用仿真把波形和误码率摆出来理论到底差多少3.1 一段Python代码把ASK/FSK/BPSK波形画出来只听理论容易飘我们把三种波形用Python生成出来看一眼直观又省事。下面的代码用numpy生成了一个5比特序列“10110”对应的ASK、FSK和BPSK波形import numpy as np fs 4000 # 采样率 4kHz fc 400 # 载波频率 400Hz rb 100 # 码元速率 100bit/s Tb 1 / rb # 每个符号持续时长 bits np.array([1, 0, 1, 1, 0]) N int(Tb * fs) # 每个符号内采样点数 t_all np.arange(len(bits) * N) / fs nrz np.repeat(bits, N) # 单极性不归零码1/0 nrz_bi 2 * nrz - 1 # 双极性不归零码1/-1 ask nrz * np.cos(2 * np.pi * fc * t_all) fsk np.where(nrz 1, np.cos(2 * np.pi * (fc 100) * t_all), np.cos(2 * np.pi * (fc - 100) * t_all)) psk nrz_bi * np.cos(2 * np.pi * fc * t_all)如果你在Jupyter里运行把这三个数组plot出来会看到非常典型的差异ASK的包络在1时是完整的正弦波0时直接变成一条直线FSK的幅度始终一样但1时波形加密、0时波形变疏BPSK的包络也始终恒定但在1和0切换的边界处波形会出现一个明显的相位反转。这里有个小细节载波频率不能取得太低否则一个码元里放不下几个完整波形肉眼看不出区别。比如码元速率100Hz载波400Hz一个码元里就有4个载波周期足够看清楚了。如果码元速率和载波频率太接近仿真结果会变成一团糊很容易误以为代码写错了。初学者做实验时先固定载波频率慢慢调码元速率能帮助你理解“带宽”和“码元速率”之间那种相互制约的关系。3.2 误码率对比同样的信噪比谁先撑不住波形只是观感真正决定系统容量的是误码率性能。我在仿真里给三种调制加白噪声统计了达到误码率10^-3也就是每1000个bit错1个时需要的信噪比Eb/N0结果接近理论值调制方式接收方式达到BER10^-3所需的Eb/N0约BPSK相干解调6.8 dBDBPSK差分非相干约8 dB2FSK相干解调9.8 dB2FSK非相干解调10.9 dBASK/OOK包络检波约12~13 dB这个表的意思是在同样发射功率、同样数据速率下PSK能容忍更差的环境ASK最先掉链子FSK居中。从物理直觉上也很好理解BPSK的两个符号是cos和-cos在信号空间里的距离是2倍振幅而ASK的非相干检测相当于在判断“有没有”噪声很容易把“没有”变成“有”FSK两个不同频率的信号虽然正交但它们之间的距离比BPSK的双极性距离要小一些所以性能居中。实际项目里理论值还要再打折。天线不匹配、晶振频偏、电源纹波、多径衰落都会吃掉几个dB。我测过很多廉价433M模块标称距离几百米实际在室内能稳定跑二三十米已经很不错就是因为天线和电源根本达不到理想状态。所以仿真结果的最大价值不是让你记住那几个数字而是帮你在选型时建立一个心理预期如果你做的是低功耗、低成本的遥控器那ASK够用如果要做可靠的数据传输尽量不要拿ASK去硬扛。4. 回到工程选型nRF24L01、433M遥控器和高速链路都在用什么4.1 nRF24L01为什么用GFSK而不是ASK或PSK很多人在淘宝上买来的nRF24L01模块数据手册上写着GFSK调制这个G前面已经讲过就是高斯滤波加FSK。它选择GFSK有几个非常实际的工程原因。首先是成本和功耗2.4GHz频段的廉价芯片不可能像卫星接收机那样做复杂的相干解调GFSK用一个非相干接收机就能解调出来芯片面积小、电流低nRF24L01才能做到十几毫安的收发电流。其次是抗干扰和功放效率。2.4GHz频段现在实在太挤了Wi-Fi、蓝牙、无线鼠标都在这里干扰源大多是幅度型干扰。GFSK的恒包络特性天然不怕幅度噪声而且发射端可以用效率更高的非线性功放这对电池设备太重要了。如果换成BPSK虽然误码率性能更好但接收端要恢复载波相位电路复杂度会明显上升对一颗卖几块钱的芯片来说不划算。使用nRF24L01时你不需要在软件里关心GFSK的频偏、高斯滤波系数这些东西但必须把它的“脾气”摸清楚两个模块要工作在相同频道、相同地址、相同速率SPI通信要稳定。很多人遇到“模块刚上电能通信跑一会儿就断”的问题往往不是GFSK的问题而是供电不足或SPI线太长。我之前在面包板给nRF24L01供电用电脑USB口带一个模块还能跑带两个模块时发射瞬间电压跌落通信距离直接缩到几米。后来改成独立3.3V稳压加一个大电容问题立刻消失。4.2 产品选型判断表什么时候用ASK什么时候用FSK/PSK做项目时选调制方式不能只看“哪种好”而要看“哪种够用”。我整理了一张选型表基本覆盖常见无线产品调制方式典型场景代表模块/协议优点代价ASK/OOK车库门、遥控器、无线门铃433MHz超外差模块、PT2262电路简单、成本极低、功耗低距离短、抗干扰弱、频谱效率低FSK/GFSK传感器数据回传、无线数传、蓝牙nRF24L01、CC1101、蓝牙抗幅度干扰好、恒包络、接收机简单带宽偏大频谱效率一般PSK/QPSK高速无线链路、Wi-Fi、卫星Wi-Fi、ZigBee OQPSK、DVB-S抗噪强、频谱效率高接收机复杂、载波同步和相位恢复困难如果只传一个按钮的开关状态距离二三十米成本压到极致那ASK/OOK完全合理如果要回传温度、电量、门磁状态希望提高抗干扰能力那就应该选FSK/GFSK比如Sub-GHz的CC1101或2.4G的nRF24L01如果数据速率要求高比如视频回传、文件传输那基本就是PSK/QAM这类高阶调制的天下了。有几个容易踩的坑。第一LoRa虽然也被用在物联网里但它用的是线性调频扩频CSS调制不是FSK不能混为一谈第二很多国产2.4G芯片喜欢标榜自己是“2.4G方案”你还是要看数据手册里调制的具体写法是GFSK还是OOK这会直接影响通信距离和抗干扰能力第三如果项目在城区做尽量避开拥挤的2.4G频段Sub-GHz的FSK在穿墙和抗干扰方面往往更实用代价是速率低、天线尺寸大。5. 实操中的坑与排查技巧从“能通”到“稳定通”5.1 硬件层最容易翻车的三个细节天线、电源、晶振无线项目最烦的不是代码而是硬件“玄学”。实际上很多所谓玄学拆开看都是三个老问题天线、电源、晶振。天线方面433MHz模块最好用17cm左右的1/4波长导线天线2.4G模块用3cm左右的小天线天线附近不要大面积覆铜也不要紧贴金属外壳。很多模块送的是螺旋天线如果用的时候没有调匹配网络距离可能只有原厂标称的1/10。电源方面发射瞬间电流需求突然增大比如nRF24L01在发射模式下电流比接收模式高好几毫安433M发射模块更高。如果稳压芯片响应慢或者电源线上寄生电感太大射频输出频率就会被拉偏也就是常见的“发送瞬间掉频”。解决办法是在模块电源引脚附近加100μF电解电容和0.1μF陶瓷电容并让走线尽量短粗。我用示波器测过加了电容之后发射瞬间电源纹波能从几百毫伏降到几十毫伏通信距离提升非常明显。晶振方面nRF24L01通常需要外接16MHz晶振晶振的负载电容要按手册匹配否则频偏会加大。FSK系统对频偏尤其敏感如果收发双方晶振偏差大接收端解调时会把一个频率点错判成另一个导致持续误码。调试时如果发现数据总是间歇性错误可以先测一下模块输出的实际载波频率再用频谱仪或SDR看一下信号拖到哪个频率上基本能判断是不是晶振和电源的问题。还有一点容易被忽略长时间发送连续的0或1会让解调器的直流分量漂移接收端无法判断是“长0/长1”还是“链路断了”。因此无线数据不能用裸的UART数据直接发射至少要加曼彻斯特编码或4B5B编码保证电平频繁跳变。很多模块在开放收发模式下看不到数据就是因为数据里的长串0/1超出了接收芯片的容忍范围。5.2 从接收现象反推故障一张速查表我习惯把无线调试过程分成“能通”“稳定通”“一直通”三个阶段。第一阶段看有没有数据第二阶段看距离和误码第三阶段看长时间运行的可靠性。下面这张表是我在实际项目中总结出来的故障速查思路现象最大可能原因检查方向距离近电机工作瞬间丢包使用了ASK/OOK幅度被干扰淹没换FSK/GFSK或增加供电滤波接收到的数据整体取反PSK相位模糊或差分编码没有正确使用改用DBPSK检查解调极性发射瞬间单片机复位电源跌落加电容换电池/稳压器换个信道或频率就收不到晶振频偏太大或频率参数没同步测晶振频率核对配置寄存器nRF24L01距离只有几米供电不足、天线不良、PCB走线太长独立供电、更换天线、缩短排针连线长串0或1数据后开始乱码数据编码缺失直流漂移加曼彻斯特编码或4B5B编码这套速查表并不能覆盖所有问题但能帮你快速缩小范围。我的习惯是拿到一款新的无线模块先不看协议栈先让模块发一个固定的10101010序列用SDR或频谱仪看射频信号长什么样。如果是ASK频谱上能看到载波在通断之间切换如果是FSK能看到频谱在双峰之间跳来跳去如果是PSK载波没有明显的通断但在符号边界会出现相位反转导致的频谱扩展。把这一步做熟了后面排故障会轻松很多。最后再分享一个我常用的小技巧调试无线链路时不要一上来就发随机数据。先发10101010通过接收端观察是否每个跳变都正常再发00001111检查长0和长1的稳定度最后才发随机数据。这个方法可以帮你把“调制/解调问题”和“协议/编码问题”快速分开省掉大量盲调时间。三种键控法说到底是无线通信的第一课把这三种方式理解透了再看QPSK、OFDM、LoRa这些更复杂的技术都会有底气得多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑