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