长短序列生成

总结:频域看一个短训练序列是53个非零子载波(N=64)中占据12个,即在频谱图上只有12个位置是有非零频谱线,重复10个周期;

         时域中:经过IFFT输出时域信号 一个短训练序列用16个采样点来描述(包括实部和虚部)然后重复10个周期就有160个采样点,因为要加窗处理,第一个(地址为0)和最后一个(地址为160)为第一个采样点(地址为16)的一半,最后一个采样点与下一个数据单元的第一个采样点叠加成为第161个采样点。

频域中的12个子载波与时域中的16个采样点无对应关系,不要绕进去....


注意:自己编写的程序逻辑错误,第161个数据是0.023,而不是第160个数据的一半,还是第一个数据的一半,正好与下一个段训练序列的第一个(0.023)相加为0.048成为第161;


根据之前所述,物理层协议数据单元(PPDU)帧结构中,IEEE 802.11a标准定义了短训练序列的结构和数值。

 短训练序列的主要用途是进行信号检测、自动增益控制(AGC)、符号定时和粗频率偏差估计。
它包括10个重复的符号,每个长度800ns。从频域来看,这些短训练序列数据占用每个OFDM符号(52个非零子
载波)中的12个(载波间隔是正常符号的4倍)。  如果用-26~26来标识非零子载波,那么短训练序列使用的子载波序号为:  {-24,-20,-16,-12,-8,-4,4,8,12,16,20,24}。  

其中传输接收机已知的伪随机序列(QPSK符号)为:
     4.1 短训练序列的生成 - fantasy - 悠然见南山
 
4.1 短训练序列的生成 - fantasy - 悠然见南山
 
4.1 短训练序列的生成 - fantasy - 悠然见南山

在IEEE 802.11a标准中,也有对应的规定,参考【GB 15629.1101-2006 第11部分 无线局域网媒体访问控制和物理层规范.pdf】,我国版本的无线局域网物理层规范标准。

4.1 短训练序列的生成 - fantasy - 悠然见南山
 
4.1 短训练序列的生成 - fantasy - 悠然见南山

短训练序列的时域表,一共161个,其中第1个和第161为原值的一半(加窗处理)。 如下图所示,序号0和序号160,为序号16值的一半,序号16~序号32,为一个16位的短训练序列。

4.1 短训练序列的生成 - fantasy - 悠然见南山


verilog产生短训练序列:
 ———————————————————————————————————————————————————
 
 

`timescale 1ns / 10ps
//
// Create Date: 15:42:23 09/28/2014
// Design Name: training
// Module Name: short_training_gen
// Project Name: OFDM base on Xilinx KC705
// Description: OFDM 短训练序列生成模块,符合IEEE 802.11a 标准。
// 硬件平台上系统内所有复数类型的信号统一规定用8位有符号二进制形式(8-bit Signed Binary)。
// 因为短训码是标准定义好的确定性数据,所以直接将数据进行IFFT和加窗处理后存入ROM中,直接调用输出即可。
// Revision: 1.0
// Copyright: 《基于xlinx FPGA的OFDM通信系统基带设计》
//

module short_training_gen (RESET, FFT_CLK, SHORT_ACK, SHORT_RE, SHORT_IM, SHORT_INDEX, SHORT_DV);

input RESET; // 低电平异步复位
input FFT_CLK; // 20M sys_clk
input SHORT_ACK; // MCU送来的控制信号,模块使能
output [7:0] SHORT_RE; // 短训练序列实部, 已参照IFFT模块的设置进行了等比例调整,与整个OFDM数据帧的其他部分相匹配。
output [7:0] SHORT_IM; // 短训练序列虚部,已参照IFFT模块的设置进行了等比例调整,与整个OFDM数据帧的其他部分相匹配。
output [7:0] SHORT_INDEX; // 短训练序列的序号
output SHORT_DV; // 输出数据有效信号

reg [7:0] SHORT_RE;
reg [7:0] SHORT_IM;
reg [7:0] SHORT_INDEX;
reg SHORT_DV;

reg [3:0] i;
reg [3:0] j;
reg [7:0] shortrom_re [15:0]; // rom 矩阵
reg [7:0] shortrom_im [15:0];

always @ (posedge FFT_CLK or negedge RESET) //registers initial
if (!RESET)
begin
i <= 0;
j <= 0;
SHORT_RE <= 0;
SHORT_IM <= 0;
SHORT_INDEX <= 0;
SHORT_DV <= 0;
// 短训序列经过 IFFT,单个周期被周期扩展为161个采样点
// 输出实现:第一个+最后一个凑成一个采样点,然后16个样值循环10次
// 根据IEEE标准数据等比例调整,样值数据格式为:
//【符号位】+ 【1】 + 【2】 + 【3】 + 【4】 + 【5】 + 【6】 + 【7】
// (+/-) + 2^(-2)+ 2^(-3)+ 2^(-4)+ 2^(-5)+ 2^(-6)+ 2^(-7)+ 2^(-8)
shortrom_re[0] <= 8'b00001100; // 0.046
shortrom_re[1] <= 8'b11011110; // -0.132
shortrom_re[2] <= 8'b11111101; // -0.013
shortrom_re[3] <= 8'b00100100; // 0.143
shortrom_re[4] <= 8'b00011000; // 0.092
shortrom_re[5] <= 8'b00100100; // 0.143
shortrom_re[6] <= 8'b11111101; // -0.013
shortrom_re[7] <= 8'b11011110; // -0.132
shortrom_re[8] <= 8'b00001100; // 0.046
shortrom_re[9] <= 8'b00000001; // 0.002
shortrom_re[10]<= 8'b11101100; // -0.079
shortrom_re[11]<= 8'b11111101; // -0.013
shortrom_re[12]<= 8'b00000000; // 0.000
shortrom_re[13]<= 8'b11111101; // -0.013
shortrom_re[14]<= 8'b11101100; // -0.079
shortrom_re[15]<= 8'b00000001; // 0.002

shortrom_im[0] <= 8'b00001100; // 0.046
shortrom_im[1] <= 8'b00000001; // 0.002
shortrom_im[2] <= 8'b11101100; // -0.079
shortrom_im[3] <= 8'b11111101; // -0.013
shortrom_im[4] <= 8'b00000000; // 0.000
shortrom_im[5] <= 8'b11111101; // -0.013
shortrom_im[6] <= 8'b11101100; // -0.079
shortrom_im[7] <= 8'b00000001; // 0.002
shortrom_im[8] <= 8'b00001100; // 0.046
shortrom_im[9] <= 8'b11011110; // -0.132
shortrom_im[10]<= 8'b11111101; // -0.013
shortrom_im[11]<= 8'b00100100; // 0.143
shortrom_im[12]<= 8'b00011000; // 0.092
shortrom_im[13]<= 8'b00100100; // 0.143
shortrom_im[14]<= 8'b11111101; // -0.013
shortrom_im[15]<= 8'b11011110; // -0.132

end
//************************************
else begin
if (SHORT_ACK)
if (i<=9)
if(j<15) begin
SHORT_DV <= 1;
if( (i==0) && (j==0)) // 加窗处理,第一个值减半 index【0】
begin
SHORT_RE <= shortrom_re[0] >> 1;
SHORT_IM <= shortrom_im[0] >> 1;
end
else begin
SHORT_RE <= shortrom_re[j];
SHORT_IM <= shortrom_im[j];
end
j <= j + 1;
SHORT_INDEX <= SHORT_INDEX + 1;
end
else begin
SHORT_RE <= shortrom_re[j];
SHORT_IM <= shortrom_im[j];
SHORT_INDEX <= SHORT_INDEX + 1;
SHORT_DV <= 1;
j <= 0;
i <= i + 1;
end
else begin
i <= 0;
SHORT_RE <= shortrom_re[j] >> 1; // 加窗处理,最后一个值减半 index【160】
SHORT_IM <= shortrom_im[j] >> 1;
SHORT_INDEX <= SHORT_INDEX + 1;
end
else begin
i <= 0;
j <= 0;
SHORT_RE <= 0;
SHORT_IM <= 0;
SHORT_INDEX <= 0;
SHORT_DV <= 0;
end
end

endmodule


———————————————————————————————————————————————————
 
modelsim仿真:
4.1 短训练序列的生成 - fantasy - 悠然见南山
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值