clc
clear all;
close all;
M = 16;
Pd = 10000;
k = log2(M);
ini_phase=0;
xin = randi([0 1],Pd,1);
xin = reshape(xin, length(xin)/4, 4);
xsym = bi2de(xin);
qamsig = qammod(xsym,M,ini_phase,'gray');
snr_theory = 0:2:4;
P1=1/4;
P2=3/4;
R(1)=1;
R(2)=3.15;
c2 = 1;
c4 = R(1).^4.*P1+R(2).^4.*P2;
c6 = R(1).^6.*P1+R(2).^6.*P2;
N=2;
n = sqrt(N)*[randn(2500,1) + j*randn(2500,1)];
for a=1:length(snr_theory)
rxsig = qamsig + 10^(-snr_theory(a)/20)*n;
y=abs(rxsig);
sum_y = 0;
sum_y2 = 0;
sum_y4 = 0;
sum_y6 = 0;
for i=1:length(y)
sum_y=sum_y+y(i);
sum_y2=sum_y2+y(i)^2;
sum_y4=sum_y4+y(i)^4;
sum_y6=sum_y6+y(i)^6;
end
M2=sum_y2/length(y);
M4=sum_y4/length(y);
M6=sum_y6/length(y);
m=((M2.*M4)/M6);
v=[((m.*c6)-c4) ((9.*m.*c4)-c4-4) ((18.*m)-6) ((6.*m)-2)];
r=roots(v);
snr_est_M2M4M6 = r(1);
end
figure(2);
plot(snr_theory,snr_theory);
hold on
plot(snr_theory,snr_est_M2M4M6,'-o');
hold off