# GNU Radio Based QPSK System Final Version
## 1. 立项背景和目标
本项目基于 GNU Radio 搭建 QPSK 数字通信收发系统,面向软件无线电课程设计、通信原理实验和数字调制解调流程验证等场景。立项目标是完成一条从文本数据生成、编码、调制、信道传输到接收端同步、解调、解码的完整链路,并通过频谱图、星座图和 PDU 波形直观展示通信信号在不同处理阶段的变化。
## 2. 软件功能和核心功能模块
软件主要功能是实现 QPSK 基带收发仿真与可视化调试。核心模块包括:`exam_simple_tx_rx.grc`,用于在 GNU Radio Companion 中查看和编辑流图;`exam_simple_tx_rx.py`,用于运行完整 Qt GUI 通信系统;ASCII 编码模块,用于将字符串转换为 7bit 比特流;扰码与 Barker 同步头模块,用于增强比特随机性并辅助帧同步;QPSK 调制、根升余弦滤波、信道模型、粗频偏同步、PFB 定时恢复、CMA 均衡、Costas 环和硬判决模块,用于完成发送、信道模拟和接收恢复;解码模块最终输出恢复文本到 `results/output_v2.txt`。
## 3. 业务流程和功能路径
系统业务流程为:发送端先生成固定文本数据,将文本转换成 7bit ASCII 比特流,再经过扰码、同步头插入和 QPSK 星座映射形成复数符号;随后通过根升余弦滤波完成成形,并进入含采样率偏差和相位噪声的模拟信道。接收端先进行粗频偏估计与校正,再依次完成定时同步、均衡、载波同步和硬判决,最后利用 Barker 同步头定位帧边界,解扰并恢复 ASCII 字符。功能路径可通过打开 `exam_simple_tx_rx.grc` 查看,也可在 GNU Radio 环境中运行 `python exam_simple_tx_rx.py` 观察完整链路效果。
运行效果
【通信系统建模仿真-基于GNURadio的QPSK调制解调系统】 https://www.bilibili.com/video/BV1RkTUzYEdQ/?share_source=copy_web&vd_source=7a64ae92edb7d9a5a65c77e811252c4b
# GNU Radio Based QPSK System Final Version
本项目整体采用“发送端编码调制 + 信道模拟 + 接收端同步解调 + 可视化验证”的架构设计。系统基于 GNU Radio 3.10 搭建主流程,使用 GRC 完成模块连接和参数配置,使用 Python Embedded Block 补充自定义算法逻辑,GUI 部分采用 GNU Radio QtGUI 展示频谱、星座图和 PDU 波形。发送端负责生成文本业务数据,将字符串转换为 7bit ASCII 比特流,经过扰码、Barker 同步头插入、QPSK 映射和根升余弦滤波后送入信道;信道部分加入采样率偏差、相位噪声等干扰;接收端依次完成粗频偏估计、定时恢复、CMA 均衡、Costas 载波同步、硬判决、帧同步、解扰和 ASCII 还原。
我主要负责 QPSK 收发链路的核心实现、嵌入式 Python 模块编写和调试验证。具体包括 7bit ASCII 编码模块、QPSK 硬判决模块、Barker 码帧同步与解码模块、粗频偏估计模块,以及主流程中各同步模块和可视化窗口的联调。系统最终能够把固定文本 `ESFSKHADLAFX` 按 `repeat_times=30` 重复发送,接收端输出恢复字符到 GUI PDU 曲线和 `results/output_v2.txt`,并能通过多个星座图观察从受损信号到同步收敛后的变化。
我遇到的主要难点是接收端同步和缓存处理:频偏、相位噪声和采样率偏差会导致星座旋转、扩散,帧头相关检测也容易因为缓存边界不一致造成丢字或输出残留。解决方案是增加粗频偏校正、PFB 定时同步、CMA 均衡和 Costas 环的级联恢复流程,并在解码模块中统一处理无同步头、单同步头和多同步头三种情况,保证每次 `work()` 都明确写入输出缓冲。同时修复了相对输出路径容易写错目录的问题,使结果稳定保存到项目 `results` 目录。