📄 subspace_mimo.m
字号:
clear all
clc
echoF=1;
SNR_dB=30; sgma=1;
T=1000;
p=2;q=2;
L=2; M=4; N=5; d=M+N;
j=sqrt(-1);
h11=[-0.049+j*0.359 0.482-j*0.569 -0.556+j*0.587 1 -0.171+j*0.061];
h12=[0.443-j*0.0364 1 0.921-j*0.194 0.189-j*0.208 -0.087-j*0.054];
h21=[0.221-j*0.322 -0.199+j*0.918 1 0.284-j*0.524 0.136-j*0.19];
h22=[0.417+j*0.030 1 0.873+j*0.145 -0.285+j*0.309 0.049+j*0.161];
h1=[h11 h12].';h2=[h21 h22].';
h=[h11 h12 h21 h22].';
for snrl=1:length(SNR_dB)
snrl
s1=sign(rand(1,T)-0.5)+2*sign(rand(1,T)-0.5);
s1=s1+sqrt(-1)*(sign(rand(1,T)-0.5)+2*sign(rand(1,T)-0.5));
s2=sign(rand(1,T)-0.5)+2*sign(rand(1,T)-0.5);
s2=s2+sqrt(-1)*(sign(rand(1,T)-0.5)+2*sign(rand(1,T)-0.5));
end
TN=T-N+1; X1=zeros(L*N,TN); X2=zeros(L*N,TN);SNR=[]; v=[];
for i=1:L
x1=filter(h1((i-1)*(M+1)+1:i*(M+1)),1,s1);
x1=awgn(x1,SNR_dB,sgma);
x2=filter(h2((i-1)*(M+1)+1:i*(M+1)),1,s2);
x2=awgn(x2,SNR_dB,sgma);
for j=1:TN,
X1((i-1)*N+1:i*N, j)=x1(j+N-1:-1:j).';
X2((i-1)*N+1:i*N, j)=x2(j+N-1:-1:j).';
end
end
Rx1=X1*X1'/TN;
[U01,S01,V01]=svd(Rx1);
Rx2=X2*X2'/TN;
[U02,S02,V02]=svd(Rx2);
Q1=zeros(L*(M+1), L*(M+1));
Q2=zeros(L*(M+1), L*(M+1));
for i=d+1:L*N,
Vm1=zeros(L*(M+1), M+N);
Vm2=zeros(L*(M+1), M+N);
for j=1:(M+1),
for k=1:L,
Vm1((k-1)*(M+1)+j, j:(j+N-1))=U01((k-1)*N+1:k*N, i).';
Vm2((k-1)*(M+1)+j, j:(j+N-1))=U02((k-1)*N+1:k*N, i).';
end
end
Q1=Q1+Vm1*Vm1';
Q2=Q2+Vm2*Vm2';
end
[U11,S11,V11]=svd(Q1);
hb1=U11(:,L*(M+1));
[U12,S12,V12]=svd(Q2);
hb2=U12(:,L*(M+1));
hb_h1=mean(hb1./h1);
hb1=hb1/hb_h1;
hb_h2=mean(hb2./h2);
hb2=hb2/hb_h2;
if echoF
figure(1)
te=length(h1);
plot(1:te,real(hb1),'ko-',1:te,real(h1),'k+-'), grid
legend('估计值','理论值')
title('信道脉冲响应h的实部');
figure(2)
plot(1:te,imag(hb1),'ko-',1:te,imag(h1),'k+-'); grid,
legend('估计值','理论值')
title('信道脉冲响应h的虚部')
figure(3)
te=length(h2);
plot(1:te,real(hb2),'ko-',1:te,real(h2),'k+-'), grid
legend('估计值','理论值')
title('信道脉冲响应h的实部');
figure(4)
plot(1:te,imag(hb2),'ko-',1:te,imag(h2),'k+-'); grid,
legend('估计值','理论值')
title('信道脉冲响应h的虚部')
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -