📄 subspace_ofdm.m
字号:
clear all
close all
clc
Mt=1;Mr=1;%the number of transmit and received antennas
N=48; %the number of subcarrier
nos=200;%number of symbol
P=12; %length of CP
M=N+P; %the totle length of an OFDM symbol
J=3; %collect J consecutively received OFDM symbols
L=4; %the order of channel
Nm=1;
h=[-0.049+j*0.359 0.482-j*0.569 -0.556+j*0.587 1 -0.171+j*0.061]; %h11
%0.443-j*0.0364 1 0.921-j*0.194 0.189-j*0.208 -0.087-j*0.054; %h12
%-0.221-j*0.322 -0.199+j*0.918 1 -0.284-j*0.524 0.136-j*0.19; %h13
%0.417+j*0.030 1 0.873+j*0.145 0.285+j*0.309 -0.049+j*0.161]; %h14
H=h(:);%将mh变为列向量
%构造H1
H1=zeros((J*M-L)*Mr,J*M*Mt);
H1(1:Mr,:)=[H(1:Mr,:) H(Mr+1:2*Mr,:) H(2*Mr+1:3*Mr,:) H(3*Mr+1:4*Mr,:) H(L*Mr+1:(L+1)*Mr,:) 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
NRMSE=zeros(1,9);SNR=[];a=[];
SNR1=0:5:40;
for snr=0:5:40
Herr=0;
for i1=1:Nm
Rr=zeros((J*M-L)*Mr,(J*M-L)*Mr);
%------------------产生OFDM符号-----------------------%
b0=round(rand(1,2*N*nos));
b=zeros(1,N*nos);
b1=reshape(b0,2,N*nos).';
b2=bi2de(b1,2,'left-msb');
b3=[1+j 1-j -1+j -1-j];
b=b3(b2+1)/sqrt(2);
%串并变换
d1=b(:);
for i=1:nos-J+1
d4(:,i)=d1((i-1)*N*Mt+1:(i+J-1)*N*Mt);%连取J个符号
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);
end
end
W=[W1,W1(:,1:P)].';
Ij=eye(J);
Imt=eye(Mt);
W2=kron(Ij,W);
W3=kron(W2,Imt);
W4=conj(W)*(W.');
A=kron(Ij,W4);
s=W3*d4;
%信号经过信道
r1=H1*s;
n=rand(size(r1))+sqrt(-1)*rand(size(r1));
n=n/norm(n)*norm(r1)*10^(-snr/20);
SNR=[SNR 20*log10(norm(r1)/norm(n))];
r=r1+n;
Rr=r*r'/(nos-J+1);
%特征值分解
[U0,S0,V0]=svd(Rr);
%构造Q矩阵
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);
vk=zeros((L+1)*Mr,J*M);
vk(1:Mr,:)=[vk1 zeros(Mr,L)];
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';
end
[U1 S1 V1]=svd(Q);
hr0=U1(:,(L+1)*Mr-Mt+1:(L+1)*Mr);
hb_h=mean(hr0./H);
hb=hr0/hb_h;
Herr1=H-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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -