%% 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];% 加密算法需要做一个适配,CHB,3.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; % 最小CP值,外部条件,取决于最大延迟拓展,有最小CP值>最大延迟拓展 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]; %% Parameter NumerologyNo = 1; % 1~27 FrameNo = 7; % MCS_No = 3; cfg = wlanNonHTConfig('SignalChannelBandwidth',true, ... 'BandwidthOperation','Static'); % cfg.MCS = MCS_No; PacketSize = 200; cfg.PSDULength = PacketSize; %0-4095 %% preamble tx_STF = STS_modulation(NumerologyNo); % STF tx_LTF = wlanLLTF(cfg); % LTF [tx_SIG, tx_sigdata] = newLSIG(cfg,FrameNo);% SIG % load('cfg.mat') txSignal = [zeros(500,1);tx_STF;tx_LTF;tx_SIG;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);