【GPS识别】低信噪比环境下GPS信号识别的MATLAB仿真
原创
©著作权归作者所有:来自51CTO博客作者fpga和matlab的原创作品,请联系作者获取转载授权,否则将追究法律责任
1.软件版本
MATLAB2021a
2.本算法理论知识
如图GPS系统的星座部分是由21颗工作卫星和3颗在轨备用卫星组成,其高度为20183km,这24颗卫星均匀分布在6个等间隔的、相对轨道面倾角为55º的近圆轨道上。

图1 GPS卫星星座空间部分
当接收到的为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