📄 tx_gen_preamble.m
字号:
%Construction of the preamble
function preamble = tx_gen_preamble(sys_parm)
global ofdm_data_parm_const;
%Generate first ten short training symbols
short_tr = ofdm_data_parm_const.ShortTrainingSymbol;
%OverSample and IFFT operation
ifft_in = zeros(1, sys_parm.TotNumSubc);
ifft_in(ofdm_data_parm_const.UsedSubcIdx) = short_tr;
if sys_parm.OverSamp > 1
insert_zeros = zeros(1, (sys_parm.OverSamp - 1) * sys_parm.TotNumSubc);
ifft_in_up = ifft_in(1: sys_parm.TotNumSubc / 2);
ifft_in_down = ifft_in(sys_parm.TotNumSubc / 2 + 1: sys_parm.TotNumSubc);
ifft_in = [ifft_in_up, insert_zeros, ifft_in_down];
end
ifft_out = ifft(ifft_in);
%Pick one short training symbol
len = (sys_parm.TotNumSubc * sys_parm.OverSamp + ofdm_data_parm_const.CPLength) * 2 / 10;
Strs = ifft_out(1: len);
%Extend to ten short training symbols
short_trs=[Strs Strs Strs Strs Strs Strs Strs Strs Strs Strs];
%Next generate the two long training symbols
long_str = ofdm_data_parm_const.LongTrainingSymbol;
%OverSample and IFFT operation
ifft_in = zeros(1, sys_parm.TotNumSubc);
ifft_in(ofdm_data_parm_const.UsedSubcIdx) = long_str;
if sys_parm.OverSamp > 1
insert_zeros = zeros(1, (sys_parm.OverSamp - 1) * sys_parm.TotNumSubc);
ifft_in_up = ifft_in(1: sys_parm.TotNumSubc / 2);
ifft_in_down = ifft_in(sys_parm.TotNumSubc / 2 + 1: sys_parm.TotNumSubc);
ifft_in = [ifft_in_up, insert_zeros, ifft_in_down];
end
ifft_out = ifft(ifft_in);
%Long training symbol
long_trs = [ifft_out(length(ifft_out) - 2 * ofdm_data_parm_const.CPLength + 1: length(ifft_out)), ifft_out, ifft_out];
%Concatenate first short training symbols and long training symbols
preamble = [short_trs, long_trs];
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -