干这行的人都知道BPSK和QPSK是数字调制里绕不开的两个基础方案。做无线通信、卫星链路、软件定义无线电甚至WiFi物理层和LoRa这种低功耗调制设计文档里翻来覆去就是这两个名字。一个是二进制相移键控每个符号只传1个比特一个是正交相移键控把速率直接翻倍。星座图简单到一眼能看穿但真正放到FPGA里跑起来或者拿示波器看QPSK眼图的时候问题一个接一个。这篇就把这两个调制从原理、I/Q实现、眼图调试到工程选型整个捋一遍重点说说那些课本上不会写但项目里一定会遇到的坑。1. 先搞清楚BPSK和QPSK到底在干嘛1.1 从“用相位传信息”说起数字调制的本质就是把比特映射到载波的某个参数上。ASK改幅度FSK改频率PSK就是改相位。BPSK和QPSK都属于PSK家族区别就在一个符号能塞多少个比特。这里有个关键概念要先建立起来符号率和比特率不是一回事。BPSK一个符号对应1个比特所以符号速率等于比特速率。QPSK一个符号对应2个比特符号速率只需要比特速率的一半。同样传1Mbps的数据BPSK需要1M的符号速率QPSK只需要500k的符号速率带宽占用自然就降下来了。这就是QPSK在工程上最大的价值——带宽效率翻倍。但天下没有免费的午餐。QPSK把星座点之间的距离拉近了抗噪声能力相对变差对相位噪声、频偏、环路的稳定度都更敏感。后面我会专门讲这个权衡。1.2 BPSK只有两个状态的极简方案BPSK的载波相位只有两个取值一般约定为0和π。发送比特“1”时载波相位为0发送比特“0”时载波相位为π。从波形上看就是一个正弦波在某些比特时刻突然倒相180°这也是“相移键控”名称的由来。数学表达式写出来是这样s(t) A * cos(2πf_c t φ)φ ∈ {0, π}如果映射到幅度域可以把φ0对应1φπ对应-1那么调制信号就等价于基带信号d(t)乘以载波cos(2πf_c t)s(t) d(t) * cos(2πf_c t)d(t) ∈ {1, -1}这里有个很实用的工程转换思路。我们不用真的去“控制相位”只要把数字比特映射成正负电平再和载波相乘就天然实现了BPSK调制。所有数字调制都可以拆成这样的乘法结构这也是后面I/Q调制的基础。BPSK的星座图非常简单实轴上有两个点1和-1。两个点之间的欧氏距离是2。误判概率取决于这个距离和噪声功率的比值。从抗噪声的角度看BPSK是PSK家族里最皮实的因为它把两个星座点拉到了最远。1.3 QPSK把星座图翻一倍QPSK一个符号传2个比特对应4个相位状态。常见的相位配置有两种π/4、3π/4、5π/4、7π/4或者0、π/2、π、3π/2也就是星座图上45°和0°两组旋转关系。工程上用哪种都行但要注意接收端必须约定同一套映射否则解出来全是乱的。关键点是4个相位怎么和2个比特对应。这里强烈建议用格雷映射也就是相邻星座点之间只差1个比特。比如用自然二进制映射时相邻点可能差2个比特而格雷映射把00、01、11、10按顺序排到相邻相位上。这么做的原因很实际当噪声把星座点推到相邻区域时格雷映射只错1个比特自然映射可能错2个比特。在同样的符号错误率下格雷映射的比特错误率几乎只有自然映射的一半。QPSK最妙的地方在于4个相位可以拆成两路正交的BPSK。把输入比特流做串并转换奇数比特走I路偶数比特走Q路I路调制到cos载波上Q路调制到sin载波上相加之后就是一个完整的QPSK信号。这不仅是理论上的等价变换更是所有商用芯片和FPGA实现的标准结构。有了I/Q这个概念后面看星座图、调眼图、查IQ不平衡问题都有了清晰的方向。我可以这么说理解了I/Q数字调制就算入门了一半。2. 调制解调的工程实现细节2.1 I/Q两路基带信号是怎么来的实际工程里很少用“相位控制”这种思路直接生成PSK信号几乎全是I/Q调制。以QPSK为例流程是这样的先把串行比特流按2比特一组做串并转换。假设输入的比特流是b0、b1、b2、b3…那么I路取b0、b2、b4…Q路取b1、b3、b5…。然后把每路的0/1映射成电平1映射成10映射成-1。到这里I路和Q路各自都是速率为符号速率一半的二进制双极性信号。接下来要做成形滤波。为什么要滤波因为理想方波信号的频域是sinc函数频谱旁瓣衰减很慢会严重干扰相邻信道。成形滤波一般用升余弦滚降滤波器滚降因子α在0.2到0.5之间选择。α越小频谱越窄带宽效率越高但时域波形拖尾更长对定时误差更敏感α越大频谱越宽但波形更平滑工程上更容易实现。滤波之后I路乘以cos(2πf_c t)Q路乘以sin(2πf_c t)然后相加。注意Q路的载波和I路差90°这是“正交”的含义所在。也就是s(t) I(t) * cos(2πf_c t) - Q(t) * sin(2πf_c t)为什么是减号取决于sin和cos的相对符号约定工程上只要收发一致就行但搞错符号会导致频谱翻转这是新手常犯的错。在FPGA里实现时I/Q两路的成形滤波通常用FIR滤波器。查表或者用IP核都行但要特别注意滤波器的群延迟。如果I路和Q路FIR的阶数不一致或者内部处理延迟不同两路会对不齐星座图会变散。以前我在调试中就遇到过I路延迟比Q路多了一个时钟周期结果星座图的四个点全变成了椭圆花了半天才查出来。2.2 载波恢复与Costas环的实战经验解调器这边接收到的信号经过下变频和ADC采样后得到的是基带的I/Q采样序列。但这里有两个问题第一接收端本地振荡器的频率和相位和发射端不可能完全一致存在残余频偏和相偏第二载波频偏会让星座图整体旋转相偏会让星座图整体偏转。如果不做载波恢复解调就是废的。BPSK的载波恢复常用平方环或者Costas环。平方环的思路是先把BPSK信号平方把相位调制去掉得到二倍频分量再用锁相环锁定这个二倍频最后分频恢复出载波。Costas环则是直接在基带用环路反馈来消除相位误差工程上因为不需要额外倍频用得更普遍。QPSK要用四相Costas环原理和BPSK版类似只是鉴相器要处理跨越四个象限的误差。四相Costas环的鉴相输出为e I * Q * (I² - Q²)这个公式看着不复杂但实际调试时帮助很大。当相位误差为零时I和Q分别落在星座图的正负轴上I*Q在平均意义上为0当存在相位误差时误差信号不为0经过环路滤波器后调整NCO频率把相位拉回来。实际调环路带宽时有个经典矛盾环路带宽窄抗噪声能力强但捕获范围小锁定慢环路带宽宽捕获快但锁定后的相位抖动大星座点发散。我个人的经验是在正式的跟踪环路前面加一级粗略频偏估计用FFT做载波频偏粗估把频偏压到几百赫兹以内再让Costas环去细调。两级方案在卫星和微波链路里非常成熟。还有一个必须处理的问题是相位模糊。Costas环锁定之后恢复出的载波相位可能比真实相位差90°的整数倍对应QPSK星座图旋转了0°、90°、180°或270°。这时候解出来的比特全是乱的但环路本身认为自己是锁定状态。解决办法是差分编码发射端先把比特做差分再映射成相位接收端解调出相对相位再做差分解码。这样即使出现整体相位旋转相邻符号之间的相位差依然能恢复出原始比特。2.3 成形滤波与码间串扰成形滤波不只是为了频谱好看更重要的是控制码间串扰ISI。升余弦滤波器有个很好的性质在最佳采样时刻相邻符号的波形拖尾恰好为零这就是Nyquist第一准则。也就是说只要接收端采样时刻对准了符号中心前面符号的尾巴不会干扰当前符号。但实际情况是收发两端的滤波器通常是分开设计的发射用根升余弦接收也用根升余弦二者级联起来等效为一个升余弦。这样做的目的是让匹配滤波器的噪声性能最优。如果发射端用了升余弦接收端再用升余弦等效响应就不是Nyquist的了ISI会明显增加。在实物链路中ISI还来自多径、带限信道、器件非理想性。看眼图就能直观判断ISI的严重程度眼睛张得越大ISI越小噪声容限越高眼睛几乎闭合说明符号间已经互相踩踏基本没法正常解调。我建议在做完接收机基带之后第一步就是拿PRBS测试序列灌进去看解调后的眼图和星座图。PRBS能覆盖各种比特组合比固定图案更能暴露ISI问题。3. QPSK眼图接收端最容易暴露问题的地方3.1 眼图到底在看什么眼图是拿示波器把接收信号在符号周期内不断叠加得到的波形图案。因为多个符号的波形都叠在一起中间的图案看起来像一只眼睛因此得名。眼图的核心价值在于它把时域波形、噪声、ISI和定时抖动这些信息压缩在了一幅图里。看QPSK眼图重点看四个指标眼高眼睛在垂直方向上张开的幅度反映了信噪比和噪声容限。眼高越低误码率越高。眼宽眼睛在水平方向上张开的宽度反映了定时误差的容忍度。眼宽越窄对时钟恢复的要求越高。交叉百分比交叉点在垂直方向上的位置反映了信号的对称性和占空比失真。抖动交叉点水平方向上的模糊程度反映了时钟恢复和定时环路的好坏。眼图需要结合星座图一起看。星座图看的是采样时刻的状态分布眼图看的是波形在全时间轴上的表现。二者互为补充。3.2 眼睛张不开先查这几个点如果示波器上QPSK眼图看起来很差不要急着调环路的某个旋钮按这个顺序排查基本能定位第一先确认触发源。眼图测量必须用符号时钟或者恢复出的时钟来触发如果用自由触发的随机触发看到的波形是乱叠的眼图形态不成立。很多“眼图不好”其实只是触发方式错了。第二看是不是频偏问题。如果残余频偏较大眼图在水平方向上会出现连续的“扫动”或走样相位误差不断累积导致符号中心在移动。这时候星座图也会呈现一个圆环状而不是四个清晰的点。频偏问题的优先级最高因为频偏不消其他指标全都失真。第三检查接收滤波器的滚降系数和符号速率是否匹配。如果收发滤波器参数不匹配眼图的张开度会明显下降交叉点会变粗。我曾经遇到过一个项目发射端用α0.25接收端误配成了α0.5两边虽然都能工作但眼图张开度差了将近20%。第四关注IQ不平衡。QPSK的I/Q两路的增益不一致或者正交度不是严格的90°眼图和星座图都会变形。增益不平衡时星座图在某个轴向上被拉伸图形变成扁椭圆正交误差会让星座图呈现平行四边形畸变。这些问题在零中频接收机里尤为常见需要做IQ校准。3.3 示波器实测 QPSK 信号的一些参数设定经验直接说结论用示波器看QPSK眼图时我会把垂直刻度调到满幅度的1/2到1/3水平刻度按符号周期的1到2倍来设定。余辉设置成无限余辉让几百个符号慢慢叠加眼图的轮廓才清晰。如果余辉太短看到的只是一些散点眼图形态不完整。示波器带宽方面至少要大于符号速率的3到5倍。带宽不够会把高频分量滤掉波形变圆眼图看起来比实际更差。反过来说也没必要选太高带宽因为高带宽会引入更多噪声眼图看起来又偏差。找到合适的带宽范围让测量结果接近真实信号才是关键。再一个容易忽略的点是如果你的接收机有AGC眼图测量要在AGC稳定之后进行。很多接收机在刚上电时AGC还在收敛增益在波动这时候看到的眼图幅度一直在跳根本不能代表稳定状态。4. 误码率性能对比与选型思路4.1 理论BER曲线怎么算BPSK的理论误比特率BER公式是Pb Q(√(2Eb/N0))其中Eb是每比特能量N0是噪声功率谱密度Q函数是标准正态分布的尾部概率。QPSK如果采用格雷映射每个符号错误时通常只错1个比特所以误比特率和BPSK几乎一样Pb ≈ Q(√(2Eb/N0))这就很有意思了。QPSK在比特能量相同的前提下误码性能和BPSK基本持平但带宽效率是BPSK的两倍。在同等带宽下QPSK可以传两倍的数据量而误码率没有明显恶化。当然如果比较的是符号误码率SERQPSK的SER要比BPSK差一些因为4个星座点之间的最小欧氏距离小于两个BPSK点之间的距离。但在实际系统中我们关心的通常是比特误码率所以QPSK往往是更优选择。具体数值上要达到10⁻⁶的误码率BPSK和QPSK大约需要10.5dB的Eb/N0这是一个在工程上经常引用的经验值。如果采用QPSK但不做格雷映射这个门槛大概要上升到11.5dB差了约1dB对低信噪比系统来说这个差距是不能忍受的。4.2 工程上怎么选BPSK还是QPSK选型不是看哪个更高级而是看系统约束在哪。如果系统工作在极低信噪比环境下比如深空通信、卫星应急链路BPSK是第一选择。同样是1MbpsBPSK的符号率是1M星座点之间的距离是2抗噪声能力最好。在接收端BPSK的载波恢复和比特判决也更简单环路的Pull-in范围更大对相位噪声不敏感。如果系统带宽受限比如需要在给定的信道带宽内提高数据速率QPSK就是合理的升级方案。在符号率不变的情况下QPSK能把传输速率翻倍代价是解调复杂度增加对相位噪声更敏感。还有一个容易被忽略的选型维度是发射机的功率放大器。PSK信号是恒包络调制峰均比非常低理论上可以直接用非线性功放而不会像OFDM那样产生严重失真。但BPSK和QPSK的实际恒包络性质还是有差异QPSK在相邻符号跳变时可能经过零幅度点理论上包络不是严格恒定但只要成形滤波滚降系数选得合适差异不会太明显。对于IoT和低功耗场景BPSK经常被用在扩频系统的前导和同步阶段因为它的捕获性能好判决阈值简单。而数据阶段再切换到QPSK提高吞吐。这种双模切换在LoRa、NB-IoT竞争方案里很常见。5. 项目实战中的常见问题与排查手法5.1 一个频偏问题的排查实录前几年调一套点对点微波通信的QPSK解调器现象是星座图看起来已经接近四个点但BER始终在10⁻³左右怎么都下不去。看眼图眼睛还算张开但眼睛中央有细小的扰动。我用频谱仪看了下中频信号发现接收信号和本地振荡器之间有大约800Hz的残余频偏。这个量级对符号速率是几Mbps的系统来说看起来不大但它会让星座点在采样时刻发生缓慢的相位旋转等效于在每个符号周期内引入了持续的相位误差BER当然上不去。实际上以前看到的星座图“接近四个点”其实是旋转速度很慢肉眼觉察不到。我把载波粗估环节从FFT精度提高到几百赫兹以下再让Costas环去收敛这个问题就解决了。后来我把这个经验固化成流程凡是BER压不下去第一步先检查残余频偏而不是怀疑环路或者均衡器。5.2 相位模糊怎么处理QPSK解调里最坑的一个问题是星座图怎么看都是对的但解出来的比特流全错。设置好测试序列再去看解出的数据和发射数据差了固定字节。这就是相位模糊。处理相位模糊的标准方案是差分编码前文已经提过。具体做法是在发送端先把比特转换成符号相位再把当前符号的绝对相位替换成和上一个符号的相对相位偏移接收端解调恢复出相对相位偏移后再做差分解码。这样即使整个星座图旋转90°、180°、270°只要旋转是整倍数的恢复出的相对相位不变数据就完全正确。这个方案有个小代价差分解码会带来大约0.2到0.5dB的性能损失因为相对相位判决引入了邻近符号的联合错误概率。在低SNR链路里这个损失需要提前计入预算。5.3 环路带宽和信噪比怎么平衡Costas环和定时恢复环路的带宽选择是接收机调试里的核心问题。环路带宽宽则响应快、能跟踪快速变化的频偏和相位噪声但环路内的等效噪声带宽也大更多的噪声会进入解调结果星座点发散。环路带宽窄则噪声被压低但跟踪慢如果频偏还在缓慢漂移环路跟不上就会失锁。工程上没有万金油采用的是分阶段策略。在信号捕获阶段先用宽环路快速牵引锁定后再收窄环路带宽进入跟踪模式。很多接收芯片都内置了这种两档或者多档设置手动调的时候也可以先在示波器上看着星座图把带宽从大到小逐步调整找到一个中间的甜点区星座点清晰、不发生漂移同时相位抖动尽量小。这里有个实用技巧用不同长度的平均来看星座图。把示波器的余辉清零后观察星座点的轨迹。如果轨迹很细说明环路稳定如果轨迹发散成云团状说明噪声或环路过宽如果轨迹形成圆弧说明还有频偏。5.4 接收灵敏度测试里的一个细节产品做接收灵敏度测试时标准做法是逐渐降低输入信号功率记录BER达到某个门限时的信号电平。这里要注意的是测试时发射端和接收端的时钟必须是独立的不能共用一个时钟源。共用一个时钟源会让定时恢复环路过于简单测出来的灵敏度比实际场景好很多掩盖了定时恢复能力不足的问题。另外灵敏度测试中如果发现BER曲线在低信噪比区间的斜率明显偏离理论值这不是正常现象通常说明接收机的某个模块引入了非理想因素。常见原因包括ADC有效位数不足、自动增益控制步进过大、或者数字下变频的截位设置太激进。逐级查各模块的输出信噪比是定位这类问题最有效的手段。6. 一点个人体会BPSK和QPSK是两个入门级的调制方式但把这两个调制真正调好需要理解的东西一点都不“入门”。I/Q调制、载波恢复、定时恢复、成形滤波、眼图分析、环路带宽设计这些知识点环环相扣任何一个环节出问题最终都会反映在BER上。如果让我给刚入行或者正在调试相关系统的朋友一条最实在的建议那就是在动手调环路之前先把星座图和眼图看懂。星座图告诉你怎么错的眼图告诉你哪里错的而频谱仪告诉你为什么错的。三种仪器配合使用比拿着代码单步调试高效得多。我个人还有一个保留习惯每次拿到一个新的QPSK链路第一件事不是测性能而是先看星座图在长时间下的稳定性。放着让它跑十几分钟如果星座点始终稳定、不发散、不旋转这个接收机的底子就基本上是稳的。后面再调什么心里都有底。