GPS接收机设计(5)——定位解算

1.流程图

(待补充,没人看就不补充了。。。。。。)

 

2.代码解析

function [navSolutions, eph] = postNavigation(trackResults, settings)
%Function calculates navigation solutions for the receiver (pseudoranges,
%positions). At the end it converts coordinates from the WGS84 system to
%the UTM, geocentric or any additional coordinate system.
%
%[navSolutions, eph] = postNavigation(trackResults, settings)
%
%   Inputs:
%       trackResults    - results from the tracking function (structure
%                       array).
%       settings        - receiver settings.
%   Outputs:
%       navSolutions    - contains measured pseudoranges, receiver
%                       clock error, receiver coordinates in several
%                       coordinate systems (at least ECEF and UTM).
%       eph             - received ephemerides of all SV (structure array).

%--------------------------------------------------------------------------
%                           SoftGNSS v3.0

settings = initSettings();
if (settings.msToProcess < 36000) || (sum([trackResults.status] ~= '-') < 4)
    % Show the error message and exit
    disp('Record is to short or too few satellites tracked. Exiting!');
    navSolutions = [];
    eph          = [];
    return
end

%% 寻找帧起始位置==========================================

[subFrameStart, activeChnList] = findPreambles(trackResults, settings);

%%解码星历 =====================================================

for channelNr = activeChnList

    %===  将跟踪输出的结果转换为导航电文=======================

    %--- 从跟踪输出结果复制5个子帧数据---------------
    navBitsSamples = trackResults(channelNr).I_P(subFrameStart(channelNr) - 20 : ...
                               subFrameStart(channelNr) + (1500 * 20) -1)';

    navBitsSamples = reshape(navBitsSamples, ...
                             20, (size(navBitsSamples, 1) / 20));%每20个值合成1列

    %--- Sum all samples in the bits to get the best estimate -------------
    navBits = sum(navBitsSamples);%对列求和

    navBits = (navBits > 0);%转换为逻辑值0/1

    navBitsBin = dec2bin(navBits);%以字符矢量形式返回navBits的二进制表示形式
    
    %=== 解调星历表和截短周内时计数(TOW) ================
    [eph(trackResults(channelNr).PRN), TOW] = ...
                            ephemeris(navBitsBin(2:1501)', navBitsBin(1));

    %--- 剔除缺少必要导航数据信息的卫星 -----
    if (isempty(eph(trackResults(channelNr).PRN).IODC) || ...
        isempty(eph(trackResults(channelNr).PRN).IODE_sf2) || ...
        isempty(eph(trackResults(channelNr).PRN).IODE_sf3))

        activeChnList = setdiff(activeChnList, channelNr);
    end    
end

%% 检查卫星数量是否超过3=====================
if (isempty(activeChnList) || (size(activeChnList, 2) < 4))
    % Show error message and exit
    disp('Too few satellites with ephemeris data for postion calculations. Exiting!');
    navSolutions = [];
    eph          = [];
    return
end

%% Initialization初始化 ===================================
  • 20
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
接收机位置解算是利用接收机接收到的卫星信号进行距离测量和时间差的计算,从而推算出接收机位置坐标。接收机位置解算MATLAB程序是利用MATLAB软件进行接收机位置解算的程序。 接收机位置解算MATLAB程序的实现主要包括以下步骤: 1. 读取接收机接收到的卫星信号数据,包括卫星的位置、信号的传输时间等信息。 2. 利用卫星信号的传输时间和速度光速的关系来计算接收机和卫星之间的距离。 3. 根据接收机和至少四颗卫星的距离,使用高精度的定位算法(如最小二乘解法、加权最小二乘法)来计算接收机的三维空间坐标。 4. 可选的,对接收机位置进行后处理,包括误差修正、精度提高等。 在编写接收机位置解算MATLAB程序时,需要注意以下几点: 1. 数据的准备:需要得到卫星的位置信息、卫星信号的传输时间以及接收机的初始估计坐标。 2. 定位算法的选择:根据实际需求和应用场景,选择合适的定位算法,如基于最小二乘法的解算算法。 3. 编写代码:根据选择的定位算法,编写相应的MATLAB程序,包括读取数据、计算距离、解算位置等步骤。 4. 数据处理:可以对解算得到的位置进行误差修正和精度提高的处理,如使用滤波算法位置进行平滑处理。 5. 结果分析:对解算结果进行分析,可以进行可视化展示,如画出接收机的轨迹图或三维坐标图。 通过编写接收机位置解算MATLAB程序,可以实现对接收机位置的高精度测量和定位,应用于航空、导航、测量等领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值