hi everyone :
i got problem with my matlab code in blind channel estimation for MIMO OFDM ,i can't figure it out ,can anyone help me with that thanks in advance,
clear all
close all
clc
Mt=2;Mr=2;%the number of transmit and received antennas
N=64; %the number of subcarrier
nos=200;%number of symbol
P=3; %length of CP
M=N+P; %the totle length of an OFDM symbol
J=2; %collect J consecutively received OFDM symbols
L=3; %the order of channel
Nm=1;
h11=[-0.049+j*0.359 0.482-j*0.569 -0.556+j*0.587 1];
h12=[0.443-j*0.0364 1 0.921-j*0.194 0.189-j*0.208 ];
h21=[0.221-j*0.322 -0.199+j*0.918 1 0.284-j*0.524 ];
h22=[0.417+j*0.030 1 0.873+j*0.145 -0.285+j*0.309 ];
h1=[-0.049+j*0.359 0.443-j*0.0364;0.221-j*0.322 0.417+j*0.030];
h2=[0.482-j*0.569 1;-0.199+j*0.918 1];
h3=[-0.556+j*0.587 0.921-j*0.194;1 0.873+j*0.145];
h4=[1 0.189-j*0.208;0.284-j*0.524 -0.285+j*0.309 ];
H=[h1 h2 h3 h4];
%HH=[-0.049+j*0.359 0.221-j*0.322 0.482-j*0.569 -0.199+j*0.918 -0.556+j*0.587 1 1 0.284-j*0.524 0.443-j*0.0364 0.417+j*0.030 1 1 0.921-j*0.194 0.873+j*0.145 0.189-j*0.208 -0.285+j*0.309].';
HH=[h1.' h2.' h3.' h4.'].';
%%%%%%%%%%H=h
);%
%H1
H1=zeros((J*M-L)*Mr,J*M*Mt);
H1(1:Mr,
=[H zeros(Mr,(J*M-L-1)*Mt)];
for i=1:J*M-L-1
htmp=H1((i-1)*Mr+1:i*Mr,
;
H1(i*Mr+1
i+1)*Mr,
=[htmp
,(J*M-1)*Mt+1:J*M*Mt),htmp
,1
J*M-1)*Mt)];
end
%H1;
NRMSE=zeros(1,9);SNR=[];a=[];
SNR1=0:5:50;
for snr=0:5:50
Herr=0;
for i1=1:Nm
Rr=zeros((J*M-L)*Mr,(J*M-L)*Mr);
%-----------------------------------------%
b0=round(rand(1,Mt*2*N*nos));
b=zeros(1,N*nos);
b1=reshape(b0,2,Mt*N*nos).';
b2=bi2de(b1,2,'left-msb');%;
b3=[1+j 1-j -1+j -1-j];
b=b3(b2+1)/sqrt(2);%1*12800;
%
d1=b
);
for i=1:nos-J+1
d4
,i)=d1((i-1)*N*Mt+1
i+J-1)*N*Mt);%;
end
j=sqrt(-1);
W1=zeros(N,N);
for i1=1:N
for j1=1:N
W1(j1,i1)=exp(j*2*pi*(N-i1)*(j1-1)/N)/sqrt(N);%cp;
end
end
W=[W1,W1
,1
)].';%;
Ij=eye(J);%
Imt=eye(Mt);
W2=kron(Ij,W);
W3=kron(W2,Imt);%;
W4=conj(W)*(W.');%conj;;
A=kron(Ij,W4);
s=W3*d4;%
r1=H1*s;%;
n=rand(size(r1))+sqrt(-1)*rand(size(r1));%;
n=n/norm
*norm(r1)*10^(-snr/20);
SNR=[SNR 20*log10(norm(r1)/norm
)];
r=r1+n;%
Rr=r*r'/(nos-J+1); %;(J*M-L)*(J*M-L);
%
[U0,S0,V0]=svd(Rr);
%
Q=zeros((L+1)*Mr,(L+1)*Mr);
for k=J*N*Mt+1
J*M-L)*Mr%,
uk=U0
,k);%
vk1=reshape(uk,Mr,J*M-L);%2*131;
vk=zeros((L+1)*Mr,J*M);%
vk(1:Mr,
=[vk1 zeros(Mr,L)];%1*180;
for i3=1:L
vktmp=vk((i3-1)*Mr+1:i3*Mr,
;
vk(i3*Mr+1
i3+1)*Mr,
=[vktmp
,J*M) vktmp
,1:J*M-1)];
end
Q=Q+vk*A*vk';%vk;;8*8;
end
[U1 S1 V1]=svd(Q);
hr0=U1
,(L+1)*Mr-Mt+1
L+1)*Mr);%
hb_h=mean(hr0./HH);
hb=hr0/hb_h;
HA=hr0
,1)./hb_h
,1);
HB=hr0
,2)./hb_h
,2);
hb=[HA HB];
Herr1=HH-hb;
for i4=1:Mt
Herr=Herr+(norm(Herr1
,i4)))^2/(norm(H
,i4)))^2;
end
end
NRMSE(snr/5+1)=sqrt(Herr/(Nm*Mt*Mr*(L+1)));%;
end
figure(1)
te=length(H);
plot(1:te,real(H),'ko-',1:te,real(hb),'k+-')
legend('Estimated','Accurate')
figure(2)
plot(1:te,imag(H),'ko-',1:te,imag(hb),'k+-')
legend('Estimated','Accurate')
figure(3)
semilogy(SNR1,NRMSE,'-*k')
xlabel('SNR/dB');ylabel('NRMSE');grid on;