基于 FPGA 的 16QAM 调制解调系统功能说明文档

基于 FPGA 的 16QAM 调制解调系统功能说明文档

基于FPGA的QAM调制解调,有详细实验文档

概述

本系统实现了一个完整的 16QAM(16-Quadrature Amplitude Modulation) 调制与解调链路,部署于 Altera Cyclone IV GX 系列 FPGA 平台上。系统以 PN 序列 作为原始数据源,通过调制、载波调制、DAC 输出、载波解调、滤波、符号判决等环节,最终还原原始比特流,可用于通信原理教学、信号处理实验或 FPGA 基带系统验证。

基于FPGA的QAM调制解调,有详细实验文档

系统整体架构分为 调制通路解调通路 两大模块,并辅以 时钟管理、信号选择、I²C 配置接口 等外围控制逻辑,支持灵活的信号观测与参数配置。


一、系统顶层结构

系统顶层模块为 fpga16qambsf_top,其主要功能包括:

  • 接收外部系统时钟(sysclkin
  • 驱动 DAC 输出接口(dacdata[9:0]、dacclkdac_wr 等)
  • 提供 I²C 接口用于上位机配置(iicscl / iicsda
  • 集成 SignalTap 逻辑分析仪用于内部信号调试

系统时钟频率由外部提供,内部通过 clk_div2 模块生成多相位使能信号,用于控制各子模块的同步操作。


二、调制通路(Modulation Path)

1. 信号源模块

原始数据由 nrzsource2_8 模块生成,该模块输出 PN8 伪随机序列,每 800 个比特为一个周期,默认有效数据长度为 240 比特。输出信号包括:

  • nrz_out:原始比特流
  • nrz_vid:数据有效标志
  • nrz_fs:帧同步标志(周期起始)

该模块支持通过参数动态调整初始种子与有效长度,便于实验验证。

2. 16QAM 映射模块(`mod_16qam`)

该模块接收串行比特流,每 4 比特组成一个符号,映射为 I/Q 两路基带信号:

  • I 路对应比特 b0b1,Q 路对应 b2b3
  • 映射规则采用 Gray 编码风格,如 00 → -301 → -111 → +110 → +3
  • 映射结果通过 ROM 查表 实现(MODROM16QAM_I/Q),预存了 32 个 10 位宽的 I/Q 幅值
  • 输出为 8 位有符号整数(modiout[7:0] / modqout[7:0]
  • 同时输出符号有效标志 modiqvid 与分组标志 modiqgroup

3. 载波调制模块(`mod_carry`)

该模块将基带 I/Q 信号分别与 正交载波(cos/sin) 相乘,完成频谱搬移:

  • 载波由 carrier_create 模块生成,频率由 ROM 地址递增控制(32 点正弦/余弦表)
  • 使用 8×8 有符号乘法器lmpmult8x8)实现混频
  • I/Q 路混频结果相加,输出已调信号 carrymodiq_out
  • 所有信号通过寄存器对齐,确保时序一致性

三、解调通路(Demodulation Path)

1. 载波解调模块(`demod_carry`)

接收已调信号后,执行相干解调:

  • 将输入信号分别与本地 同频同相的 cos/sin 载波 相乘
  • 乘法结果经 截位处理 后送入 FIR 低通滤波器
  • FIR 滤波器(fir_demod)为 61 阶对称结构,用于滤除高频分量,恢复基带 I/Q 信号
  • 滤波器系数以参数形式硬编码,针对系统带宽优化设计
  • 输出为滤波前/后 I/Q 信号,以及对齐后的有效/分组标志

2. 符号判决与解映射模块(`demod_16qam`)

该模块完成从模拟域到数字域的转换:

  • 对 I/Q 信号取绝对值并判断幅值区间(阈值 310)
  • 根据 I/Q 符号位与幅值大小,还原出原始 4 比特符号
  • 通过 并串转换 输出串行比特流 demoddataout
  • 输出同步标志 demoddatavid 与分组标志 demoddatagroup

四、信号输出与观测机制

1. DAC 接口模块(`dac_bus_out1`)

  • 支持选择 4 组 I/Q 信号对(如原始信号、调制信号、解调信号等)
  • 将 8 位数据扩展为 10 位,适配外部 DAC 芯片
  • 通过时钟分频生成 DAC 控制时序(dacclk、dacwrdac_sel
  • 输出信号可直接连接示波器观测波形

2. 信号选择机制

  • 通过 eightbittodaconebittodac1 模块,支持 8 位数据1 位标志信号 的灵活路由
  • 选择逻辑由 I²C 配置寄存器控制,实现动态观测切换

3. I²C 配置接口(`arm_iic_reg_top`)

  • 提供 10 个 8 位寄存器,用于上位机配置
  • 可设置信号源类型、观测通道、数据长度等参数
  • 支持实时交互,便于实验调试

五、调试与验证支持

  • 系统集成 SignalTap II 逻辑分析仪,采样深度 65536,可实时捕获:
  • 调制 I/Q 输出
  • 解调 I/Q 输入
  • 符号判决中间变量
  • 原始与解调比特流
  • 所有关键信号均通过 setinstanceassignment 绑定至调试节点
  • 支持触发条件配置,便于定位特定事件

六、总结

本 16QAM 调制解调系统完整实现了从比特流到射频等效信号、再还原回比特流的全过程,具备以下特点:

  • 模块化设计:各功能单元解耦清晰,便于扩展与替换
  • 硬件友好:大量使用 ROM 查表与定点运算,适合 FPGA 实现
  • 教学友好:支持多种观测点与配置选项,适合通信原理实验
  • 可调试性强:集成逻辑分析仪与 DAC 输出,便于信号验证

该系统可作为数字通信系统 FPGA 实现的典型范例,适用于高校实验、科研验证或嵌入式通信模块开发。

Read more

Flutter 组件 aws_lambda_dart_runtime_ns 的鸿蒙化适配实战 - 实现 OpenHarmony 分布式端高性能云端协同、冷启动指纹预检与工业级边缘计算核方案

Flutter 组件 aws_lambda_dart_runtime_ns 的鸿蒙化适配实战 - 实现 OpenHarmony 分布式端高性能云端协同、冷启动指纹预检与工业级边缘计算核方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 aws_lambda_dart_runtime_ns 的鸿蒙化适配实战 - 实现 OpenHarmony 分布式端高性能云端协同、冷启动指纹预检与工业级边缘计算核方案 前言 在鸿蒙(OpenHarmony)生态的分布式边缘计算、强云端一体化架构或者是对冷启动耗时有极其严苛要求的 0308 批次企业级应用中。“云原生函数的执行效率与边缘执行环境的指纹预检维度”是衡量整个系统算力调度稳定性的最终质量门禁。面对包含每秒数百万次调用的 Lambda 函数集群、动态变化的 AWS 环境变量、甚至是由于跨域转发产生的 0308 批次请求转发波次。如果仅仅依靠简单的“HTTP 转发”或者是干瘪的裸进程运行。不仅会导致在处理高并发云请求时让系统如同在逻辑废墟中盲人摸象。更会因为运行时环境不兼容。令应用在关键业务触发时瞬间陷入无响应盲区。 我们需要一种“逻辑严密、运行时自适应”的算子调度艺术。 aws_lambda_dart_

By Ne0inhk
Flutter 组件 dio_logging_interceptor 适配鸿蒙 HarmonyOS 实战:全链路网络观测,构建高性能日志拦截与流量审计架构

Flutter 组件 dio_logging_interceptor 适配鸿蒙 HarmonyOS 实战:全链路网络观测,构建高性能日志拦截与流量审计架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 dio_logging_interceptor 适配鸿蒙 HarmonyOS 实战:全链路网络观测,构建高性能日志拦截与流量审计架构 前言 在鸿蒙(OpenHarmony)生态迈向大型分布式应用、涉及复杂微服务调用及严苛线上环境调试的背景下,如何实现网络请求的长效“透明化”治理,已成为决定应用研发效率与故障定位能力的基石。在鸿蒙设备这类强调 AOT 极致性能与低能耗前台驻留的环境下,如果应用依然依赖零散的 print 语句或基础的控制台输出,由于由于网络并发频率高、报文体积大,极易由于由于“日志阻塞”或“关键信息淹没”导致开发者无法在海量日志中捕捉到致命的 401 或 500 异常原因。 我们需要一种能够深度集成于网络管线(Dio)、支持多级日志过滤且具备美理化输出格式的拦截器方案。 dio_logging_interceptor 为 Flutter 开发者引入了“

By Ne0inhk
企业级部署升级:Nginx 反向代理 + ELK 日志监控,让成绩预测平台稳定可追溯

企业级部署升级:Nginx 反向代理 + ELK 日志监控,让成绩预测平台稳定可追溯

⭐️个人主页:秋邱-ZEEKLOG博客 📚所属栏目:python 前言 上一期的 Docker+Linux 部署,让成绩预测平台实现了局域网共享,但真正落地到团队 / 学校使用,还缺两个关键支撑:访问体验不够专业(IP + 端口难记、无加密),运维排查全靠 “猜”(日志分散、无监控)。 这一期,我们跳出 “步骤式部署” 的框架,以 “问题驱动 + 场景落地” 为核心,先拆解企业级部署的核心诉求,再分模块实现 Nginx 域名化改造和 ELK 日志监控,最后通过实战验收和运维手册,让你既能搞定部署,又能轻松应对后续运维问题,全程聚焦 “实用、稳定、可追溯”。 一、企业级部署的 3 个核心诉求(先明确目标再动手) 为什么互联网公司都在用 “Nginx+ELK”

By Ne0inhk
给数据“立规矩” —— MySQL 新手必学的表约束全指南

给数据“立规矩” —— MySQL 新手必学的表约束全指南

🔥海棠蚀omo:个人主页                 ❄️个人专栏:《初识数据结构》,《C++:从入门到实践》,《Linux:从零基础到实践》,《Linux网络:从不懂到不会》,《MySQL:新手入门指南》                 ✨追光的人,终会光芒万丈 博主简介: 目录 一.为什么要有表的约束? 二.表的约束 2.1空属性 2.2默认值 2.3列描述 2.4zerofill 2.5主键 2.5.1复合主键 2.6自增长 2.7唯一键 5.8外键 前言: 在上一篇文章中我们讲解了MySQL中的各种数据类型,那么正是因为有了各种数据类型,才会有今天我们要讲的表的约束相关知识,那么这中间到底是怎么回事呢?下面我们就一起来看看吧。 一.为什么要有表的约束? 在上一篇文章中,我们认识了很多的数据类型,并在它们的下面我们也通过例子进行了演示,

By Ne0inhk