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

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值