131 lines
4.1 KiB
Matlab
131 lines
4.1 KiB
Matlab
%% 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);
|
||
|