⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subspace_ofdm.m

📁 衰落信道下的盲估计研究MIMO-OFDM,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 + -