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

📄 mod_4tx_stbc_dfusc.m

📁 关于瑞利信道的仿真程序 关于瑞利信道的仿真程序
💻 M
字号:
function mod_4Tx_STBC_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

tx3_opfid = fopen(modparams.tx3_outfile, 'w');
if tx3_opfid < 0
   error('unable to open tx3 data file');
end

tx4_opfid = fopen(modparams.tx4_outfile, 'w');
if tx4_opfid < 0
   error('unable to open tx4 data file');
end

% -----------Preamble modulation-----------
preamdata_tx1=zeros(1,1703);
preamdata_tx2=zeros(1,1703);
preamdata_tx3=zeros(1,1703);
preamdata_tx4=zeros(1,1703);
preamdata_tx1(1:4:end)=sqrt(2)*2*2*(0.5-Wk_preamble(1:4:end));    % sqrt(2)*-- 3dB Boost, 2-- unitary symbol power
preamdata_tx2(2:4:end)=sqrt(2)*2*2*(0.5-Wk_preamble(2:4:end));    % Antenna 1 use mod(4)==0 subcarriers, Antenna 2 use mod(4)==1 ones
preamdata_tx3(3:4:end)=sqrt(2)*2*2*(0.5-Wk_preamble(3:4:end));
preamdata_tx4(4:4:end)=sqrt(2)*2*2*(0.5-Wk_preamble(4:4:end));
preamdata_tx1(852)=0;  % DC carrier
preamdata_tx2(852)=0;
preamdata_tx3(852)=0;
preamdata_tx4(852)=0;
pream_tx1_freq=[zeros(1,173),preamdata_tx1,zeros(1,172)];
pream_tx2_freq=[zeros(1,173),preamdata_tx2,zeros(1,172)];
pream_tx3_freq=[zeros(1,173),preamdata_tx3,zeros(1,172)];
pream_tx4_freq=[zeros(1,173),preamdata_tx4,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);
pream_tx3_time=sqrt(2048)*ifft(fftshift(pream_tx3_freq),2048);
pream_tx4_time=sqrt(2048)*ifft(fftshift(pream_tx4_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;
PreamData_tx3=[pream_tx3_time(2048*(1-modparams.Guard)+1:2048), pream_tx3_time]*PwNorm;
PreamData_tx4=[pream_tx4_time(2048*(1-modparams.Guard)+1:2048), pream_tx4_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');
fwrite(tx3_opfid, [real(PreamData_tx3);imag(PreamData_tx3)], 'float32');
fwrite(tx4_opfid, [real(PreamData_tx4);imag(PreamData_tx4)], 'float32');

% ------------Data symbols-------------------
for sym=1:8:2*modparams.sympf      % 802.16 - 4 Tx Antenna Scheme, Coding rate=2
    % ######## Antenna 1 , Time 1, (S1) ###########
    symdata_tx1=zeros(1,1702);
    infodata_tx1=orig_DFUSC(sym,:);
    
    % map 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_1=[zeros(1,173),symdata_tx1,zeros(1,172)];
    % 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;
    % write symbol to file
    fwrite(tx1_opfid, [real(TxData_tx1);imag(TxData_tx1)], 'float32');
    
    % ######## Antenna 2 , Time 1, (S2) ###########
    symdata_tx2=zeros(1,1702);
    infodata_tx2=orig_DFUSC(sym+1,:);
    
    % scramble 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_1=[zeros(1,173),symdata_tx2,zeros(1,172)];
    % 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;
    % write symbol to file
    fwrite(tx2_opfid, [real(TxData_tx2);imag(TxData_tx2)], 'float32');
    
    % ######## Antenna 3 , Time 1, (S3) ###########
    symdata_tx3=zeros(1,1702);
    infodata_tx3=orig_DFUSC(sym+2,:);
    
    % map data
    symdata_tx3=map(infodata_tx3+1);
    symdata_tx3=[symdata_tx3(1:851), 0, symdata_tx3(852:end)];      % insert DC
    
    % expand guard carriers
    Sym2048_tx3_freq_1=[zeros(1,173),symdata_tx3,zeros(1,172)];
    % IFFT
    Sym2048_tx3_time_1=sqrt(2048)*ifft(fftshift(Sym2048_tx3_freq_1),2048);
    % add Cyclic Prefix
    TxData_tx3=[Sym2048_tx3_time_1(2048*(1-modparams.Guard)+1:2048), Sym2048_tx3_time_1]*PwNorm;
    % write symbol to file
    fwrite(tx3_opfid, [real(TxData_tx3);imag(TxData_tx3)], 'float32');
    
    % ######## Antenna 4 , Time 1, (S4) ###########
    symdata_tx4=zeros(1,1702);
    infodata_tx4=orig_DFUSC(sym+3,:);
    
    % map data
    symdata_tx4=map(infodata_tx4+1);
    symdata_tx4=[symdata_tx4(1:851), 0, symdata_tx4(852:end)];      % insert DC
    
    % expand guard carriers
    Sym2048_tx4_freq_1=[zeros(1,173),symdata_tx4,zeros(1,172)];
    % IFFT
    Sym2048_tx4_time_1=sqrt(2048)*ifft(fftshift(Sym2048_tx4_freq_1),2048);
    % add Cyclic Prefix
    TxData_tx4=[Sym2048_tx4_time_1(2048*(1-modparams.Guard)+1:2048), Sym2048_tx4_time_1]*PwNorm;
    % write symbol to file
    fwrite(tx4_opfid, [real(TxData_tx4);imag(TxData_tx4)], 'float32');
    
    % ######## Antenna 1 , Time 2, -conj(S2) ###########
    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;
    fwrite(tx1_opfid, [real(TxData_tx1);imag(TxData_tx1)], 'float32');
    
    % ######## Antenna 2 , Time 2, conj(S1) ###########
    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;
    fwrite(tx2_opfid, [real(TxData_tx2);imag(TxData_tx2)], 'float32');
    
    % ######## Antenna 3 , Time 2, -conj(S4) ###########
    Sym2048_tx3_freq_2=-conj(Sym2048_tx4_freq_1);
    Sym2048_tx3_time_2=sqrt(2048)*ifft(fftshift(Sym2048_tx3_freq_2),2048);
    TxData_tx3=[Sym2048_tx3_time_2(2048*(1-modparams.Guard)+1:2048), Sym2048_tx3_time_2]*PwNorm;
    fwrite(tx3_opfid, [real(TxData_tx3);imag(TxData_tx3)], 'float32');
    
    % ######## Antenna 4 , Time 2, conj(S3) ###########
    Sym2048_tx4_freq_2=conj(Sym2048_tx3_freq_1);
    Sym2048_tx4_time_2=sqrt(2048)*ifft(fftshift(Sym2048_tx4_freq_2),2048);
    TxData_tx4=[Sym2048_tx4_time_2(2048*(1-modparams.Guard)+1:2048), Sym2048_tx4_time_2]*PwNorm;
    fwrite(tx4_opfid, [real(TxData_tx4);imag(TxData_tx4)], 'float32');
    
 % ###########################################################
    
    % ######## Antenna 1 , Time 1(actually Time 3), (S5) ###########
    symdata_tx1=zeros(1,1702);
    infodata_tx1=orig_DFUSC(sym+4,:);
    
    % map 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_1=[zeros(1,173),symdata_tx1,zeros(1,172)];
    % 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;
    % write symbol to file
    fwrite(tx1_opfid, [real(TxData_tx1);imag(TxData_tx1)], 'float32');
    
    % ######## Antenna 2 , Time 1, (S6) ###########
    symdata_tx2=zeros(1,1702);
    infodata_tx2=orig_DFUSC(sym+5,:);
    
    % scramble 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_1=[zeros(1,173),symdata_tx2,zeros(1,172)];
    % 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;
    % write symbol to file
    fwrite(tx2_opfid, [real(TxData_tx2);imag(TxData_tx2)], 'float32');
    
    % ######## Antenna 3 , Time 1, (S7) ###########
    symdata_tx3=zeros(1,1702);
    infodata_tx3=orig_DFUSC(sym+6,:);
    
    % map data
    symdata_tx3=map(infodata_tx3+1);
    symdata_tx3=[symdata_tx3(1:851), 0, symdata_tx3(852:end)];      % insert DC
    
    % expand guard carriers
    Sym2048_tx3_freq_1=[zeros(1,173),symdata_tx3,zeros(1,172)];
    % IFFT
    Sym2048_tx3_time_1=sqrt(2048)*ifft(fftshift(Sym2048_tx3_freq_1),2048);
    % add Cyclic Prefix
    TxData_tx3=[Sym2048_tx3_time_1(2048*(1-modparams.Guard)+1:2048), Sym2048_tx3_time_1]*PwNorm;
    % write symbol to file
    fwrite(tx3_opfid, [real(TxData_tx3);imag(TxData_tx3)], 'float32');
    
    % ######## Antenna 4 , Time 3, (S8) ###########
    symdata_tx4=zeros(1,1702);
    infodata_tx4=orig_DFUSC(sym+7,:);
    
    % map data
    symdata_tx4=map(infodata_tx4+1);
    symdata_tx4=[symdata_tx4(1:851), 0, symdata_tx4(852:end)];      % insert DC
    
    % expand guard carriers
    Sym2048_tx4_freq_1=[zeros(1,173),symdata_tx4,zeros(1,172)];
    % IFFT
    Sym2048_tx4_time_1=sqrt(2048)*ifft(fftshift(Sym2048_tx4_freq_1),2048);
    % add Cyclic Prefix
    TxData_tx4=[Sym2048_tx4_time_1(2048*(1-modparams.Guard)+1:2048), Sym2048_tx4_time_1]*PwNorm;
    % write symbol to file
    fwrite(tx4_opfid, [real(TxData_tx4);imag(TxData_tx4)], 'float32');
    
    % ######## Antenna 1 , Time 2(actually Time 4), -conj(S7) ###########
    Sym2048_tx1_freq_2=-conj(Sym2048_tx3_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;
    fwrite(tx1_opfid, [real(TxData_tx1);imag(TxData_tx1)], 'float32');
    
    % ######## Antenna 2 , Time 2, -conj(S8) ###########
    Sym2048_tx2_freq_2=-conj(Sym2048_tx4_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;
    fwrite(tx2_opfid, [real(TxData_tx2);imag(TxData_tx2)], 'float32');
    
    % ######## Antenna 3 , Time 2, conj(S5) ###########
    Sym2048_tx3_freq_2=conj(Sym2048_tx1_freq_1);
    Sym2048_tx3_time_2=sqrt(2048)*ifft(fftshift(Sym2048_tx3_freq_2),2048);
    TxData_tx3=[Sym2048_tx3_time_2(2048*(1-modparams.Guard)+1:2048), Sym2048_tx3_time_2]*PwNorm;
    fwrite(tx3_opfid, [real(TxData_tx3);imag(TxData_tx3)], 'float32');
    
    % ######## Antenna 4 , Time 2, conj(S6) ###########
    Sym2048_tx4_freq_2=conj(Sym2048_tx2_freq_1);
    Sym2048_tx4_time_2=sqrt(2048)*ifft(fftshift(Sym2048_tx4_freq_2),2048);
    TxData_tx4=[Sym2048_tx4_time_2(2048*(1-modparams.Guard)+1:2048), Sym2048_tx4_time_2]*PwNorm;
    fwrite(tx4_opfid, [real(TxData_tx4);imag(TxData_tx4)], 'float32');
    
end

fclose(tx1_opfid);
fclose(tx2_opfid);
fclose(tx3_opfid);
fclose(tx4_opfid);

⌨️ 快捷键说明

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