OFDM802.11a的FPGA实现(十三)加窗(含verilog和matlab代码)

原文链接(相关文章合集):OFDM 802.11a的xilinx FPGA实现

1.前言

添加循环前缀后,对数据还要进行加窗(Windowing)操作。加窗操作可以使OFDM 符号在带宽之外的功率谱密度下降得更快。

2.加窗

对OFDM符号“加窗”意味着令符号周期边缘的幅度值逐渐过渡到零。通常采用的窗类型就是升余弦函数,其定义如下:

其中, 为滚降因子;,是加窗前的符号长度,而加窗后的符号长度应该为 。从而允许在相邻符号之间存在有相互重叠的区域。经过加窗处理的OFDM符号如下图所示。

加窗后的OFDM符号

加窗后的OFDM符号

系统带宽之外的功率下降速度取决于滚降因子的选取。滚降系数越大,带宽外的功率谱密度下降得更快 如果系统采用离散时间的形式实现,如本系统的实现,其中参数 ,那么上述加窗函数变为:

其他

3.硬件实现

加窗处理要求每个OFDM符号最后多输出一个数据,该数据依然满足周期性要求,为OFDM符号64个样值中的第一个。而下一个符号的第一个数据(CP的第一个样值)将和该数据相加且右移1位后再行输出。硬件实现上,将每个OFDM 符号的第一个样值缓存起来,用于下一个OFDM 符号输出时的加窗处理。在之前的ifft模块(IFFT模块链接)里面添加如下代码,完成加窗: 

//-------------------------------------加窗-----------------------------------------//
always @(posedge clk or negedge rst_n)
 if(!rst_n)
  first_iff_dout <= 16'd0;
 else if(ifft_dout_Index == 'd0)
  first_iff_dout <= {m_axis_data_tdata[23:16]>>1,m_axis_data_tdata[7:0]>>1};
  
edge_detection #(.POSEDGE(1'b1))
u_edge_detection (
.clk   (clk      ), 
.edge_din     (ifft_dout_vld    ),
.edge_pluse     (ifft_dout_vld_edge_pluse )
);
//下一个符号第一个数据(CP的第一个样值)将和OFDM符号64个样值中的第一个数据相加且右移1位后再行输出。
assign ifft_dout = ifft_dout_Index == 'd0 & ifft_dout_vld_edge_pluse ? 
     {first_iff_dout[15:8] + m_axis_data_tdata[23:16]>>1,
     first_iff_dout[7:0] + m_axis_data_tdata[7:0]>>1} : 
     {m_axis_data_tdata[23:16],m_axis_data_tdata[7:0]};
//----------------------------------------------------------------------------------//

其中edge_detection模块为边沿检测电路,用来判断ifft的第一个输出。边沿检测模块的链接

4.Matlab仿真

%% 加循环前缀CP,加窗
add_cp_in = ifft_out;
add_cp_out = zeros(1,80*k);
reg80 = zeros(1,80);
tmp_end = zeros(1,k+1);
for m = 1:k
    reg64 = add_cp_in((m-1)*64+1:m*64);
    reg80(1:16) = reg64((end-15):end);
    reg80(17:end) = reg64(1:end);
    tmp_end(m+1) = 0.5*reg64(1);
    add_cp_out((m-1)*80+1:m*80) = [0.5*tmp_end(m)+0.5*reg80(1),reg80(2:end)] ;
end

ModelSim仿真

整个data域的仿真效果如下所示:

原文链接(相关文章合集):OFDM 802.11a的xilinx FPGA实现

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分形视角观察Linux世界一切皆文件的设计哲学

一切皆文件 我们知道在Linux的世界里&#xff0c;一切皆文件。 而在前面的博客也说过&#xff0c;Linux世界里对文件进行读写、或进行输入/输出&#xff0c;很好地模拟了图灵机模型&#xff0c;所以&#xff0c;它的描述能力是非常强的&#xff01; 图例 常见文件 一切皆…

外观模式详解

外观模式 1 概述 有些人可能炒过股票&#xff0c;但其实大部分人都不太懂&#xff0c;这种没有足够了解证券知识的情况下做股票是很容易亏钱的&#xff0c;刚开始炒股肯定都会想&#xff0c;如果有个懂行的帮帮手就好&#xff0c;其实基金就是个好帮手&#xff0c;支付宝里就…

商场学习之微服务

前言 寒假前在新电脑上配置了java环境&#xff0c;maven仓库&#xff0c;node,js&#xff0c;navicat&#xff0c;MySQL&#xff0c;linux&#xff0c;vmware等环境&#xff0c;创建了6个mysql数据库&#xff0c;77张表。 如此多的表&#xff0c;字段&#xff0c;去手写基础…

2024年天津市静海区教师招聘报名流程(建议电脑)

2024年天津市静海区教师招聘报名流程&#xff08;建议电脑&#xff09; #报名 #教师招聘 #教师招聘考试 #教招 #天津教师招聘 #天津教师招聘考试 #24年天津教师招聘 #24年天津市教师招聘考试 #天津市静海区教师招聘 #静海区教师招聘考试 #静海区教师编 #静海区#

1065: 无向图的连通分量计算

解法&#xff1a; dfs求连通性 1.设节点表vis[] 2.遍历节点表dfs标记&#xff0c;每次得到一个连通分量 #include<iostream> #include<vector> using namespace std; int arr[100][100]; void dfs(vector<bool>& vis, int v) {//不用终止条件&#x…

Vellum for Mac v3.7.2激活版:一键创建,轻松出版

还在为繁琐的电子书制作流程而烦恼吗&#xff1f;Vellum for Mac&#xff0c;让您的电子书创作变得轻松简单&#xff01;支持多种格式导入&#xff0c;自动构建书籍内容&#xff0c;无需担心排版和格式问题。丰富的编辑和排版功能&#xff0c;让您的书籍更加精美。一键导出多种…

WHAT - CSS Animationtion 动画系列(三)- 动画卡顿分析

目录 一、背景二、动画卡顿具体分析三、具体优化方法3.1 JavaScript:优化 JavaScript 代码1. requestAnimationFrame 优化2. Web Worker3.2 Style:减少 DOM 操作3.3 Layout:避免频繁触发布局的动画3.4 避免强制同步布局事件3.5 Paint&Composite:GPU加速一、背景 自 HT…

十一、Redis持久化-RDB、AOF

Redis提供了两种持久化数据的方式。一种是RDB快照&#xff0c;另一种是AOF日志。RDB快照是一次全量备份&#xff0c;AOF日志是连续的增量备份。RDB快照是以二进制的方式存放Redis中的数据&#xff0c;在存储上比较紧凑&#xff1b;AOF日志记录的是对内存数据修改的指令文本记录…

c++ 入门2

目录 五. 函数重载 1、参数类型不同 2、参数个数不同 3、参数类型顺序不同 C支持函数重载的原理--名字修饰(name Mangling&#xff09; 为什么C支持函数重载&#xff0c;而C语言不支持函数重载呢&#xff1f; 六. 引用 6.1 概念 6.2 引用特性 6.3 常引用 6.4 使用场景 …

网络基础-ICMP协议

ICMP&#xff08;Internet Control Message Protocol&#xff0c; Internet控制消息协议&#xff09; ICMP协议是IP协议的辅助协议&#xff0c;用于在IP网络上发送控制消息&#xff0c;它通常被用于诊断网络故障、执行网络管理任务以及提供一些错误报告&#xff1b;对于收集各…

【MySQL】SQL基本知识点DML(2)

目录 1.DML添加数据 2.DML-修改数据 &#xff08;1&#xff09;改​编辑 &#xff08;2&#xff09;删​编辑​编辑 3.DQL-基本查询 &#xff08;1&#xff09;查询多个字段​编辑​编辑​编辑 &#xff08;2&#xff09;设置别名 &#xff08;3&#xff09;去重操作 4…

别的项目都有 awesome 仓库,RT-Thread 也要有!

awesome 仓库是 GitHub 上用于收集某个项目或者某个语言相关的优质内容的仓库&#xff0c;例如中间件、新闻资讯、网站等。 作为 RT-Thread 开发者&#xff0c;看到别的项目都有 awesome 仓库&#xff0c;我想 RT-Thread 也应该有&#xff01; 于是&#xff0c;我创建一个 aw…

【Python基础】装饰器(3848字)

文章目录 [toc]闭包什么是装饰器装饰器示例不使用装饰器语法使用装饰器语法 装饰器传参带参数的装饰器类装饰器魔术方法\__call__()类装饰器示例带参数类装饰器property装饰器分页操作商品价格操作 个人主页&#xff1a;丷从心 系列专栏&#xff1a;Python基础 学习指南&…

从0开始学python(七)

目录 前言 1 break、continue和pass函数 1.1 break 1.2 continue 1.3 pass 2、序列的索引及切片操作 2.1字符串的索引和切片 2.1.1 字符串索引 2.1.2 字符串切片 总结 前言 上一篇文章我们介绍了python中的循环结构&#xff0c;包括for和while的使用。本章接着往下讲。…

中仕公考:要报深圳教师编的考生们要注意了,往届、应届都可报!

2024上半年广东深圳市(区)属公办中小学教师招聘公告已发布 5月13日10:00至5月17日17:00报名&#xff0c;6月2日笔试。

基于SSM+Vue的物流管理系统

运行截图 获取方式 Gitee仓库

智慧公厕解决了什么问题?

在现代城市生活中&#xff0c;公厕是一个不可忽视的环节。然而&#xff0c;过去的公共厕所常常存在管理不力、环境脏乱差等问题&#xff0c;给人们的生活带来了许多不便和困扰。为了解决这些问题&#xff0c;智慧公厕应运而生&#xff0c;成为了公共厕所使用、运行、管理、养护…

Linux-进程管理类命令实训

实训1&#xff1a;进程查看&#xff0c;终止&#xff0c;挂起及暂停等操作 1.使用ps命令显示所有用户的进程 2.在后台使用cat命令。查看进程cat&#xff0c;并杀死进程 3.使用top命令只显示某一用户的进程。 4.执行命令cat&#xff0c;把Ctrlz挂起进程&#xff0c;输入jobs命令…

Excel办公技巧之下拉菜单

在日常办工中&#xff0c;经常需在单元格中输入特定的值&#xff0c;此时我们可以使用下拉菜单解决&#xff0c;输入错误和错误值&#xff0c;可以一劳永逸的解决固定数据输入问题。 使用Excel下拉菜单时&#xff0c;它在数据输入和验证方面发挥着重要作用通过点击单元格的下拉…

时序分解 | Matlab实现LMD局域均值分解

时序分解 | Matlab实现LMD局域均值分解 目录 时序分解 | Matlab实现LMD局域均值分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 时序分解 | Matlab实现LMD局域均值分解 Matlab语言 1.算法新颖小众&#xff0c;用的人很少&#xff0c;包含分解图 2.直接替换数据即可用…