function [simBer] = Nakagami_m(TRIAL,mu)
Eb=1;
N = 10^6;
SNRdB = 0:5:30;
SNR=10.^(SNRdB/10);
N0=Eb./SNR;
for ii = 1:length(SNRdB)
No=N0(ii);
avgError=0;
for kk=1:TRIAL
Error=0;
data=randi(1,1,N);
s = 2*data-1;
sEq = kron(s,[1;1]);
omega=1;
h= random(makedist('Nakagami','mu',1,'omega',1),2,N);
hd = random(makedist('Nakagami','mu',mu,'omega',1),1,N);
n = sqrt(No)*[randn(2,N) + j*randn(2,N)];
nd = sqrt(No)*[randn(1,N) + j*randn(1,N)];
h2=random(makedist('Nakagami','mu',1,'omega',1),1,N);
hd2 = random(makedist('Nakagami','mu',mu,'omega',1),1,N);
n2 = sqrt(No)*[randn(2,N) + j*randn(2,N)];
h3=random(makedist('Nakagami','mu',1,'omega',1),1,N);
hd3 = random(makedist('Nakagami','mu',mu,'omega',1),1,N);
n3 = sqrt(No)*[randn(2,N) + j*randn(2,N)];
x = h.*sEq+n;
G = 1./sqrt(No+abs(h(1,:)).^2);
y = hd.*G.*x(1,:)+nd;
z1=conj(h(2,:)).*x(2,:)/No;
hsd=h(1,:).*hd.*G;
sigma=abs(hd).^2.*(G.^2)*No+No;
z2=conj(hsd).*y./sigma;
x2 = h2.*sEq(1,:)+n2(1,:);
G2 = 1./sqrt(No+abs(h2).^2);
y2 = hd2.*G2.*x2+n2(2,:);
hsd2=h2.*hd2.*G2;
sigma2=abs(hd2).^2.*(G2.^2)*No+No;
z3=conj(hsd2).*y2./sigma2;
x2 = h2.*sEq(1,:)+n3(1,:);
G2 = 1./sqrt(No+abs(h2).^2);
y2 = hd2.*G2.*x2+n3(2,:);
hsd2=h2.*hd2.*G2;
sigma2=abs(hd2).^2.*(G2.^2)*No+No;
z4=conj(hsd2).*y2./sigma2;
z=z1+z2;
for kk=1:N;
if (norm(z(kk)-1)<norm(z(kk)+1)) && data(kk)==0
Error=Error+1;
elseif (norm(z(kk)+1)<norm(z(kk)-1)) && data(kk)==1
Error=Error+1;
end
end
Error=Error/N;
avgError=avgError+Error;
end
simBer(ii)=avgError/TRIAL;
end
end