HE/WaveAdp/TX.m

111 lines
3.6 KiB
Mathematica
Raw Permalink Normal View History

2024-03-30 16:35:40 +08:00
%% TX for labview
clc;
close all;
clear ;
%%
userNum = 1;
fileType = 'text';
encryptMode = 'encryptMode';
antennasNum = 1;
centerFreq = 2450e6;
sendBandwidth = 5e6;
fftNum = 128;
CPratio = 0.25;
pilotInterval = 3;
% MCS_set=[2,2;4,2;4,4;16,2;16,4;64,3;64,4;64,6];% CHB3.19
MCS = [16,4];
subcarriersNum = 128; %
%%
txInput.userNum = userNum; % 1 or 2
txInput.fileType = fileType; % 'text' or 'picture'
txInput.encryptMode = encryptMode; % 'encrypt' or 'not encrypt'
txInput.antennasNum = antennasNum; % 1 or 2
txInput.centerFreq = centerFreq; % 500MHz~2.4G
txInput.sendBandwidth = sendBandwidth; % 20~40MHz
txInput.fftNum = fftNum;% 128 or 256 or 512
txInput.CPratio = CPratio; % 0.25 or 0.125 or 0.0625
txInput.pilotInterval = pilotInterval; % 3 5 7
txInput.MCS = MCS; % a set [2,2;4,2;4,4;16,2;16,4;64,3;64,4;64,6]
txInput.subcarriersNum = subcarriersNum;% 52 or 106 or 242
%%
TimeStamp = [];
FreqCarrier = txInput.centerFreq;%
Bandwidth = txInput.sendBandwidth;% 20~40e6
Ts = 1/Bandwidth;
% 仿
Delay_set = [1:20]*Ts;
Velocity_set = [5:250];
SNR_set = [0:5:35];
FrameNum = 1;
PacketSize = 200; %
% load NumerologySet.mat NumerologySet
% NumerologySel = NumerologySet(1,:); % 128 0.25 3 % N_FFT; CPratio; PilotInterval
NumerologySel = [txInput.fftNum,txInput.CPratio,txInput.pilotInterval];
MCS_no = txInput.MCS;
SNR = 25;
tau_d = Delay_set(randi([1 20]));
velocity = Velocity_set(randi([1 length(Velocity_set)]));
ChanPara = ChanStat(SNR, tau_d, velocity, Ts, FreqCarrier, TimeStamp);
% seed_set = randi([0 5000],FrameNum,3);
seed_set = [1 2 3];
[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];
txSignalNormalized = txSignal./max(abs(txSignal));
txOutput.sendSignal = txSignalNormalized;
%
txOutput.PAPR = 0;
%% Channel
% [rxSignal,ChanPara] = PassChan(txSignal,WaveformPara,SysParameters,ChanPara,seed_set(2));
% save('testInputDataForLabview.mat','rxSignal');
% SIR = InterfCal(rxSignal,ChanPara);
% A = 20*log10(abs(fft(txSignal)));
% plot(A);