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

📄 demodulation.m

📁 实现BPSK,QPSK,16QAM,64QAM的调制和解调。
💻 M
字号:
function [soft_bits]=demodulation(rx_symbols,modulation,bit)
%***********************************************************************
% This file carries out 'slicing' operation to the nearest constellation
%***********************************************************************
[Nt,L]=size(rx_symbols);
soft_bits=zeros(Nt,L*bit);

switch modulation
case 'BPSK'
     for i=1:Nt
         for k=1:L
             r=rx_symbols(i,k);
             if real(r)>0
                soft_bits(i,k) = 1;
             end
         end
     end
  
case 'QPSK'
    for i=1:Nt
         for k=1:L
             r=rx_symbols(i,k);
             if real(r)>0
                bit0=1;
             else
                bit0=0;
             end
              if imag(r)>0
                 bit1=1;
              else
                  bit1=0;
              end
              soft_bits(i,[1 2]+(k-1)*2) = [bit0 bit1];
         end
    end
case '16QAM'
     for i=1:Nt
         for k=1:L
             r=rx_symbols(i,k);
             if real(r)>0
                bit0=1;
             else
                bit0=0;
             end
             if imag(r)>0
                 bit2=1;
             else
                 bit2=0;
             end
             if (2/sqrt(10)-(abs(real(r)))) > 0
                 bit1=1;
             else
                 bit1=0;
             end
             if (2/sqrt(10)-(abs(imag(r)))) > 0
                 bit3=1;
             else
                 bit3=0;
             end
             soft_bits(i,[1:4]+(k-1)*4) = [bit0 bit1 bit2 bit3];
         end
     end
case '64QAM'
 % Each symbol consists of 6 bits
       for i=1:Nt
         for k=1:L
             r=rx_symbols(i,k);
             if real(r) > 0
                bit0=1;
             else
                bit0=0;
             end
             if imag(r) > 0
                bit3=1;
             else
                bit3=0;
             end
             if (4/sqrt(42)-abs(real(r))) > 0
                bit1=1;
             else
                bit1=0;
             end
             if (4/sqrt(42)-abs(imag(r))) > 0
                 bit4=1;
             else
                 bit4=0;
             end
             if abs(4/sqrt(42)-abs(real(r))) <= 2/sqrt(42)  % bit is one
                 bit2_temp = 2/sqrt(42) - abs(4/sqrt(42)-abs(real(r)));
             elseif abs(real(r)) <= 2/sqrt(42) % bit is zero, close to real axis
                 bit2_temp = -2/sqrt(42) + abs(real(r));
             else
                 bit2_temp = 6/sqrt(42)-abs(real(r)); % bit is zero 
             end
             if  abs(4/sqrt(42)-abs(imag(r))) <= 2/sqrt(42)  % bit is one
                  bit5_temp = 2/sqrt(42) - abs(4/sqrt(42)-abs(imag(r)));
             elseif abs(imag(r)) <= 2/sqrt(42) % bit is zero, close to real axis
                  bit5_temp = -2/sqrt(42) + abs(imag(r));
             else
                  bit5_temp = 6/sqrt(42)-abs(imag(r));
             end
             if bit2_temp > 0
                bit2=1;
             else
                bit2=0;
             end
             if bit5_temp > 0
                bit5=1;
             else
                bit5=0;
             end
             soft_bits(i,[1:6]+(k-1)*6) = [bit0 bit1 bit2 bit3 bit4 bit5];
         end
       end
end


⌨️ 快捷键说明

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