⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.asv

📁 802.11a phy layer protocol by myself
💻 ASV
字号:
%-----------------Wireless LAN 5GHz------------------------%
%*************** arguments ****************%
%% data for test
data=[04 02 00 46 00 96 08 205 55 166 00 32 214 01 60 241 0 96 8 173 59 175 0 0 74 111 121 44 32 98 114 105 103 104 116 32 115 112 97 114 107 32 111 102 32 100 105 118 105 110 105 116 121 44 10 68 97 117 103 104 116 101 114 32 111 102 32 69 108 121 115 105 117 109 44 10 70 105 114 101 45 105 110 115 105 114 101 100 32 119 101 32 116 114 101 97 218 87 153 237];
%% Input rate
Rate=36;  %Mbits/s
%% Input Seed
Seed=[1 0 1 1 1 0 1];
Service=[zeros(1,16)];
%**************************************%
%--------------------------------------%
%**** Function 'main' to Packeting data according to data(in dec) & Rate(Mbits/s) & Seed(pseudo random beginning metrix) ****%
%/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\\/\/\//\/%
%function Packet=main(data,Rate,Seed,Service) %
%/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\\/\/\//\/%
%***********  get parameter ***********%
LEN=length(data);         % in byte
LENGTH=DectoBi(LEN);                   % octets/message in binary (12bits) with LSB first
switch Rate
case 6
    RateBit=[1 1 0 1];Modu=1;R=0.5;Nbpsc=1;Ncbps=48;Ndbps=24;  %% modu=1:BPSK   2:QPSK   3:16-QAM   4:64-QAM
case 9
    RateBit=[1 1 1 1];Modu=1;R=0.75;Nbpsc=1;Ncbps=48;Ndbps=36;
case 12
    RateBit=[0 1 0 1];Modu=2;R=0.5;Nbpsc=2;Ncbps=96;Ndbps=48;
case 18
    RateBit=[0 1 1 1];Modu=2;R=0.75;Nbpsc=2;Ncbps=96;Ndbps=72;
case 24
    RateBit=[1 0 0 1];Modu=3;R=0.5;Nbpsc=4;Ncbps=192;Ndbps=96;
case 36
    RateBit=[1 0 1 1];Modu=3;R=0.75;Nbpsc=4;Ncbps=192;Ndbps=144;
case 48
    RateBit=[0 0 0 1];Modu=4;R=2/3;Nbpsc=6;Ncbps=288;Ndbps=192;
case 54
    RateBit=[0 0 1 1];Modu=4;R=0.75;Nbpsc=6;Ncbps=288;Ndbps=216;
end
Nsym=ceil((16+8*LEN+6)/Ndbps);     %% function ceil(.) returns the smallest integer value greater than or equal to its argument
Ndata=Nsym*Ndbps;
Npad=Ndata-(16+8*LEN+6);           %% get Npad to add Npad zeros
DataDealed=DatatoBit(data);        %% reform the data in binary
Datain=[Service DataDealed zeros(1,Npad+6)];  %% to make DATA bits
%********************************************************************%
%--------------------------------------------------------------------%
%**************************** make SIGNAL BIT ***************************%
SIGNAL=[RateBit 0 LENGTH 0 zeros(1,6)];  %% [Rate(4 bits) Reserved(1bit<'0'>) LENGTH(12bits) Parity(1bit) SignalTail(6bits<'0'>)]
%********************************************************************%
%--------------------------------------------------------------------%
%************** Generation of the preamble **************************%
Sk=[zeros(1,4) -1.472-1.472j zeros(1,3) -1.472-1.472j zeros(1,3) 1.472+1.472j zeros(1,3) 1.472+1.472j zeros(1,3) 1.472+1.472j zeros(1,3) 1.472+1.472j zeros(1,7) zeros(1,8) 1.472+1.472j 0+0j 0+0j 0+0j -1.472-1.472j zeros(1,3) 1.472+1.472j zeros(1,3) -1.472-1.472j zeros(1,3) -1.472-1.472j zeros(1,3) 1.472+1.472j zeros(1,3) ];
Lk=[0 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 zeros(5,1)' zeros(6,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];
Rst=ifft(Sk);                      %% ifft
Rs=[Rst Rst Rst(1:33)];            %% make implement to make t1-t10 (161bits)
Rs(1)=0.5*Rs(1);                   %% add window
Rs(161)=0.5*Rs(161);               
Rlt=ifft(Lk);                      %% ifft
Rl=[Rlt(33:64) Rlt Rlt Rlt(1)];    %% [GI2(32bits) T1(64bits) T2(64bits)] (161bits) in total
Rl(1)=0.5*Rl(1);                   %% add window
Rl(161)=0.5*Rl(161);               
%********************************************************************%
%--------------------------------------------------------------------%
%*************** Generation of the SIGNAL field *********************%
SignalCon=pun(SIGNAL,6);                   %% argument is 6Mbits/s only means to get 1/2 convolution mode
SignalInt=SigInt(1,48,SignalCon);          %% Interleaving Nbpsc=1,Ncbps=48
Pk=getPk([1 1 1 1 1 1 1]);                 %% get P0,126 with seed [1 1 1 1 1 1 1]
SignalbyBPSK=Insert(Sigmap(SignalInt,1),Pk(1)*[1 1 1 -1]);  %% Insert pilot after mapping(argument is '1' means by BPSK modulation<modu=1>)
Signaltemp=ifft([SignalbyBPSK(33:64) SignalbyBPSK(1:32)]);
SignalTfield=[Signaltemp(49:64) Signaltemp Signaltemp(1)];  %% to get time domain Signal
SignalTfield(1)=SignalTfield(1)*0.5;       %% add window
SignalTfield(81)=SignalTfield(81)*0.5;
%*********************************************************************%
%---------------------------------------------------------------------%
%******************** Data Scrambling with Seed **********************%
DataScr=pseudo(Datain,Seed);     %% Scrambling data
if length(DataScr)>822
    DataScr(817:822)=[zeros(1,6)];
end
%**********************************************************************%
%----------------------------------------------------------------------%
%********************* Convolution with Puncture***********************%
DataCon=pun(DataScr,Rate);  
%**********************************************************************%
%----------------------------------------------------------------------%
%************************* Dealing Data field *************************%
for N=1:length(DataCon)/Ncbps
%************************ Interleaving ********************************%
DataInt(((N-1)*Ncbps+1):N*Ncbps)=interleaving(Nbpsc,Ncbps,DataCon(((N-1)*Ncbps+1):N*Ncbps));
%**********************************************************************%
%----------------------------------------------------------------------%
%************************ Mapping *************************************%
DataMapped=map(DataInt(((N-1)*Ncbps+1):N*Ncbps),Modu);
DataFfield(((N-1)*64+1):N*64)=Insert(DataMapped,Pk(N+1)*[1 1 1 -1]);  %% insert pilot
DataT(((N-1)*64+1):N*64)=ifft([DataFfield(33:64) DataFfield(1:32)]);  %% ifft
DataTfield(((N-1)*80+1):N*80+1)=[DataT((N-1)*64+49:(N-1)*64+64) DataT((N-1)*64+1:N*64) DataT((N-1)*64+1)];
DataTfield((N-1)*80+1)=0.5*DataTfield((N-1)*80+1);                    %% add window
DataTfield(N*80+1)=0.5*DataTfield(N*80+1);
%**********************************************************************%
%----------------------------------------------------------------------%
end
%***************************** Packeting ******************************%
Packet=[Rs(1:length(Rs)-1) Rl(1:length(Rl)-1) SignalTfield(1:length(SignalTfield)-1) DataTfield];
%**********************************************************************%
%----------------------- End of Packeting data ------------------------%

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -