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

51 lines
2.3 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.

function [SysParameters,WaveformPara] = WaveformNumerologyCal(PacketSize,NumerologySel,MCS_no)
%% 函数说明:计算系统链路的参数
N_FFT = NumerologySel(1); CPratio = NumerologySel(2); PilotInterval = NumerologySel(3);
%% 系统参数
SysParameters.ShowTiming =true;
SysParameters.ShowPAPR =false;
SysParameters.ShowFigure =true;
SysParameters.ShowPathGain =true;
SysParameters.SaveSimData =false;
WaveformPara.FrameType ='Data'; % Control为控制短帧Data为数据帧Audio为语音帧
% 波形参数
WaveformPara.PacketSize = PacketSize;
WaveformPara.Payload = WaveformPara.PacketSize*8;
WaveformPara.PayloadCRC = 32;
%--
WaveformPara.NullRatio = 1/4;
WaveformPara.N_FFT = N_FFT;
WaveformPara.CPratio = CPratio;
WaveformPara.PilotPattern = 'block';
WaveformPara.PilotInterval = PilotInterval;
WaveformPara.CP_Len = WaveformPara.N_FFT*WaveformPara.CPratio; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
WaveformPara.SymbolLen = WaveformPara.N_FFT*(WaveformPara.CPratio+1);
WaveformPara.UsedSubcarrier = (1-WaveformPara.NullRatio)*WaveformPara.N_FFT-1;
WaveformPara.NullSubcarrier = WaveformPara.NullRatio*WaveformPara.N_FFT;
%--
WaveformPara.Mod = MCS_no(1);
WaveformPara.Modulation = log2(WaveformPara.Mod);
WaveformPara.CodeRate = (MCS_no(2)-1)/MCS_no(2);
puncpat=[1,1,0,1,1,0,0,1,1,0];
WaveformPara.puncpat = puncpat(1:2*(MCS_no(2)-1));
%---------------------------------------------
WaveformPara.BitsPerSig = WaveformPara.UsedSubcarrier*WaveformPara.Modulation;
WaveformPara.DataFrame = ceil((WaveformPara.Payload+WaveformPara.PayloadCRC)/WaveformPara.CodeRate/WaveformPara.BitsPerSig);
WaveformPara.DataPadding = WaveformPara.DataFrame*WaveformPara.BitsPerSig - floor((WaveformPara.Payload+WaveformPara.PayloadCRC)/WaveformPara.CodeRate);
WaveformPara.PilotNum = ceil(WaveformPara.DataFrame/WaveformPara.PilotInterval);
WaveformPara.FrameSymNum = WaveformPara.DataFrame+WaveformPara.PilotNum;
WaveformPara.FrameConstelNum = WaveformPara.UsedSubcarrier * WaveformPara.DataFrame;
WaveformPara.FrameLen = WaveformPara.SymbolLen * WaveformPara.FrameSymNum;
WaveformPara.InterleavLen = 4080;
end