m低信噪比下GPS信号的捕获算法研究,分别使用matlab和FPGA对算法进行仿真和硬件实现

news2025/7/13 2:38:24

目录

1.算法概述

2.仿真效果预览

3.MATLAB/FPGA部分代码预览

4.完整MATLAB/FPGA程序


1.算法概述

      GPS卫星发送的信号一般由3个分量组成:载波、伪码和导航电文,其中伪码和导航电文采用BPSK技术去调制载波。GPS使用的两个L波段两种载频:

       为了跟踪GPS信号,首先要捕获到GPS信号。将捕获到的GPS信号的数据传递给跟踪过程,再通过跟踪过程便可得到卫星的导航电文。传统的GPS捕获方法有:串行搜索捕获、滑动相关法、循环相关法、PMF算法。 采用分段FFT的方法进行运算,算法基本结构如图1所示。

       这里分段数目为K,那么每个相关器的相关时间为TCA/K。每个相关器处理的C/A码长度为,然后再对处理后的数据进行FFT变换。由于每个FFT对应的点数仅仅为原来的,故其硬件资源较直接的并行FFT算法要节约。

       当接收机处于遮挡比较严重的环境如隧道,高楼林立的市区 GPS信号将变得非常微弱。根据经验,这种情况下,GPS信号的载噪比一般只有44dBhz,甚至更低。在这种情况下,获得的信号频谱非常差,甚至难以搜索到其峰值,因此,我们在检测信号最大值的时候,需要通过如下的运算,这里我们仍假设将信号分为K段进行FFT变化。

        然后对得到的结果取模。当获得超过门限的峰值,则说明此时信号已经捕获,就得到对码相位和多普勒频移估计值,这样做的有点是可以获得峰值更为明显的谱线。

2.仿真效果预览

matlab2022a,ise10.1仿真

3.MATLAB/FPGA部分代码预览

`timescale 1ns / 1ps
module tops(
           i_clk,
			  i_rst,
			  o_CA,
			  o_sin,
			  o_cos,
			  o_ca_cos,
			  o_ca_som,
			  o_sum1,
			  o_sum2,
			  o_ca_cos2,
			  o_ca_som2,
			  fft_in1,
			  fft_in2,
			  
			  fft_out1,
			  fft_out2
			  
	        );
 
input              i_clk;
input              i_rst;
output signed[1:0] o_CA;
output signed[7:0] o_sin;
output signed[7:0] o_cos;
output signed[9:0] o_ca_cos;
output signed[9:0] o_ca_som;
output signed[13:0]o_sum1;
output signed[13:0]o_sum2;
output signed[9:0] o_ca_cos2;
output signed[9:0] o_ca_som2;
output signed[23:0]fft_in1;
output signed[23:0]fft_in2;
 
output signed[27:0]fft_out1;
output signed[27:0]fft_out2;
 
 
CA_carrier_module CA_carrier_module_u(
												 .i_clk     (i_clk), 
												 .i_rst     (i_rst), 
												 .o_CA      (), 
												 .o_sin     (), 
												 .o_cos     (), 
												 .o_ca_cos  (o_ca_cos), 
												 .o_ca_sin  (o_ca_sin)
												 );
 
 
wire signed[13:0]o_sum1;
wire signed[13:0]o_sum2;
 
delay_1ms delay_1ms_u1(
							 .i_clk    (i_clk), 
							 .i_rst    (i_rst), 
							 .i_data   (o_ca_cos), 
							 .o_data1  (), 
							 .o_data2  (), 
							 .o_data3  (), 
							 .o_data4  (), 
							 .o_data5  (), 
							 .o_data6  (), 
							 .o_data7  (), 
							 .o_data8  (), 
							 .o_data9  (), 
							 .o_data10 (), 
							 .o_sum    (o_sum1)
							 );
 
 
delay_1ms delay_1ms_u2(
							 .i_clk    (i_clk), 
							 .i_rst    (i_rst), 
							 .i_data   (o_ca_sin), 
							 .o_data1  (), 
							 .o_data2  (), 
							 .o_data3  (), 
							 .o_data4  (), 
							 .o_data5  (), 
							 .o_data6  (), 
							 .o_data7  (), 
							 .o_data8  (), 
							 .o_data9  (), 
							 .o_data10 (), 
							 .o_sum    (o_sum2)
							 );
 
 
 
reg[1:0]cnt1 = 2'b00;
wire    clk2;
 
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
	  cnt1 <= 2'b00;
else begin
     cnt1 <= cnt1 + 1'b1;
     end
end
 
assign clk2 = cnt1[1];
								
CA_gen CA_gen_u(
				   .i_clk (clk2), 
				   .i_rst (i_rst), 
				   .o_CA  (o_CA)
				   );
	 
	 
	 
ncos ncos_u(
         .reg_select (1'b0), 
			.clk        (i_clk), 
			.we         (1'b1), 
			.data       (26'd16777216), 
			.sine       (o_sin), 
			.cosine     (o_cos)
         );
			
 
multer multer_u1(
                .clk (i_clk), 
					 .a   (o_cos), 
					 .b   (o_CA), 
					 .p   (o_ca_cos2)
                );
 
multer multer_u2(
                .clk (i_clk), 
					 .a   (o_sin), 
					 .b   (o_CA), 
					 .p   (o_ca_sin2)
                );	 
 
wire [23:0]fft_in1;
wire [23:0]fft_in2;
multer2 multer2_u1(
                   .clk (i_clk), 
						 .a   (o_sum1), 
						 .b   (o_ca_cos2), 
						 .p   (fft_in1)
                   );
 
multer2 multer2_u2(
                   .clk (i_clk), 
						 .a   (o_sum2), 
						 .b   (o_ca_sin2), 
						 .p   (fft_in2)
                   );
 
//==============fft==========================
ffts ffts_u1(
            .sclr        (i_rst), 
				.fd_in       (1'b1), 
				.fd_out      (), 
				.forward     (1'b1),//1;fft;0:ifft 
				.clk         (i_clk), 
				.rffd        (), 
				.data_valid  (), 
				.dout        (fft_out1), 
				.din         (fft_in1), 
				.size        (6'd31)
            );
 
 
ffts ffts_u2(
            .sclr        (i_rst), 
				.fd_in       (1'b1), 
				.fd_out      (), 
				.forward     (1'b1),//1;fft;0:ifft 
				.clk         (i_clk), 
				.rffd        (), 
				.data_valid  (), 
				.dout        (fft_out2), 
				.din         (fft_in2), 
				.size        (6'd31)
            );
  
  
wire signed[13:0]omax1;
wire       [9:0]index;  
reg signed[13:0]o_power_average=14'd550;
reg signed[22:0]r_power_average=23'd281600;
 
 
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
	  begin
	  o_power_average <= 14'd550;
	  r_power_average <= 23'd281600;
	  end
else begin
			 if(omax1[13] == 1'b1 | omax1==14'd0)
			 o_power_average <= 14'd550;
	 else	 begin
	       r_power_average <= 172*omax1;
			 o_power_average <= r_power_average[22:9];
			 end
     end
end
 
 
find_max find_max_u(
					    .clk    (i_clk), 
					    .rst    (i_rst), 			           //同步复位 
					    .idata  (o_fadd), 
					    .iTh1   (o_power_average), 
					    .omax1  (omax1), 
					    .oindex1(index), 
					    .omax2  (), 
					    .oindex2(), 
					    .omax3  (), 
					    .oindex3(), 
					    .oen    (), 
					    .oen1   (), 
					    .start  ()
					    );
 
endmodule
01_026_m

4.完整MATLAB/FPGA程序

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

V

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

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

相关文章

react学习随笔

创建react脚手架项目 方法一&#xff1a;在安装好nodejs的情况下 npm install -g create-react-app 全局安装react脚手架 create-react-app 项目名 创建一个新的react项目 方法二&#xff1a;直接安装 npx create-react-app 项目名 npx create-react-app 项目名 --template ty…

org.activiti.engine

org.activiti.engine目录概述需求&#xff1a;设计思路实现思路分析1.TaskService2.RuntimeService3.ProcessEngines4.ProcessEngineLifecycleListener5.ProcessEngines参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,…

详解Unity中的新版Nav Mesh|导航寻路系统 (三)

前言 通过前面两篇的介绍与讲解我们已经对新版NavMesh有了一个基础的了解和使用&#xff0c;本篇我们继续讲解剩余的两个组件NavMeshModifier、NavMeshModifierVolume&#xff0c;这两个组件是主要是用于影响导航网格的生成的。所以内容不是很主要&#xff0c;但也非常重要。 …

LQ0209 颠倒的价牌【枚举+进制】

题目来源&#xff1a;蓝桥杯2013初赛 C A组D题 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小李的店里专卖其它店中下架的样品电视机&#xff0c;可称为&#xff1a;样品电视专卖店。 其标价都是 4 位数字&am…

Pulsar bundle数目的选择

看到今年Pulsar 峰会上挺多人分享负载均衡的内容&#xff0c;这里也整理分享一下相关的内容。 实践中&#xff0c;我们都会 关闭 auto bundle split&#xff0c;保证系统稳定 Pulsar bundle split 是一个比较耗费资源的操作&#xff0c;会造成连接到这个 bundle 上的所有 pr…

SAP 物料分类账配置详解Part 1( 基于SAP S/4HANA1909 版本)

本文将详细介绍&#xff1a;SAP 物料分类账配置要点 &#xff0c;本系统使用的版本是&#xff1a; SAP S/4HANA1909 版本目录 1 物料分类账的后台配置 1.1 激活物料分类帐的评估区域 1.2 分配货币类型并定义物料分类帐类型 1.3 分配物料分类帐类型给评估范围 1.5 定义…

m基于MATLAB的通信系统仿真,包括信号源,载波信号,放大器,带宽滤波器,接收端包括放大器,带宽滤波器,载波解调,低通滤波器等

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 Interference : 200KHz Signal source: 需要在给出的一个excel 文档里调用&#xff0c;我对应的信号是第二竖栏&#xff0c;就是从B1到B60 里面所有的filter(滤波器)都是自己来选值&am…

驱动 私有数据传参点灯

1.在串口工具进行输入&#xff1a; echo 1 > /dev/myled0 ---->led1灯点亮 echo 0 > /dev/myled0 ---->led1灯熄灭 echo 1 > /dev/myled1 ---->led1灯点亮 echo 0 > /dev/myled1 ---->led1灯熄灭 echo 1 > /dev/myled2 ----…

243 h160 相交链表

题解 本题关键: acbbca // 243 h160 相交链表public ListNode getIntersectionNode(ListNode headA, ListNode headB) {ListNode pointAheadA,pointBheadB;int rount2;while (rount>0){if (pointApointB){return pointA;}pointApointA.next;pointBpointB.next;if (pointAnul…

【树莓派不吃灰】命令篇⑥ 了解树莓派Boot分区,学习Linux启动流程

目录1. Linux启动过程1.1 内核引导1.2 运行init初始化进程 —— 初始化系统环境1.3 运行级别 —— runlevel1.4 系统初始化 —— 加载开机启动程序1.5 用户登录1.5.1 方式1&#xff1a;命令行登录1.5.2 方式2&#xff1a;ssh登录&#xff08;常用&#xff09;1.5.3 方式3&#…

[附源码]计算机毕业设计JAVA恒星学院网络计费系统

[附源码]计算机毕业设计JAVA恒星学院网络计费系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM my…

Lingo软硬件划分 实例

文章目录一、SM2 加密算法软硬件划分1.1 实验目标1.2 实验过程&#xff08;1&#xff09; 综合考虑使得系统整体性能最&#xff08;2&#xff09;只考虑硬面积&#xff0c;即系统硬件面积最小&#xff08;3&#xff09;只考虑功耗&#xff0c;即系统功耗最小&#xff08;4&…

SpringBoot实用开发篇复习4(实用开发篇完)

在上面一节&#xff0c;我们学习了SpringBoot整合第三方技术&#xff0c;这次我们主要学习监控技术&#xff0c;主要包含四个部分&#xff0c;分别为监控的意义&#xff0c;可视化监控平台&#xff0c;监控的原理&#xff0c;自定义监控指标等&#xff0c;下面一起来学习吧。 …

nodejs+vue+elementui前台美食网上订餐点菜系统 vscode项目

前端技术&#xff1a;nodejsvueelementui 前端&#xff1a;HTML5,CSS3、JavaScript、VUE 系统分为不同的层次&#xff1a;视图层&#xff08;vue页面&#xff09;&#xff0c;表现层&#xff08;控制器类&#xff09;&#xff0c;业务层&#xff08;接口类&#xff09;和持久层…

SSM框架+LayUi+Mysql实现的物流配送管理系统(功能包含分角色,登录/注册、车辆管理/路线管理/运单管理/调度安排/信息管理等)

博客目录SSM框架LayUiMysql实现的物流配送管理系统实现功能截图系统功能使用技术代码完整源码SSM框架LayUiMysql实现的物流配送管理系统 本系统为了解决物流平台的配送难题&#xff0c;将司机/物流配送的整体流程话&#xff0c;便于物流公司的统一管理&#xff0c;提高了物流日…

JUC学习笔记——共享模型之内存

在本系列内容中我们会对JUC做一个系统的学习&#xff0c;本片将会介绍JUC的内存部分 我们会分为以下几部分进行介绍&#xff1a; Java内存模型可见性模式之两阶段终止模式之Balking原理之指令级并行有序性volatile原理 Java内存模型 我们首先来介绍一下Java内存模型&#xf…

博途1200PLC编码器速度信号采集和滤波处理

速度估算有M法和T法测速2种常用方法,工业控制PLC上基本采用M法测速,M法测速的详细原理,这里不再赘述。感兴趣的可以参看下面的文章链接: PLC通过编码器反馈值计算速度的推荐做法(算法解析+ST代码)_RXXW_Dor的博客-CSDN博客PLC如何测量采集编码器的位置数据,不清楚的可以…

spring框架源码十七、Bean对象创建子流程

Bean对象创建子流程Bean对象创建子流程new ClassPathXmlApplicationContextClassPathXmlApplicationContext#ClassPathXmlApplicationContext(java.lang.String)ClassPathXmlApplicationContext#ClassPathXmlApplicationContext(java.lang.String[], boolean, org.springframew…

冒泡事件在Vue中的应用

什么是事件冒泡&#xff1f; 一想到“冒泡”这两个词会想到什么&#xff1f;想必然&#xff0c;那就是气泡自下而上的从水底往上生的场景&#xff0c;但是我们也知道&#xff0c;水在往上升的过程中&#xff0c;也会经历不同的高度。由此场景&#xff0c;那么想必然&#xff0c…

JavaEE 进阶:Spring 核⼼与设计思想

文章目录一、Spring 是什么1、什么是容器2、什么是 IoC① 传统程序开发Ⅰ 轮胎尺寸固定a. 代码b. 缺陷Ⅱ 轮胎尺寸改变a. 代码b. 缺陷② 控制反转式程序开发Ⅰ 控制反转Ⅱ 需求增加Ⅲ 优点③ 对⽐总结规律3、理解 Spring IoC4、DI 概念说明一、Spring 是什么 Spring是当前Java…