OFDM 802.11a的FPGA实现:发射部分的最终实现

news2024/11/19 13:35:43

目录

1.摘要

2.最终实现的ModelSim仿真

3.Matlab仿真和MoselSim仿真进行对比

4.完整工程


1.摘要

本系统在Xilinx的zynq 7000系列FPGA芯片上实现了一个基于IEEE 802.11a协议的OFDM基带处理发射机的功能。本系统包含了整个发射机的所有功能,包括序列训练符号、Siganl符号和Data符号等的实现过程。实现了data域的数据处理过程:由MAC层传来字节数据->并串转换->扰码->卷积编码->删余->一级交织->二级交织->调制映射->插入导频->IFFT->DAC。

发射机整体构架

发射机整体构架

系统采用125M时钟,DAC采用20M时钟,数据处理时使用AXI-Stream协议,让整个系统工作在流水线状态下,且最终保证了送往DAC的数据以20M的速率无间隙的连续输出,相比《基于Xilinx FPGA的OFDM通信系统基带设计》使用多重跨时钟域,本系统更稳定可靠。

系统硬件框图

系统硬件框图

系统实现了IEEE 802.11a协议里面的BPSK、QPSK、16-QAM、64-QAM调制。

调制方式

调制方式

实现了数据速率6、9、12、18、24、36、48、54Mb/s。

数据速率

数据速率

该设计完成了,Matlab和ModelSim仿真闭环测试对比。

Matlab和ModelSim仿真闭环测试对比

Matlab和ModelSim仿真闭环测试对比

2.最终实现的ModelSim仿真

测试时,数据速率设为36,即16-QAM调制,编码效率3/4。测试数据使用5个OFDM符号,720个bit,即90byte。

下图显现了顶层输入输出的仿真效果,addr=0-89对应测试数据的字节地址:

顶层仿真截图

下图显示了DAC时域组帧模块仿真效果:

DAC时域组帧模块仿真

DAC时域组帧模块仿真

3.Matlab仿真和MoselSim仿真进行对比

clc;
close all;
PATH = 'D:/FPGA/OFDM_802.11a_my/TX/matlab/OFDM_802_11a_TX/';

FPGA_dac_dout = readlines([PATH,'dac_data_out.txt'],'EmptyLineRule','skip')';
display(FPGA_dac_dout);
FPGA_Im_dac_dout = extractBefore(FPGA_dac_dout,9);
FPGA_Re_dac_dout = extractAfter(FPGA_dac_dout,8);
display(FPGA_Re_dac_dout);
display(FPGA_Im_dac_dout);
q = quantizer('fixed','round','saturate',[8,6]);
FPGA_Re_dac_dout = bin2num(q,FPGA_Re_dac_dout);
FPGA_Im_dac_dout = bin2num(q,FPGA_Im_dac_dout);
FPGA_Re_dac_dout = cell2mat(FPGA_Re_dac_dout);
FPGA_Im_dac_dout = cell2mat(FPGA_Im_dac_dout);
FPGA_dac_dout = FPGA_Re_dac_dout + 1j*FPGA_Im_dac_dout;

preamble_out  = preamble_out  / max(abs(preamble_out ));
FPGA_dac_dout = FPGA_dac_dout /max(abs(FPGA_dac_dout));%归一化
display(preamble_out );
display(FPGA_dac_dout);
figure;
subplot(2,1,1);
plot(real(preamble_out ));title('Matlab仿真输出实部');
subplot(2,1,2);
plot(real(FPGA_dac_dout));title('FPGA仿真输出后实部');
figure;
subplot(2,1,1);
plot(imag(preamble_out ));title('Matlab仿真输出后虚部');
subplot(2,1,2);
plot(imag(FPGA_dac_dout));title('FPGA仿真输出后虚部');

matlab对比结果:

实部

实部

虚部

虚部

图形走势是一致的,只是幅度不相等,可能是IFFT核计算时会进行缩放,与Matlab仿真设置的缩放不一样,不过不影响。

4.完整工程

获取完整工程链接:点此跳转,或者点击阅读原文跳转

完整工程包括,matlab仿真代码、matlab自动化对比代码、verilog HDL代码、仿真测试激励文件

完整工程

完整工程

src文件夹里面包含所有的verilog HDL代码:

image

关注微信公众号获取完整工程:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1710127.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

现代信号处理11_Spectral Analysis谱分析(CSDN_20240526)

谱分析与傅里叶变换 对于一个信号,一方面可以从时域上对其进行分析,另一方面也可以从频域上对其进行认识,对信号进行频谱分析能够帮助我们了解能量在频域上的分布。 确定性信号的能量通常是有限的,而平稳随机信号的能量通常是无限…

No input file specified.(‘.user.ini’文件问题宝塔复制到本地,其他情况可跳过)

症状 病因 一般是宝塔直接copy到本地的情况。 宝塔面板中的.user.ini文件是一个重要的配置文件,它主要用于配置PHP运行环境和网站环境。以下是.user.ini文件的主要作用和操作建议: 防止跨目录访问和文件跨目录读取。这是.user.ini文件的主要作用之一&a…

kafka-消费者组-点对点测试

文章目录 1、点对点测试1.1、获取 kafka-consumer-groups.sh 的帮助信息1.2、列出所有的消费者组1.3、创建消费者1并指定组 my_group11.4、创建消费者2并指定组 my_group11.5、创建消费者3并指定组 my_group11.6、创建生产者发送消息到 my_topic1 主题1.6.1、发送第一条消息rom…

用循环神经网络预测股价

循环神经网络可以用来对时间序列进行预测,之前我们在介绍循环神经网络RNN,LSTM和GRU的时候都用到了正弦函数预测的例子,其实这个例子就是一个时间序列。而在众多的时间序列例子中,最普遍的就是股价的预测了,股价序列是一种很明显的…

【PG16】后 EL 7 时代,PG 16 如何在 CentOS 7 上运行

↑ 关注“少安事务所”公众号,欢迎⭐收藏,不错过精彩内容~ ★ 本文写于 2023-09-29 PostgreSQL 16 Released 9/14, PostgreSQL 16 正式发布。从发布公告^1 和 Release Notes^2 可以看到 PG16 包含了诸多新特性和增强改进。 性能提升,查询计划…

ssm超市管理系统java超市进销存管理系统jsp项目

文章目录 超市进销存管理系统一、项目演示二、项目介绍三、系统部分功能截图四、七千字项目文档五、部分代码展示六、底部获取项目源码和七千字项目文档(9.9¥带走) 超市进销存管理系统 一、项目演示 超市进销存管理系统 二、项目介绍 角色分…

Dynadot API调整一览

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…

算法设计第七周(应用哈夫曼算法解决文件归并问题)

一、【实验目的】 (1)进一步理解贪心法的设计思想 (2)掌握哈夫曼算法的具体应用 (3)比较不同的文件归并策略,探讨最优算法。 二、【实验内容】 设S{f1,…,fn}是一组不同的长度的有序文件构…

vue脚手架与创建vue项目

一、前言 vue脚手架的安装与创建vue项目需要先行安装配置node与npm,详情可以看node、npm的下载、安装、配置_node 下载安装-CSDN博客 二、vue脚手架的使用 1、vue与vue脚手架的版本 Vue脚手架(Vue CLI)是Vue.js官方提供的一个命令行工具&…

打乱一维数组中数据(小练习)

int[] tempArr{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; 要求:打乱一维数组的数据,并按照4个一组的方式添加到二维数组中。 package chengyu4; import java.util.Random; public class Test{public static void main(String args[]) {int[] temArr {1…

CM2038A 3W 双通道立体声音频功率放大器芯片IC

功能说明: CM2038A是一双路音频功率放大器,它能够在5V 电源电压下给一个4Ω负载提供THD小于10%、最大平均值为3W的输出功率。另外,在驱动立体声耳机时耳机输入引脚可以使放 大器工作在单边模式。 CM2038A是为提供高保真音频输出而专门设计…

【每日一坑】KiCAD 覆铜区域约束

【每日一坑】 1.螺丝孔周围不想要要铜皮; 2、首先在CTRLshiftK;画一个区域,比如铺一个GND; 3、选择CUTOUT; 4、画线,画好闭合图形;如下图 5、就是这样了,就是还没有画圆或者异形的;

如何制定一个有效的现货黄金投资策略(EEtrade)

制定一个有效的现货黄金投资策略涉及多方面的考量。以下是几个步骤和考虑因素,可以帮助您建立一个坚实的投资策略: 1. 设立清晰的投资目标 决定您投资现货黄金的主要目的。是否是为了短期利润,长期保值增值,还是为了投资组合的多…

如何通过网络性能监控和流量回溯分析提升网络效率?

目录 网络性能监控的重要性 什么是网络性能监控? 为什么需要网络性能监控? 流量回溯分析的应用 什么是流量回溯分析? 流量回溯分析的优势 实现网络性能监控和流量回溯分析的方法 使用高性能的分析工具 部署网络监控系统 结论 在当今…

Windows内核函数 - 创建关闭注册表

在驱动程序的开发中,经常会用到对注册表的操作。与Win32的API不同,DDK提供另外一套对注册表操作的相关函数。首先明确一下注册表里的几个概念,避免在后面混淆。 图1 注册表概念 有5个概念需要重申一下: * 注册表项: 注…

关于c++的通过cin.get()维持黑框的思考

1.前言 由于本科没有学过c语言,研究生阶段接触c上手有点困难,今天遇到关于通过cin.get()来让黑框维持的原因。 2.思考 cin.get()维持黑框不消失的原因一言蔽之就是等待输入。等待键盘的输入内容并回车(一般是回车)后cin.get()才…

2024下半年BRC-20铭文发展趋势预测分析

自区块链技术诞生以来,其应用场景不断扩展,代币标准也在不断演进。BRC-20铭文作为基于比特币区块链的代币标准,自其推出以来,因其安全性和去中心化特性,受到了广泛关注和使用。随着区块链技术和市场环境的不断变化&…

NFTScan 正式上线 Mint NFTScan 浏览器和 NFT API 数据服务

2024 年 5 月 20 号,NFTScan 团队正式对外发布了 Mint NFTScan 浏览器,将为 Mint 生态的 NFT 开发者和用户提供简洁高效的 NFT 数据搜索查询服务。NFTScan 作为全球领先的 NFT 数据基础设施服务商,Mint 是继 Bitcoin、Ethereum、BNBChain、Po…

maven聚合工程整合springboot+mybatisplus遇到的问题

前言(可以直接跳过看下面解决方法) 项目结构 两个module: yema-terminal-boot 是springboot项目,子包有:controller、service、dao 等等。属于经典三层架构。那么,该module可以理解为是一个单体项目&…

python打造自定义汽车模块:从设计到组装的全过程

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言 二、定义汽车模块与核心类 三、模拟汽车组装过程 四、抽象与封装 五、完整汽车…