m低信噪比下GPS信号的捕获算法研究,使用matlab算法进行仿真

news2025/1/10 23:44:49

目录

1.算法概述

2.仿真效果预览

3.MATLAB部分代码预览

4.完整MATLAB程序


1.算法概述


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

       GPS卫星的轨道周期为半个恒星日,即11小时58分钟。从地球质心到卫星的额定距离为26600km,即轨道半径。每颗GPS工作卫星都发射用于导航定位的信号,然后GPS用户利用这些信号来进行工作的。这样的空间布局,可以保证在地球上的任意点、任意时刻均可同时观测到至少4颗卫星,最多时可以见到11颗,从而为全球用户提供24小时的导航定位功能。

      GPS卫星发送的信号一般由3个分量组成:载波信号、伪码和导航电文。其中伪码和导航电文采用BPSK技术去调制载波。每个卫星数据代码中使用模2加法叠加在C/A和P码上,再调制到L1、L2载波上。正如已经提到的,载波信号涵盖L1载波和L2载波,所以测距码信号包括叠加在L2载波上的P码和L1载波上的P码、C/A。所有信号都是通过同一个基本频率的控制下产生的,如图3所示。

  

       从图3可知,L1载波调制有P码、C/A码和数据码。而在L2载波上当前只有数据码和调制P码。拟议中的L5载波(第二民用频率)将会选择同时加载P码和C/A码,预计它的频率将会达到f5=115*f0=1175.45MHz,波长为=25.48cm。无论数据码还是测距码,是通过相位调制高频载波。也就是说,当代码值(调制信号)从1到0,或从0到1,会使载波相位变化180度。调制以后的卫星信号向用户播放是通过卫星发射天线。接收机的主要工作是重建载波来提取导航电文。信号解调中常用的2种方法:平方解调技术和复制代码相关技术。

       GPS卫星所发播的信号包括载波信号(L1和L2)、测距信号(包括C/A码和P码)和导航信号(或称D码元)。其中测距信号是一种伪随机噪声码(PRN) 。

       GPS使用的两个L波段两种载频:   

选择L波段的好处是:

(1)减少拥挤,防止“撞车“现象发生。目前L波段的频率占用率要低于其他波段,对全球性的导航定位测量非常有利。

(2)自适应扩频,传输宽带信号。卫星扩频传输卫星导航电文,高频率约为20兆赫兹,在占用率较低的带宽。

 (3)大气衰减较小,对研制用户设备有利。GPS卫星采用的是L波段,避免了大气的谐振吸收,衰减较小,而且电离层延迟的影响小,有利于接收设备测量GPS信号。

      而在接收端,其结构如图1所示,它是利用前段射频硬件的采集模板将 GPS信号采集转化成中频数字信号再进行后续信号处理,从而得到信号定位等相关信息。软件接收机的实现由前段射频模块的质量和性能去决定。

 

        软件接收机主要是由两个模块组成:信号数据处理软件模块和前端信号采集硬件电路模块。软件模块细分为捕获与跟踪,星历解码与PVT估计。软件接收机系统的主线是GPS数据流的处理过程,前端以数据采集为主,在后端的设计集中于信号处理的软件编程与实现,因此,在可以采集准确的GPS数据的前提下,后端设计为软件接收机给予了很大的灵活性,为新算法的验证评估和测试提供一个有效的、便捷的服务平台。硬件模块细分则为天线,A/D转换模块,降频模块,数据采集存贮模块和串并行模块。

        通常情况下,由于输入信号的C/A码的起始位置是未知的,所以在进行捕获之前,波形实现产生一个伪随机码,这里假设将接收到的模拟信号数字化为5000个点,然后与输入的信号在数字域进行相乘,将相乘得到的结果进行快速傅里叶变换,从而得到其频率。通过上一节的讨论,FFT之后的频率分量为前半部分的2500个频率分量,将输出的频率分量的幅度与设置的门限值进行比较,如果幅度值大于门限值,那么该频率分量就是所需要的期望值。通过这种算法,就能够得到之前所说的起始点位置。

2.仿真效果预览

matlab2022a仿真

 

3.MATLAB部分代码预览

.........................................................................
%% 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;       
% ys2 = y1+y2+y3+y4+y5+y6+y7+y8+y9-y10; 
% ys3 = y1+y2+y3+y4+y5+y6+y7+y8-y9-y10;       
% ys4 = y1+y2+y3+y4+y5+y6+y7-y8-y9-y10; 
% ys5 = y1+y2+y3+y4+y5+y6-y7-y8-y9-y10;       
% ys6 = y1+y2+y3+y4+y5-y6-y7-y8-y9-y10; 
% ys7 = y1+y2+y3+y4-y5-y6-y7-y8-y9-y10;       
% ys8 = y1+y2+y3-y4-y5-y6-y7-y8-y9-y10; 
% ys9 = y1+y2-y3-y4-y5-y6-y7-y8-y9-y10;       
% ys10= y1-y2-y3-y4-y5-y6-y7-y8-y9-y10; 

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);
01_036_m
 

4.完整MATLAB程序

matlab源码说明_我爱C编程的博客-CSDN博客

V

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21561.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

处理csv、bmp等常用数据分析操作--python

请先看思维导图,看是否包含你所需要的东西,如果没有,就可以划走了,免得浪费时间,谢谢 条条大路通罗马,我只是介绍了我掌握的这一条,不喜勿喷,谢谢。 目录 一、创建文件夹&#xff0…

一行日志,让整个文件导出服务导出内容都为空..

输出一行日志&#xff0c;却让整个文件上传服务挂了...问题分析小结问题 直接上代码&#xff0c;看看有无眼尖的小伙伴发现问题&#xff1a; // 设置参数 MultiValueMap<String, Object> param new LinkedMultiValueMap<>(); FileSystemResource resource new …

log4cpp初入门

目录下载与安装log4cpp框架CategoryAppenderLayoutPriortyOutput功能日志级别⽇志格式化⽇志输出日志回滚日志配置文件下载与安装 https://sourceforge.net/projects/log4cpp/ tar xvf log4cpp-1.1.3.tar.gz cd log4cpp ./configure make make check make install ldconfig…

轻松玩转树莓派Pico之三、Windows+Ubuntu虚拟机模式下VSCode C语言开发环境搭建

目录 1、VSCode下载与安装 2、VSCode基础插件安装 3、SSH连接与配置 4、SSH免密登录 5、Pico编译 工欲善其事&#xff0c;必先利其器。之前的介绍的Pico流程都是通过命令行编译&#xff0c;没有进行更深入的介绍&#xff0c;本文将介绍Pico的VSCode-C语言开发环境搭建与配…

Rust WASM 与 JS 计算素数性能对比

前言 刚接触Rust wasm&#xff0c;请各看官高抬贵手。 简介 根据网上资料&#xff0c;使用 wasm-pack 搭配wasm-bindgen将Rust代码编译成 wasm。 搭好环境后&#xff0c;想对比一下rust-wasm与js的性能差距。 环境 OS: Deepin 20.7.1 apricotKernel: Linux 5.15.34CPU: Int…

LeetCode单周赛第320场 AcWing周赛第78场总结

1. LeetCode单周赛第320场 1.1 数组中不等三元组的数目 1.1.1 原题链接&#xff1a;力扣https://leetcode.cn/problems/number-of-unequal-triplets-in-array/ 1.1.2 解题思路&#xff1a; 暴力遍历咯。 1.1.3 代码&#xff1a; class Solution { public:int unequalTripl…

JAVA的学习心路历程之JDK基础入门(上)

任务需要&#xff0c;需要我学java调用linux下的动态库&#xff0c;于是搜寻java知识更新这篇。 从我上大学起我就听别人说JAVA&#xff0c;不不&#xff0c;应该是初中&#xff0c;那时候流行带键盘的智能手机&#xff0c;里面有好些个游戏都是JAVA写的&#xff0c;可见JAVA有…

【JavaWeb】HTML

HTML1 HTML概念1.1 超文本1.2 标记语言2 HTML的入门程序3 HTML语法规则4 使用idea创建StaticWeb工程5 HTML的各个标签的使用5.1标题标签5.2段落标签5.3换行标签5.4无序列表标签5.5超链接标签5.6图像标签5.7块标签6.使用表格标签展示数据6.1未合并单元格6.2合并单元格-合并列6.3…

套接字+网络套接字函数+客户端大小写程序

NAT映射 一般来说&#xff1a;源主机和目的主机都属于局域网&#xff0c;也就是ip地址可能相同 但是&#xff1a;路由器一般是公网ip,即整个网络环境可见 每一个路由器会维护一个NAT映射表 路由器的ip一般是固定的公网ip路由器与把与它相连的主机&#xff1a;私有ip端口号映射…

Java-多线程-ThreadPoolExecutor

前言 前面我们讲解线程的时候&#xff0c;讲到了使用Executors创建线程池&#xff0c;但是它里面所有方法可变的参数太少&#xff0c;不能很好的进行自定义设置&#xff0c;以及以后的扩展&#xff0c;更合理的使用cpu线程的操作&#xff0c;所以使用ThreadPoolExecutor创建线程…

SpringBoot集成webservice

前言 之前在工作中&#xff0c;有时候需要去对接第三方的医院&#xff0c;而很多医院的his系统用的都是老技术&#xff08;WebService&#xff09;。一直在对接webservice接口&#xff0c;却不知道webservice接口是怎么实现的&#xff0c;这一次&#xff0c;我们来一探究竟。 …

Android Compose Bloom 项目实战 (一) : 项目说明与配置

1. 项目介绍 Bloom是谷歌 AndroidDevChallenge (Android 开发挑战赛) 中的一期活动&#xff0c;目的是为了推广Compose&#xff0c;非常适合用来练手&#xff0c;通过这个项目&#xff0c;我们可以很好的入门Compose。本文介绍了如何从零开始&#xff0c;开发这个Compose项目。…

计算机系统结构期末复习

名词解释 程序访问局部性 时间局部性是指最近被访问过的数据很可能再次被访问 空间局部性是指最近被访问过的存储空间的附近空间可能会被访问 计算机体系结构 计算机体系结构是程序员所看到的计算机属性&#xff0c;即概念性结构与功能特性 窗口重叠技术 为了能更简单、更直接…

UE5笔记【五】操作细节——光源、光线参数配置、光照图修复

设置光线重载质量模式为预览&#xff1a;可以加快重构速度。 为了更快速高效的学习&#xff0c;直接查看别人已经建好的素材实例。 在EpicGames启动器中打开示例&#xff0c;找到这个照片级渲染。查看别人建好的效果图。 创建工程以UE5版本打开。进入查看。 观察Baked和碰撞测…

MySQL常用函数大全(面试篇)

本篇文章讲解是是MySQL的函数方法&#xff0c;涵盖所有的MySQL常见的方法。主要介绍了面试常问函数。 一、数字函数二、字符串函数三、日期函数四、MySQL高级函数 &#xff08;一&#xff09;数字函数 1、ABS(x) 返回x的绝对值 2、AVG(expression) 返回一个表达式的平均值&am…

Redis分布式锁

1. 什么是分布式锁 分布式锁指的是&#xff0c;所有服务中的所有线程都去获得同一把锁&#xff0c;但只有一个线程可以成功的获得锁&#xff0c;其他没有获得锁的线程必须全部等待&#xff0c;等到获得锁的线程释放掉锁之后获得了锁才能进行操作。 Redis官网中&#xff0c;set…

中加石墨再冲刺港交所上市:2022年初至今收入为零,陈东尧为CEO

11月18日&#xff0c;中加石墨控股股份有限公司&#xff08;下称“中加石墨”&#xff09;在港交所递交招股书&#xff0c;准备在港交所主板&#xff0c;宏信为独家保荐人。据贝多财经了解&#xff0c;这是中加石墨第二次递表&#xff0c;此前曾于2022年2月28日递交上市申请材料…

通过inode结构体取到次设备号,实现LED灯的亮灭

对Linux来说&#xff0c;设备驱动也是文件。驱动控制硬件的过程&#xff0c;实际上是对驱动文件的读写操作。 对内核来说&#xff0c;如何获取唯一的文件标识呢&#xff1f;当然是通过file结构体中的&#xff0c;inode结构体识别应用层打开的到底是哪一个设备文件。 实验操作及…

数据结构题目收录(二十)

1、含有n个非叶结点的m阶B树中至少包含&#xff08;&#xff09;个关键字。 A&#xff1a;n(m1)B&#xff1a;nC&#xff1a;n(┌\ulcorner┌m/2┐\urcorner┐-1)D&#xff1a;(n-1)(┌\ulcorner┌m/2┐\urcorner┐-1)1 解析 除根结点外&#xff0c;m阶B树中的每个非叶结点至…

mongodump工具安装及使用详解

MongoDB导入导出和备份的命令工具从4.4版本开始不再自动跟随数据库一起安装&#xff0c;而是需要自己手动安装。 官方网站下载链接&#xff1a;Download MongoDB Command Line Database Tools | MongoDB 将下载的压缩包通过工具上传到服务器或者虚拟机中某个路径下并解压&…