4.1 短训练序列的生成

4.1 短训练序列的生成  

根据之前所述,物理层协议数据单元(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 - 悠然见南山

猜你喜欢

转载自blog.csdn.net/weixin_40640020/article/details/83344801