0
点赞
收藏
分享

微信扫一扫

【GPS识别】低信噪比环境下GPS信号识别的MATLAB仿真

1.软件版本

MATLAB2021a

2.本算法理论知识

      如图GPS系统的星座部分是由21颗工作卫星和3颗在轨备用卫星组成,其高度为20183km,这24颗卫星均匀分布在6个等间隔的、相对轨道面倾角为55º的近圆轨道上。

1 GPS卫星星座空间部分

     GPS卫星的轨道周期为半个恒星日,即11小时58分钟。从地球质心到卫星的额定距离为26600km,即轨道半径。每颗GPS工作卫星都发射用于导航定位的信号,然后GPS用户利用这些信号来进行工作的。这样的空间布局,可以保证在地球上的任意点、任意时刻均可同时观测到至少4颗卫星,最多时可以见到11颗,从而为全球用户提供24小时的导航定位功能。 当接收到的为10ms的电文,由于在进行卷积运算的时候,我们需要的电文长度为1ms,即只需要卷积1ms,此外,由于将每个信号数字化为5000点,故需要5000次操作。因此,对于10ms的电文,每次操作需要进行50000个乘积操作和50000次的FFT变换。在20Khz的范围内,只需要201个频率分量,那么需要从计算得到的1.005*10^6个计算结果中进行挑选。所以,当电文长度从1ms变为10ms的时候,计算量的增长是非常明显的。寻找其C/A码的起点位置的时间分辨率为200ns,其基本结构如图所示。

C/A码和通过傅里叶变换频率分析进行捕获

3.部分核心代码

clc;
clear;
close all;

%% step1:参数初始化
snr           = -7;                %信噪比
LEN           = 12000;            %仿真长度
fs            = 11.999e6;         %采样频率
ts            = 1/fs;             %采样周期
n             = fs/1000;	 
nn            = [0:n-1];	    
fc            = 3.563e6;	      %中心频率
fdelta        = 0;                %多普勒频偏
svnum         = 1;                %卫星数目
N             = 4                 %分段数
Nstep         = 20;               %搜索次数


%% step2:CA码的产生
load gold1.mat;
code=double(code(1,:));
figure;
plot(code,'r-*');
axis([0,length(code),-1.2*max(code),1.2*max(code)]);
title('采样化后的 CA 码');
%相关性
Xcor_code = xcorr(code,code);
figure
plot(Xcor_code,'b-o');
axis([0,length(Xcor_code),0,1.2*max(Xcor_code)]);


%% step3:GPS中频信号
load data.mat
x=double(data');
figure;
plot(x,'r-*');
axis([0,length(x),-1.2*max(x),1.2*max(x)]);
x2 = [x x x x x x x x x x];
%发送四段连续的信号;
LENS = length(x2);
s=0:LENS-1;
y=x2.*exp(j*2*pi*(fc+fdelta)/fs*s);

y=awgn(y,snr);



%% step4:GPS信号的捕获 分成4段捕获
CA_fre = conj(fft(code));
L2     = length(y)/N;

y1 = y(1:11999);
y2 = y(12000:23998);
y3 = y(23999:35997);
y4 = y(35998:47996);
y5 = y(47997:59995);
y6 = y(59996:71994);
y7 = y(71995:83993);
y8 = y(83994:95992);
y9 = y(95993:107991);
y10= y(107992:119990);


 
  ys1 = y1+y2+y3+y4;       


for i=1:2*Nstep+1
      fc(i)       = 0.0005e6*(i-Nstep-1); %搜索频率    
      expfreq     = exp(j*2*pi*fc(i)*ts*nn);
      Data_sin    = imag(expfreq);		
      Data_cos    = real(expfreq);
      I           = Data_sin.*ys1;
      Q           = Data_cos.*ys1;
 
      IQfreq      = fft(I+j*Q);  
 
      convIQ      = IQfreq .* CA_fre;
      peaks(i,:)  = abs(ifft(convIQ)).^2;
end

[value_peak codephases]=max(max(peaks));
[value_peak frequencys]=max(max(peaks'));
frequency = fc(frequencys);%中心频率;
codephaseChips = round(1023 - (codephases/11999)*1023);%CA码相位
frequency
codephaseChips


close all;
figure
plot(peaks(frequencys,:),'r-*');
grid on
xlabel('频率');
ylabel('幅度');
%% step5:三围搜索结构
gold_rate = 1.023e6;			
ts=1/fs;
tc=1/gold_rate;
b=[1:n];
c=ceil((ts*b)/tc);


 

4.操作步骤与仿真结论

 

 5.参考文献

[1]李健, 刘峰, 龙腾. 低信噪比下GPS信号P码直接捕获技术[J]. 北京理工大学学报, 2009, 29(1):5.A01-36

举报

相关推荐

0 条评论