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

📄 基于子空间盲.m

📁 基于子空间算法的ofdm系统半盲估计
💻 M
字号:
clear all;
close all;
%生成一个1*64的矩阵
for N=1:100
mod_in=randint(1,64);
%子载波个数16循环前缀个数4
%QPSK调制
mod_out=zeros(1,length(mod_in)/2); 
R=reshape(mod_in,2,length(mod_in)/2);  
   T=R' ;   
   B2D=bi2de(T,'left-msb')+1;  
   Temp=[-1-j  -1+j  1-j   1+j]; 
    for i=1:length(mod_in)/2 
         mod_out(i)=Temp(B2D(i))/sqrt(2);%归一化
      end 
%串并变换
E=reshape(mod_out,2,length(mod_out)/2);
%IFFT
f=ifft(E);
%并串
g=reshape(f,1,32);
for i=1:32
    g(i)=real(g(i));
end
a=g'*g;
if N==1
    l=a;
end
l=(a+l)/2;
end

%信道
m=[1 0.4 -0.7 0.5 0.1]; %5个
m1=zeros(1,4);
m2=zeros(1,4);
for i=1:4
    m1(i)=m(i);
end
m2(1)=m1(1);
c0=toeplitz(m1,m2);


m3=zeros(1,4);
m4=zeros(1,4);
u=5;
for i=2:5
    u=u-1;
    m4(u)=m(i);
end
m3(1)=m4(1);
c1=toeplitz(m3,m4);
c3=zeros(4,4);

H=[c0 c3 c3 c1 c3 c3 c3 c3;c1 c0 c3 c3 c3 c3 c3 c3;c3 c1 c0 c3 c3 c3 c3 c3;c3 c3 c1 c0 c3 c3 c3 c3 ;c3 c3 c3 c1 c3 c3 c3 c0;c3 c3 c3 c3 c0 c3 c3  c1;c3 c3 c3 c3 c1 c0 c3 c3;c3 c3 c3 c3 c3  c1 c0 c3;c3 c3 c3 c3 c3 c3 c1 c0];

%接收信号自相关矩阵

out1=H*l*H';
%加高斯白噪声
snr=4;
SymCh = awgn(out1,snr,'measured');
%svd分解
[U,S,V] =svd(SymCh);
rank_l=rank(l);
b=U;
for i=1:rank_l;
    b(:,1)=[];
end
%b为噪声子空间特征向量36*4

%生成矩阵
A=zeros(1,4);
%b的第1列生成的A矩阵
for z=1:4:33
m3=zeros(1,4);
m4=zeros(1,4);
u=5;
e=z;
for n=1:4
    u=u-1;
    m4(u)=b(e,1);
    e=e+1;
end
m3(1)=m4(1);
temp=toeplitz(m3,m4);
temp=fliplr(temp);
M=[temp;A];
if z==1
    A11=M;
elseif z==5
    A12=M;
elseif z==9
    A13=M;
elseif z==13
    A14=M;
elseif z==17
    A15=M;
elseif z==21
    A16=M;
elseif z==25
    A17=M;
elseif z==29
    A18=M;
elseif z==33
    A19=M;
end
end
 
%b的第2列生成的A矩阵
for z=1:4:33
m3=zeros(1,4);
m4=zeros(1,4);
u=5;
e=z;
for n=1:4
    u=u-1;
    m4(u)=b(e,2);
    e=e+1;
end
m3(1)=m4(1);
temp=toeplitz(m3,m4);
temp=fliplr(temp);
M=[temp;A];
if z==1
    A21=M;
elseif z==5
    A22=M;
elseif z==9
    A23=M;
elseif z==13
    A24=M;
elseif z==17
    A25=M;
elseif z==21
    A26=M;
elseif z==25
    A27=M;
elseif z==29
    A28=M;
elseif z==33
    A29=M;
end
end

%b的第3列生成的A矩阵
for z=1:4:33
m3=zeros(1,4);
m4=zeros(1,4);
u=5;
e=z;
for n=1:4
    u=u-1;
    m4(u)=b(e,3);
    e=e+1;
end
m3(1)=m4(1);
temp=toeplitz(m3,m4);
temp=fliplr(temp);
M=[temp;A];
if z==1
    A31=M;
elseif z==5
    A32=M;
elseif z==9
    A33=M;
elseif z==13
    A34=M;
elseif z==17
    A35=M;
elseif z==21
    A36=M;
elseif z==25
    A37=M;
elseif z==29
    A38=M;
elseif z==33
    A39=M;
end
end

%b的第4列生成的A矩阵
for z=1:4:33
m3=zeros(1,4);
m4=zeros(1,4);
u=5;
e=z;
for n=1:4
    u=u-1;
    m4(u)=b(e,4);
    e=e+1;
end
m3(1)=m4(1);
temp=toeplitz(m3,m4);
temp=fliplr(temp);
M=[temp;A];
if z==1
    A41=M;
elseif z==5
    A42=M;
elseif z==9
    A43=M;
elseif z==13
    A44=M;
elseif z==17
    A45=M;
elseif z==21
    A46=M;
elseif z==25
    A47=M;
elseif z==29
    A48=M;
elseif z==33
    A49=M;
end
end

%b的第1列生成的B矩阵
for z=1:4:33
m1=zeros(1,4);
m2=zeros(1,4);
u=1;
e=z;
for n=1:4
    m1(u)=b(e,1);
    u=u+1;
    e=e+1;
end
m2(1)=m1(1);
temp=toeplitz(m1,m2);
temp=fliplr(temp);
M=[A;temp];
if z==1
    B11=M;
elseif z==5
    B12=M;
elseif z==9
    B13=M;
elseif z==13
    B14=M;
elseif z==17
    B15=M;
elseif z==21
    B16=M;
elseif z==25
    B17=M;
elseif z==29
    B18=M;
elseif z==33
    B19=M;
end
end

%b的第2列生成的B矩阵
for z=1:4:33
m1=zeros(1,4);
m2=zeros(1,4);
u=1;
e=z;
for n=1:4
    m1(u)=b(e,2);
    u=u+1;
    e=e+1;
end
m2(1)=m1(1);
temp=toeplitz(m1,m2);
temp=fliplr(temp);
M=[A;temp];
if z==1
    B21=M;
elseif z==5
    B22=M;
elseif z==9
    B23=M;
elseif z==13
    B24=M;
elseif z==17
    B25=M;
elseif z==21
    B26=M;
elseif z==25
    B27=M;
elseif z==29
    B28=M;
elseif z==33
    B29=M;
end
end
%b的第3列生成的B矩阵
for z=1:4:33
m1=zeros(1,4);
m2=zeros(1,4);
u=1;
e=z;
for n=1:4
    m1(u)=b(e,3);
    u=u+1;
    e=e+1;
end
m2(1)=m1(1);
temp=toeplitz(m1,m2);
temp=fliplr(temp);
M=[A;temp];
if z==1
    B31=M;
elseif z==5
    B32=M;
elseif z==9
    B33=M;
elseif z==13
    B34=M;
elseif z==17
    B35=M;
elseif z==21
    B36=M;
elseif z==25
    B37=M;
elseif z==29
    B38=M;
elseif z==33
    B39=M;
end
end
%b的第4列生成的B矩阵
for z=1:4:33
m1=zeros(1,4);
m2=zeros(1,4);
u=1;
e=z;
for n=1:4
    m1(u)=b(e,4);
    u=u+1;
    e=e+1;
end
m2(1)=m1(1);
temp=toeplitz(m1,m2);
temp=fliplr(temp);
M=[A;temp];
if z==1
    B41=M;
elseif z==5
    B42=M;
elseif z==9
    B43=M;
elseif z==13
    B44=M;
elseif z==17
    B45=M;
elseif z==21
    B46=M;
elseif z==25
    B47=M;
elseif z==29
    B48=M;
elseif z==33
    B49=M;
end
end
%生成C矩阵
C11=A11+B12;    
C12=A12+B13;
C13=A13+B14;
C14=A14+B15;
C15=A15+B16;
C16=A16+B17;
C17=A17+B18;
C18=A18+B19;

C21=A21+B22;    
C22=A22+B23;
C23=A23+B24;
C24=A24+B25;
C25=A25+B26;
C26=A26+B27;
C27=A27+B28;
C28=A28+B29;

C31=A31+B32;    
C32=A32+B33;
C33=A33+B34;
C34=A34+B35;
C35=A35+B36;
C36=A36+B37;
C37=A37+B38;
C38=A38+B39;   

C41=A41+B42;    
C42=A42+B43;
C43=A43+B44;
C44=A44+B45;
C45=A45+B46;
C46=A46+B47;
C47=A47+B48;
C48=A48+B49;
%生成的G矩阵
G1=[C11,C12,C13,C14+B11,C15+A19,C16,C17,C18];
G2=[C21,C22,C23,C24+B21,C25+A29,C26,C27,C28];
G3=[C31,C32,C33,C34+B31,C35+A39,C36,C37,C38];
G4=[C41,C42,C43,C44+B41,C45+A49,C46,C47,C48];
%计算Q矩阵
Q=G1*G1'+G2*G2'+G3*G3'+G4*G4';

%生成代价矩阵
ub=[1,1,1,1,1];
lb=[-1,-1,-1,-1,-1];
%计算h在范数为1的情况下使h'*Q*h为最小情况下的h
x = quadprog(Q,[],[],[],[],[],lb,ub) ;
%计算均方误差
p=0;
for i=1:5
    t=(m(i)-x(i))^2;
    p=p+t;
end
q=0
for i=1:5
    r=m(i)^2;
    q=q+r;
end
aaaa=p/q

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -