www.gusucode.com > GPS仿真Matlab编程源码程序 > GPS仿真Matlab编程源码程序/test_gpsArray_final_stap_twomp_three.m

    
% ***** 由单颗卫星数据合成单天线数据(>=4颗),然后生成阵列天线数据,

% *** lanruru 2009.9.23
clc;
clear all; close all;

% 读取数据
fs=5e6;%20e6;
N=fs*0.02;  %
p=1e-6;   % p 为色散多径干扰功率
snr=-20;
jnr1=25; %点频干扰干躁比
jnrm=25; %色散多径干扰干躁比

An=sqrt(p/10^(jnrm/10));
As=An*sqrt(10^(snr/10));
Aj1=An*sqrt(10^(jnr1/10));

tic
for i=1:1850 % 1 s data length,3690 3700
    
   fid=fopen('E:\BJ一朴GPS资料\tag模拟器软件修正版\sv1.dat');
   statusy2=fseek(fid,2*N*(i-1),-1);  % cof or "0"   %%% 0 改为 -1 %%%%%%
   dat1y2=fread(fid,N,'uint16=>single'); % inf: end of the file ; 卫星2
   fclose(fid)
   
   fid=fopen('E:\BJ一朴GPS资料\tag模拟器软件修正版\sv1.dat');
   statusy1=fseek(fid,2*N*(i-1)+2,-1); %%% 0 改为 -1 %%%%%%
   dat1y1=fread(fid,N,'uint16=>single');
   fclose(fid)
   
   fid=fopen('E:\BJ一朴GPS资料\tag模拟器软件修正版\sv1.dat');
   status=fseek(fid,2*N*(i-1)+4,-1);%%% 0 改为 -1 %%%%%%
   dat1=fread(fid,N,'uint16=>single');
   fclose(fid)

   guiyiDat1=(dat1-mean(dat1))/sqrt(var(dat1));
   guiyiDat1y1= (dat1y1-mean(dat1y1))/sqrt(var(dat1y1));
   guiyiDat1y2= (dat1y2-mean(dat1y2))/sqrt(var(dat1y2));
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   fid=fopen('E:\BJ一朴GPS资料\tag模拟器软件修正版\sv14.dat');
   statusy2=fseek(fid,2*N*(i-1),-1) ; % cof or "0"%%% 0 改为 -1 %%%%%%
   dat14y2=fread(fid,N,'uint16=>single'); % inf: end of the file ; 卫星3
   fclose(fid)
   
   fid=fopen('E:\BJ一朴GPS资料\tag模拟器软件修正版\sv14.dat');
   statusy1=fseek(fid,2*N*(i-1)+2,-1);%%% 0 改为 -1 %%%%%%
   dat14y1=fread(fid,N,'uint16=>single');
   fclose(fid)
   
   fid=fopen('E:\BJ一朴GPS资料\tag模拟器软件修正版\sv14.dat');
   status=fseek(fid,2*N*(i-1)+4,-1);%%% 0 改为 -1 %%%%%%
   dat14=fread(fid,N,'uint16=>single');
   fclose(fid)
   
   guiyiDat14=(dat14-mean(dat14))/sqrt(var(dat14));
   guiyiDat14y1= (dat14y1-mean(dat14y1))/sqrt(var(dat14y1));
   guiyiDat14y2= (dat14y2-mean(dat14y2))/sqrt(var(dat14y2));
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   fid=fopen('E:\BJ一朴GPS资料\tag模拟器软件修正版\sv20.dat');
   statusy2=fseek(fid,2*N*(i-1),-1)  % cof or "0"
   dat20y2=fread(fid,N,'uint16=>single'); % inf: end of the file ; 卫星4
   fclose(fid)
   
   fid=fopen('E:\BJ一朴GPS资料\tag模拟器软件修正版\sv20.dat');
   statusy1=fseek(fid,2*N*(i-1)+2,-1);
   dat20y1=fread(fid,N,'uint16=>single');
   fclose(fid)
   
   fid=fopen('E:\BJ一朴GPS资料\tag模拟器软件修正版\sv20.dat');
   status=fseek(fid,2*N*(i-1)+4,-1);
   dat20=fread(fid,N,'uint16=>single');
   fclose(fid)
   
   guiyiDat20=(dat20-mean(dat20))/sqrt(var(dat20));
   guiyiDat20y1= (dat20y1-mean(dat20y1))/sqrt(var(dat20y1));
   guiyiDat20y2= (dat20y2-mean(dat20y2))/sqrt(var(dat20y2));
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   fid=fopen('E:\BJ一朴GPS资料\tag模拟器软件修正版\sv25.dat');
   statusy2=fseek(fid,2*N*(i-1),-1);  % cof or "0"
   dat25y2=fread(fid,N,'uint16=>single'); %  卫星8
   fclose(fid)
   
   fid=fopen('E:\BJ一朴GPS资料\tag模拟器软件修正版\sv25.dat');
   statusy1=fseek(fid,2*N*(i-1)+2,-1);%延迟信号
   dat25y1=fread(fid,N,'uint16=>single');
   fclose(fid)
   
   fid=fopen('E:\BJ一朴GPS资料\tag模拟器软件修正版\sv25.dat');
   status=fseek(fid,2*N*(i-1)+4,-1);%延迟信号
   dat25=fread(fid,N,'uint16=>single');
   fclose(fid)
     
   guiyiDat25=(dat25-mean(dat25))/sqrt(var(dat25));
   guiyiDat25y1= (dat25y1-mean(dat25y1))/sqrt(var(dat25y1));
   guiyiDat25y2= (dat25y2-mean(dat25y2))/sqrt(var(dat25y2));
   
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   fid=fopen('E:\BJ一朴GPS资料\tag模拟器软件修正版\sv6.dat');
   statusy2=fseek(fid,2*N*(i-1),-1);  % cof or "0"
   dat6y2=fread(fid,N,'uint16=>single'); 
   fclose(fid)
   
   fid=fopen('E:\BJ一朴GPS资料\tag模拟器软件修正版\sv6.dat');
   statusy1=fseek(fid,2*N*(i-1)+2,-1);%延迟信号
   dat6y1=fread(fid,N,'uint16=>single');
   fclose(fid)
   
   fid=fopen('E:\BJ一朴GPS资料\tag模拟器软件修正版\sv6.dat');
   status=fseek(fid,2*N*(i-1)+4,-1);%延迟信号
   dat6=fread(fid,N,'uint16=>single');
   fclose(fid)
     
   guiyiDat6=(dat6-mean(dat6))/sqrt(var(dat6));
   guiyiDat6y1= (dat6y1-mean(dat6y1))/sqrt(var(dat6y1));
   guiyiDat6y2= (dat6y2-mean(dat6y2))/sqrt(var(dat6y2));
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   
   fc=0.75e6;%4.309e6;
   dt=1/fs;%50ns
   t=(0:N-1)*dt;
   s_jamy2=exp(1i*2*pi*fc*t)';%sin(2*pi*fc*t)';
   guiyiJamy2=(s_jamy2-mean(s_jamy2))/sqrt(var(s_jamy2));
   %%%j1的延迟
   t=(1:N)*dt;
   s_jamy1=exp(1i*2*pi*fc*t)';%sin(2*pi*fc*t)';
   guiyiJamy1=(s_jamy1-mean(s_jamy1))/sqrt(var(s_jamy1));
   %%%j1的延迟
   t=(2:N+1)*dt;
   s_jam=exp(1i*2*pi*fc*t)';%sin(2*pi*fc*t)';
   guiyiJam=(s_jam-mean(s_jam))/sqrt(var(s_jam));
   
   ssj2=[Aj1*guiyiJam';Aj1*guiyiJamy1';Aj1*guiyiJamy2'];
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   MM=4;  %天线数
   TT=3;   %抽头数
   fs=5e6;  %采样率
   Ndian=fs*0.02;  %采样点数 20ms长度
   f0=0.55e6;  %中频
   fdelt=2e6;  %频偏 带宽
   thetaj=-70/180*pi;  %直射干扰角度 
   thetajmp=85/180*pi; %干扰多径角度 
   thetajmp2=70/180*pi;  
   
   d=0.5;  %阵元间距
   lambda=0.1904; %波长 L1波段
   tao=200e-9;   %%100*10^-9; %时延
   omiga=2*pi*f0;   %中心角频率
   deltomega=2*pi*fdelt;  %角频率偏移
   % taoi= lambda/2*sin(thetaj)/3e8;    %天线间延迟时间
   delaymp=150e-9; %60ns的多径时延
   delaymp2=400e-9;
   delaymp_=delaymp2-delaymp;
   
      
   alpha=0.88; %多径衰减系数
   alpha2=0.68;
    
   D =[0:1:MM-1];
   aj=exp(-1i*pi*D*sin(thetaj)).';
   ajmp=exp(-1i*pi*D*sin(thetajmp)).';
   ajmp2=exp(-1i*pi*D*sin(thetajmp2)).';
   %%%%%%%%%%%%%%%  色散多径产生  %%%%%%%%%%%%%
   
   taoT=[0 tao 2*tao;
       -tao 0 tao;
       -2*tao -tao 0];
   rT=sinc(deltomega.*taoT./2).*exp(1i.*omiga.*taoT);
   
   taot=[delaymp delaymp+tao delaymp+2*tao;
       delaymp-tao delaymp delaymp+tao;
       delaymp-2*tao delaymp-tao delaymp];
   rmp=sinc(deltomega.*taot./2).*exp(1i.*omiga.*taot);
   
   taot2=[delaymp delaymp-tao delaymp-2*tao;
       delaymp+tao delaymp delaymp-tao;
       delaymp+2*tao delaymp+tao delaymp];   
   rmp2=sinc(deltomega.*taot2./2).*exp(1i.*omiga.*taot2);
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   taot_m2=[delaymp2 delaymp2+tao delaymp2+2*tao;
            delaymp2-tao delaymp2 delaymp2+tao;
            delaymp2-2*tao delaymp2-tao delaymp2];
   rmp_m2=sinc(deltomega.*taot_m2./2).*exp(1i.*omiga.*taot_m2);
   
   taot2_m2=[delaymp2 delaymp2-tao delaymp2-2*tao;
             delaymp2+tao delaymp2 delaymp2-tao;
             delaymp2+2*tao delaymp2+tao delaymp2];
   rmp2_m2=sinc(deltomega.*taot2_m2./2).*exp(1i.*omiga.*taot2_m2);
   %%%%%%%%%%%%%%%%%%%%%%%%
   taot_m_=[delaymp_ delaymp_+tao delaymp_+2*tao;
           delaymp_-tao delaymp_ delaymp_+tao;
           delaymp_-2*tao delaymp_-tao delaymp_];
   rmp_m_=sinc(deltomega.*taot_m_./2).*exp(1i.*omiga.*taot_m_);
   
   taot2_m_=[delaymp_ delaymp_-tao delaymp_-2*tao;
             delaymp_+tao delaymp_ delaymp_-tao;
             delaymp_+2*tao delaymp_+tao delaymp_ ];
   rmp2_m_=sinc(deltomega.*taot2_m_./2).*exp(1i.*omiga.*taot2_m_);
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   
%    for i=1:TT
%     for j=1:TT
%        rtao(:,:,i,j)=p*[aj ajmp]*[rT(i,j) alpha*conj(rmp2(i,j));conj(alpha)*rmp(i,j) abs(alpha^2)*rT(i,j)]*[aj ajmp]';%归一化后再乘p
%     end
%    end
   for i=1:TT
    for j=1:TT
       rtao(:,:,i,j)=p*[aj ajmp ajmp2]*[rT(i,j) alpha*conj(rmp2(i,j)) alpha2*conj(rmp2_m2(i,j));conj(alpha)*rmp(i,j) abs(alpha^2)*rT(i,j) conj(alpha)*alpha2*conj(rmp2_m_(i,j));conj(alpha2)*rmp_m2(i,j) conj(alpha2)*alpha*rmp_m_(i,j) abs(alpha2^2)*rT(i,j)]*[aj ajmp ajmp2]';%归一化后再乘p
    end
   end
   
   
   R_TT=[rtao(:,:,1,1) rtao(:,:,1,2) rtao(:,:,1,3);
       rtao(:,:,2,1) rtao(:,:,2,2) rtao(:,:,2,3);
       rtao(:,:,3,1) rtao(:,:,3,2) rtao(:,:,3,3)];
     
   R0=rtao(:,:,1,1);
   RL=[rtao(:,:,1,1) rtao(:,:,1,2);
       rtao(:,:,2,1) rtao(:,:,2,2)];
   
   Rvec=[rtao(:,:,1,2) rtao(:,:,1,3)];
   
   Bvec=p*Rvec/RL; 
%    C=(R0-Bvec*Rvec')/p;
   Wvec=[eye(MM) -Bvec(:,1:MM) -Bvec(:,MM+1:2*MM)];%%%%%%%%随天线数变
   C=Wvec*R_TT*Wvec';
   A0=cholsky(C,MM);
   
   disjammer=zeros(MM,Ndian);
   randn('state',0);
   disnoise=randn(MM,Ndian+TT-1);%sqrt(p)*
   uu=disnoise(:,1:TT-1);
   uu=reshape(uu,MM*(TT-1),1);
   
   %初始化
   disjammer0=cholsky(RL,MM*(TT-1))*uu;
   for kk=1:TT-1
       disjammer(:,kk)=disjammer0((kk-1)*MM+1:(kk-1)*MM+MM);
   end
   
   %迭代产生
   for i=TT:Ndian+TT-1
       disjammer(:,i)=Bvec*[disjammer(:,i-1);disjammer(:,i-2)]+A0*disnoise(:,i);
   end
   sjammer=[disjammer(:,3:Ndian+2);disjammer(:,2:Ndian+1);disjammer(:,1:Ndian)];
   
    
  
   ss1=[As*guiyiDat1';As*guiyiDat1y1';As*guiyiDat1y2'];
   ss14=[As*guiyiDat14';As*guiyiDat14y1';As*guiyiDat14y2'];
   ss20=[As*guiyiDat20';As*guiyiDat20y1';As*guiyiDat20y2'];
   ss25=[As*guiyiDat25';As*guiyiDat25y1';As*guiyiDat25y2'];
   ss6=[As*guiyiDat6';As*guiyiDat6y1';As*guiyiDat6y2'];
    
   a1=-25;
   a2=-5;
   a3=5;
   a4=15;
   a6=30;
   
   
   a102=-60;
   
   aa=exp(-1i*pi*[0:MM-1]'*sin(a1*pi/180)); 
   bb=exp(-1i*pi*[0:MM-1]'*sin(a2*pi/180));  
   cc=exp(-1i*pi*[0:MM-1]'*sin(a3*pi/180));  
   dd=exp(-1i*pi*[0:MM-1]'*sin(a4*pi/180));  
   ff=exp(-1i*pi*[0:MM-1]'*sin(a6*pi/180));  
   
   doa_J2=exp(-1i*pi*[0:MM-1]'*sin(a102*pi/180)); 
   
   Aa=kron(eye(3),aa);
   Ab=kron(eye(3),bb);
   Ac=kron(eye(3),cc);
   Ad=kron(eye(3),dd);
   Af=kron(eye(3),ff);
   
  
   Aj2=kron(eye(TT),doa_J2);   
   
   randn('state',134);
   Noise=An/sqrt(2)*randn(MM*TT,N)+1i*An/sqrt(2)*randn(MM*TT,N);
   x=Aa*ss1+Ab*ss14+Ac*ss20+Ad*ss25+Af*ss6+Noise+sjammer+Aj2*ssj2;
   
%    figure;set(gcf, 'color', 'white');
%    plot(abs(fft(x(1,1:5000))))
%   
% %    Rxj=x*x'/400;
%    Rxj=x(:,1:40000)*x(:,1:40000)'/400;
%    rank2= sort((eig(Rxj)), 'descend');
%    figure;set(gcf, 'color', 'white');
%    plot(1:MM*TT,10*log10(rank2),'Linewidth',1.0);
%    xlabel('特征值分布');

   fid=fopen('E:\BJ一朴GPS资料\realD4_snr20.dat','a');   % 列优先存!!!w改成a
   count=fwrite(fid,x.','single');                      
   fclose(fid)
   
   fid=fopen('E:\BJ一朴GPS资料\imagD4_snr20.dat','a');
   count=fwrite(fid,imag(x.'),'single');           % 虚部 w改成a
   fclose(fid)
     
end
toc