📄 set_ofdm_data_parm.m
字号:
%ofdm data symbol parameters
function [ofdm_data_parm_const, ofdm_data_parm_var] = set_ofdm_data_parm
global sys_parm;
global ofdm_data_parm_const;
global ofdm_data_parm_var;
%Initial ofdm_data_parm_const==========================================
ofdm_data_parm_const = struct(...
'UsedNumSubc', 56, ...
'UsedSubcIdx', [1:28, 37:64], ...
'NullNumSubc', 8, ...
'NullSubcIdx', [29:36], ...
'ShortTrainingSymbol', [0, 0, 1+j, 0, 0, 0, -1-j, 0, ...
0, 0, 1+j, 0, 0, 0, -1-j, 0, ...
0, 0, -1-j, 0, 0, 0, 1+j, 0, ...
0, 0, -1-j, 0, 0, 0, 1+j, 0, ...
0, 0, -1-j, 0, 0, 0, -1-j, 0, ...
0, 0, -1-j, 0, 0, 0, 1+j, 0, ...
0, 0, 1+j, 0, 0, 0, 1+j, 0], ...
'LongTrainingSymbol', [ 1, 1, -1, -1, 1, 1, -1, 1, ...
-1, 1, 1, 1, 1, 1, 1, -1, ...
-1, 1, 1, -1, 1, -1, 1, 1, ...
1, 1, 1, -1, -1, 1, 1, -1, ...
1, -1, 1, -1, -1, -1, -1, -1, ...
1, 1, -1, -1, 1, -1, 1, -1, ...
1, -1, -1, 1, 1, -1, -1, -1], ...
'CPLength', 16, ...
'StartNoiseSamples', 500, ...
'EndNoiseSamples', 500, ...
'UsePilot', 1, ...
'PilotSubcPatt', [1:9:28, 37:9:64; ...
1:9:28, 37:9:64; ...
%zeros(1, 8); ...
1:9:28, 37:9:64], ...
'PilotSubcSymbol', [1, 1, -1, -1, 1, 1, -1, -1; ...
1, 1, -1, -1, 1, 1, -1, -1; ...
%zeros(1, 8); ...
1, 1, -1, -1, 1, 1, -1, -1], ...
'PilotScramble', 0, ...
'Modulation', 1, ... % 0: BSK, 1: 4PSK, 2: 16QAM, 3: 64QAM
'ModulationBits', [1, 2, 4, 6] ...
);
%Value validate==============================================================
if ofdm_data_parm_const.UsedNumSubc + ofdm_data_parm_const.NullNumSubc ~= sys_parm.TotNumSubc
fprintf('Error in sum of UsedNumSubc and NullNumSubc!');
pause;
elseif ofdm_data_parm_const.UsedNumSubc ~= length(ofdm_data_parm_const.UsedSubcIdx)
fprintf('Error in UsedNumSubc!');
pause;
elseif ofdm_data_parm_const.NullNumSubc ~= length(ofdm_data_parm_const.NullSubcIdx)
fprintf('Error in NullNumSubc!');
pause;
end
if ~isempty(intersect(ofdm_data_parm_const.UsedSubcIdx, ofdm_data_parm_const.NullSubcIdx))
fprintf('UsedSubIdx overlap with the NullSubcIdx!');
pause;
elseif union(ofdm_data_parm_const.UsedSubcIdx, ofdm_data_parm_const.NullSubcIdx) ~= [1:sys_parm.TotNumSubc]
fprintf('UsedSubIdx combined with NullSubcIdx is not full!');
pause;
end
if length(ofdm_data_parm_const.ShortTrainingSymbol) ~= ofdm_data_parm_const.UsedNumSubc
fprintf('Err in ShortTrainingSymbol!');
pause;
else
%Normalize the amplitude of the short training symbol
var = sum(abs(ofdm_data_parm_const.ShortTrainingSymbol).^2);
ofdm_data_parm_const.ShortTrainingSymbol = sqrt(ofdm_data_parm_const.UsedNumSubc / var) * ofdm_data_parm_const.ShortTrainingSymbol;
end
if length(ofdm_data_parm_const.LongTrainingSymbol) ~= ofdm_data_parm_const.UsedNumSubc
fprintf('Err in LongTrainingSymbol!');
pause;
end
if ofdm_data_parm_const.UsePilot
for n = 1:size(ofdm_data_parm_const.PilotSubcPatt, 1)
if ~isempty(intersect(ofdm_data_parm_const.PilotSubcPatt(n, :), ofdm_data_parm_const.NullSubcIdx))
fprintf('PilotSubcPatt overlap with NullSubcIdx!');
pause;
end
end
if size(ofdm_data_parm_const.PilotSubcPatt) ~= size(ofdm_data_parm_const.PilotSubcSymbol)
fprintf('Err in PilotSubc pattern and symbol!');
pause;
else
%Calculate the ofdm symbol's pilot num in specific time
PattNum = (ofdm_data_parm_const.PilotSubcPatt > 0);
PattNum = sum(PattNum, 2);
SymNum = (ofdm_data_parm_const.PilotSubcSymbol ~= 0);
SymNum = sum(SymNum, 2);
%Compare the pilot num in PilotSubcPatt and PilotSubcSymbol
if PattNum ~= SymNum
fprintf('Err in PilotSubc pattern and symbol!');
pause;
else
ofdm_data_parm_const.PilotScramble = PattNum;
end
end
end
%Initial ofdm_data_parm_var==========================================
ofdm_data_parm_var = struct(...
'Index', 0, ...
'HavePilot', 0, ...
'NumPilotSubc', 0, ...
'PilotSubcIdx', 0, ...
'PilotSymbol', 0, ...
'NumDataSubc', 0, ...
'DataSubcIdx', 0, ...
'TransmitPower', 0, ...
'NumBits', 0 ...
);
if ~ofdm_data_parm_const.UsePilot
%Parameters of pilot
ofdm_data_parm_var.HavePilot = 0;
ofdm_data_parm_var.NumPilotSubc = 0;
ofdm_data_parm_var.PilotSubcIdx = [];
ofdm_data_parm_var.PilotSymbol = [];
ofdm_data_parm_var.NumDataSubc = ofdm_data_parm_const.UsedNumSubc;
ofdm_data_parm_var.DataSubcIdx = ofdm_data_parm_const.UsedSubcIdx;
%Transmit power
ofdm_data_parm_var.TransmitPower = ones(1, ofdm_data_parm_var.NumDataSubc);
%Calculate how much bits in each ofdm symbol
mod_type = ofdm_data_parm_const.Modulation + 1;
ofdm_data_parm_var.NumBits = ofdm_data_parm_const.ModulationBits(mod_type) * ofdm_data_parm_var.NumDataSubc;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -