clear;
K=8;
P=179;
L=3;
M=16;
J=11;
U=5*10^4;
sigma=0.0629;
%///////////////////////////////////////// Code and decode(include s/p and p/s trans. (use Hamming encode method)
signal=randn(1,K*U);
length1=length(signal);
for i=1:length1
if signal(i)<0
signal(i)=0;
else
signal(i)=1;
end
end
signal_code=encode(signal,7,4,'hamming')';
length2=length(signal_code);
for i=1:length2;
if signal_code(i)==0;
signal_code(i)=-1;
end
end
S =reshape(signal_code,K,length2/K);
%求出R矩阵书上的11页(单位圆上取点),通
R=zeros(M,J);%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
for u=1:M;
for i=1:J;
R(u,i)=exp(j*2*pi*((u-1)+(i-1)*M)/(M*J));%*****************************************R为M*J矩阵
end
end
clear i,j;
R2=R(2,:); % the second user 1*J
%//////////////////////////////////////////////////// /////////////
%/////////////////////////////////////////////////////////////
%求出Thita矩阵,书上的12页,VANDERMONDE MATRIX,通
Thita1=zeros(J,K);
for i=1:J;
for j=1:K;
Thita1(i,j)=R2(i).^(-j+1);%***************************************************Thita1 为J*K矩阵
end
end
clear i,j;
%////////////////////////////////////////////////////////////////
%%%%%%%%%%%%%%%%%%%%%%%SS1=reshape(S,1,K*U);%????????????????????????????????????????????????????????????????????????????????????
S1=Thita1*S;
%////////////////////////////////////////////////夹在//之间的程序是通的
%求 信道矩阵]
clear i,j;
h=randn(L+1,M)./sqrt(32)+i*randn(L+1,M)./sqrt(32);%********************************一次随机产生后,应该是一个定值,与信道有关 (L+1)*M,
%///////////////////////////////////////////
%/////////////////////////////////////////////////////////////// only the second user
Hm=zeros(M,J);%^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
for u=1:M;
for j=1:J;
%for m=1:M;----------------------------------------------------------原来的错误使Hm矩阵出现很多个0
for l=1:L+1;%????????????????????????????????????????????????????????????//书上是0到L
Hm1=h(l,u)*exp(R(u,j).^(-l+1));
Hm(u,j)=Hm(u,j)+Hm1;%*************************************************************************Hm为M*J矩阵
end
%end
end
end
%DuHru=zeros(J,J,M);%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%///////////////////////
%for i=1:M;
%for j=1:J;
%DuHru(j,j,i)=Hm(i,j);%***********************************************************************DuHru为J*J*M矩阵
%end
%end
%end
%////////////////////////////////////////////////////////
%DuHru2=DuHru(:,:,2);
%////////////////////////////
for j=1:J;
DuHru2(j,j)=Hm(2,j);%***********************************************************************DuHru为J*J*M矩阵
end
S2=DuHru2*S1;
% NOISE
Gu=zeros(J,P);
for i=1:J;
for j=1:P;
Gu(i,j)=R(i).^(-j+1);%***************************************************Thita1 为J*K矩阵
end
end
clear i,j;
ELTA=sigma.*randn(P,length2/K);
%EITA=sigma.*randn(size(Gu));
noise=Gu*ELTA;
S3=S2+noise;
%////////////////////////////////////////////////////////////////
%%%%%%%%%EQUALIZATION]
Geiu1=DuHru2*Thita1;
Geiu=pinv(Geiu1);
S4=Geiu*S3;
S5=real(S4);%???????????????????????????????????????????????????????????????????????????????? right?
%%%%%%%%%%%%%%%%%%%%%%
S5=reshape(S5,1,length2);
for i=1:length2
if S5(i)<0;
S5(i)=0;
else
S5(i)=1;
end
end
S6=decode(S5,7,4,'hamming');
S7=reshape(S6,1,K*U);
biterror=0;
for i=1:K*U
if S7(i)~=signal(i)
biterror=biterror+1;
end
end
biterror
ratio=biterror/(K*U)