ARTICLE DETAIL

资讯详情

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

基于P201Pro与GNU Radio的QPSK收发系统实战:从星座图到误码率

基于P201Pro与GNU Radio的QPSK收发系统实战:从星座图到误码率 1. 从比特流到星座图这套收发链路到底在做什么软件无线电这东西刚上手的时候最容易陷入一个误区把注意力全放在硬件上觉得设备越贵、采样率越高就越厉害。实际上真正决定你能不能跑通一条链路的是对整个信号处理流程的理解。我这次用P201Pro配合GNU Radio搭的这套QPSK收发系统说白了就是要把一串二进制比特经过映射、脉冲成型、上变频变成空中的射频信号发出去再在接收端把信号收回来经过下变频、匹配滤波、定时同步、载波恢复最终还原出原始比特流并且在星座图上看到四个清晰的点簇。这个实验的价值在于它把通信原理课本上那些抽象的框图变成了可以实时观察、实时调参的东西。你可以在GNU Radio的界面上直接看到星座图从一团模糊的云逐渐收敛成四个点也能看到误码率随着信噪比变化而波动。对于通信工程、电子信息专业的学生或者想入门软件无线电的工程师来说这套系统是一个非常好的练手平台。它不需要你从头写FPGA代码也不需要你精通射频电路设计只要理解基本的数字通信原理就能在GNU Radio里把链路搭起来。P201Pro这块板子在这里扮演的角色是射频前端负责把基带信号搬移到射频频段发射出去以及把接收到的射频信号搬回基带。GNU Radio则负责所有的数字信号处理工作包括调制解调、滤波、同步、判决等等。两者之间通过高速接口传输IQ采样数据。整个系统的核心挑战在于如何在存在噪声、频偏、定时误差的实际信道条件下依然能够正确地恢复出原始信息。我之所以选择QPSK作为调制方式是因为它在频谱效率和抗噪声性能之间取得了很好的平衡。相比BPSKQPSK在相同带宽下传输速率翻倍相比16QAMQPSK的星座点间距更大对信噪比的要求更低更适合初学者调试。而且QPSK的星座图只有四个点观察起来非常直观一旦同步做好四个点簇会非常清晰便于判断系统工作状态。2. 系统架构设计与关键参数选择2.1 为什么选择P201Pro加GNU Radio这套组合P201Pro这块板子的核心是一颗AD9361射频捷变收发器这是一款在软件无线电领域应用非常广泛的芯片。它集成了12位ADC和DAC支持70MHz到6GHz的频率范围瞬时带宽可以覆盖到56MHz。对于QPSK这种窄带调制来说它的性能绰绰有余。更重要的是AD9361提供了灵活的增益控制、采样率配置和滤波器设置这些都可以通过软件来调整非常适合做实验。GNU Radio这边我选择的是比较成熟的3.10版本。这个版本对Python 3的支持已经很完善而且社区里有很多现成的模块可以直接用。相比自己从零写DSP代码GNU Radio提供的现成模块大大缩短了开发周期。比如星座映射、根升余弦滤波器、Costas环、Gardner定时同步这些都有现成的block可以用你只需要把它们连起来调好参数就行。两者之间的数据接口我用的是板子配套的驱动和GNU Radio的源/汇模块。这里需要注意的是采样率的配置要匹配。AD9361的采样率设置和GNU Radio里采样率的设置必须一致否则会出现数据溢出或者欠采样的问题。我一般会把AD9361的采样率设成GNU Radio采样率的整数倍然后在GNU Radio里做抽取或内插这样处理起来比较灵活。2.2 QPSK调制解调的基本原理回顾QPSK的本质是把每两个比特映射到一个符号上这个符号有四种可能的相位状态分别是45度、135度、225度和315度。每个符号携带2比特信息所以符号速率是比特速率的一半。在星座图上这四个点均匀分布在单位圆上相邻点之间的相位差是90度。映射的时候我通常采用格雷码映射也就是相邻星座点之间只相差一个比特。这样做的好处是当接收端发生符号判决错误时通常只会错一个比特而不是两个比特同时错。在误码率性能上格雷码映射比自然二进制映射要好一些。解调的时候接收端需要完成几个关键步骤。首先是载波同步因为发射端和接收端的本振频率不可能完全一致总会存在频偏。如果不纠正这个频偏星座图会一直旋转根本没法判决。其次是定时同步因为接收端的采样时钟和发射端的符号时钟之间也存在相位和频率偏差需要找到最佳的采样时刻。最后是判决根据同步后的采样值判断它落在哪个星座点附近然后输出对应的比特。2.3 关键参数的计算与配置采样率的选择需要权衡几个因素。采样率越高信号带宽越宽但数据量也越大对处理能力的要求越高。对于QPSK来说如果符号速率是100kSymbol/s那么基带带宽大约是100kHz。根据奈奎斯特采样定理采样率至少要200kHz。但实际中为了便于滤波和同步我一般会选择4倍过采样也就是400kHz的采样率。根升余弦滤波器的滚降系数我设的是0.35。这个值越小频谱效率越高但时域拖尾越长对定时同步的要求也越高。0.35是一个比较折中的选择既能保证一定的频谱效率又不会让同步变得太困难。滤波器的跨度我设的是8个符号这样既能保证滤波效果又不会引入太大的延迟。Costas环的环路带宽我设的是0.01左右。这个值决定了载波同步的收敛速度和稳态误差。带宽越大收敛越快但稳态误差也越大带宽越小稳态误差越小但收敛越慢。对于QPSK来说0.01是一个比较常用的经验值。Gardner定时同步的环路带宽我设的是0.005也是类似的原则。3. 发射链路搭建与实操细节3.1 比特流生成与星座映射发射端的第一步是生成比特流。我一般用GNU Radio自带的随机源模块来产生随机的0和1。这个模块可以设置输出比特的速率我设的是200kbps因为QPSK每个符号携带2比特所以符号速率就是100kSymbol/s。接下来是星座映射。GNU Radio提供了星座调制模块你需要给它提供一个星座图对象。对于QPSK星座图就是四个点坐标分别是(11j)/sqrt(2)、(-11j)/sqrt(2)、(-1-1j)/sqrt(2)、(1-1j)/sqrt(2)。除以sqrt(2)是为了归一化功率让平均功率为1。映射的时候模块会把输入的比特流每两个比特一组根据格雷码规则映射到对应的星座点上。这里有一个细节需要注意GNU Radio的星座调制模块默认的输入是字节流每个字节代表一个比特。如果你用的是随机源产生的比特流需要先做一次打包把8个比特打包成一个字节然后再送给星座调制模块。或者你也可以直接用随机源产生字节流然后让星座调制模块只取每个字节的最低位。我一般选择前者因为这样更直观也更容易控制比特速率。3.2 脉冲成型滤波器的设计与实现星座映射输出的符号是冲激序列每个符号只在一个采样点上非零其余采样点都是零。这样的信号带宽是无穷大的直接发射会干扰相邻信道。所以需要经过脉冲成型滤波器把冲激序列变成带限信号。我选用的是根升余弦滤波器因为它在收发两端各放一个合起来就是一个完整的升余弦响应满足奈奎斯特第一准则也就是在符号采样点上无码间干扰。滤波器的参数主要有三个滚降系数、符号跨度和过采样倍数。滚降系数我设的是0.35符号跨度是8过采样倍数是4。也就是说滤波器的冲激响应长度是8*4133个采样点。在GNU Radio里根升余弦滤波器模块可以直接用。你需要设置好增益一般设为1.0就行。滤波器的输出就是基带IQ信号可以直接送给硬件发送。这里要注意的是滤波器的延迟是(跨度*过采样倍数)/2个采样点在接收端做同步的时候需要考虑这个延迟。3.3 硬件发送配置与增益调整P201Pro的发送配置主要通过驱动接口来完成。你需要设置中心频率、采样率、带宽和发送增益。中心频率我一般选在2.4GHz附近这个频段比较干净干扰少。采样率设成400kHz和GNU Radio里的采样率保持一致。带宽设成200kHz略大于信号带宽保证信号能完整通过。发送增益的调整很关键。增益太小信号太弱接收端信噪比不够增益太大信号进入非线性区会产生失真。我一般会先用一个较小的增益比如-10dB然后观察接收端的星座图如果点簇很散就慢慢增加增益直到星座图清晰为止。但也不能一直加加到一定程度后星座图反而会变差那就是进入了饱和区。注意在调整发送增益的时候最好同时观察频谱确保信号没有超过带宽限制也没有产生明显的谐波。4. 接收链路搭建与同步算法调试4.1 接收前端配置与自动增益控制接收端的硬件配置和发送端类似中心频率、采样率、带宽都要匹配。接收增益我一般先设成自动增益控制模式让芯片自己调整增益保证输出信号的幅度在一个合适的范围内。等系统跑通之后再改成手动增益以便更精细地控制。接收到的信号首先经过一个低通滤波器滤除带外噪声。滤波器的截止频率设成信号带宽的一半左右也就是100kHz。然后经过一个抽取器把采样率降到合适的值。我一般会把采样率降到4倍符号速率也就是400kHz这样后续的同步算法处理起来比较方便。4.2 匹配滤波与定时同步接收端的匹配滤波器和发送端的脉冲成型滤波器是一样的都是根升余弦滤波器。两者合起来构成一个完整的升余弦响应满足无码间干扰条件。匹配滤波器的输出就是符号同步的输入。定时同步我用的是Gardner算法。这个算法的好处是不需要知道载波相位可以在载波同步之前就完成定时同步。Gardner算法的核心思想是利用相邻两个符号的采样值来计算定时误差然后通过一个环路滤波器来调整采样时刻。环路带宽我设的是0.005这个值需要根据实际的定时偏差来调整。如果收敛太慢可以适当增大带宽如果稳态误差太大可以适当减小带宽。在GNU Radio里Gardner定时同步模块可以直接用。你需要设置好环路带宽和符号速率。模块的输出就是同步后的符号每个符号对应一个采样点。这时候的星座图应该已经比较清晰了但可能还在旋转因为载波频偏还没有纠正。4.3 载波同步与星座图观察载波同步我用的是Costas环。这个算法适用于抑制载波的调制方式比如QPSK。Costas环的核心是一个相位误差检测器它通过计算接收信号和判决信号之间的相位差来估计频偏和相偏然后通过一个环路滤波器来调整本地振荡器的频率和相位。Costas环的环路带宽我设的是0.01。这个值也需要根据实际的频偏来调整。如果频偏比较大可以适当增大带宽加快收敛速度如果频偏比较小可以减小带宽降低稳态误差。在GNU Radio里Costas环模块可以直接用你需要设置好环路带宽、调制阶数和星座图。当载波同步完成之后星座图上的四个点簇应该非常清晰分别位于四个象限。这时候你可以用一个星座图显示模块来观察也可以用误码率模块来统计误码率。如果星座图上的点簇很散说明信噪比不够可能需要调整发送增益或者接收增益。如果星座图在旋转说明载波同步没有收敛需要调整Costas环的环路带宽。5. 常见问题排查与实战经验分享5.1 星座图不收敛的几种典型情况星座图不收敛是调试过程中最常见的问题。根据我的经验主要有以下几种原因第一种是采样率不匹配。如果GNU Radio里的采样率和硬件实际采样率不一致会导致符号定时完全错乱星座图根本没法看。排查方法是检查硬件驱动里的采样率设置和GNU Radio里采样率模块的设置是否一致。第二种是频偏太大。如果发射端和接收端的本振频率偏差超过了Costas环的捕获范围载波同步就无法收敛。这时候可以先用一个频谱仪观察接收信号的频谱估计一下频偏大概是多少然后调整Costas环的环路带宽或者先在基带做一个粗频偏校正。第三种是滤波器参数不对。如果根升余弦滤波器的滚降系数或者符号跨度设置不当会导致码间干扰严重星座图上的点簇会变得很模糊。这时候可以尝试调整滤波器的参数或者换一个更简单的滤波器比如升余弦滤波器。第四种是增益设置不当。如果发送增益太大信号进入非线性区会产生谐波和互调失真星座图会变形。如果接收增益太小信噪比不够星座图会变得很散。这时候需要重新调整增益。5.2 误码率居高不下的排查思路误码率是衡量系统性能的最终指标。如果误码率居高不下可以从以下几个方面排查首先检查信噪比。如果信噪比本身就很低误码率自然高。可以通过增加发送增益或者减小接收增益来提高信噪比。但要注意不要进入非线性区。其次检查同步是否完成。如果定时同步或者载波同步没有收敛误码率会非常高。可以通过观察星座图来判断同步是否完成。如果星座图上的点簇很清晰说明同步已经完成如果点簇很散或者在旋转说明同步还有问题。然后检查判决门限。GNU Radio的星座判决模块默认使用最近邻判决也就是找离接收符号最近的星座点。如果星座图有偏置比如整体偏移了判决就会出错。这时候可以在判决之前做一个直流偏置校正。最后检查比特映射。如果发送端和接收端的比特映射规则不一致比如一个用格雷码一个用自然二进制码误码率会很高。这时候需要检查两端的星座图对象是否一致。5.3 实战中积累的几个小技巧第一个技巧是关于增益调整的。我一般会先把发送增益设成一个较小的值然后慢慢增加同时观察星座图。当星座图从模糊变得清晰再变得模糊的时候那个从清晰到模糊的拐点就是最佳增益。这个方法比单纯看误码率更直观。第二个技巧是关于环路带宽的。我一般会先把环路带宽设得大一点让同步快速收敛然后再慢慢减小带宽降低稳态误差。这样比一开始就设一个很小的带宽要快得多。第三个技巧是关于数据记录的。在调试过程中我习惯把IQ数据记录下来然后用Python或者MATLAB做离线分析。这样可以看到更多的细节比如星座图的分布、频谱的形状、眼图的张开程度等等。GNU Radio提供了文件汇模块可以很方便地把数据存成二进制文件。第四个技巧是关于参数扫描的。如果某个参数不确定该设多少可以写一个简单的脚本让这个参数在一定范围内变化然后记录每个值对应的误码率最后选误码率最低的那个值。这个方法虽然费时间但能找到最优参数。问题现象可能原因排查方法解决方案星座图完全散开采样率不匹配检查硬件和软件采样率设置统一采样率星座图旋转载波频偏太大观察频谱估计频偏增大Costas环带宽或做粗频偏校正星座图点簇模糊信噪比不够检查增益设置调整发送或接收增益误码率突然升高同步失锁观察星座图是否收敛重新调整同步环路参数频谱出现谐波发送增益过大观察频谱减小发送增益6. 从实验到产品这套系统的扩展方向这套QPSK收发系统跑通之后其实还有很多可以扩展的地方。比如你可以把调制方式换成16QAM或者64QAM观察星座图的变化和误码率的差异。你也可以加入信道编码比如卷积码或者LDPC码看看编码增益能带来多少性能提升。你还可以把这套系统改成OFDM体验一下多载波调制在频率选择性信道下的优势。从工程应用的角度来看这套系统可以作为很多无线通信产品的原型验证平台。比如你可以用它来测试新的同步算法或者验证新的调制方式在实际信道下的性能。P201Pro的灵活性让你可以很方便地修改射频参数GNU Radio的模块化设计让你可以快速替换算法模块。这种软硬件结合的开发方式比传统的纯硬件开发要高效得多。我个人在实际操作中的体会是软件无线电最大的魅力在于它的可观察性和可修改性。你可以看到信号处理流程中的每一个中间结果也可以随时修改任何一个模块的参数。这种透明度对于理解通信原理、调试通信系统来说是非常宝贵的。我建议每一个做通信的人都至少跑通一套这样的系统它会让你对通信的理解从课本上的公式变成实实在在的波形和星座图。
返回列表