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符号前面以形成前缀,如下图所示。

加入循环前缀后的()FDM符号

  这样就可以保证在一个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
      如下图所示:

配置通道TDATA(s_axis_config_tdata)格式

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

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

Implementation Details

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

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实现

  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值