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

📄 simulation.m

📁 利用自己仿真产生的卫星数据
💻 M
字号:
tic
clear all;clc;

global datainf;

global fs
global fca;
global IF;
global num;
global datanum;

fs=16367667
ts=1/fs;
IF=20491635; 
fo=IF-1*fs; 
time=1;
datanum=fix(fs/1000);
num=[0:datanum-1];
data=signal(IF,2972,3,2760);
data1=[data data*(-1) data*(-1) data data data*(-1) data data*(-1) data*(-1) data data data*(-1) data data*(-1) data data*(-1) data*(-1) data data data*(-1)];
data=signal(IF,1872,10,2360);
data2=[data*(-1) data data*(-1) data*(-1) data data data*(-1) data data*(-1) data*(-1) data data data data*(-1) data data*(-1) data*(-1) data data data*(-1)];
data=signal(IF,3972,11,-4760);
data3=[data data data*(-1) data data*(-1) data data data data*(-1) data data*(-1) data data data*(-1) data data*(-1) data*(-1) data data data*(-1)];
data=signal(IF,5172,25,4960);
data4=[data -data data -data data -data data -data data -data data -data data data*(-1) data data*(-1) data*(-1) data data data*(-1)];
data=signal(IF,6197,28,3760);
data5=[-data data -data -data data -data -data data -data -data data -data data data*(-1) data data*(-1) data*(-1) data data data*(-1)];
data=signal(IF,8192,30,-4960);
data6=[data data data data data data data data data data data data data data*(-1) data data*(-1) data*(-1) data data data*(-1)];
%data=data1+data2+data3+data4+data5+data6;
data=data1+data2+data3+data4+data5+data6+(rand(1,400*datanum)-0.5)*18;

Dopler=[2760 2360 -4760 4960 3760 -4960]; 
CAshift=[2972 1872 3972 5172 6197 8192];
channel=struct('satelliteID',0,...       %定义通道结构:卫星号,捕获频率,多普勒频移,码相位等信息
    'Acqfrequence',0,...
    'RealDoppler',0,...
    'Doppler1',0,...
    'Doppler2',0,...
    'Doppler3',0,...
    'AcqCAphase',0,...
    'RealPhase',0,...
    'maxAmp',0,...
    'status','0');
channel=[channel channel channel channel channel channel channel channel channel channel channel channel];
acqdata=data(1:datanum);
facqdata=fft(acqdata);
maxno=21;
maxno1=5;
k=0;
out=zeros(maxno,datanum);
for svID=3,
    fprintf('.');
    CAsample=sampleCAcode(svID,fs,time); %**按照卫星号,采样频率,和采样时间采样指定的CA码
    CAsample2=[CAsample CAsample];
    fca=fft(CAsample); 
    for fideta=1:1:21,                                  %**fideta是多普勒频移
        fi(fideta)=fo-10*1000+(fideta-1)*1000;
        carrier=exp(j*2*pi*fi(fideta)*num*ts);
        cosine= real(carrier);                                %本地信号
        sine  =imag(carrier);                                %本地信号相移90°
        I =acqdata.*cosine;   %信号也分了两相
        Q =acqdata.*sine;
        fiq=fft(I+Q*j);%此后的fft
        out(fideta,:)=abs(ifft( (fca.* conj(fiq)))).^2;      %做相关 Out是21*16367矩阵,行是频率,列代表码相位
    end
      
        [maxAmp(svID) freqshiftNo]=max(max(out'));          %每颗星的21个偏移频率中产生最大相关值的那个偏移频率值
        [maxAmp(svID) startpointNo]     =max(max(out ));    %每颗星的信号的8184 个频率点,在同21个频率做完相关后,能产生最大的相关值的那个起始位置点
        temp=out(freqshiftNo,:);
        temp(startpointNo-2:startpointNo+2)=[];
        
        
        if maxAmp(svID)/mean(temp)>37, 
            CAsample1=[CAsample(startpointNo:datanum) CAsample(1:startpointNo-1)];
            dopshift1=(freqshiftNo-1)-fix(maxno/2);
            fic=fo+dopshift1*1000;    
            stripcode=CAsample1.*acqdata;
            
            for counter=1:1:maxno1,      %-1000到1000的多普勒频移,精度为50hz
                dopshift=(counter-1)-fix(maxno1/2);
                fi=fic+dopshift*400;    %加多普勒偏移后的频率
                carrier=exp(j*2*pi*fi*num*ts);
                cosine= real(carrier);
                sine   =imag(carrier);
                I   =stripcode.*cosine;   %信号也分了两相
                Q =stripcode.*sine;
                squaresum(counter)=sum(I').^2+sum(Q').^2;
            end
            [maxAmp1 dopno]=max(squaresum);%dopno为最大的哪个频移
            k=k+1;
            channel(k).satelliteID=svID;
            channel(k).Acqfrequence=fic+((dopno-1)-fix(maxno/2))*400;
            channel(k).RealDoppler=Dopler(k);
            channel(k).RealPhase=CAshift(k);
            channel(k).Doppler1=dopshift1*1000;
            channel(k).Doppler2=((dopno-1)-fix(maxno1/2))*400+dopshift1*1000;
            channel(k).AcqCAphase=startpointNo;
            channel(k).maxAmp=maxAmp(svID);
            channel(k).maxAmpN=maxAmp1;
            
             fr=fic+((dopno-1)-fix(maxno1/2))*400;
        inputdata=data(1:8*datanum);
        CAsample10=[CAsample1 CAsample1 CAsample1 CAsample1 CAsample1 CAsample1 CAsample1 CAsample1];
        dfreq=finefrequency(CAsample10,fr,inputdata,8,k);
        accuratefreq=fr-dfreq;
        channel(k).Doppler3=channel(k).Doppler2-dfreq;
        channel(k).accuratefreq=accuratefreq;
      
        trackdata=data(9*datanum+1:10*datanum);
         %CAsample=sampleCAcode(svID,fs,time); %**按照卫星号,采样频率,和采样时间采样指定的CA码
         %CAsample2=[CAsample CAsample];
        CAsample1=CAsample2(CAshift(k):datanum+CAshift(k)-1);
        for counter=1:19,
            if counter<9,
                CAsampleP=[CAsample1(datanum-9+counter:datanum) CAsample1(1:datanum-10+counter)];
            elseif counter==9,
                CAsampleP=CAsample1;
            else
                CAsampleP=[CAsampleP(counter-9+1:datanum) CAsampleP(1:counter-9)];
            end
            CAsampleL=[CAsampleP(9:16367) CAsampleP(1:8)];
            CAsampleE=[CAsampleP(16360:16367) CAsampleP(1:16359)];
            carrier=exp(j*2*pi*fr*num*ts);
            cosine=real(carrier);
            sine  =imag(carrier);
            trackdataI=cosine.*trackdata;
            trackdataQ=sine.*trackdata;
            
           % stripcodeP=trackdata.*CAsampleP;
           % stripcodeE=trackdata.*CAsampleE;
           %  stripcodeL=trackdata.*CAsampleL;
            IP(counter)=sum(trackdataI.*CAsampleP);
            QP(counter)=sum(trackdataQ.*CAsampleP);
            IE(counter)=sum(trackdataI.*CAsampleE);
            QE(counter)=sum(trackdataQ.*CAsampleE);
            IL(counter)=sum(trackdataI.*CAsampleL);
            QL(counter)=sum(trackdataQ.*CAsampleL);
            D(counter)=((IE(counter)^2+QE(counter)^2)^0.5-(IL(counter)^2+QL(counter)^2)^0.5)/((IE(counter)^2+QE(counter)^2)^0.5+(IL(counter)^2+QL(counter)^2)^0.5);
           % D(counter)=(IE(counter)^2+QE(counter)^2)-(IL(counter)^2+QL(counter)^2);
           %D(counter)=(IE(counter)-IL(counter))*IP(counter)-(QE(counter)-QL(counter))*QP(counter);
            %n=fix(16*D(counter+1));
            %CAsample3=[CAsampleP CAsampleP CAsampleP];
            %CAsampleP=CAsample3(datanum+n:2*datanum+n-1);
           
        end
        regc(k)=min(abs(D));
        h=figure;
        subplot(4,1,1);
        plot(IP.^2+QP.^2);
        title('Present Code');
        subplot(4,1,2);
        plot(IE.^2+QE.^2);
        title('Early Code');
        subplot(4,1,3);
        plot(IL.^2+QL.^2);
        title('Late Code');
        subplot(4,1,4);
        stairs(D);
        title('D');
      % fr=fo+Dopler(k)+(-1)^k*20; 
       fr=fo+Dopler(k);
       %CAsample1=[CAsample1(3:16367) CAsample1(1:2)];
       for counter=1:395,
           trackdata=data((counter-1)*datanum+1:counter*datanum);
           carrier=exp(j*2*pi*fr*num*ts);
           cosine=real(carrier);
           sine  =imag(carrier);
           trackdataI=cosine.*trackdata;
           trackdataQ=sine.*trackdata;
           IP(counter)=sum(trackdataI.*CAsample1);
           QP(counter)=sum(trackdataQ.*CAsample1); 
       end
      h=figure;
      subplot(2,1,1);
      plot(IP);
      subplot(2,1,2);
      plot(QP);  
   end 
end
         
  
fprintf('\n');
h=figure;
stem (maxAmp, 'DisplayName', 'maxAmp', 'YDataSource', 'maxAmp');
%D=[-0.9818 -0.9874 -0.9892 -0.9930 -0.9937 -0.9942 -0.9960 -0.9963 -0.9974 -0.9831 -0.9471 -0.8755 -0.7677 -0.6048 -0.4053 -0.1530 0.1085 0.3506 0.5727 0.7409 0.8681 0.9395]

⌨️ 快捷键说明

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