📄 demodulation.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 + -