当前位置: 首页 > article >正文

GPS信号捕获【时间-频率空间搜索方法】

GPS信号捕获 【时间-频率空间搜索方法】

之前的文章介绍了GPS信号C/A码的生成方法,本文介绍实现GPS定位中的一个重要过程——信号捕获(GPS signal acquisition)。

简介

GPS信号的捕获过程主要是通过接收机接收卫星发射的信号,与本地生成的伪随机码 (replica signal) 进行相关操作来完成的。具体步骤包括:
(1)捕获目标:确定信号的存在,并粗略估计信号的多普勒频移 (Doppler shift) 和码延迟 (code delay),为后续的信号跟踪阶段提供初始参数。
(2)多普勒频移和码延迟搜索:通过改变本地复制信号的频率和码相位,与接收到的信号进行相关计算,寻找相关峰值。相关峰值表明找到了可能的多普勒频移和码延迟。
(3)相关计算:GPS信号捕获阶段的核心,基于如下公式:
在这里插入图片描述
补充:GPS信号捕获的基础是GPS信号的特质。具体而言,GPS的C/A 码的彼此之间的几乎没有互相关,只有自己本身和自己只有在没有延迟的情况下,自相关函数才会有极值。

时间-频率空间搜索

本文介绍GPS信号捕获的经典方法,时间-频率空间搜索(Time-Frequency Space Search),使用直接搜索算法(Serial Search)。具体来说,直接搜索法通过调整本地生成的伪随机码的相位和载波频率,逐点或并行地计算相关值,并寻找最优匹配。这种方法最为简单和容易理解,但是计算比较费时。
步骤可以简单分为:
(1)接收来自GPS卫星的信号。
(2)本地生成伪随机码和载波信号(Replica signal)。
(3)设置搜索范围。这里需要设置多普勒频移和码延迟两个参数。多普勒频移范围:由于卫星和接收机的相对运动,多普勒频移通常在 ±10kHz 之间,按固定步长(如 500 Hz或250Hz)划分搜索点。码延迟范围:根据伪随机码周期划分,步长通常为一个码周期的采样间隔,可以设置为0.5 chip
(4)计算相关值。由接收机先产生特定卫星的伪随机噪声序列和本身的振荡器产生载波信号,所产生的码相位范围是从0~1022,输入的信号在与伪随机噪声(PRN)序列相乘后,再跟载波信号相乘,此处的载波信号分为两个,一个是振荡器所产生的载波信号,另一个则是产生的载波信号加上一个90°的相位差。简言之,就是得到同相信号(In-phase)和正交信号(Quadrature),最后再平方相加得到信号的能量(I^2 + Q^2)。算法流程可参考下图:
在这里插入图片描述
(5)寻找峰值。寻找相关值的峰值,若所得到的能量超过所设定的标准,则认为捕获到了需要找的多普勒频移和码延迟。
核心代码流程如下:

for sv = 1:32
    % generate C/A code
    ca_code = ShiftedSampledCA(sv, 1 / sampling_rate, 0.5); % raw code
    samples_per_chip = sampling_rate / ca_rate;
    current_corr_power=zeros(length(code_delay_range), length(doppler_range));
    for code_idx = 1:length(code_delay_range)
        % code delay
        code_delay=code_delay_range(code_idx);
        shifted_code = circshift(ca_code, round(code_delay * samples_per_chip));
        
        for doppler_idx = 1:length(doppler_range)
            f_D = doppler_range(doppler_idx);
            f_NCO = f_IF + f_D;

            % generate sine and cosine waves
            t = (0:num_samples-1) / sampling_rate;
            sin_wave = sin(2 * pi * f_NCO * t);
            cos_wave = cos(2 * pi * f_NCO * t);

            % compute components I and Q 
            I_t = incoming_1ms_IF .* cos_wave;
            Q_t = incoming_1ms_IF .* sin_wave;

            % compute sum of squarred
            I_corr = sum(shifted_code.*I_t ); 
            Q_corr = sum(shifted_code.*Q_t  ); 
            corr_power = I_corr^2 + Q_corr^2;
            current_corr_power(code_idx,doppler_idx)=corr_power;
            search_result(sv,code_idx,doppler_idx)=corr_power;
        end
    end
end

详细的小项目可以参考链接。这是有课程作业改编的GPS信号捕获方法。


http://www.kler.cn/a/523196.html

相关文章:

  • 代码随想录算法训练营第三十八天-动态规划-完全背包-279.完全平方数
  • mysql DDL可重入讨论
  • 电路研究9.2.3——合宙Air780EP中FTP——FTPGET 命令使用方法研究
  • 实践网络安全:常见威胁与应对策略详解
  • 开发者交流平台项目部署到阿里云服务器教程
  • ue5 GAS制作一个技能,技能冷却,给剑添加碰撞预设,打击敌人
  • 指定dpkg安装deb包时的安装路径
  • SpringBoot 使用海康 SDK 和 flv.js 显示监控画面
  • objection的简单使用
  • 一图展示汽车和航空电子领域的安全和互操作性解决方案的概览
  • https数字签名手动验签
  • PythonFlask框架
  • Effective Objective-C 2.0 读书笔记—— objc_msgSend
  • 跨平台物联网漏洞挖掘算法评估框架设计与实现文献综述:物联网设备漏洞挖掘的挑战和机遇
  • iPhone SE(第三代) 设备详情图
  • 约瑟夫问题(信息学奥赛一本通-2037)
  • 具身智能体俯视全局的导航策略!TopV-Nav: 解锁多模态语言模型在零样本目标导航中的顶视空间推理潜力
  • 从源码深入理解One-API框架:适配器模式实现LLM接口对接
  • python Flask-Redis 连接远程redis
  • GWO优化决策树分类预测matlab
  • 硬脂酸单甘油酯(GMS)行业分析
  • LeetCode:509.斐波那契数
  • Linux - 进程间通信(2)
  • python flask 使用 redis写一个例子
  • STranslate 中文绿色版即时翻译/ OCR 工具 v1.3.1.120
  • C语言数据类型及取值范围