OFDM802.11a的FPGA实现(十二)使用FFT IP核添加循环前缀

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

目录

1.前言

为了能够消除传输过程当中的符号间干扰,在IFFT处理完毕之后还要加上循环前缀。

2.循环前缀

实际通信信道中,由于接收到的信号是来自不同传播路径的信号之和,因此会产生多径效应,引起严重的符号干扰(Intersymbol Interference,IS)和信道间干扰(Inter Channel Interference,ICI),限制了信息传输速率的提高。传统方法是使用时域自适应均衡技术来解决多径衰落的问题。但是自适应均衡器的设计、实现、调试往往成为通信系统研制的瓶颈,而且随着传输带宽的不断增加,复杂度和成本也会不断增加。

OFDM 技术可以有效地对抗多径时延扩展。为了最大程度地消除ISI,需要在每个相邻的 OFDM 符号之间插人保护间隔(guard interval,GI),只要该保护间隔的长度 T g T_g Tg大于无线信道的最大时延扩展.,那么该符号的多径分量就不会对下一符号造成干扰。这段保护间隔可以不插入任何信号,传输一段空闲的时段。但这种情况下,可能会产生载波间的干扰(ICI),即子载波之间的正交性遭到破坏,不同的子载波之间产生干扰,如下图所示。

上图中给出了一个带有空闲保护间隔的OFDM符号的第一子载波和第二子载波的延时信号。从图中可以看到,由于在一个FFT运算时间长度内,第一子载波与带有时延的第二子载波之间的周期个数之差不是整数,所以当接收机试图对第一个子载波进行解调时,第二子载波会对此造成干扰。同样,当接收机对第二子载波进行解调时,也会存在来自第一子载波的干扰。

为了消除由于多径造成的ICI,可以在OFDM符号的保护间隔内填入循环前缀信号(CyclicPrefix,CP),即将每个OFDM符号的后 T g T_g Tg时间中的样值复制到OFDM符号前面以形成前缀,如下图所示。

这样就可以保证在一个FFT周期内,OFDM符号的时延副本内所包含的波形周期个数也是整数。这样,时延小于保护间隔 T g T_g Tg的时延信号就不会在解调过程中产生ICI。OFDM系统具体实现中,在计算出快速傅立叶逆变换样值之后,一个循环前缀被加到样值前,形成一个循环拓展的OFDM符号,如下图所示。

添加循环前缀技术利用的是离散线性系统原理中的一个概念。在连续时间域,两个时域信号的卷积等于这两个信号频域形式的乘积。但是,这在离散时域的情况下一般是不成立的。因为只能使用有限个值点N,所以只能利用循环前缀体OFDM符号在感兴趣的时间区内呈现周期性。在信息传输过程中,信道的冲击响应对时域信号造成干扰。由于循环前缀使所传输的OFDM信号表现出周期性,这种卷积就成了一种圆周卷积。根据离散时间线性系统原理这种圆周卷积相当于OFDM信号的频率响应和信道频率响应的乘积。

3.硬件实现

上一节详细讲解了IFFT的实现,其中用到了Xilinx的FFT IP核,其实这个IP核是可以通过配置来实现添加循环前缀的。打开FFT IP核勾选下图中的Cyclic Prefix insertion,特别注意只有当选择自然顺序输出时才可以勾选。

配置字段按以下顺序打包到s_axis_config_tdata向量中(从LSB开始):

  1. (optional) NFFT plus padding
  2. (optional) CP_LEN plus padding
  3. FWD/INV
  4. (optional) SCALE_SCH
      如下图所示:

可选字段显示为虚线。请注意,s_axis_config_tdata的总线宽度可能超过容纳所有字段(包括SCALE_SCH)所需的宽度,即使SCALE_SCH字段被填充以确保宽度是8位的倍数。额外的位未被使用,因此它们将在合成期间被优化掉。

由OFDM的符号长度可以知道,一个OFDM的保护间隔为0.8us,因此只需要将一个OFDM符号有效数据的末尾的1/4,即后16个数据进行复制放到最前面,即可完成循环前缀的添加。所以将CP_LEN设置为16即可。在IP核配置界面的左上角,点击Implementation Details,如下图所示:

可以查看FFT IP核的一些参数信息,此配置下s_axis_config_tdata包含三个字段,如下图所示:

可以看到CP_LEN位于最低的6bit,我们令其等于6'b010000;修改上节所示代码(链接)中的s_axis_config_tdata的值,如下:

assign	s_axis_config_tdata	= 16'b0_101110_0_00_010000;

4.ModelSim仿真

仿真效果如下,从下标48后的16个数据被复制到了最前面。

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

相关推荐
运维Z叔8 分钟前
云安全 | AWS S3存储桶安全设计缺陷分析
android·网络·网络协议·tcp/ip·安全·云计算·aws
凌肖战19 分钟前
力扣上刷题之C语言实现(数组)
c语言·算法·leetcode
陈大爷(有低保)33 分钟前
UDP Socket聊天室(Java)
java·网络协议·udp
秋夫人1 小时前
B+树(B+TREE)索引
数据结构·算法
梦想科研社1 小时前
【无人机设计与控制】四旋翼无人机俯仰姿态保持模糊PID控制(带说明报告)
开发语言·算法·数学建模·matlab·无人机
Milo_K1 小时前
今日 leetCode 15.三数之和
算法·leetcode
千穹凌帝1 小时前
SpinalHDL之结构(二)
开发语言·前端·fpga开发
Darling_001 小时前
LeetCode_sql_day28(1767.寻找没有被执行的任务对)
sql·算法·leetcode
AlexMercer10121 小时前
【C++】二、数据类型 (同C)
c语言·开发语言·数据结构·c++·笔记·算法
Greyplayground1 小时前
【算法基础实验】图论-BellmanFord最短路径
算法·图论·最短路径