802.11 OFDM组帧格式及物理层协议相关
目录1. Wi-Fi 协议更新2. Subcarrier3. Quadrant4. Mod5. HT-Signal-Bpsk6. PLCP7. Signal域8. Data域9. 802.11 PPDU10. L-PPDU与HT-PPDU11. PPDU编码过程12. 物理层协议与FPGA13. 子载波数计算方法(例子)针对802.11学习过程中,关键点的总结及记录。1. Wi-Fi 协议更新Li
目录
针对802.11学习过程中,关键点的总结及记录。
1. Wi-Fi 协议更新
- Linux 802.11驱动配置文档 Introduction — The Linux Kernel documentationhttps://www.kernel.org/doc/html/v4.9/80211/introduction.html
- Linux无线文档 https://wireless.wiki.kernel.org/en/usershttps://wireless.wiki.kernel.org/en/users
- openWIFI团队 open-sdr · GitHubopen-sdr has 3 repositories available. Follow their code on GitHub.https://github.com/open-sdr
2. Subcarrier
默认情况下,2.4 GHz频率使用20 MHz信道宽度。
3. Quadrant
4. Mod
5. HT-Signal-Bpsk
6. PLCP
MSDU(MAC层业务数据单元)
MPDU(MAC层协议数据单元)
PSDU(PLCP子层业务数据单元)
PPDU(PLCP子层协议数据单元)
(Physical Layer Convergence Procedure,简称PLCP,物理层收敛程序)
7. Signal域
8. Data域
1)Service(16个比特位)
长度为16位的Service字段包含MAC帧的数据率通过协议单元的Data字段来传送。此字段前8位设定为0.和其他物理层一样,在传送之前,MAC帧必须经过扰频,前6位设定为0是为了启动扰频器。剩下的9位目前保留,在未来另有他用之前必须设定为0.
2)PSDU
PLCP子层业务数据单元
3)Tail(6个位)
和PLCP标头的结尾位一样,附加至MAC帧结尾的位主要是让卷积编码可以平顺结束。之所以需要6个位,是因为卷及编码的长度限制为7.
4)Pad(位数不定)
9. 802.11 PPDU
图 801.11 OFDM PPDU帧格式
N_DBPS:每个OFDM符号所包含的数据比特数。
N_CBPS:每个OFDM符号中经过编码的比特数。
N_BPSC:每个OFDM子载波中的比特数。
Legacy PLCP Signal [rate + reserved + length + parity + tail]
HT PLCP Signal [MCS + length + reserved + short/long GI + CRC + tail]
10. L-PPDU与HT-PPDU
11. PPDU编码过程
(1)产生PLCP前导。10短2长,再加保护间隔。
(2)PLCP中的Rate和Length经过1/2速率的卷积编码,映射成一个单独的BPSK编码的OFDM符号,这与Signal符号的产生类似。为了能及时地检测到Rate和Length,采取在PLCP头插入6个“0”。由signal得到一个OFDM符号要经过同样的过程:卷积编码、交织、BPSK调制、插入导频、傅立叶变换,最后是加适当的保护间隔使数据粗率达到6Mbit/s。Signal部分不需要扰码。
( 3 )计算N_DBPS , N_BPSC, N_CBPS。
( 4 )service后加 PSDU 。并在尾部补‘ 0 ’比特使数据段的长度达到N_DBPS的整数倍。
( 5 )用非零初值产生的伪随机序列形成扰码,然后与调整后的信息比特做异或逻辑运算。
( 6 )用 6 个未经过扰码的‘ 0 ’比特替换 6 个经过扰码后的‘ 0 ’比特(这些比特能使接收端的卷积码解码器回到零状态,而它们解码后只作为尾比特)。
( 7 )接下来对数据进行 1 / 2 速率的卷积编码,然后再根据编码速率的需要进行打孔 ( Puncture )
( 8 )将编码输出的数据以N_CBPS为长度单位分成若干组,对每组进行交织( I nierleaving ) 处理。
( 9 )编码,交织完成后输出的数据流以N_CBPS为长度单位分成若干组,再选择合适的调制方法,如 BPSK 或者 QAM 等进行调制。
12. 物理层协议与FPGA
module fpga_tx
(
input wire clk,
input wire phy_tx_arest,
input wire phy_tx_start,
output reg phy_tx_done,
output reg phy_tx_started,
input wire [6:0] init_pilot_scram_state,
input wire [6:0] init_data_scram_state,
input wire [63:0] bram_din,
output reg [9:0] bram_addr,
input wire result_iq_ready,
output wire result_iq_valid,
output wire [15:0] result_i,
output wire [15:0] result_q
);
64位 bram_din输入给FPGA固定物理层协议格式,从组帧上看
PKT_TYPE <= bram_din[24];
修改intf.mem
PSDU_BIT_LEN <= ({3'd0, bram_din[16:5]} << 3);
PSDU_BIT_LEN <= ({3'd0, bram_din[19:8]} << 3);
效果如下:
13. 子载波数计算方法(例子)
要求:(1)比特率为25Mbit/s(2)可容忍的时延扩展为200ns(3)带宽小于18MHz。
1)由200ns时延扩展得保护间隔为800ns;
2)由保护间隔800ns得符号周期长度6*800ns=4.8us;
3)子载波的间隔选取4.8-0.8=4us的倒数,即250KHz;
4)由所要求的比特速率与OFDM符号速率的比值,每个符号需要传送的比特:(25Mbit/s)/(1/4.8us)=120bit。
5)为了完成上面120bit/符号,有两种选择:利用16QAM和码率为1/2的编码方法,这样每个子载波携带2bit的有用信息,因此需要60个子载波;另一种是利用QPSK和码率为3/4的编码方法,每个子载波携带1.5bit信息。因此需要80个子载波,然而80个子载波意外着带宽:80*250KHz=20MHz,大于所给带宽要求,故取第一种,即60个子载波。可利用64点IFFT来实现,剩余4个子载波补0
更多推荐
所有评论(0)