总结:频域看一个短训练序列是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标准定义了短训练序列的结构和数值。
![4.1 短训练序列的生成 - fantasy - 悠然见南山](http://img0.ph.126.net/dY4eqp5d0pu_ArPSO21x9g==/6619307389328394609.png)
![4.1 短训练序列的生成 - fantasy - 悠然见南山](http://img2.ph.126.net/MEO_3zsYbHjdLy66f-q2BQ==/660621770357533247.png)
![4.1 短训练序列的生成 - fantasy - 悠然见南山](http://img0.ph.126.net/B1Ia6vtqugSfZjTdSK-OeQ==/2387470752477569502.png)
![4.1 短训练序列的生成 - fantasy - 悠然见南山](http://img1.ph.126.net/E2xhRR6dUcBtZGpbxGzlgw==/6608601444608958286.png)
![4.1 短训练序列的生成 - fantasy - 悠然见南山](http://img2.ph.126.net/yhXy2oTFBdCN9WKZGOY2UQ==/1162773128809427363.png)
![4.1 短训练序列的生成 - fantasy - 悠然见南山](http://img1.ph.126.net/GqNFcaFYZgmOWxnqsgOPPQ==/6608471702236880917.png)
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
![4.1 短训练序列的生成 - fantasy - 悠然见南山](http://img1.ph.126.net/x3Msjyq343tuLQPHgdFJ5g==/644577696685020481.jpg)