网站同时使用asp php,最近的新闻大事20条,做兼职上哪个网站,wordpress 无法显示图片OFDM学习 #xff08;二#xff09;长短序列和PPDU整体数据处理流程 OFDM学习前言一、短序列短序列的作用 二、长序列三、PLCP/SIGNAL/DATA数据处理流程三、fpga实现STS模块LTS模块训练序列模块仿真波形 总结 前言
根据框图可以知道发射机这部分信号在DA转换之前#xff0c…OFDM学习 二长短序列和PPDU整体数据处理流程 OFDM学习前言一、短序列短序列的作用 二、长序列三、PLCP/SIGNAL/DATA数据处理流程三、fpga实现STS模块LTS模块训练序列模块仿真波形 总结 前言
根据框图可以知道发射机这部分信号在DA转换之前数据是两路分别是实部和虚部8位信号。通过DA转换也是两路模拟信号通过IQ调制搞到射频。 PPDU包括3部分数据长短序列是不需要进行ofdm操作的signal和data的信号需要进行ofdm操作也就是下面图中扰码、卷积编码、交织等等的操作最后通过ifft和cp加窗后进行输出最后将实部信号与虚部信号与训练序列的实部和虚部按照位置分别发送。
一、短序列
子载波有效数量是52个短序列只用到了其中的12个子载波每个载波之间的间隔为4位置序号是 {-24-20-16-12-8-4, 4,812,16,20,24}直流分量不能使用。又因为短序列采用的是BPSK模式因此可以通过载波位置以及调制方式决定他的数据格式。确定[9:0] STS_IM[8] 和[9:0] STS_RE[8]就实现了短序列的产生按照位置依次将实部序列和虚部序列信号发送即可。 因此短序列在频域上就是 % STS频域表示 S[0,0,0,0,0,0,0,0,1i,0,0,0,-1-i,0,0,0,1i,0,0,0,-1-i,0,0,0,-1-i,0,0,0,1i,0,0,0,0,0,0,0,-1-i,0,0,0,-1-i,0,0,0,1i,0,0,0,1i,0,0,0,1i,0,0,0,1i,0,0,0,0,0,0,0]; 但是最终需要发出去的是时域信号所以这个频域信号理论上是要经过ifft模块处理之后发送出去但是因为短序列都是固定的数值因此时序信号的实部和虚部也是固定的所以短训练序列的产生也就是通过MATLAB将频域转换为时域后将固定的时域信号的实部值和虚部值直接使用。短训练序列的数据格式1位符号位1位整数位6位小数位。
从时域上看每一个短序列是16个采样点也就是总共10*16160点。
短序列的作用
接收机进行分组检测、同步等
二、长序列
类似短序列基本原理相同各自作用不同。
三、PLCP/SIGNAL/DATA数据处理流程
训练序列直接按照时域产生实部信号和虚部信号不需要进行ofdm调制。
SIGNAL信号和DATA信号需要从单比特流数据经过扰码、卷积编码、交织、符号调制、16QAM调制、导频插入、IFFT模块、CP加窗等步骤最后与训练序列组合发送到DAC进行射频端的处理。
三、fpga实现
STS模块
timescale 1ns / 1ps
///
// Company:
// Engineer: YWang
//
// Create Date: 2023-03-10 14:53:45
// Design Name:
// Module Name: STS_generator.v
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies: 0
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
///
module STS_generator( input clk , input rst_n , input Tx_Clr , input Start_En ,output reg [7:0] STS_Im ,output reg [7:0] STS_Re ,output reg STS_Vld ,output reg [7:0] STS_Index ,output reg STS_Done
); reg [15:0] Short_Mem [15:0];reg [3:0] i,j;wire STS_Req;assign STS_Req Start_En || (STS_Index0);always (posedge clk or negedge rst_n) beginif(~rst_n) begin Short_Mem[0] {8b00001100,8b00001100};Short_Mem[1] {8b11011110,8b00000001};Short_Mem[2] {8b11111101,8b11101100};Short_Mem[3] {8b00100100,8b11111101};Short_Mem[4] {8b00011000,8b00000000};Short_Mem[5] {8b00100100,8b11111101};Short_Mem[6] {8b11111101,8b11101100};Short_Mem[7] {8b11011110,8b00000001};Short_Mem[8] {8b00001100,8b00001100};Short_Mem[9] {8b00000001,8b11011110};Short_Mem[10] {8b11101100,8b11111101};Short_Mem[11] {8b11111101,8b00100100};Short_Mem[12] {8b00000000,8b00011000};Short_Mem[13] {8b11111101,8b00100100};Short_Mem[14] {8b11101100,8b11111101};Short_Mem[15] {8b00000001,8b11011110};STS_Vld 0;STS_Index 0;STS_Done 0;STS_Re 0;STS_Im 0;i 0;j 0;end else if( Tx_Clr ) begin i 0;j 0;STS_Vld 0;STS_Index 0;STS_Done 0;endelse if( STS_Req (STS_Index161) ) beginSTS_Index STS_Index 1;STS_Vld 1b1; if(i10) beginif(j15) begin j 0;i i 1; STS_Re Short_Mem[j][15:8]; STS_Im Short_Mem[j][7:0];endelse beginif(i0 j0) beginSTS_Re Short_Mem[j][15:8]1; //鍔犵獥锛屽乏绉讳竴 STS_Im Short_Mem[j][7:0]1;//娉ㄦ剰锛歋hort_Mem銆0銆戜负姝暟endelse beginSTS_Re Short_Mem[j][15:8]; STS_Im Short_Mem[j][7:0];endj j 1;endendelse begin //鏈鍚庝竴浣STS_Re Short_Mem[0][15:8]1; //鍔犵獥锛屽乏绉讳竴 绗竴涓STS_Im Short_Mem[0][7:0]1; STS_Done 1b1;endend else begin STS_Vld 1b0;endendendmodule LTS模块
timescale 1ns / 1ps
///
// Company:
// Engineer: YWang
//
// Create Date: 2023-03-10 14:53:45
// Design Name:
// Module Name: LTS_generator.v
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies: 0
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
///
module LTS_generator( input clk , input rst_n , input Tx_Clr , input Start_En ,output reg [7:0] LTS_Im ,output reg [7:0] LTS_Re ,output reg LTS_Vld ,output reg [7:0] LTS_Index ,output reg LTS_Done
); reg [15:0] Long_Mem [63:0];reg [6:0] i,j;wire LTS_Req;assign LTS_Req Start_En || (LTS_Index0);always (posedge clk or negedge rst_n) beginif(~rst_n) begin //鏃跺煙鏍峰 Re ImLong_Mem[0] {8b00101000 , 8b00000000};Long_Mem[1] {8b11111111 , 8b11100001};Long_Mem[2] {8b00001010 , 8b11100100};Long_Mem[3] {8b00011001 , 8b00010101};Long_Mem[4] {8b00000101 , 8b00000111};Long_Mem[5] {8b00001111 , 8b11101010};Long_Mem[6] {8b11100011 , 8b11110010};Long_Mem[7] {8b11110110 , 8b11100101};Long_Mem[8] {8b00011001 , 8b11111001};Long_Mem[9] {8b00001110 , 8b00000001};Long_Mem[10] {8b00000000 , 8b11100011};Long_Mem[11] {8b11011101 , 8b11110100};Long_Mem[12] {8b00000110 , 8b11110001};Long_Mem[13] {8b00001111 , 8b11111100};Long_Mem[14] {8b11111010 , 8b00101001};Long_Mem[15] {8b00011111 , 8b11111111};Long_Mem[16] {8b00010000 , 8b11110000};Long_Mem[17] {8b00001001 , 8b00011001};Long_Mem[18] {8b11110001 , 8b00001010};Long_Mem[19] {8b11011110 , 8b00010001};Long_Mem[20] {8b00010101 , 8b00011000};Long_Mem[21] {8b00010010 , 8b00000100};Long_Mem[22] {8b11110001 , 8b00010101};Long_Mem[23] {8b11110010 , 8b11111010};Long_Mem[24] {8b11110111 , 8b11011001};Long_Mem[25] {8b11100001 , 8b11111100};Long_Mem[26] {8b11011111 , 8b11111011};Long_Mem[27] {8b00010011 , 8b11101101};Long_Mem[28] {8b11111111 , 8b00001110};Long_Mem[29] {8b11101000 , 8b00011101};Long_Mem[30] {8b00010111 , 8b00011011};Long_Mem[31] {8b00000011 , 8b00011001};Long_Mem[32] {8b11011000 , 8b00000000};Long_Mem[33] {8b00000011 , 8b11100111};Long_Mem[34] {8b00010111 , 8b11100101};Long_Mem[35] {8b11101000 , 8b11100011};Long_Mem[36] {8b11111111 , 8b11110010};Long_Mem[37] {8b00010011 , 8b00010011};Long_Mem[38] {8b11011111 , 8b00000101};Long_Mem[39] {8b11100001 , 8b00000100};Long_Mem[40] {8b11110111 , 8b00100111};Long_Mem[41] {8b11110010 , 8b00000110};Long_Mem[42] {8b11110001 , 8b11101011};Long_Mem[43] {8b00010010 , 8b11111100};Long_Mem[44] {8b00010101 , 8b11101000};Long_Mem[45] {8b11011110 , 8b11101111};Long_Mem[46] {8b11110001 , 8b11110110};Long_Mem[47] {8b00001001 , 8b11100111};Long_Mem[48] {8b00010000 , 8b00010000};Long_Mem[49] {8b00011111 , 8b00000001};Long_Mem[50] {8b11111010 , 8b11010111};Long_Mem[51] {8b00001111 , 8b00000100};Long_Mem[52] {8b00000110 , 8b00001111};Long_Mem[53] {8b11011101 , 8b00001100};Long_Mem[54] {8b00000000 , 8b00011101};Long_Mem[55] {8b00001110 , 8b11111111};Long_Mem[56] {8b00011001 , 8b00000111};Long_Mem[57] {8b11110110 , 8b00011011};Long_Mem[58] {8b11100011 , 8b00001110};Long_Mem[59] {8b00001111 , 8b00010110};Long_Mem[60] {8b00000101 , 8b11111001};Long_Mem[61] {8b00011001 , 8b11101011};Long_Mem[62] {8b00001010 , 8b00011100};Long_Mem[63] {8b11111111 , 8b00011111};LTS_Vld 0;LTS_Index 0;LTS_Done 0;LTS_Re 0;LTS_Im 0;i 0;j 0;end else if( Tx_Clr ) begin i 0;j 0;LTS_Vld 0;LTS_Index 0;LTS_Done 0;endelse if( LTS_Req (LTS_Index161) ) beginLTS_Index LTS_Index 1;LTS_Vld 1b1; if(i0) beginif(j31) begin j 0;i i 1; LTS_Re Long_Mem[j32][15:8]; LTS_Im Long_Mem[j32][7:0];endelse beginif(i0 j0) beginLTS_Re 8b11101100; //鐭缁冨簭鍒楀埌闀胯缁冨簭鍒楃殑绐楀彛鍑芥暟LTS_Im Long_Mem[j32][7:0];endelse beginLTS_Re Long_Mem[j32][15:8]; LTS_Im Long_Mem[j32][7:0];endj j 1;endendelse if( i1 || i2 ) beginif(j63) begin j 0;i i 1; LTS_Re Long_Mem[j][15:8]; LTS_Im Long_Mem[j][7:0];endelse begin LTS_Re Long_Mem[j][15:8]; LTS_Im Long_Mem[j][7:0]; j j 1;endendelse begin // 鍔犵獥澶勭悊LTS_Re Long_Mem[0][15:8]1; //鍔犵獥锛屽乏绉讳竴浣 LTS_Im Long_Mem[0][7:0]1; LTS_Done 1b1;endend else begin LTS_Vld 1b0;endendendmodule
训练序列模块
timescale 1ns / 1ps
///
// Company:
// Engineer: YWang
//
// Create Date: 2023-03-10 14:22:41
// Design Name:
// Module Name: symbol_train.v
// Project Name:
// Target Devices:
// Tool versions:
// Description:
//
// Dependencies: 0
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:????????????????
//
///
module symbol_train( input clk , input rst_n , input Tx_Clr , input Start_En ,output [7:0] Train_Im ,output [7:0] Train_Re ,output Train_Vld ,output [8:0] Train_Index ,output Train_Done
); wire STS_Start_En;wire [7:0] STS_Im ;wire [7:0] STS_Re ;wire STS_Vld ;wire [7:0] STS_Index ;wire STS_Done ;wire LTS_Start_En;wire [7:0] LTS_Im ;wire [7:0] LTS_Re ;wire LTS_Vld ; wire [7:0] LTS_Index ;wire LTS_Done ;STS_generator u_STS(.clk (clk ),.rst_n (rst_n ),.Tx_Clr (Tx_Clr ),.Start_En (STS_Start_En ),.STS_Im (STS_Im ),.STS_Re (STS_Re ),.STS_Vld (STS_Vld ),.STS_Index (STS_Index ),.STS_Done (STS_Done ));LTS_generator u_LTS(.clk (clk ),.rst_n (rst_n ),.Tx_Clr (Tx_Clr ),.Start_En (LTS_Start_En ),.LTS_Im (LTS_Im ),.LTS_Re (LTS_Re ),.LTS_Vld (LTS_Vld ),.LTS_Index (LTS_Index ),.LTS_Done (LTS_Done ));assign Train_Im STS_Vld ? STS_Im : LTS_Vld ? LTS_Im : 8b0 ; assign Train_Re STS_Vld ? STS_Re : LTS_Vld ? LTS_Re : 8b0 ; assign Train_Vld STS_Vld ? 1b1 : LTS_Vld ? 1b1 : 1b0;assign Train_Index STS_Index LTS_Index;assign Train_Done LTS_Done;assign STS_Start_En Start_En;assign LTS_Start_En STS_Done;endmodule 仿真波形 总结
训练序列的产生要明白 频域上用了12个子载波间隔为4BPSK符号格式功率因数1.4几来着。 频域固定因此时域实部和虚部也是固定通过MATLAB就可以直接得到时域的训练序列的实部和虚部的数值因此直接在程序中写死循环即可。 数据格式1位符号1位整数6位小数
代码参考基于FPGA的OFDM基带发射机的设计与实现
训练模块代码未做修改。