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 - 悠然见南山

matlab产生短训练序列:

function LeaderSequence = LS( )
 %传输接收机已知的伪随机序列(QPSK符号)
 S=[0,0,1+i,0,0,0,-1-i,0,0,0,1+i,0,0,0,-1-i,0,0,0,-1-i,0,0,0,1+i,0,0,0,0,0,0,-1-i,0,0,0,-1-i,0,0,0,1+i,0,0,0,1+i,0,0,0,1+i,0,0,0,1+i,0,0];
 L=[1,1,-1,-1,1,1,-1,1,-1,1,1,1,1,1,1,-1,-1,1,1,-1,1,-1,1,1,1,1,1,-1,-1,1,1,-1,1,-1,1,-1,-1,-1,-1,-1,1,1,-1,-1,1,-1,1,-1,1,1,1,1];
 %保证OFDM符号的功率值稳定
 S=(13/6)^(1/2)*S;
 %64点的傅里叶逆变换,变成时域
 short=ifft(S,64);
 short_cp=short(1:16);
 short=short_cp;
 %产生160个数据
 for f=1:9
   short=[short,short_cp];
 end
 short_str = short;
 %长训练序列产生
 long  = ifft(L,64);
 %后32个数据
 long1 = long(33:64);
 long2 = long(1:64);
 long_str = [long1,long2,long2];
 preamble = [short_str,long_str];
 %对第一个和最后一个加窗处理,硬件上表现右移一位
 %第161个数据
 preamble(:,161) = preamble(:,161)*0.5 + preamble(:,1)*0.5;
 %第一个数据
 preamble(:,1) = preamble(:,1)*0.5;
 %短+长
 LeaderSequence = preamble;
end


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 - 悠然见南山

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
在这个问题中,ram-disk 4.1 点击 patch 生成的意思是在 ram-disk 4.1 上点击 patch(补丁)按钮,生成一个新的版本。Ram-disk 是一种将内存作为硬盘驱动器使用的技术,通过将数据存储在计算机的内存中,可以实现更快的读写速度。 点击 patch 生成的过程通常是在软件开发中使用的,它用于将补丁应用到已发布的软件版本中,以修复错误、增加功能或改进性能。当开发人员在发布软件之后发现了一些问题或者需要更新一些功能时,他们可以创建一个补丁文件,然后通过点击 patch 按钮来将补丁应用到软件中。 这个过程一般需要开发人员具备一定的技术能力和对软件代码的理解。点击 patch 生成可能涉及到对源代码的修改、编译和构建过程。开发人员需要仔细检查补丁文件,确保补丁可以正确地应用到软件中,并且不会引入新的问题。 点击 patch 生成后,开发人员应该对生成的新版本进行测试,以确保补丁的应用没有引入新的错误或问题,并且目标功能正常工作。如果测试通过,开发人员可以将这个新版本发布给用户,使得用户可以安装并享受到新的修复和改进。 总之,ram-disk 4.1 点击 patch 生成是一个在软件开发中常见的操作,它用于将补丁应用到已发布的软件版本中,以修复错误、增加功能或改进性能,并要求开发人员具备相应的技能和对软件的深入理解。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值