YunSDR通信小课堂-31

14.5 参考设计

参考例程中仅针对HT-mixed帧格式进行实现,IEEE 802.11n标准的无线局域网的发射机如图14-3所示。该图是产生HT-mixed模式的数据符号,其中星座映射器(Constellation Mapper),循环移位(CSD)和空时映射(Spatial Mapping)模块也用于产生HT-STF,HT-LTFs。

IEEE 802.11n标准的发射机模块包括以下各模块:

(1)扰码器(Scrambler):对发送的二进制数据流进行扰码,降低出现全0或全1出现的可能性。

(2)编码器解析器(Encoder Parser):在使用二进制卷积编码器的情况下,以循环的方式对扰码后的数据流解复用到Nes个前向纠错编码器上。

(3)前向纠错编码器(FEC Encoder):对数据进行编码,增加冗余从而能够在接收端纠错误码。它可以采用删余卷积码,也可以用低密度奇偶校验(LDPC)码。

(4)流解析器(Stream Parser):把前向纠错编码器的输出数据分成数据块,然后发送到不同的交织器和映射设备进行处理。发送到交织器的比特序列称为空间流。

(5)交织器(Interleaver):当使用二进制卷积编码器的时候,每个空间流的数据比特进行交织以改变比特的顺序,从而防止译码器的输入有长串相邻的噪声比特。

(6)星座映射器(Constellation mapper):将每个空间流的序列映射到星座点上,形成复数信号。

(7)空时分组码(STBC):利用空时分组码编码器将Nss条空间流扩展为Nsts条空时流。当Nss小于NSTS的时候,才会使用STBC。

(8)循环移位(CSD):循环移位的插入是为了防止意外的波束形成的出现。

(9)空间映射(Spatial mapping):将空时流映射到发射链路上,这可能包括以下情况的一种:

1)直接映射:来自空时流的星座点会直接映射到发射链路上。

2)空间扩展:来自空时流的星座点向量利用矩阵乘法进行扩展然后映射到发射链路上。

3)波束形成:与空间扩展类似,来自每条空时流的星座点向量乘以一个控制向量矩阵,扩展后送到发射链路上。

(10)离散傅里叶逆变换(IDFT):将一组星座点变换到时域。

(11)循环前缀(CP):在每个OFDM符号前面添加OFDM符号最后四分之一的数据符号充当保护间隔。

(12)射频(RF):将基带信号经过数模转换然后送到发射的频率上进行发送。

参考例程所支持的模式,因为IEEE802.11n为了向下兼容旧标准、支持新的高速传输并且支持1~4多天线,所以协议中规定了很多种模式,作为读者的参考,例程中支持大部分模式但是不是所有的IEEE802.11n模式。在tx_gen_highthrough_sig.m文件中高吞吐量模式的signal域有各种模式参数的定义。

%% 信号产生

mcs=dec2bin(sim_options.mcs,7);

for i=1:7

   signal(i)=str2double(mcs(8-i));

end

signal(8)=0;%cbw

ht_length=dec2bin(sim_options.PacketLength,16);

for i=9:24

   signal(i)=str2double(ht_length(25-i));

end

signal(25)=1;%smoothing

signal(26)=1;%not_sounding

signal(27)=1;%reserved

signal(28)=0;%aggregation

signal(30:-1:29)=[0 0];%stbc

signal(31)=0;%fec_code

signal(32)=0;%long_gi

signal(34:-1:33)=[0 0];%ness

signal(35:42)=crc_htsig(signal(1:34));

signal(48:-1:43)=zeros(6,1);

参考例程支持MCS0~MCS31(1天线~4天线)编码调制方式,HT-mixed混合模式,20MHz带宽,HT帧长支持0~65535,非sounding PPDU,不支持STBC扩展码流,BBC编码方式(RS卷积码)。此外与IEEE802.11a参考设计一样可以支持任意插值方式。

顶层程序参考Matlab程序代码:

%% 产生 non-HT 训练序列

l_stf = tx_gen_legacy_stf(sim_options);

l_ltf = tx_gen_legacy_ltf(sim_options);

%% 产生 non-HT 信号域

l_sig=tx_gen_legacy_sig(sim_options);

%% 产生 HT信号域

ht_sig=tx_gen_highthrough_sig(sim_options);

%% 产生 HT 训练序列

ht_stf = tx_gen_highthrough_stf(sim_options);

ht_ltf = tx_gen_highthrough_ltf(sim_options);

%% HT 数据产生

inf_bits=prbs15_lc(sim_options.PacketLength);

data_bits=generate_data(inf_bits,sim_options);

scramble_bits=scramble_lc(data_bits,sim_options);

coded_bit=tx_conv_encoder(scramble_bits);

tx_bits = tx_puncture(coded_bit,sim_options);

tx_parser=tx_stream_parser(tx_bits,sim_options);

tx_inlv = tx_interleaver_ht(tx_parser,sim_options);

% rx_delv = rx_deinterleaver_ht(tx_inlv,sim_options);

% corrcoef(tx_parser,rx_delv)

for i=1:sim_options.Nss

    tx_mod(:,i)=tx_modulate(tx_inlv(:,i),sim_options.Modulation);

end

up=sim_options.upsample;

tx_syms=tx_add_pilot_ht(tx_mod,sim_options);

for i=1:sim_options.Nss

    tx_time=tx_freqd_to_timed(tx_syms(:,i),up,sim_consts.HTNumSubc);

    switch i

        case(1)

            tx_csd=tx_time;

        case(2)

            tx_csd=[tx_time(8*up+1:end,:);tx_time(1:8*up,:)];

case(3)

            tx_csd=[tx_time(4*up+1:end,:);tx_time(1:4*up,:)];

        case(4)

            tx_csd=[tx_time(12*up+1:end,:);tx_time(1:12*up,:)];

    end

    tx_data(:,i)=tx_add_cyclic_prefix(tx_csd,up);

end

tx_11n=[l_stf;l_ltf;l_sig;ht_sig;ht_stf;ht_ltf;tx_data];

    参考Matlab程序结构如表14-3:

14.6 实验结果

将计算机、YunSDR、频谱仪连接好,在计算机端的Matlab上位机运行IEEE802.11n发送端程序,将频谱仪设置到对应的频段观察发送信号的功率谱并与手册的功率谱模板进行对比。

扫码关注订阅号,阅读更多精彩文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值