ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

软件无线电QPSK收发链路实战:从bit流到星座图诊断

软件无线电QPSK收发链路实战:从bit流到星座图诊断 1. 从bit流到QPSK点簇这套收发链路到底在做什么软件无线电实验做到第四个阶段很多人会卡在一个很尴尬的位置前面几节实验里你已经在GNU Radio里拖过滑块、调过增益、看过频谱甚至用P201Pro成功把一段bit流发出去又收回来了但当你打开Constellation Sink看到屏幕上那一团散点的时候心里其实是没底的——这团东西到底算不算正常为什么它有时候聚成四个团有时候糊成一圈QPSK点簇和bit流之间到底是什么关系这篇阶段性总结就是来解决这个问题的。我用的硬件是P201ProAD9361方案的小型SDR平台软件是GNU Radio Companion目标是搭一套最简单的QPSK收发系统把bit流→符号映射→脉冲成型→上变频→发射→接收→下变频→匹配滤波→符号同步→星座图这条链路完整跑通并且能对着星座图说出个所以然来。适合已经跑过前几节实验、手里有P201Pro或者类似AD9361平台、想在QPSK这一步把原理和实操对齐的人。如果你还在纠结为什么我的星座图是一坨这篇里的排查思路应该能帮上忙。先说结论性的判断标准方便你对照自己的实验现象一个健康的QPSK星座图应该是四个清晰的点簇分布在复平面的四个象限或者旋转45度落在坐标轴上取决于你的映射约定每个簇的方差要小簇与簇之间要有明显的空白间隔。如果四个簇糊成一片说明信噪比不够或者同步没做好如果簇在旋转说明载波频偏没纠正如果簇被拉成椭圆或者长条说明有IQ不平衡或者定时误差。这些现象背后对应的都是链路里某一个具体环节出了问题而不是玄学。我一开始做这个实验的时候最大的误区是以为能收到数据就说明链路没问题。实际上QPSK的星座图比误码率更敏感它能在你还没看到误码的时候就先把链路里的隐患暴露出来。所以这篇总结的重点不是怎么把数据发出去而是怎么通过星座图判断链路质量以及每个环节该怎么调。2. QPSK符号映射与bit流的对应关系2.1 为什么QPSK一个符号能带2个bitQPSKQuadrature Phase Shift Keying正交相移键控的本质是用载波的四个不同相位来携带信息。四个相位分别是45°、135°、225°、315°或者0°、90°、180°、270°取决于你的映射约定每个相位对应一个2bit的组合所以一个符号周期能传2个bit。这就是它比BPSK一个符号1bit频谱效率高一倍的原因。在GNU Radio里这个映射过程由Constellation QPSK对象完成。它的内部逻辑其实很简单把输入的bit流每2个bit分成一组然后按照一张查找表映射到复数星座点上。默认的映射是格雷码Gray coding也就是相邻星座点之间只差1个bit。为什么要用格雷码因为在实际信道里噪声导致的最常见错误是符号被判到相邻点上格雷码能让这种相邻错误只产生1个bit的误码而不是2个。这个细节在实验里很容易被忽略但它直接影响到你的误码率曲线。2.2 映射约定不一致会带来什么后果这里有个坑我踩过发射端和接收端的映射约定必须一致否则你收到的bit流会整体错乱。GNU Radio的QPSK constellation默认映射是输入bit对星座点复数相位0011j45°01-11j135°11-1-1j225°101-1j315°如果你在发射端用了这个表接收端却用了另一个顺序比如把01和11对调那么解调出来的bit流会有一半是错的但星座图看起来完全正常——因为星座点的位置没变只是标签变了。这种错误非常隐蔽排查的时候要优先确认两端的constellation对象是不是同一个配置。提示在GNU Radio里最稳妥的做法是发射和接收共用同一个Constellation QPSK对象的参数或者直接用digital.constellation_qpsk()这个工厂函数避免手写映射表时出错。2.3 差分编码解决相位模糊的实用手段QPSK有一个绕不开的问题相位模糊。因为接收端恢复载波的时候可能锁定在任意一个90°的整数倍相位上导致解调出来的星座图整体旋转了90°、180°或270°。这时候星座图看起来还是四个簇但bit流全错了。解决这个问题的标准做法是差分编码differential encoding。它的思路是不直接传绝对相位而是传相对于前一个符号的相位变化。这样即使整体旋转了相位差不变解调结果就正确。GNU Radio里可以用Diff Encoder和Diff Decoder模块来实现或者用Constellation QPSK的差分版本。我在实验里的做法是先在发射端加Diff Encoder接收端加Diff Decoder然后故意把接收端的某个相位旋转90°观察星座图和解调结果的变化。实测下来加了差分编码之后即使星座图整体转了90°解出来的bit流依然是对的。这个验证过程很值得做一遍能让你真正理解差分编码的价值。3. 脉冲成型与匹配滤波为什么星座图会糊3.1 根升余弦滤波器的核心参数bit映射成星座点之后如果直接发射每个符号就是一个理想的冲激频谱是无限宽的实际系统里根本没法用。所以必须做脉冲成型pulse shaping把每个符号扩展成一个有限带宽的波形。最常用的是根升余弦滤波器Root Raised CosineRRC。RRC有两个关键参数滚降系数roll-off factorα和滤波器跨度span。滚降系数决定了频谱的陡峭程度α越小频谱越紧凑但时域拖尾越长α越大频谱越宽但时域越干净。常用的取值是0.35DVB标准或0.5很多实验系统。滤波器跨度决定了用多少个符号周期来近似这个无限长的冲激响应一般取6到10个符号。在GNU Radio里发射端用Root Raised Cosine Filter做成型接收端用同样的滤波器做匹配滤波。这里有个关键点发射和接收的RRC参数必须完全一致包括α、span和samples per symbol。如果接收端的α和发射端不一样匹配滤波就不是最优的星座图会明显变糊。3.2 为什么接收端要用匹配滤波而不是普通低通匹配滤波器的目的是在采样时刻最大化信噪比。对于经过RRC成型的信号最优的接收滤波器就是同样的RRC因为RRC和自身卷积得到的是升余弦满足无码间干扰条件。如果你在接收端随便用一个低通滤波器虽然也能滤掉带外噪声但在采样时刻的信噪比不是最优的星座图的簇会明显变大。我做过一个对比实验发射端用α0.35的RRC接收端分别用α0.35的RRC和α0.5的RRC做匹配滤波。结果用0.5的时候星座图的簇明显更散误码率也高了一个数量级。这个差异在低信噪比下尤其明显。3.3 采样率与samples per symbol的配合这里还有一个容易出问题的地方samples per symbolsps的设置。发射端做脉冲成型的时候会把每个符号上采样到sps个采样点然后经过RRC滤波。接收端做匹配滤波之后需要降采样回每个符号一个点才能送进星座图。如果sps设置得不合理比如太小小于2RRC滤波器的时域分辨率不够成型效果会很差如果太大计算量上去了但收益有限。一般取4到8比较合适。我用的是sps4配合span6实测下来星座图的簇很干净。注意sps这个参数在发射和接收链路里必须一致而且要和硬件采样率配合好。P201Pro的采样率如果是1MHzsps4那么符号率就是250kHz。这个符号率要和你设置的RRC滤波器带宽匹配否则会出现频谱混叠或者浪费带宽。4. P201Pro硬件配置与GNU Radio流图搭建4.1 P201Pro在GNU Radio里的接口选择P201Pro是基于AD9361的SDR平台在GNU Radio里通常通过gr-iioIndustrial I/O模块来访问。你需要先确认系统里装了libiio和gr-iio然后在GRC里能看到FMComms2/3/4 Source和FMComms2/3/4 Sink这些模块。配置的时候有几个关键参数RF带宽要和你的信号带宽匹配。QPSK信号经过RRC成型后带宽大约是符号率×(1α)。比如符号率250kHz、α0.35带宽约337.5kHzRF带宽设成500kHz到1MHz都可以。采样率要满足奈奎斯特采样定理至少是信号带宽的2倍。我设的是1MHz给足了余量。LO频率发射和接收要设成同一个频率或者差一个中频否则会有很大的频偏。增益发射增益和接收增益要配合调。发射增益太高会导致接收端饱和星座图会变成方形削顶太低则信噪比不够星座图糊成一团。4.2 发射链路的模块顺序我的发射链路是这样的Random Source产生随机bit流输出类型是byte每个byte取最低位作为1个bit。Unpack K Bits把byte流拆成bit流如果Random Source直接输出bit就不用这步。Diff Encoder差分编码。Constellation QPSKbit流映射成复数星座点。Root Raised Cosine Filter脉冲成型sps4α0.35span6。FMComms2 Sink送到P201Pro发射。这里有个细节Constellation QPSK的输出是复数每个符号一个复数点。RRC滤波器会对这个复数流做上采样和滤波输出sps倍的点数。所以RRC的输入是符号率输出是采样率。4.3 接收链路的模块顺序接收链路是发射的逆过程但多了同步环节FMComms2 Source从P201Pro接收输出复数基带信号。Root Raised Cosine Filter匹配滤波参数和发射端一致。Polyphase Clock Sync符号定时同步恢复出每个符号一个采样点。Costas Loop载波同步纠正频偏和相位偏移。Constellation QPSK作为decoder把复数点判决成bit。Diff Decoder差分解码。Constellation Sink显示星座图。Error Rate或BER模块统计误码率需要和发射端的bit流对齐。这个顺序很重要。定时同步必须在载波同步之前因为Costas Loop需要每个符号一个采样点才能工作。如果顺序反了Costas Loop会在多个采样点上乱转根本锁不住。4.4 同步模块的参数调试Polyphase Clock Sync和Costas Loop是接收链路里最难调的两个模块。Polyphase Clock Sync的关键参数是sps要和发射端一致、loop bandwidth环路带宽一般取符号率的1%到5%和filter size滤波器长度一般取sps的整数倍。环路带宽太小锁定慢太大抖动大。我一般从符号率的2%开始试。Costas Loop的关键参数是loop bandwidth和orderQPSK用4阶。环路带宽同样影响锁定速度和稳定性。我一般取符号率的1%左右。如果频偏比较大可以先用FFT Frequency Xlating FIR Filter或者Frequency Mod做粗频偏校正再用Costas Loop做细调。提示调试同步模块的时候先把发射端和接收端用线缆直连或者用衰减器信噪比调到很高这样星座图应该很干净。如果这时候星座图还是糊的那问题一定在同步参数上而不是信噪比。等直连调通了再换成天线发射逐步降低信噪比观察星座图的退化过程。5. 星座图诊断从点簇形态反推链路问题5.1 四个簇糊成一圈信噪比不足还是同步失败这是最常见的问题。看到星座图糊成一圈第一反应通常是信噪比不够但实际上可能是同步没锁住。区分方法很简单看星座图的中心。如果四个簇虽然糊但中心区域是空的说明同步基本锁住了只是噪声大如果中心区域也有点甚至整个平面均匀分布说明同步根本没锁。同步没锁的原因通常是环路带宽设得太大或太小、sps设置不对、或者频偏超出了Costas Loop的捕获范围。我的排查顺序是先确认sps一致再调环路带宽最后检查频偏。5.2 簇在旋转载波频偏没纠正如果星座图的四个簇在缓慢旋转说明接收端和发射端的载波频率有偏差Costas Loop没有完全纠正。旋转速度越快频偏越大。这种情况下Costas Loop的环路带宽可能设得太小跟不上频偏的变化或者频偏太大超出了环路捕获范围。解决办法先用粗频偏校正把频偏降到Costas Loop能捕获的范围内一般是符号率的千分之一以内再让Costas Loop做细调。在GNU Radio里可以用Frequency Xlating FIR Filter配合一个已知的导频或者前导码来做粗校正。5.3 簇被拉成椭圆或长条IQ不平衡或定时误差如果星座图的簇不是圆的而是被拉成椭圆或者长条说明有IQ不平衡或者定时误差。IQ不平衡表现为四个簇的幅度不一致或者簇的形状不对称定时误差表现为簇在某个方向上被拉长因为采样时刻没有对准最佳点。IQ不平衡的校正比较复杂一般需要在接收端加一个IQ平衡模块GNU Radio里有IQ Balance。定时误差则可以通过调Polyphase Clock Sync的环路带宽来改善。如果定时误差很大星座图会明显变成X形或者菱形。5.4 簇变成方形接收端饱和如果星座图的四个簇变成了方形边缘很平说明接收端的ADC饱和了信号被削顶。这是接收增益设得太高的典型表现。解决办法很简单降低接收增益或者加一个衰减器。P201Pro的接收增益范围是0到76dB一般从30dB开始试根据星座图调整。注意接收端饱和不仅会让星座图变形还会产生大量的谐波和互调分量严重影响误码率。如果你发现星座图是方形先降增益别急着调其他参数。6. 实测中的几个意外与经验总结6.1 天线直连和空口传输的差异我一开始用天线做空口传输星座图一直很糊调了半天同步参数也没用。后来换成线缆直连加30dB衰减器星座图立刻干净了。这说明问题不在同步而在空口链路的信噪比不够。空口传输的路径损耗、多径效应和干扰都比直连大得多所以调试的时候一定要先用直连把链路调通再换空口。6.2 采样率不匹配导致的幽灵频偏有一次我把发射端采样率设成1MHz接收端设成1.024MHz结果星座图一直在旋转Costas Loop怎么调都锁不住。后来才发现是采样率不匹配导致的等效频偏。P201Pro的采样率必须是某个基准时钟的整数分频如果两端设得不一样就会产生一个固定的频偏。这个坑很隐蔽因为你在GNU Radio里看采样率参数是对的但硬件实际输出的采样率可能有偏差。6.3 差分编码带来的额外误码差分编码虽然解决了相位模糊但它有一个副作用一个符号的错误会导致两个bit的错误因为差分编码是前后符号的相位差。所以在同样的信噪比下差分QPSK的误码率比绝对QPSK高大约一倍。这个代价在实验里是可以接受的但在实际系统里要权衡。6.4 星座图好看不等于误码率低这是我最想强调的一点。星座图好看只说明符号判决的余量大但不代表bit流一定对。如果映射约定错了或者差分编码/解码不匹配星座图可以很漂亮但误码率是0.5完全随机。所以调试的时候一定要同时看星座图和误码率两者都正常才算链路通了。7. 后续可以继续折腾的方向这套QPSK收发系统跑通之后其实还有很多可以扩展的地方。比如把RRC换成更复杂的成型滤波器观察频谱和星座图的变化或者加入信道编码比如卷积码或LDPC看误码率曲线怎么改善再或者把QPSK换成16QAM体验一下高阶调制的星座图诊断难度。我个人比较感兴趣的是把同步环节换成更现代的算法比如基于前导码的定时同步和频偏估计看看能不能在更低的信噪比下锁住。另外P201Pro支持多通道收发可以试试做MIMO或者波束成形的实验不过那就是另一个阶段的事了。最后分享一个小技巧调试星座图的时候把Constellation Sink的横纵坐标范围设成-2到2而不是默认的自动缩放这样不同实验条件下的星座图可以直接对比不会被自动缩放误导。这个细节看起来很小但对判断链路质量的一致性很有帮助。
返回列表