短时相关+FFT捕获方法的MATLAB仿真

2024-09-04 22:36

本文主要是介绍短时相关+FFT捕获方法的MATLAB仿真,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

短时相关+FFT捕获方法的MATLAB仿真

  • 前言
  • 短时相关+FFT捕获相关原理
    • 1、频偏引起的相关损失
    • 2、扇贝损失
  • MATLAB程序
  • 获取完整程序


前言

对于算法类的工程,FPGA设计,仿真先行,再没搞清楚整个信号处理原理和流程之前,切莫盲目开始FPGA RTL。对于导航接收机而言,接收机的第一步就在于能够捕获到信号,才能进行后面的跟踪、解算等等。笔者所做的《从零开始研发GPS接收机》的工作中,使用的方法就是这种短时相关+FFT的捕获方法。
从零开始研发GPS接收机》记录了笔者实现一个硬件接收机的全过程,可通过公众号找到。

短时相关+FFT捕获相关原理

短时相关+FFT捕获(或叫做匹配滤波+FFT,PMF+FFT)是一种比较适合于硬件实现的方法。大致的实现方式如下:中频信号与本地载波相乘得到I、Q两路信号。I、Q两路信号分别进入N (,L为伪码长度)阶延迟线,与本地的N 位信号相关,可以得到N个相关值。各次相关输出存储在缓存中,M次运算后将形成一个维的矩阵,对该矩阵各列作M点FFT,当接收信号与本地信号相位差小于N 时即可完成对信号的捕获,当相位差大于N 时未能完成捕获,重新进入下一轮捕获。

在这里插入图片描述

1、频偏引起的相关损失

部分相关是一个低通滤波过程,随着多普勒频移的增大,对应的FFT输出值随之下降,叫做相关损失。随着多普勒频移的增大,相关损失引起FFT输出值下降,因而导致检测概率的下降。下图显示了不同相关器配置对短时相关+FFT结构的幅频响应的影响。X表示每段短时相关的点数,P为段数,N表示对P点数据做N点FFT运算

在总相关时间一定的情况下,分段相关器的相关时长越长,做FFT运算的点数越少,则相应的相关损失也越厉害。
在这里插入图片描述

2、扇贝损失

在短时相关-FFT结构中,FFT运算存在扇贝损失,即当多普勒频移值位于FFT输出两点之间时,该频率对应的FFT输出亦会下降。FFT输出幅度周期性的下降就是由于FFT运算中相位补偿不完全引起的,这种周期性的幅度下降同样也会导致检测概率的下降。扇贝损失可以用补零法来改善。

补零前的幅频响应:
在这里插入图片描述
补零后的幅频响应:
在这里插入图片描述
劣势:
1、如果频率落在两个分辨的频点中间,峰值会有所下降(扇贝损失)
2、如果频偏离中心频点较远,则峰值会下降(频偏损失)
优势:
1、对于电文跳变不敏感,不会因为电文翻转存在相关损失。
2、实现比较灵活,相关器个数可根据捕获速度要求配置

MATLAB程序

这里的matlab使用的是短时相关+FFT的方法。因为短时相关+FFT的原理比较简单,难点在于RTL设计和时序,读者在matlab中弄明白运算原理之后,可以试着参考下面链接中提到的一些设计思路进行设计。

从零开始研发GPS接收机连载——6、捕获模块设计与验证
这里使用下面文章中生成的信源来进行捕获和载噪比估计:
GPS的信号强度以及matlab信号模拟
matlab程序如下:

close all;
clear all;
clc;
format long g;%参数
SAMPLECLK   = 16.369e6;   %采样时钟
T = 0.001;   %相关时长
SAMPLE1MS   = SAMPLECLK*T; 
L1CODEFERQ  = 1.023e6;
L1CARRFERQ  = 3.996e6;  %中频
L1CODELEN   = 1023;     %一周期码片个数%y.mat来自于《GPS的信号强度以及matlab信号模拟》中的matlab
%此处doppler = 1000Hz
y = load('y.mat').y; %包含了PRNNUM = 1的卫星数据
y = y(CodePhase : end);%以下为付费内容

首先还是得到这张二维图:
在这里插入图片描述
自动算出码相位和多普勒以及CNR。
可以看到,由于频率分辨率的限制,只能输出1000Hz最接近的一个频点,即937.5Hz,那么载波频率的捕获误差就是62.5Hz。
在这里插入图片描述

获取完整程序

见公众号

这篇关于短时相关+FFT捕获方法的MATLAB仿真的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137222

相关文章

PyTorch核心方法之state_dict()、parameters()参数打印与应用案例

《PyTorch核心方法之state_dict()、parameters()参数打印与应用案例》PyTorch是一个流行的开源深度学习框架,提供了灵活且高效的方式来训练和部署神经网络,这篇文章主要介绍... 目录前言模型案例A. state_dict()方法验证B. parameters()C. 模型结构冻

Python字符串处理方法超全攻略

《Python字符串处理方法超全攻略》字符串可以看作多个字符的按照先后顺序组合,相当于就是序列结构,意味着可以对它进行遍历、切片,:本文主要介绍Python字符串处理方法的相关资料,文中通过代码介... 目录一、基础知识:字符串的“不可变”特性与创建方式二、常用操作:80%场景的“万能工具箱”三、格式化方法

springboot+redis实现订单过期(超时取消)功能的方法详解

《springboot+redis实现订单过期(超时取消)功能的方法详解》在SpringBoot中使用Redis实现订单过期(超时取消)功能,有多种成熟方案,本文为大家整理了几个详细方法,文中的示例代... 目录一、Redis键过期回调方案(推荐)1. 配置Redis监听器2. 监听键过期事件3. Redi

基于SpringBoot实现分布式锁的三种方法

《基于SpringBoot实现分布式锁的三种方法》这篇文章主要为大家详细介绍了基于SpringBoot实现分布式锁的三种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、基于Redis原生命令实现分布式锁1. 基础版Redis分布式锁2. 可重入锁实现二、使用Redisso

Springboot配置文件相关语法及读取方式详解

《Springboot配置文件相关语法及读取方式详解》本文主要介绍了SpringBoot中的两种配置文件形式,即.properties文件和.yml/.yaml文件,详细讲解了这两种文件的语法和读取方... 目录配置文件的形式语法1、key-value形式2、数组形式读取方式1、通过@value注解2、通过

自定义注解SpringBoot防重复提交AOP方法详解

《自定义注解SpringBoot防重复提交AOP方法详解》该文章描述了一个防止重复提交的流程,通过HttpServletRequest对象获取请求信息,生成唯一标识,使用Redis分布式锁判断请求是否... 目录防重复提交流程引入依赖properties配置自定义注解切面Redis工具类controller

Springboot请求和响应相关注解及使用场景分析

《Springboot请求和响应相关注解及使用场景分析》本文介绍了SpringBoot中用于处理HTTP请求和构建HTTP响应的常用注解,包括@RequestMapping、@RequestParam... 目录1. 请求处理注解@RequestMapping@GetMapping, @PostMappin

Java调用DeepSeek API的8个高频坑与解决方法

《Java调用DeepSeekAPI的8个高频坑与解决方法》现在大模型开发特别火,DeepSeek因为中文理解好、反应快、还便宜,不少Java开发者都用它,本文整理了最常踩的8个坑,希望对... 目录引言一、坑 1:Token 过期未处理,鉴权异常引发服务中断问题本质典型错误代码解决方案:实现 Token

Nginx 访问控制的多种方法

《Nginx访问控制的多种方法》本文系统介绍了Nginx实现Web访问控制的多种方法,包括IP黑白名单、路径/方法/参数控制、HTTP基本认证、防盗链机制、客户端证书校验、限速限流、地理位置控制等基... 目录一、IP 白名单与黑名单1. 允许/拒绝指定IP2. 全局黑名单二、基于路径、方法、参数的访问控制

Python中Request的安装以及简单的使用方法图文教程

《Python中Request的安装以及简单的使用方法图文教程》python里的request库经常被用于进行网络爬虫,想要学习网络爬虫的同学必须得安装request这个第三方库,:本文主要介绍P... 目录1.Requests 安装cmd 窗口安装为pycharm安装在pycharm设置中为项目安装req