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

📄 adaptivemimo.m

📁 WIMAX-MIMO的Alamouti-ofdm空時分組碼MATLAB程序
💻 M
字号:
clear
clc
BW=input('Required channel bandwidth in MHz(max 20 MHz)=');
disp('choose cyclic prefix to overcome delays spreads')
disp(',1/4 for longest delay spread ,1/8 for long delay spreads ,')
disp('1/16 for short delays spreads ,1/32 for very small delay spread channels')
G=input('=  ');
channels=[1.75 1.5 1.25 2.75 2.0];
oversampling=[8/7 86/75 144/125 316/275 57/50 8/7];
for i=1:5
    y(i)=rem(BW,channels(i));
    if y(i)==0
        n=oversampling(i);
    end
end
y=(y(1))*(y(2))*(y(3))*(y(4))*(y(5));
if y~=0
    n=8/7;
end
if ((G~=1/4)&(G~=1/8)&(G~=1/16)&(G~=1/32))
    error('u have choosed a guard period thats not valid in the ieee 802.16')
end
Nused=200; Nfft=256;
fs=(floor((n*BW*1e6)/8000))*8000; %sampling freqency
freqspacing= fs/Nfft; %freqency spacing
Tb= 1/freqspacing; %usfel symbol time
Tg= G*Tb  ;%Guard time
Ts=Tb+Tg ;%symbol time 
samplingttime= Tb/Nfft;

%adaptive encoding and decoding depending on the channel SNR
genpoly=gf(1,8);
for idx=0:15
    genpoly=conv(genpoly,[1 gf(2,8)^idx]);
end
primepoly=[1 0 0 0 1 1 1 0 1];
convvec=poly2trellis(7,[171,133]);
cSNR=input('Enter the channel SNR in dB(it should be above 6.4 dB)=');
if cSNR<6.4
    error('not a valid channel for transmission ,use another channel with better SNR')
end
%BPSK 1/2
if (6.4<=cSNR&cSNR<9.4)
    inputsize=88;
    seqafterrand=inputsize+8;
    shortening=[1:12];
    shorteningRx=[1:11];
    punvec=reshape([1 , 1],2,1);%convolutional of rate 1/2
    Ncbps=192;%selctor of RS 12*8
    k=0:Ncbps-1;
    mk=(Ncbps/12 )*mod(k,12)+floor(k/12);
    s=ceil(Ncbps/2);
    jk=s*floor(mk/s)+mod(mk+Ncbps-floor(12*mk/Ncbps),s);
    [x,int_idx]=sort(jk);
    Ry=[+1 -1];
    Iy=[0 0];
    qamconst=complex(Ry,Iy);
    qamconst=qamconst(:);
    bitspersymbol=1;
    CPsel=[(256-G*256+1):256 1:256];
    CPremove=[(256*G+1):(256+G*256)];
    coderate=1/2;
    disp('Modulation scheme of BPSK with Coding rate 1/2 is chosen');
elseif (9.4<=cSNR&cSNR<11.2)
    inputsize=184;
    seqafterrand=inputsize+8;
    shortening=[1:32];
    shorteningRx=[1:23];
    punvec=reshape([1 0 , 1 1],4,1);%convolutional of rate 2/3
    Ncbps=384; %selctor of RS 48*8
    k=0:Ncbps-1;
    mk=(Ncbps/12 )*mod(k,12)+floor(k/12);
    s=ceil(Ncbps/2);
    jk=s*floor(mk/s)+mod(mk+Ncbps-floor(12*mk/Ncbps),s);
    [x,int_idx]=sort(jk);
    Ry=ones(2,1)*[+1 -1];
    Iy=([+1 -1]')*ones(1,2);
    qamconst=complex(Ry,Iy);
    qamconst=qamconst(:)/sqrt(2);
    bitspersymbol=2;
    CPsel=[(256-G*256+1):256 1:256];
    CPremove=[(256*G+1):(256+G*256)];
    coderate=1/2;
    disp('Modulation scheme of QPSK with Coding rate 1/2 is chosen');
elseif (11.2<=cSNR&cSNR<16.4)
    inputsize=280;
    seqafterrand=inputsize+8;
    shortening=[1:40];
    shorteningRx=[1:35];
    punvec=reshape([1 0 1 0 1, 1 1 0 1 0],10,1);%convolutional of rate 5/6
    Ncbps=384; %selctor of RS 48*8
    k=0:Ncbps-1;
    mk=(Ncbps/12 )*mod(k,12)+floor(k/12);
    s=ceil(Ncbps/2);
    jk=s*floor(mk/s)+mod(mk+Ncbps-floor(12*mk/Ncbps),s);
    [x,int_idx]=sort(jk);
    Ry=ones(2,1)*[+1 -1];
    Iy=([+1 -1]')*ones(1,2);
    qamconst=complex(Ry,Iy);
    qamconst=qamconst(:)/sqrt(2);
    bitspersymbol=2;
    CPsel=[(256-G*256+1):256 1:256];
    CPremove=[(256*G+1):(256+G*256)];
    coderate=3/4;
    disp('Modulation scheme of QPSK with Coding rate 3/4 is chosen');
elseif (16.4<=cSNR&cSNR<18.2)
    inputsize=376;
    seqafterrand=inputsize+8;
    shortening=[1:64];
    shorteningRx=[1:47];
    punvec=reshape([1 0 , 1 1],4,1);%convolutional of rate 2/3
    Ncbps=768; %selctor of RS 96*8
    k=0:Ncbps-1;
    mk=(Ncbps/12 )*mod(k,12)+floor(k/12);
    s=ceil(Ncbps/2);
    jk=s*floor(mk/s)+mod(mk+Ncbps-floor(12*mk/Ncbps),s);
    [x,int_idx]=sort(jk);
    Ry=ones(4,1)*[+1 +3 -1 -3];
    Iy=([+1 +3 -3 -1]')*ones(1,4);
    qamconst=complex(Ry,Iy);
    qamconst=qamconst(:)/sqrt(10);
    bitspersymbol=4;
    CPsel=[(256-G*256+1):256 1:256];
    CPremove=[(256*G+1):(256+G*256)];
    coderate= 1/2;
    disp('Modulation scheme of 16-QAM with Coding rate 1/2 is chosen');
elseif (18.2<=cSNR&cSNR<22.7)
    inputsize=568;
    seqafterrand=inputsize+8;
    shortening=[1:80];
    shorteningRx=[1:71];
   punvec=reshape([1 0 1 0 1, 1 1 0 1 0],10,1);%convolutional of rate 5/6
    Ncbps=768; %selctor of RS 96*8
    k=0:Ncbps-1;
    mk=(Ncbps/12 )*mod(k,12)+floor(k/12);
    s=ceil(Ncbps/2);
    jk=s*floor(mk/s)+mod(mk+Ncbps-floor(12*mk/Ncbps),s);
    [x,int_idx]=sort(jk);
    Ry=ones(4,1)*[+1 +3 -1 -3];
    Iy=([+1 +3 -3 -1]')*ones(1,4);
    qamconst=complex(Ry,Iy);
    qamconst=qamconst(:)/sqrt(10);
    bitspersymbol=4;
    CPsel=[(256-G*256+1):256 1:256];
    CPremove=[(256*G+1):(256+G*256)];
    coderate= 3/4;
    disp('Modulation scheme of 16-QAM with Coding rate 3/4 is chosen');
elseif (22.7<=cSNR&cSNR<24.4)
    inputsize=760;
    seqafterrand=inputsize+8;
    shortening=[1:108];
    shorteningRx=[1:95];
   punvec=reshape([1 0 1 , 1 1 0 ],6,1);%convolutional of rate3/4
    Ncbps=1152; %selctor of RS 144*8
    k=0:Ncbps-1;
    mk=(Ncbps/12 )*mod(k,12)+floor(k/12);
    s=ceil(Ncbps/2);
    jk=s*floor(mk/s)+mod(mk+Ncbps-floor(12*mk/Ncbps),s);
    [x,int_idx]=sort(jk);
    Ry=ones(8,1)*[+3 +1 +5 +7 -3 -1 -5 -7 ];
    Iy=([+3 +1 +5 +7 -3 -1 -5 -7 ]')*ones(1,8);
    qamconst=complex(Ry,Iy);
    qamconst=qamconst(:)/sqrt(42);
    bitspersymbol=6;
    CPsel=[(256-G*256+1):256 1:256];
    CPremove=[(256*G+1):(256+G*256)];
    coderate= 2/3;
    disp('Modulation scheme of 64-QAM with Coding rate 2/3 is chosen');
elseif 24.4<=cSNR
    inputsize=856;
    seqafterrand=inputsize+8;
    shortening=[1:120];
    shorteningRx=[1:107];
    punvec=reshape([1 0 1 0 1, 1 1 0 1 0],10,1);%convolutional of rate 5/6
    Ncbps=1152; %selctor of RS 144*8
    k=0:Ncbps-1;
    mk=(Ncbps/12 )*mod(k,12)+floor(k/12);
    s=ceil(Ncbps/2);
    jk=s*floor(mk/s)+mod(mk+Ncbps-floor(12*mk/Ncbps),s);
    [x,int_idx]=sort(jk);
    Ry=ones(8,1)*[+3 +1 +5 +7 -3 -1 -5 -7 ];
    Iy=([+3 +1 +5 +7 -3 -1 -5 -7 ]')*ones(1,8);
    qamconst=complex(Ry,Iy);
    qamconst=qamconst(:)/sqrt(42);
    bitspersymbol=6;
    CPsel=[(256-G*256+1):256 1:256];
    CPremove=[(256*G+1):(256+G*256)];
    coderate= 3/4;
    disp('Modulation scheme of 64-QAM with Coding rate 3/4 is chosen');
end
choice=input('Enter 1 for inculding mimo in the system and 0 otherwise');
if choice==1
    MimoOFDM=-10;
    Pulse=2;
    delayswitch=2;
    delayBER=2*inputsize;
else
    MimoOFDM=10;
    Pulse=1;
    delayswitch=0;
    delayBER=0;
end

    
    

    
    
    
    
    
    
    
    
    
    
    

⌨️ 快捷键说明

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