基于FPGA通原学习第二天(2)

发布时间:2026/7/9 5:59:42

基于FPGA通原学习第二天(2)
1. 引言BPSK二进制相移键控是数字通信中最基本的调制方式之一它用载波的两种相位0° 和 180°表示二进制信息具有抗噪声能力强、实现简单的优点。在 FPGA 中我们可以利用直接数字频率合成DDS技术生成高精度的正弦载波并结合简单的逻辑运算完成调制与解调整个过程均可在数字域内实现非常适合在低成本 FPGA 上部署。本文将分享一个完整的 BPSK 调制解调系统包含以下模块bpsk_modulatorBPSK 调制器根据输入比特翻转 DDS 载波的符号。bpsk_demodulatorBPSK 解调器使用相干解调恢复数据。bpsk_top顶层模块将调制器和解调器级联构成自环测试系统。所有代码均用 Verilog 编写并在 ModelSim 下完成功能仿真。2. 系统总体架构下图展示了系统的连接关系实际为自环测试拓扑--------------- ----------------- data_in -| bpsk_modulator|---------| bpsk_demodulator|-- data_out --------------- ----------------- ^ ^ | | fcw,clk,rst_n fcw,clk,rst_n发送端和接收端使用完全相同的fcw频率控制字和时钟因此本地载波与接收信号的载波同频同相实现了理想的相干解调条件。这种结构主要用于功能验证在真实无线通信中还需要增加载波同步和位同步电路。3. BPSK 调制器设计3.1 DDS 载波发生器调制器的核心是一个基于相位累加器的 DDS其框图如下fcw - [32位相位累加器] - 高8位作为地址 - [256×8bit正弦LUT] - sin_out相位累加器每个时钟周期累加fcw溢出自动循环相当于模 2^32 的计数器。取累加器高 8 位phase_acc[31:24]作为查找表地址对应相位分辨率 360°/256 1.40625°。正弦查找表sin_lut中预存一个完整周期的正弦波采样值有符号 8 位范围 -128~127。输出正弦波的频率由下式决定fcarrierfcw232×fclkfcarrier​232fcw​×fclk​例如系统时钟 100 MHz、fcw 429496730 时载波频率约为 10 MHz。3.2 BPSK 调制实现调制逻辑非常简单根据输入data_in选择输出sin_out或-sin_out对应相位 0° 和 180°。always (posedge clk or negedge rst_n) begin if(!rst_n) bpsk_out 8sd0; else if(data_in) bpsk_out -sin_out; // 比特1 → 载波反相 else bpsk_out sin_out; // 比特0 → 载波同相 end这样当data_in在符号速率下变化时bpsk_out便是一个相位连续或仅在比特边界跳变的 BPSK 已调信号。完整调制器代码bpsk_modulator.vmodule bpsk_modulator( input wire clk, input wire rst_n, input wire data_in, input wire [31:0] fcw, output reg signed [7:0] bpsk_out ); reg [31:0] phase_acc; always (posedge clk or negedge rst_n) begin if (!rst_n) phase_acc 32d0; else phase_acc phase_acc fcw; end wire [7:0] addr phase_acc[31:24]; reg signed [7:0] sin_lut [0:255]; initial begin $readmemh(sin_lut_one.hex, sin_lut); end wire signed [7:0] sin_out; assign sin_out sin_lut[addr]; always (posedge clk or negedge rst_n) begin if(!rst_n) bpsk_out 8sd0; else if(data_in) bpsk_out -sin_out; else bpsk_out sin_out; end endmodule4. BPSK 解调器设计解调器采用相干解调结构包含本地载波产生、乘法混频、低通滤波和判决四个部分。4.1 本地载波与混频解调器内部复用了与调制器完全相同的 DDS产生同频同相的本地正弦信号local_sin。接收信号bpsk_in与local_sin相乘若发送比特为 0bpsk_in sin(ωt)相乘后得sin²(ωt) 0.5 - 0.5cos(2ωt)。若发送比特为 1bpsk_in -sin(ωt)相乘后得-sin²(ωt) -0.5 0.5cos(2ωt)。因此乘积中包含一个直流分量±0.5和一个高频分量2倍载波频率。通过低通滤波器滤除高频后即可根据直流分量的极性恢复原始数据。wire signed [7:0] local_sin; assign local_sin sin_lut[phase_acc[31:24]]; // 相位累加器与调制端相同 reg signed [15:0] mixed_signal; always (posedge clk or negedge rst_n) begin if (!rst_n) mixed_signal 16sd0; else mixed_signal bpsk_in * local_sin; // 有符号乘法位宽扩展 end4.2 低通滤波器设计1. 数学原理从公式到代码一阶 IIR 低通滤波器的标准差分方程如下其中是当前的滤波输出对应代码中的 lpf_out 的新值。是上一拍的滤波输出对应代码中等号右边的 lpf_out。是当前的输入信号对应代码中的 mixed_signal。是滤波系数介于 $0$ 到 $1$ 之间决定了滤波的强度。我们对这个公式进行简单的代数变换代码中用移位操作实现除以 16 的运算避免了乘法器reg signed [15:0] lpf_out; always (posedge clk or negedge rst_n) begin if (!rst_n) lpf_out 16sd0; else lpf_out lpf_out (mixed_signal 4) - (lpf_out 4); end仔细观察最后这个公式你会发现它和我们的 Verilog 代码结构完全一致注意有符号数的算术右移会保留符号位确保了滤波器的正确性。4.3 判决输出当lpf_out 0时输出比特1否则输出0。这正好与调制器映射规则对应。always (posedge clk or negedge rst_n) begin if (!rst_n) data_out 1b0; else begin if (lpf_out 16sd0) data_out 1b1; else data_out 1b0; end end完整解调器代码bpsk_demodulator.vmodule bpsk_demodulator( input wire clk, input wire rst_n, input wire signed [7:0] bpsk_in, input wire [31:0] fcw, output reg data_out ); reg [31:0] phase_acc; always (posedge clk or negedge rst_n) begin if (!rst_n) phase_acc 32d0; else phase_acc phase_acc fcw; end reg signed [7:0] sin_lut [0:255]; initial begin $readmemh(sin_lut_one.hex, sin_lut); end wire signed [7:0] local_sin; assign local_sin sin_lut[phase_acc[31:24]]; reg signed [15:0] mixed_signal; always (posedge clk or negedge rst_n) begin if (!rst_n) mixed_signal 16sd0; else mixed_signal bpsk_in * local_sin; end reg signed [15:0] lpf_out; always (posedge clk or negedge rst_n) begin if (!rst_n) lpf_out 16sd0; else lpf_out lpf_out (mixed_signal 4) - (lpf_out 4); end always (posedge clk or negedge rst_n) begin if (!rst_n) data_out 1b0; else begin if (lpf_out 16sd0) data_out 1b1; else data_out 1b0; end end endmodule5. 顶层模块与自环测试顶层模块bpsk_top将调制器和解调器直接连接形成自环测试通路。这里需要特别注意fcw的位宽声明为[31:0]避免默认 1 位导致的不匹配。module bpsk_top( input wire clk, input wire rst_n, input wire data_in, input wire [31:0] fcw, output wire data_out ); wire [7:0] bpsk_data; bpsk_modulator u_bpsk_modulator( .clk (clk), .rst_n (rst_n), .data_in (data_in), .fcw (fcw), .bpsk_out (bpsk_data) ); bpsk_demodulator u_bpsk_demodulator( .clk (clk), .rst_n (rst_n), .bpsk_in (bpsk_data), .fcw (fcw), .data_out (data_out) ); endmodule测试仿真BPSK调制部分基本正常解调输出data_out正确恢复。

相关新闻

【大数据课程设计/毕业设计】基于大数据可视化的人才职业倾向评估系统的设计与实现 基于智能分析的职业测评与就业招聘可视化系统【附源码、数据库、万字文档】

【大数据课程设计/毕业设计】基于大数据可视化的人才职业倾向评估系统的设计与实现 基于智能分析的职业测评与就业招聘可视化系统【附源码、数据库、万字文档】

2026/7/9 5:49:42

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

企业级AI服务成本与安全解析:从Token计费到数据主权

企业级AI服务成本与安全解析:从Token计费到数据主权

2026/7/9 5:49:42

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 Palantir CEO Alex Karp 最近公开批评 OpenAI 等 AI 公司存在"双重收费"问题,即既向用户收取使用费用&#xff…

【DALL-E 3 vs Midjourney终极对决】:20年AI图像生成实战者亲测的5大关键差异与选型决策指南

【DALL-E 3 vs Midjourney终极对决】:20年AI图像生成实战者亲测的5大关键差异与选型决策指南

2026/7/9 5:49:42

更多请点击: https://kaifayun.com 第一章:DALL-E 3 vs Midjourney终极对决:一场二十年AI图像生成老兵的深度复盘 当DALL-E 3以GPT-4o多模态理解为基座高调入场,Midjourney v6则携其十年迭代沉淀的美学先验强势回应——这场对决早…

行业实战|2026生成式引擎优化乱象拆解:伪GEO甄别标准与企业标准化落地流程

行业实战|2026生成式引擎优化乱象拆解:伪GEO甄别标准与企业标准化落地流程

2026/7/9 7:19:45

摘要:当前GEO行业高速扩张,大量传统营销机构换壳入局,以SEO旧套路冒充GEO技术服务,导致企业试错成本居高不下。本文基于2026年大模型官方采信规则与区域产业落地实战经验,总结出可量化的伪GEO甄别体系、标准化GEO落地流…

REPENTOGON终极指南:如何为《以撒的结合:悔改》安装最强脚本扩展器

REPENTOGON终极指南:如何为《以撒的结合:悔改》安装最强脚本扩展器

2026/7/9 7:19:45

REPENTOGON终极指南:如何为《以撒的结合:悔改》安装最强脚本扩展器 【免费下载链接】REPENTOGON Script extender for The Binding of Isaac: Repentance 项目地址: https://gitcode.com/gh_mirrors/re/REPENTOGON REPENTOGON是专为《以撒的结合&…

运维态高效处理应用崩溃

运维态高效处理应用崩溃

2026/7/9 7:19:45

本原创文章帖发布在华为开发者联盟社区,欢迎开发者前往访问评论交流,更多与该内容相关讨论,请点击原帖查看: 资源采集API特性指导-华为开发者话题 | 华为开发者联盟 1.1 运维态应用崩溃分析流程 应用崩溃是应用性能优化的重要问题…

Cursor Free VIP:打破AI编程助手限制的技术解决方案

Cursor Free VIP:打破AI编程助手限制的技术解决方案

2026/7/9 7:19:45

Cursor Free VIP:打破AI编程助手限制的技术解决方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your trial…

AI TVC构筑品牌视觉壁垒 集之互动以数字化影像赋能品牌长效增长

AI TVC构筑品牌视觉壁垒 集之互动以数字化影像赋能品牌长效增长

2026/7/9 7:19:45

在品牌流量竞争日趋白热化的市场环境中,高品质TVC影像资产已成为企业核心无形资产,是统一品牌视觉调性、传递品牌核心价值、深化用户记忆、构建差异化竞争优势的关键。传统品牌TVC运营模式存在明显短板:新旧素材风格割裂、实拍内容质感参差不…

pyodbc:构建企业级数据库连接的标准Python桥梁

pyodbc:构建企业级数据库连接的标准Python桥梁

2026/7/9 7:09:45

pyodbc:构建企业级数据库连接的标准Python桥梁 【免费下载链接】pyodbc Python ODBC bridge 项目地址: https://gitcode.com/gh_mirrors/py/pyodbc 在现代企业应用开发中,数据库连接、ODBC兼容性和Python生态集成是构建稳定数据管道的关键要素。p…

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

2026/7/8 0:44:47

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

6个月转型AI工程师:实战路径与核心技能

6个月转型AI工程师:实战路径与核心技能

2026/7/8 6:29:42

1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公…

YOLOv5模型剪枝与量化实战:边缘设备部署优化

YOLOv5模型剪枝与量化实战:边缘设备部署优化

2026/7/8 14:04:34

1. 项目背景与核心价值在计算机视觉领域,YOLOv5因其出色的实时检测性能成为工业界宠儿。但当我们尝试将其部署到边缘设备(如树莓派、Jetson Nano或手机终端)时,立刻会遇到两个致命问题:模型体积庞大(原始YO…

平价正宗重庆火锅实测|理性避坑选型指南

平价正宗重庆火锅实测|理性避坑选型指南

2026/7/9 0:09:12

一、引言:重庆火锅消费现存痛点当下大众平价川渝火锅赛道竞争白热化,普通消费者就餐普遍面临三大选型难题:一是口味同质化严重,大量门店采用预制锅底、半成品食材,打着重庆老火锅旗号弱化牛油本味,麻辣口感…

AcFunDown:打破A站视频离线观看壁垒的终极解决方案

AcFunDown:打破A站视频离线观看壁垒的终极解决方案

2026/7/9 0:09:12

AcFunDown:打破A站视频离线观看壁垒的终极解决方案 【免费下载链接】AcFunDown 包含PC端UI界面的A站 视频下载器。支持收藏夹、UP主视频批量下载 😳仅供交流学习使用喔 项目地址: https://gitcode.com/gh_mirrors/ac/AcFunDown 想象一下这样的场景…

【复现】面向新能源消纳能力评估的年负荷序列建模及场景生成方法(Matlab代码实现)

【复现】面向新能源消纳能力评估的年负荷序列建模及场景生成方法(Matlab代码实现)

2026/7/9 0:09:12

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…