⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mod_2tx_stbc_dfusc_convcode.m

📁 该文件夹为空时块码-卷积码级联系统的仿真程序
💻 M
字号:
function mod_2Tx_STBC_DFUSC_Convcode(modparams)
% Modulation for DL FUSC with Zero tailed Convolutional encoder
% Note: Only use 1536 data subcarriers, Not consider pilot subcarriers
% Therefore, Guard carriers left: 1024-1536/2=256, right: 1023-1536/2=255

load orig_DFUSC_QAM16_bit.mat;  % orig_DFUSC_bit

load Wk_preamble.mat;

map=get80216map(modparams.qam);
PwNorm_pream=sqrt(2048/1702);     % preamble power normalization factor
PwNorm_data=sqrt(2048/1536);     % data 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_pream;
PreamData_tx2=[pream_tx2_time(2048*(1-modparams.Guard)+1:2048), pream_tx2_time]*PwNorm_pream;
% 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:modparams.sympf      % Alamouti Scheme
    % ######## Antenna 1 , Time 1 ###########
    symbits_tx1=zeros(1,1536*4);
    infobits_tx1=orig_DFUSC_bit(sym,:);
    
    % Zero tailed Conv Encoder, on whole symbol
    codebits=conv_encoder(infobits_tx1,'zero');
    % Interleave
    symbits_tx1=interleave(codebits,log2(modparams.qam)/2);
    
    % bit to subsymbol
    symdata_tx1=reshape(symbits_tx1,4,1536).';
    symdata_tx1=bi2de(symdata_tx1,'left-msb').';
    orig_DFUSC(sym,:)=symdata_tx1;
    
    % map data
    symdata_tx1=map(symdata_tx1+1);
    symdata_tx1=[symdata_tx1(1:768), 0, symdata_tx1(769:end)];      % insert DC
    
    % expand guard carriers
    Sym2048_tx1_freq_1=[zeros(1,256),symdata_tx1,zeros(1,255)];
    % IFFT
    Sym2048_tx1_time_1=sqrt(2048)*ifft(fftshift(Sym2048_tx1_freq_1),2048);
    % add Cyclic Prefix
    TxData_tx1=[Sym2048_tx1_time_1(2048*(1-modparams.Guard)+1:2048), Sym2048_tx1_time_1]*PwNorm_data;
    % write symbol to file
    fwrite(tx1_opfid, [real(TxData_tx1);imag(TxData_tx1)], 'float32');
    
    % ######## Antenna 2 , Time 1 ###########
    symbits_tx2=zeros(1,1536*4);
    infobits_tx2=orig_DFUSC_bit(sym+1,:);
    
    % Zero tailed Conv Encoder
    codebits=conv_encoder(infobits_tx2,'zero');
    % Interleave
    symbits_tx2=interleave(codebits,log2(modparams.qam)/2);
    
    % bit to subsymbol
    symdata_tx2=reshape(symbits_tx2,4,1536).';
    symdata_tx2=bi2de(symdata_tx2,'left-msb').';
    orig_DFUSC(sym+1,:)=symdata_tx2;
    
    % map data
    symdata_tx2=map(symdata_tx2+1);
    symdata_tx2=[symdata_tx2(1:768), 0, symdata_tx2(769:end)];      % insert DC
    
    % expand guard carriers
    Sym2048_tx2_freq_1=[zeros(1,256),symdata_tx2,zeros(1,255)];
    % IFFT
    Sym2048_tx2_time_1=sqrt(2048)*ifft(fftshift(Sym2048_tx2_freq_1),2048);
    % add Cyclic Prefix
    TxData_tx2=[Sym2048_tx2_time_1(2048*(1-modparams.Guard)+1:2048), Sym2048_tx2_time_1]*PwNorm_data;
    % write symbol to file
    fwrite(tx2_opfid, [real(TxData_tx2);imag(TxData_tx2)], 'float32');
    
    % ######## Antenna 1 , Time 2 ###########
    Sym2048_tx1_freq_2=-conj(Sym2048_tx2_freq_1);
    Sym2048_tx1_time_2=sqrt(2048)*ifft(fftshift(Sym2048_tx1_freq_2),2048);
    TxData_tx1=[Sym2048_tx1_time_2(2048*(1-modparams.Guard)+1:2048), Sym2048_tx1_time_2]*PwNorm_data;
    fwrite(tx1_opfid, [real(TxData_tx1);imag(TxData_tx1)], 'float32');
    
    % ######## Antenna 2 , Time 2 ###########
    Sym2048_tx2_freq_2=conj(Sym2048_tx1_freq_1);
    Sym2048_tx2_time_2=sqrt(2048)*ifft(fftshift(Sym2048_tx2_freq_2),2048);
    TxData_tx2=[Sym2048_tx2_time_2(2048*(1-modparams.Guard)+1:2048), Sym2048_tx2_time_2]*PwNorm_data;
    fwrite(tx2_opfid, [real(TxData_tx2);imag(TxData_tx2)], 'float32');
end

fclose(tx1_opfid);
fclose(tx2_opfid);

save orig_DFUSC_QAM16.mat orig_DFUSC;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -