HE/WaveAdp/TX_forPreamble.m
2024-03-30 16:35:40 +08:00

131 lines
4.1 KiB
Matlab
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

%% 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;
% 最小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);