📄 mod_2tx_sm_dfusc.m
字号:
function mod_2Tx_SM_DFUSC(modparams)
% Modulation for DL FUSC
% load orig_DFUSC
switch modparams.qam,
case 4,
load orig_DFUSC_QPSK.mat;
case 16,
load orig_DFUSC_QAM16.mat;
case 64,
load orig_DFUSC_QAM64.mat;
otherwise,
error('Not supported Modulation Schme!');
end
load Wk_preamble.mat;
map=get80216map(modparams.qam);
PwNorm=sqrt(2048/1702); % symbol power normalization factor
tx1_opfid = fopen(modparams.tx1_outfile, 'w');
if tx1_opfid < 0
error('unable to open tx1 data file');
end
tx2_opfid = fopen(modparams.tx2_outfile, 'w');
if tx2_opfid < 0
error('unable to open tx2 data file');
end
% -----------Preamble modulation-----------
preamdata_tx1=zeros(1,1703);
preamdata_tx2=zeros(1,1703);
preamdata_tx1(2:2:end)=sqrt(2)*sqrt(2)*2*(0.5-Wk_preamble(2:2:end)); % first sqrt(2)--3 dB Boost, second sqrt(2)-- unitary symbol power
preamdata_tx2(1:2:end)=sqrt(2)*sqrt(2)*2*(0.5-Wk_preamble(1:2:end)); % Antenna 1 use even subcarriers, Antenna 2 use odd ones
preamdata_tx1(852)=0; % DC carrier
preamdata_tx2(852)=0;
pream_tx1_freq=[zeros(1,173),preamdata_tx1,zeros(1,172)];
pream_tx2_freq=[zeros(1,173),preamdata_tx2,zeros(1,172)];
% IFFT
pream_tx1_time=sqrt(2048)*ifft(fftshift(pream_tx1_freq),2048);
pream_tx2_time=sqrt(2048)*ifft(fftshift(pream_tx2_freq),2048);
% add Cyclic Prefix
PreamData_tx1=[pream_tx1_time(2048*(1-modparams.Guard)+1:2048), pream_tx1_time]*PwNorm;
PreamData_tx2=[pream_tx2_time(2048*(1-modparams.Guard)+1:2048), pream_tx2_time]*PwNorm;
% write to file
fwrite(tx1_opfid, [real(PreamData_tx1);imag(PreamData_tx1)], 'float32');
fwrite(tx2_opfid, [real(PreamData_tx2);imag(PreamData_tx2)], 'float32');
% ------------Data symbols-------------------
for sym=1:2:2*modparams.sympf % Spatial Multiplexing
% ######## Antenna 1 ###########
symdata_tx1=zeros(1,1702);
infodata_tx1=orig_DFUSC(sym,:);
% scramble data
symdata_tx1=map(infodata_tx1+1);
symdata_tx1=[symdata_tx1(1:851), 0, symdata_tx1(852:end)]; % insert DC
% expand guard carriers
Sym2048_tx1_freq=[zeros(1,173),symdata_tx1,zeros(1,172)];
% IFFT
Sym2048_tx1_time=sqrt(2048)*ifft(fftshift(Sym2048_tx1_freq),2048);
% add Cyclic Prefix
TxData_tx1=[Sym2048_tx1_time(2048*(1-modparams.Guard)+1:2048), Sym2048_tx1_time]*PwNorm;
% write symbol to file
fwrite(tx1_opfid, [real(TxData_tx1);imag(TxData_tx1)], 'float32');
% ######## Antenna 2 ###########
symdata_tx2=zeros(1,1702);
infodata_tx2=orig_DFUSC(sym+1,:);
% map data
symdata_tx2=map(infodata_tx2+1);
symdata_tx2=[symdata_tx2(1:851), 0, symdata_tx2(852:end)]; % insert DC
% expand guard carriers
Sym2048_tx2_freq=[zeros(1,173),symdata_tx2,zeros(1,172)];
% IFFT
Sym2048_tx2_time=sqrt(2048)*ifft(fftshift(Sym2048_tx2_freq),2048);
% add Cyclic Prefix
TxData_tx2=[Sym2048_tx2_time(2048*(1-modparams.Guard)+1:2048), Sym2048_tx2_time]*PwNorm;
% write symbol to file
fwrite(tx2_opfid, [real(TxData_tx2);imag(TxData_tx2)], 'float32');
end
fclose(tx1_opfid);
fclose(tx2_opfid);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -