GPS信号捕获
更新时间:2024-04-03 10:07:01 阅读量: 综合文库 文档下载
GPS课程设计 实验报告(2)
学院 姓名LSC 班级 学号 指导教员
一、试验名称:GPS信号捕获 二、试验目的:
1. 熟悉GPS信号捕获基本概念;
2. 掌握串行搜索算法、并行频率搜索算法和并行码相位搜索捕获算法的基本思想、特点及算法流程;
3. 训练在实际当中分析问题、解决问题的能力。
三、试验内容
1. 编写GPS信号捕获子程序,算法自选。
2. 将实验一最终生成的信号延迟?时间,并加上大小为fD的多普勒频移,使用以上编写的信号捕获子程序对该信号进行捕获。
3. 画出三维捕获结果图(要求至少画出两幅,一幅对应信号成功捕获,一幅对应未捕获到信号)。
四、试验原理
4.1 概述
为了跟踪和解码GPS信号, 首先要捕获到GPS信号。将捕获到的GPS信号的必要参数立刻传递给跟踪过程,再通过跟踪过程便可得到卫星的导航电文。GPS
卫星处于高速运动中,因此,其频率会产生多普勒频移。为覆盖高速卫星预期中的所有多普勒频率范围,捕获方法覆盖的频率范围必须在±10 kHz之内。针对某个特定的卫星信号,捕获过程就是要找到C/A码的起始点,并利用找到的起始点展开C/A码频谱,一旦复现了C/A码的频谱,输出信号将变成连续波(Continuous Wave,CW),于是便得到其载波频率。也就是说,捕获过程就是要获得输入信号的C/A码的起始点和载波频率,然后传递给跟踪过程。
4.2 卫星信号捕获的考虑 4.2.1 捕获时的最大电文长度
C/A码长1 ms,那么至少要用1ms的电文来捕获,甚至只用1 ms的电文来捕获时,都可能发生导航电文相位偏移。因此,为了保证捕获电文中不含有数据偏移,需要用两组连续的电文来捕获,这个电文最大长度是10ms。如果使用两组连续的10 ms电文来捕获,就保证了在某一组电文中不含相位偏移。
限制电文长度的第二个因素是C/A码的多普勒效应。 4.2.2 捕获中的频率步长
捕获时的另一个考虑因素是捕获中剥离载波所需的频率。步进频率的大小与捕获中的电文长度紧密相关。如果输入信号与本地混频信号相距1个周期,它们两者没有相关性;如果两者小于1个周期,则它们有部分相关性。解决信号周期和步进频率问题的一个简单方法是频率相离与电文长度成反向关系。
可得出如下结论:捕获中的操作执行次数与总的数据点并不是成线性比例关系,当电文长度从1 ms上升到10 ms时,电文长度上升10倍,频率点数目也上升了10倍,捕获所需的操作次数上升了不止10倍。因此,实际捕获时,如果强调捕获的速度的话,电文长度需保持在最小值。执行次数的增加,取决于实际捕获所用的方法,下面将讨论具体的捕获方法。
4.3 GPS卫星信号的捕获方法 4.3.1 传统捕获方法
捕获的基本思想就是展开输入信号,找到载波频率。如果相位正确的C/A码与输入信号相乘,输入信号将如图4-1中所示变成一个连续信号。图3-1中最上端是输入信号,这个信号是C/A码编码的射频信号相位。中间的图表示C/A码,其值在±1之间。最下端的图是连续信号,代表输入信号与C/A码的乘积,是一
个连续信号,这个过程有时称做输入信号的C/A码剥离。
图4-1C/A编码的输入信号与本地C/A码相乘
3.3.2 C/A码数值分析
一旦输入变成连续信号,通过傅立叶变换可以知晓其频率。可以设置一个阈值,即一个门限来判断一个频率分量是否足够大。高于这个门限的最高频率分量就是我们要找的频率。
由于输入信号中C/A码的起始点还未知,因此,必须先找到这个点。为了找到这个点,我们产生本地的一个C/A码,将其数字化为5000个点,且与输入信号点对点相乘,对此乘积的结果进行FFT或DFT,可以找到其频率。通过这种方法,可以用时间分辨率为200 ns(1/5 MHz)和1 kHz的频率分辨率找出C/A码的起始点。如果使用10 ms的电文,因为信号只需要卷积1 ms,因此需要5000次操作。每次操作包含50 000个点对点乘积和50 000次FFT,总共有1.25×108(5000×25 000)个输出结果。
五、Matlab代码及实现
5.1 主程序代码:
clc,clear all; % 产生C/A码
G1 = [1,1,1,1,1,1,1,1,1,1]; G2 = [1,1,1,1,1,1,1,1,1,1]; TapArray = [3,7];
CACode = Create_CA_Code(G1,G2,TapArray); % save CA码.matCACode
% figure(1) , plot(1:1023,CACode); % axis([1 1023 0 1]); % title('C/A码');
% step2:产生导航电文
NavigationData = Create_NavigationData(); % save 导航电文.matNavigationData
FirstFrameNavigationData = NavigationData(1:300); % figure(2),plot(1:300,FirstFrameNavigationData); % axis([1 300 0 1]);
% title('导航电文第一子帧的数据'); % 用C/A码来调制导航电文的第一帧
Baseband_Signal = SpreadSpectrum(FirstFrameNavigationData,CACode); % save CA码基带信号.matBaseband_Signal; % figure(3) ,plot(Baseband_Signal); % title('CA码基带信号');
% 调制发射传输CA码基带信号 SNR=-20; %信噪比
IFSignal = IF_BasebandSignal(Baseband_Signal,SNR); save 收到的射频信号.matIFSignal % 捕获C/A码信号 freq_doppler=5e3;
Capture_CACode(IFSignal,CACode,freq_doppler);
5.2子程序代码
5.2.1 C/A码产生(与实验一相同):
function CACode = Create_CA_Code(G1,G2,TapArray) % G1代表当前移位寄存器的状态 % G2代表当前移位寄存器的状态 % TapArray代表G2的抽头数 G1=cast(G1, 'logical'); G2=cast(G2, 'logical'); tap1 = TapArray(1); tap2 = TapArray(2); code=zeros(1,1023); fori=1:1023
temp = xor(G2(tap1), G2(tap1)); %5号卫星,抽头1和9 code(i)=xor(G1(10),temp); temp = xor(G1(3), G1(10)); G1=[temp, G1(1:9)]; temp = xor(G2(2), G2(3)); temp = xor(temp, G2(6)); temp = xor(temp, G2(8)); temp = xor(temp, G2(9)); temp = xor(temp, G2(10)); G2=[temp, G2(1:9)]; end
code=cast(code,'double');
CACode=code;
5.2.2多普勒频移
function IFSignal = IF_BasebandSignal(Baseband_Signal,SNR) F0=2e6; %中频频率为2MHz Fs=5e6; %采样率为5MHz freq_doppler=9e3; %多普勒频偏
code_doppler=freq_doppler*1.023/1575.42; %相应的码偏 Fc = 1.023e6 + code_doppler; %码率
code_phase=1500; %初始码相位 T=5;
N = (Fs / 1e3) * T; %数据长度 code_data=Baseband_Signal(1:1023); code_data=2*code_data-1; index=(code_phase+(1: N))/Fs;
index_code=floor(mod(index*Fc,1023))+1; sample_code=code_data(index_code);
carrier_cos = cos(2*pi*(F0+freq_doppler)*index);
signal_I = (carrier_cos .* sample_code)*sqrt(2*10^(0.1*SNR))+randn(1,N); IFSignal=signal_I; 5.2.3产生导航电文
functionNavigationData = Create_NavigationData()
% 功能:产生一个周期的导航电文数据,长度为1500*25 = 37500bit % 一个周期包含25帧 % 一帧数据长度为1500bit
% 一帧包含5个子帧,每个子帧长度为300bit one_page=randn(1,1500); %一页 one_page(find(one_page>0))=1; one_page(find(one_page<0))=0;
week_number=[1 0 1 0 1 0 1 0 1 0]; %星期数,每页更新一次 one_page(61:70)=week_number; tlm=ones(1,30);
tow=ones(1,17); %TOW,每帧更新一次 how=[tow,zeros(1,13)];
for i=0:4 %一页 one_page(i*300+1:i*300+60)=[tlm,how]; end
for j=0:24 %一个周期 one_period(j*1500+1:j*1500+1500)=one_page; end
NavigationData=one_period; 5.2.4 C/A码捕获:
function CACode = Capture_CACode(IFSignal,CACode,freq_doppler)
N = length(IFSignal);
F0=2e6; %中频频率为2MHz Fs = 5e6; %采样率 FSN = Fs/1e3;
NA = 5; %累积次数 % 生成本地C码
phase_shift=0; %本地码码偏 index=(1: FSN*NA)/Fs;
index_code=floor(mod(index*1.023e6+phase_shift,1023))+1; index_code(find(index_code == 0)) = 1023; local_code = CACode;
local_code=2*local_code-1;
local_code=local_code(index_code); % 捕获
forfindex=1:40
f = (findex - 20)*500;
signal_f = IFSignal(1:FSN*NA) .* exp(j*2*pi*(F0-f)*(1:FSN*NA)/5e6); sat_mat = reshape(signal_f(1:FSN*NA), FSN, NA);
lcode_mat = reshape(local_code(1:FSN*NA), FSN, NA); fs = fft(sat_mat); fl = fft(lcode_mat); mu = conj(fs) .* fl; cr = (ifft(mu))'; i = 1:NA;
accu(findex, :) = sum(abs(cr(i, :))); end
%捕获结果
[aa,bb]=max(accu); [cc,dd]=max(aa); a=cc; b=bb(dd); c=dd;
phase_shift = c - 1 %码相位 freq = -1 * (b - 20) *500 %频偏 CACode = accu; %figure(1)
subplot(211);mesh(CACode);
subplot(212);plot(CACode(b-1,:));
5.3试验截图
正在阅读:
GPS信号捕获04-03
DLT 5210.4-2009 电力建设施工质量验收及评价规程 第4部分:热工仪表及控制装置05-20
2018-2019年初中英语初三中考模拟全真试卷含答案考点及解析06-08
新课标人民音乐出版社小学音乐第十册04-26
中餐烹饪专业论证报告10-14
2018年大连大学医学院827细胞生物学细胞生物学考研冲刺狂背五套题04-27
浆砌片石护坡施工方案06-18
高中的政治教学质量的思考论文04-21
一年级下册生字卡片1至1课生字表及上册生字表整理打印版05-26
引入非财务指标的可持续增长研究03-27
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 捕获
- 信号
- GPS