HE/WaveAdp/ExecutedMAIN0701.m

62 lines
2.7 KiB
Mathematica
Raw Permalink Normal View History

2024-03-30 16:35:40 +08:00
%%
function [BER,PER,SyncErr] = ExecutedMAIN0701(PacketSize, NumerologySel, MCS_no, ChanPara, FreqCarrier, FrameNo, seed_set)
[SysParameters,WaveformPara] = WaveformNumerologyCal(PacketSize,NumerologySel,MCS_no);
%% TX
rng(seed_set(1),'twister');
dataPacketBits = randi([0 1],WaveformPara.Payload,1);
scrData = TX_CRC32_Scramble(dataPacketBits);
trellis = poly2trellis(7,[171 133]);
tx_encoded_bit = convenc(scrData,trellis,WaveformPara.puncpat);
tx_padded_bit = [tx_encoded_bit;zeros(WaveformPara.DataPadding,1)];
%---------------------------------------------
dataMod = qammod(tx_padded_bit,WaveformPara.Mod,'InputType','bit');
WaveformPara.Power_sym = mean(abs(dataMod).^2);
dataMod = reshape(dataMod,WaveformPara.UsedSubcarrier,[]);
%% %
%
N_carriers = WaveformPara.N_FFT;
channel_response=sqrt(1/2)*(randn(1,N_carriers)+1i*randn(1,N_carriers));
%
N_windows = 8;
%
N_level = 10;
% CPCP>
min_len_CP = 30;
%
CPset = Generate_CP(channel_response,N_windows,N_level,min_len_CP);
%
[serialOFDMsym,WaveformPara.pilot,myFrameLen] = tx_FFTSymbolGen_PilotBlockPN(dataMod,WaveformPara,CPset); % CP
WaveformPara.Power_sig = mean(abs(serialOFDMsym).^2);
[WaveformPara.preamble,WaveformPara.c1,WaveformPara.c2] = ...
generatePreamble(WaveformPara,WaveformPara.Power_sig); % hb:
txSignal = [WaveformPara.preamble;serialOFDMsym];
% RFSignal = RFimpairment(txSignal, FreqCarrier);
%
%% Channel
[rxSignal,ChanPara] = PassChan(txSignal,WaveformPara,SysParameters,ChanPara,seed_set(2));
% SIR = InterfCal(rxSignal,ChanPara);
%% RX
[rxSignal_sync,SyncErr] = rxSyncSC(rxSignal,WaveformPara,myFrameLen);
[rxDataModLs] = rx_PilotBlockChanEst(rxSignal_sync,ChanPara,WaveformPara,CPset,SysParameters); % CP
dataDemod = qamdemod(rxDataModLs,WaveformPara.Mod,'OutputType','approxllr', ...
'UnitAveragePower',false,'NoiseVariance',ChanPara.N0);
dataDePadded = dataDemod(1:end - WaveformPara.DataPadding);
tb = 8;
decoded = vitdec(dataDePadded,trellis,tb,'trunc','unquant',WaveformPara.puncpat);
[rx,PER] = RX_CRC32_deScramble(decoded);
[numErrors,BER] = biterr(dataPacketBits,rx);
end
%%