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

    clc
clear
close all

a2=-5;  %%45
a3=5;  %%25
a4=15;  %%15
a8=25;  %%55
a9=35;

NN=4;
TT=3;

b=exp(-1i*pi*[0:NN-1]'*sin(a2*pi/180));  % 2 
c=exp(-1i*pi*[0:NN-1]'*sin(a3*pi/180));  % 3
d=exp(-1i*pi*[0:NN-1]'*sin(a4*pi/180));  % 4
h=exp(-1i*pi*[0:NN-1]'*sin(a8*pi/180));  % 8
g=exp(-1i*pi*[0:NN-1]'*sin(a9*pi/180)); 

Ab=kron(eye(TT),b);
Ac=kron(eye(TT),c);
Ad=kron(eye(TT),d);
Ah=kron(eye(TT),h);
Ag=kron(eye(TT),g);


fs=6e6;
dtt=977e-9;
dt=1/fs;

input_file_name_real  = 'e:\realsin.dat'; %色散多径 
input_file_name_img = 'c:\imagsin.dat';

output_file_name_real1 = 'E:\data_real_mmse1_s1.dat';%有色散干扰的第一组数据
output_file_name_real2 = 'E:\data_real_mmse2_s1.dat';
output_file_name_real3 = 'E:\data_real_mmse3_s1.dat';
output_file_name_real4 = 'E:\data_real_mmse4_s1.dat';
output_file_name_real5 = 'E:\data_real_mmse5_s1.dat';
output_file_name_real6 = 'E:\data_real_mmse6_s1.dat';
output_file_name_real7 = 'E:\data_real_mmse7_s1.dat';
output_file_name_real8 = 'E:\data_real_mmse8_s1.dat';

read_fid_real = fopen( input_file_name_real, 'r');
read_fid_img = fopen( input_file_name_img, 'r');

% write the data to file
write_fid_real1 = fopen(output_file_name_real1, 'w' );
write_fid_real2 = fopen(output_file_name_real2, 'w' );
write_fid_real3 = fopen(output_file_name_real3, 'w' );
write_fid_real4 = fopen(output_file_name_real4, 'w' );


write_fid_real5 = fopen(output_file_name_real5, 'w' );
write_fid_real6 = fopen(output_file_name_real6, 'w' );
write_fid_real7 = fopen(output_file_name_real7, 'w' );
write_fid_real8 = fopen(output_file_name_real8, 'w' );

M = NN*TT;
count  = fs*0.01;
datalength=count;
input_buffer_real = zeros(1, count);
input_buffer_img = zeros(1, count);
%%--------自适应----------
num =30;
BlockNo=num; 

RR=zeros(NN*TT,NN*TT);
rgps=[1 1-dt/dtt 1-2*dt/dtt].';
Rsdao=[0 -1/dtt -2/dtt ].';
ggsb=kron(rgps,b);
ggsc=kron(rgps,c);
ggsd=kron(rgps,d);
ggsh=kron(rgps,h);
ggsg=kron(rgps,g);

while (BlockNo~=0)
    for i=1:M  
        [input_buffer_real, count] = fread(read_fid_real, count, 'single');
        [input_buffer_img, count] = fread(read_fid_img, count, 'single');
        Real_channel(i,:) = input_buffer_real.';
        Img_channel(i,:) = input_buffer_img.';       
    end
     Data_channel = Real_channel + 1i*Img_channel;

     if BlockNo == num
           RR=Data_channel(:,1:400)*Data_channel(:,1:400)'/400;
%          
%          niR=inv(RR);
         wmmseb=RR\ggsb;
         wmmsec=RR\ggsc;
         wmmsed=RR\ggsd;
         wmmseh=RR\ggsh;
         wmmseg=RR\ggsg;
     end
         gmmseb=wmmseb'*Ab;
         gmmsec=wmmsec'*Ac;
         gmmsed=wmmsed'*Ad;
         gmmseh=wmmseh'*Ah;
         gmmseg=wmmseh'*Ag;
    
           
           Ym1 = wmmseb'*Data_channel;
           Ym2 = wmmsec'*Data_channel;
           Ym3 = wmmsed'*Data_channel;
           Ym4 = wmmseh'*Data_channel;
           Ym5 = wmmseg'*Data_channel;
           
           ytongtaibmmse=fft(Ym1,datalength);
           htongtaibmmse=fft(gmmseb,datalength);
           Ymmse1=ifft(exp(log(ytongtaibmmse)-log(htongtaibmmse)),datalength);
                          
           ytongtaicmmse=fft(Ym2,datalength);
           htongtaicmmse=fft(gmmsec,datalength);
           Ymmse2=ifft(exp(log(ytongtaicmmse)-log(htongtaicmmse)),datalength);
           
           ytongtaidmmse=fft(Ym3,datalength);
           htongtaidmmse=fft(gmmsed,datalength);
           Ymmse3=ifft(exp(log(ytongtaidmmse)-log(htongtaidmmse)),datalength);
           
           ytongtaihmmse=fft(Ym4,datalength);
           htongtaihmmse=fft(gmmseh,datalength);
           Ymmse4=ifft(exp(log(ytongtaihmmse)-log(htongtaihmmse)),datalength);
           
           ytongtaihjmmse=fft(Ym5,datalength);
           htongtaih6mmse=fft(gmmseg,datalength);
           Ymmse4j=ifft(exp(log(ytongtaihjmmse)-log(htongtaih6mmse)),datalength);
           
%            ytongtaihjmmse=fft(Ym4j,datalength);
%            htongtaih6mmse=fft(gmmseh6,datalength);
%            Ymmse4j=ifft(exp(log(ytongtaihjmmse)-log(htongtaih6mmse)),datalength);
           
%            output_buffer_real5 = real(Ymmse1);
           output_buffer_real5 =output_buffer_real5.*1e4;
%            output_buffer_real6 = real(Ymmse2);
           output_buffer_real6 =output_buffer_real6.*1e4;
%            output_buffer_real7 = real(Ymmse3);
            output_buffer_real7 =output_buffer_real7.*1e4;
%            output_buffer_real8 = real(Ymmse4);
            output_buffer_real8 =output_buffer_real8.*1e4;
%            output_buffer_real8j = real(Ymmse4j); 
            output_buffer_real8j =output_buffer_real8j.*1e4;
           
           [write_count_real1] = fwrite(write_fid_real1, output_buffer_real5, 'int8');
           [write_count_real2] = fwrite(write_fid_real2, output_buffer_real6, 'int8');
           [write_count_real3] = fwrite(write_fid_real3, output_buffer_real7, 'int8');
           [write_count_real4] = fwrite(write_fid_real4, output_buffer_real8, 'int8');
           [write_count_real5] = fwrite(write_fid_real5, output_buffer_real8j, 'int8');  
   
           BlockNo=BlockNo-1
           
end