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

📄 m_qam.m

📁 非常好的M_QAM调制解调程序
💻 M
📖 第 1 页 / 共 5 页
字号:
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 1))         
          Lsymbolev((((i+2)/3)-1)*6*tsampling+1:((i+2)/3)*6*tsampling) =  1*ones(1,6*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 0))         
          Lsymbolev((((i+2)/3)-1)*6*tsampling+1:((i+2)/3)*6*tsampling) =  3*ones(1,6*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 0))     
          Lsymbolev((((i+2)/3)-1)*6*tsampling+1:((i+2)/3)*6*tsampling) =  5*ones(1,6*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 1))         
          Lsymbolev((((i+2)/3)-1)*6*tsampling+1:((i+2)/3)*6*tsampling) =  7*ones(1,6*tsampling);
       end;
	end;
	clear i;
elseif orde == 3
    %fourbitS to 4 LEVEL SYMBOL CONVERTER
	%2-level fourbit to 4-level symbol in Channel-I
	for i=1:4:(tbit/2)
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 1) & (splitod(2*(i+1)*tsampling+1) == 1) & (splitod(2*(i+2)*tsampling+1) == 1)) 
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -15*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 1) & (splitod(2*(i+1)*tsampling+1) == 1) & (splitod(2*(i+2)*tsampling+1) == 0))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -13*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 1) & (splitod(2*(i+1)*tsampling+1) == 0) & (splitod(2*(i+2)*tsampling+1) == 0))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -11*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 1) & (splitod(2*(i+1)*tsampling+1) == 0) & (splitod(2*(i+2)*tsampling+1) == 1))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -9*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 0) & (splitod(2*(i+1)*tsampling+1) == 0) & (splitod(2*(i+2)*tsampling+1) == 1))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -7*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 0) & (splitod(2*(i+1)*tsampling+1) == 0) & (splitod(2*(i+2)*tsampling+1) == 0))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -5*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 0) & (splitod(2*(i+1)*tsampling+1) == 1) & (splitod(2*(i+2)*tsampling+1) == 0))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -3*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 1) & (splitod(2*i*tsampling+1) == 0) & (splitod(2*(i+1)*tsampling+1) == 1) & (splitod(2*(i+2)*tsampling+1) == 1))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -1*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 0) & (splitod(2*(i+1)*tsampling+1) == 1) & (splitod(2*(i+2)*tsampling+1) == 1)) 
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) =  1*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 0) & (splitod(2*(i+1)*tsampling+1) == 1) & (splitod(2*(i+2)*tsampling+1) == 0))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) =  3*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 0) & (splitod(2*(i+1)*tsampling+1) == 0) & (splitod(2*(i+2)*tsampling+1) == 0))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) =  5*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 0) & (splitod(2*(i+1)*tsampling+1) == 0) & (splitod(2*(i+2)*tsampling+1) == 1))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) =  7*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 1) & (splitod(2*(i+1)*tsampling+1) == 0) & (splitod(2*(i+2)*tsampling+1) == 1))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) =  9*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 1) & (splitod(2*(i+1)*tsampling+1) == 0) & (splitod(2*(i+2)*tsampling+1) == 0))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = 11*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 1) & (splitod(2*(i+1)*tsampling+1) == 1) & (splitod(2*(i+2)*tsampling+1) == 0))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = 13*ones(1,8*tsampling);
       end;
       if ((splitod(2*(i-1)*tsampling+1) == 0) & (splitod(2*i*tsampling+1) == 1) & (splitod(2*(i+1)*tsampling+1) == 1) & (splitod(2*(i+2)*tsampling+1) == 1))
          Lsymbolod((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = 15*ones(1,8*tsampling);
       end;
	end;
	clear i;
	%2-level fourbit to 4-level symbol in Channel-Q
	for i=1:4:(tbit/2)
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 1) & (splitev(2*(i+2)*tsampling+1) == 1)) 
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -15*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 1) & (splitev(2*(i+2)*tsampling+1) == 0))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -13*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 0) & (splitev(2*(i+2)*tsampling+1) == 0))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -11*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 0) & (splitev(2*(i+2)*tsampling+1) == 1))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -9*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 0) & (splitev(2*(i+2)*tsampling+1) == 1))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -7*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 0) & (splitev(2*(i+2)*tsampling+1) == 0))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -5*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 1) & (splitev(2*(i+2)*tsampling+1) == 0))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -3*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 1) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 1) & (splitev(2*(i+2)*tsampling+1) == 1))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = -1*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 1) & (splitev(2*(i+2)*tsampling+1) == 1)) 
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) =  1*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 1) & (splitev(2*(i+2)*tsampling+1) == 0))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) =  3*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 0) & (splitev(2*(i+2)*tsampling+1) == 0))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) =  5*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 0) & (splitev(2*(i+1)*tsampling+1) == 0) & (splitev(2*(i+2)*tsampling+1) == 1))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) =  7*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 0) & (splitev(2*(i+2)*tsampling+1) == 1))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) =  9*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 0) & (splitev(2*(i+2)*tsampling+1) == 0))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = 11*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 1) & (splitev(2*(i+2)*tsampling+1) == 0))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = 13*ones(1,8*tsampling);
       end;
       if ((splitev(2*(i-1)*tsampling+1) == 0) & (splitev(2*i*tsampling+1) == 1) & (splitev(2*(i+1)*tsampling+1) == 1) & (splitev(2*(i+2)*tsampling+1) == 1))
          Lsymbolev((((i+3)/4)-1)*8*tsampling+1:((i+3)/4)*8*tsampling) = 15*ones(1,8*tsampling);
       end;
	end;
    clear i;
end
Lsymbol_Od = Lsymbolod;
Lsymbol_Ev = Lsymbolev;

% Proses Filtering ========================================================
Lsymbolods = Lsymbol_Od.';
y = Lsymbolods;
nsamp = 4;
rolloff = Alpha;
filtorder = 40; % Filter order
delay = filtorder/(nsamp*2); % Group delay (# of input samples)
rrcfilter = rcosine(1,nsamp,'fir/sqrt',rolloff,delay); % Create a square root raised cosine filter. 'fir/sqrt'
ytx = rcosflt(y,1,nsamp,'filter',rrcfilter); % Upsample and apply square root raised cosine filter.
LshapedI = ytx.';

Lsymbolevs = Lsymbol_Ev.';
y = Lsymbolevs;
nsamp = 4;
rolloff = Alpha;
filtorder = 40; % Filter order
delay = filtorder/(nsamp*2); % Group delay (# of input samples)
rrcfilter = rcosine(1,nsamp,'fir/sqrt',rolloff,delay); % Create a square root raised cosine filter.
ytx = rcosflt(y,1,nsamp,'filter',rrcfilter); % Upsample and apply square root raised cosine filter.
LshapedQ = ytx.';

%PEMBANGKITAN FREKUENSI CARRIER
fc      = 100;
fs      = length(LshapedI)-1;
ttt = [0:(length(LshapedI)-1)]'./(length(LshapedI)-1);
inphaseosc = cos(2*pi*fc*ttt);
quadratosc = sin(2*pi*fc*ttt);
%INPHASE MODULATION
Yinphase = LshapedI.*inphaseosc.';
%QUADRATURE MODULATION
Yquadrat = LshapedQ.*quadratosc.';

Yqamj = LshapedI + LshapedQ.*j;
Yqam = Yinphase + Yquadrat;

% ==== Kanal ==============================================================
[Yqamrxj RayLj fad1j] = kanale(Yqamj,snr,kanal,shift);
[Yqamrx RayL fad1] = kanale(Yqam,snr,kanal,shift);
% Yqamrx = Yqam;
% ==== End of kanal =======================================================

if     orde == 1
    A = 2;
elseif orde == 2
    A = 3;
elseif orde == 3
    A = 4;
end
for i=1:1:tsymbol
   LshapedIc(i) = LshapedI(A*tsampling*(2*i-1));
   LshapedQc(i) = LshapedQ(A*tsampling*(2*i-1));
end;
    
% ==== Demod ==============================================================
DemodI = sqrt(2)*Yqamrx.*inphaseosc.';
DemodQ = sqrt(2)*Yqamrx.*quadratosc.';

% Filter received signal using square root raised cosine filter.
ytxI = DemodI.';
yrxI = rcosflt(ytxI,1,nsamp,'Fs/filter',rrcfilter);
yrxI = downsample(yrxI,nsamp); % Downsample.
yrxI = yrxI(2*delay+1:end-2*delay); % Account for delay.
LdetI = yrxI.';

% Filter received signal using square root raised cosine filter.
ytxQ = DemodQ.';
yrxQ = rcosflt(ytxQ,1,nsamp,'Fs/filter',rrcfilter);
yrxQ = downsample(yrxQ,nsamp); % Downsample.
yrxQ = yrxQ(2*delay+1:end-2*delay); % Account for delay.
LdetQ = yrxQ.';

if orde == 1
	%Decision-Circuit-I 4-level
	for i=1:1:tsymbol   
       LcompI(i) = LdetI(2*tsampling*(2*i-1));
       if (LcompI(i) >= 2) 
          recLsymbolI(((i-1)*4*tsampling+1):(i*4*tsampling)) =  3*ones(1,4*tsampling);
       end;
       if ((LcompI(i) >= 0) & (LcompI(i) < 2))
          recLsymbolI(((i-1)*4*tsampling+1):(i*4*tsampling)) =  1*ones(1,4*tsampling);
       end;
       if ((LcompI(i) >= -2) & (LcompI(i) < 0))
          recLsymbolI(((i-1)*4*tsampling+1):(i*4*tsampling)) = -1*ones(1,4*tsampling);
       end;
       if (LcompI(i) < -2) 
          recLsymbolI(((i-1)*4*tsampling+1):(i*4*tsampling)) = -3*ones(1,4*tsampling);
       end;
	end;
    %Decision-Circuit-Q 4-level
	for i=1:1:tsymbol   
       LcompQ(i) = LdetQ(2*tsampling*(2*i-1));
       if (LcompQ(i) >= 2) 
          recLsymbolQ(((i-1)*4*tsampling+1):(i*4*tsampling)) =  3*ones(1,4*tsampling);
       end;
       if ((LcompQ(i) >= 0) & (LcompQ(i) < 2))
          recLsymbolQ(((i-1)*4*tsampling+1):(i*4*tsampling)) =  1*ones(1,4*tsampling);
       end;
       if ((LcompQ(i) >= -2) & (LcompQ(i) < 0))
          recLsymbolQ(((i-1)*4*tsampling+1):(i*4*tsampling)) = -1*ones(1,4*tsampling);
       end;
       if (LcompQ(i) < -2) 
          recLsymbolQ(((i-1)*4*tsampling+1):(i*4*tsampling)) = -3*ones(1,4*tsampling);
       end;
	end;
    %4-level symbol to 2-level tribit in Channel-I
	for i=1:1:tsymbol
        III(i) = recLsymbolI(4*tsampling*(i-1)+1);
       if III(i) == -3
          rxdibitI((4*i-4)*tsampling+1:(4*i-2)*tsampling) = ones(1,2*tsampling);
          rxdibitI((4*i-2)*tsampling+1:(4*i-0)*tsampling) = ones(1,2*tsampling);
       end;
       if III(i) == -1
          rxdibitI((4*i-4)*tsampling+1:(4*i-2)*tsampling) = ones(1,2*tsampling);
          rxdibitI((4*i-2)*tsampling+1:(4*i-0)*tsampling) = zeros(1,2*tsampling);
       end;
       if III(i) == 1
          rxdibitI((4*i-4)*tsampling+1:(4*i-2)*tsampling) = zeros(1,2*tsampling);
          rxdibitI((4*i-2)*tsampling+1:(4*i-0)*tsampling) = zeros(1,2*tsampling);
       end;
       if III(i) == 3
          rxdibitI((4*i-4)*tsampling+1:(4*i-2)*tsampling) = zeros(1,2*tsampling);
          rxdibitI((4*i-2)*tsampling+1:(4*i-0)*tsampling) = ones(1,2*tsampling);
       end;
	end;
    clear i;
    %4-level symbol to 2-level tribit in Channel-Q
	for i=1:1:tsymbol
        QQQ(i) = recLsymbolQ(4*tsampling*(i-1)+1);
       if QQQ(i) == -3
          rxdibitQ((4*i-4)*tsampling+1:(4*i-2)*tsampling) = ones(1,2*tsampling);
          rxdibitQ((4*i-2)*tsampling+1:(4*i-0)*tsampling) = ones(1,2*tsampling);
       end;
       if QQQ(i) == -1
          rxdibitQ((4*i-4)*tsampling+1:(4*i-2)*tsampling) = ones(1,2*tsampling);
          rxdibitQ((4*i-2)*tsampling+1:(4*i-0)*tsampling) = zeros(1,2*tsampling);
       end;
       if QQQ(i) == 1
          rxdibitQ((4*i-4)*tsampling+1:(4*i-2)*tsampling) = zeros(1,2*tsampling);
          rxdibitQ((4*i-2)*tsampling+1:(4*i-0)*tsampling) = zeros(1,2*tsampling);
       end;
       if QQQ(i) == 3
          rxdibitQ((4*i-4)*tsampling+1:(4*i-2)*tsampling) = zeros(1,2*tsampling);
          rxdibitQ((4*i-2)*tsampling+1:(4*i-0)*tsampling) = ones(1,2*tsampling);
       end;
	end;
	clear i;
elseif orde == 2  
	%Decision-Circuit-I 8-level
	for i=1:1:tsymbol   
       LcompI(i) = LdetI(3*tsampling*(2*i-1));
       if (LcompI(i) < -6) 
          recLsymbolI(((i-1)*6*tsampling+1):(i*6*tsampling)) = -7*ones(1,6*tsampling);
       end;
       if ((LcompI(i) >= -6) & (LcompI(i) < -4))
          recLsymbolI(((i-1)*6*tsampling+1):(i*6*tsampling)) = -5*ones(1,6*tsampling);
       end;
       if ((LcompI(i) >= -4) & (LcompI(i) < -2))
          recLsymbolI(((i-1)*6*tsampling+1):(i*6*tsampling)) = -3*ones(1,6*tsampling);
       end;
       if ((LcompI(i) >= -2) & (LcompI(i) < 0))
          recLsymbolI(((i-1)*6*tsampling+1):(i*6*tsampling)) = -1*ones(1,6*tsampling);
       end;
       if ((LcompI(i) >= 0) & (LcompI(i) < 2))
          recLsymbolI(((i-1)*6*tsampling+1):(i*6*tsampling)) =  1*ones(1,6*tsampling);
       end;
       if ((LcompI(i) >= 2) & (LcompI(i) < 4))
          recLsymbolI(((i-1)*6*tsampling+1):(i*6*tsampling)) =  3*ones(1,6*tsampling);
       end;
       if ((LcompI(i) >= 4) & (LcompI(i) < 6))
          recLsymbolI(((i-1)*6*tsampling+1):(i*6*tsampling)) =  5*ones(1,6*tsampling);
       end;
       if ((LcompI(i) >= 6))
          recLsymbolI(((i-1)*6*tsampling+1):(i*6*tsampling)) =  7*ones(1,6*tsampling);

⌨️ 快捷键说明

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