您现在的位置:首页 >> 通信 >> 内容

m基于matlab的GPS卫星信号捕获和数据解析仿真

时间:2022/12/16 23:17:52 点击:

  核心提示:01_155m,包括程序操作录像+参考文献...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/Y5qVkp9y

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览








3.算法概述

        卫星信号的捕获算法是卫星定位接收机的关键,传统的捕获算法通常采用基于fft的相干积分和非相干积分相结合的方法,例如在使用gps信号进行定位和导航前首先需要对卫星信号进行捕获,gps卫星信号的传统捕获算法一般为频域并行捕获算法,频域并行捕获算法的原理框图如图3所示,频域并行捕获算法是一种基于fft的捕获算法,搜索覆盖全部搜索频点和全部伪码序列,对于正常功率的gps信号,通常只需要处理lms的导航数据,就能够完成gps信号的捕获,但是对于gps弱信号而言,通常处理lms的导航数据所获得的判决量并不可靠,难以实现捕获,此时就需要通过增加捕获算法所用的数据长度,采用相关积分和非相关积分相结合的方法,来提高捕获灵敏度,但同时导致fft相关运算的计算量将成倍增长,从而造成捕获速度降低。

4.部分源码

ttt = 0:1000/(length(Si)-1):1000;

figure;

plot(ttt,Si);

title('Combined Si');

 

figure;

plot(ttt(10000:10200),Si(10000:10200));

title('Combined Si local');

 

%%

%22222222222222222222222222222222222222222222222222

%fine frequency estimation

segment=5;

for a=1:satellitenumber

    for b=1:segment

        output               = acquisition(Si',satellite(a),b);

        correlation(:,a,b)   = output{1};

        correlationpeak(:,a) = output{2};

        frequency(:,a,b)     = output{3};

        finefrequency(a,b)   = output{4};                

    end

    finefrequencyaverage(a)  = mean(finefrequency(a,:));

end

finefrequencyaverage

fIFD

err = finefrequencyaverage-fIFD

X=[fIFD;finefrequencyaverage]';

figure;

bar(X);

axis([0,5,4.0e6,4.2e6]);

legend('Blue:real frequency','Red:fine frequency estimation');

xlabel('4 different satellite');

ylabel('frequency est');

 

 

 

 

%code phase

segment=5;

for a=1:satellitenumber

    Data = [Si]';

    for b=1:segment

        output               = acquisition(Data,satellite(a),b);

        correlation(:,a,b)   = output{1};

        correlationpeak(:,a) = output{2};

        frequency(:,a,b)     = output{3};

        finefrequency(a,b)   = output{4};                

    end

    finefrequencyaverage(a)  = mean(finefrequency(a,:));

end

 

figure;

codephases = [];

for a=1:satellitenumber

    Pdata = correlation(:,a,1);

    subplot(4,1,a);

    plot(Pdata);

    [V,I] = max(Pdata);

    hold on

    plot(I,V,'r*');

    xlabel('times');

    ylabel('correlation');

    title(['satellite',num2str(satellite(a))]);

    codephases = [codephases,I];

end

%code phase of 4 

codephases

taois=codephases*61 

taoi

%%

%3 

for a=1:satellitenumber

    a

    Data = [Si]';

    for c=1:millisecond

        %BASS method.

        %use the same C/A code from BASS to correlate all 1 ms segments one at a time

        cacode(:,a)           = digitizg(n,fs,0,satellite(a)); 

        %fine frequency

        lc(:,a)               = exp(sqrt(-1)*2*pi*finefrequencyaverage(a)*ts*nn);

        lsi(:,a)              = cacode(:,a).*lc(:,a);

        lcf(:,a)              = fft(lsi(:,a));

        xf                    = fft(Data((c-1)*n+1:c*n));

        f(:,a)                = ifft(exp(-sqrt(-1)*2*pi*finefrequencyaverage(a)*ts*(c-1))*xf.* conj(lcf(:,a))); 

        [amp(c,a),ccn(c,a)]   = max(abs(f(:,a)));        

        codephase(c,a)        = angle((f(ccn(c,a),a)));

        correlationphase(c,a) = angle((lsi(ccn(c,a),a)));

    end

    ccnmax(a)   = max(ccn(:,a));

    tmps        = find(ccn(:,a)==ccnmax(a));

    location(a) = tmps(1);

end

 

figure

for a=1:satellitenumber

    subplot(4,1,a);stem(codephase(:,a));title('Correlation result');

end

figure

for a=1:satellitenumber

    subplot(4,1,a);stem(correlationphase(:,a));title('Correlation Phase');

end

figure

for a=1:satellitenumber

    subplot(4,1,a);stem(amp(:,a));title('Correlation Magnitude');

end

 

 

%Fine time estimate

for a=1:satellitenumber

    for tt = 1:millisecond

        cacode(:,a)      = digitizg(n,fs,0,satellite(a)); 

        ffreq            = finefrequencyaverage(a);

        code_phase       = ccn(c,a);

        local_carrier    = exp(1i*2*pi*ffreq*ts*nn); 

        Data_carrier_off = [Data((tt-1)*n+1:tt*n)]'.*local_carrier; 

        

        input_ms_tt      = Data_carrier_off;    

        corrs            = ifft(fft(input_ms_tt).* [conj(fft(cacode(:,a)))]'); 

 

        early            = corrs(code_phase - d_samp);

        late             = corrs(code_phase + d_samp); 

        r(tt,a)            = abs(late)/abs(early); 

        x(tt,a)            = ((1-r(tt,a))*(1-d))/(1+r(tt,a));  

        if mod(tt,10) == 0 

           xx(tt/10,a) = mean(x(tt-9:tt,a));  % Average the past 10 fine time estimates 

        end  

    end

end

 

figure; 

for i=1:satellitenumber

subplot(4,1,i);

stem(xx(:,i)*CHIP_TIME); 

title('Averaged Fine Time Estimates for 10ms segments of data'); 

xlabel('10ms'); 

ylabel('Fine time Est (s)'); 

end

 

figure;

for i=1:satellitenumber

subplot(4,1,i);

stem(x(:,i)*CHIP_TIME); 

title('Fine Time Estimates for 1 ms segments of data'); 

xlabel('1ms '); 

%xlim([0,13]); 

ylabel('Fine time Est (s)'); 

end

%%

%456together

%phase transitions

for sj=1:satellitenumber

    tmps = find(amp(:,sj)>0);

    start(sj) = tmps(1);

    fprintf(['The initial data bits boundary from satellite ',num2str(satellite(sj)),' is : ',num2str(start(sj)),'ms\n\n']);

    Recive_bits(:,sj) = Dout2{sj}(1)*ones(Len*Dur,1);

end

for sj=1:satellitenumber

    %enhance the special point

    corrd = [amp(:,sj)].*[amp(:,sj)].*[amp(:,sj)].*[amp(:,sj)];

    corrd = corrd-min(corrd);

    %find the transitions position

    Count1=0;Count2=0;

    for j = 3:length(corrd)-2

        if corrd(j)>2*corrd(j-1) & corrd(j)>2*corrd(j+1) & corrd(j)>2*corrd(j-2) & corrd(j)>2*corrd(j+2) 

           Count1=Count1+1; 

        end

        if corrd(j)<0.4*corrd(j-1) & corrd(j)<0.4*corrd(j+1) & corrd(j)<0.4*corrd(j-2) & corrd(j)<0.4*corrd(j+2) 

           Count2=Count2+1; 

        end        

    end

    

    if Count1 < Count2

       threshold = 0.4*mean(corrd);

       Pos      = find(corrd<=threshold);

    else

       threshold = 1.5*mean(corrd);

       Pos      = find(corrd>=threshold);

    end

01-155m

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关文章
  • 没有相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168