基于MATLAB编写的GNSS_SDR(GNSS软件接收机)——自学笔记(1)

这篇博客详细介绍了 GNSS_SDR 软件定义接收机的初始化程序 init.m,包括文件路径设置、显示格式、环境清理、变量初始化等。作者分析了程序的前半部分,如添加函数路径、打印欢迎信息,以及后半部分的参数初始化和调用 initSettings() 函数。文章还提到了 initSettings.m 和 setSettings.m 文件的作用,前者用于生成 Settings 结构体,后者提供了 GUI 界面来修改变量。博客内容对理解和使用 GNSS_SDR 软件很有帮助。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一次使用CSDN写博文,刚入门GNSS,希望通过CSDN平台可以优化整理思路。

GNSS_SDR是软件定义的GNSS接收机的简称。程序来源于《软件定义的GPS和伽利略接收机》一书附赠的光盘,网上资源很多,应该有这本书的光盘资料。

本文的原理部分大多参考《GPS原理与接收机设计》一书。


目录

init.m

前半部分程序及注释

后半部分程序及注释

initSettings.m和setSettings.m

最常用的变量解释

initSettings.m

setSettings.m


由于程序中嵌套调用了很多函数,因此将逐一对被调用的函数进行分析,首先看初始化程序。


init.m


该初始化程序前半部分对显示格式、文件路径进行初始化,后半部分对参数初始化。

  • 前半部分程序及注释

  • 这里说明一点,addpath后面需要添加文件的具体路径的,例如"D:\GNSS_SDR\include"这样程序整体运行时才不报错。
%% Clean up the environment first =========================================
clear; close all; clc;

format ('compact');        %设置为紧凑型
format ('long', 'g');

%--- Include folders with functions ---------------------------------------
addpath include          % The software receiver functions 将include文件夹添加到路径
addpath geoFunctions     % Position calculation related functions  将geoFunctions文件夹添加到路径

%% Print startup ==========================================================
fprintf(['\n',...
    'Welcome to:  softGNSS\n\n', ...
    'An open source GNSS SDR software project initiated by:\n\n', ...
    '              Danish GPS Center/Aalborg University\n\n', ...
    'The code was improved by GNSS Laboratory/University of Colorado.\n\n',...
    'The software receiver softGNSS comes with ABSOLUTELY NO WARRANTY;\n',...
    'for details please read license details in the file license.txt. This\n',...
    'is free software, and  you  are  welcome  to  redistribute  it under\n',...
    'the terms described in the license.\n\n']);
fprintf('                   -------------------------------\n\n');
%将在命令行窗口输出以上字符

  • 后半部分程序及注释

%% Initialize constants, settings =========================================
settings = initSettings();  %调用文件夹下的initSettings()函数

初始化Settings结构体

接收机中的公共变量及各模块中的特定变量都被储存在settings结构体中。这种方法可以集中管理软件并且不失灵活性。比如说,与采样频率相关的参数就被很多文件调用,从捕获一直到伪距计算。如果把这个数据放在sttings中,当需要修改的时候,只改变一处即可。

另外一个好处就是函数参数列表不依赖于函数体实际使用多少参数,函数内的变化不会影响母函数的代码。

此处调用的initSettings()函数,会在下一节重点介绍其作用和参数含义。


%% Generate plot of raw data and ask if ready to start processing(生成原始数据图,并询问是否准备好开始进行postProcessing) =========
try
    fprintf('Probing data (%s)...\n', settings.fileName)
    probeData(settings);
catch
    % There was an error, print it and exit
    errStruct = lasterror;
    disp(errStruct.message);
    disp('  (run setSettings or change settings in "initSettings.m" to reconfigure)')    
    return;
end
    
disp('  Raw IF data plotted ')
disp('  (run setSettings or change settings in "initSettings.m" to reconfigure)')
disp(' ');
gnssStart = input('Enter "1" to initiate GNSS processing or "0" to exit : ');

if (gnssStart == 1)
    disp(' ');
    %start things rolling...
    postProcessing
end

该段程序是init.m的最后一部分程序,由于在上面的initSettings函数中,使用settings.fileName语句打开了数据文件"GPSdata-DiscreteComponents-fs38_192-if9_55.bin",因此可以将settings传递给probeData()函数,该函数将在下篇文章进行解释。

try catch 语句是指,在执行try语句时如果不报错,则执行end。如果报错,则执行catch。

接下来就是询问是否开始执行数据处理,如果选择执行,则调用postProcessing.m程序。

在initSettings.m中输入正确路径信息后,运行结果如下:

Welcome to:  softGNSS

An open source GNSS SDR software project initiated by:

              Danish GPS Center/Aalborg University

The code was improved by GNSS Laboratory/University of Colorado.

The software receiver softGNSS comes with ABSOLUTELY NO WARRANTY;
for details please read license details in the file license.txt. This
is free software, and  you  are  welcome  to  redistribute  it under
the terms described in the license.

                   -------------------------------

Probing data (E:\1-GPRS GNSS学前内容\自学加注释版GNSS_SDR\GNSS_signal_records\GPSdata-DiscreteComponents-fs38_192-if9_55.bin)...
  Raw IF data plotted 
  (run setSettings or change settings in "initSettings.m" to reconfigure)
 
Enter "1" to initiate GNSS processing or "0" to exit : 

同时显示原始数据的时域图,频域图和直方图。


initSettings.m和setSettings.m


接收机中的公共变量及各模块中的特定变量都被储存在settings结构体中。这种方法可以集中管理软件并且不失灵活性,同时,函数参数列表不依赖于函数体实际使用多少参数,函数内的变化不会影响母函数的代码。

最常用的变量解释

(1) IFfrequency GPS:信号数字中频频率,单位Hz。

(2) samplingFrequenry GPS:信号采样频率,单位Hz。

(3) msToProcess:此变量值为30000以保证所有的五个6s子帧全都被处理,第一个1000ms数据被忽略掉

(4) processBlockSize:跟踪数据长度。

(5) numOfChannels:通道数。

函数iniSettings生成settings结构体,最初阶段该函数由程序init调用执行。在每一次变量改变的时候,该程序都应该执行。有经验的用户可以直接修改settings里的一些数据。但是要注意,有一些变量有内在关联性会自动重新计算。在函数initSettings内部改变变量是最安全的,之后还将再次执行。在后面的小节中将介绍各模块的变量。

需要注意的是,第61行的文件是绝对路径,因此需要填完整路径信息,否则init.m在执行时会报错。

注释已经加在程序后面,程序附在下面,该程序详细定义了软件接收机捕获、跟踪环节的各个参数。


initSettings.m


该文件中定义了initSettings()函数 。

Settings中包含以下参数,总结出来以方便后面参考使用:

数据处理过程的参数设置

settings.msToProcess    要处理的毫秒数使用36000 +任何瞬态(见下面-在导航参数),以确保导航子帧被提供

settings.numberOfChannels    用于信号处理的通道数

settings.skipNumberOfBytes    移动处理的起点,可用于在数据记录的任何点开始信号处理(例如长记录)。

原始信号文件名和其他参数设置

settings.fileName    数据文件(信号记录)的名称

settings.dataType    用于存储一个样本的数据类

settings.IF    %中频[Hz]

settings.samplingFreq    %采样频率[Hz]

settings.codeFreqBasis    %C/A码的码率[Hz]

settings.codeLength    %码片长度

捕获回路的参数设置

settings.skipAcquisition    %是否跳过捕获程序,如果置1则在postProcessing.m中跳过捕获程序

settings.acqSatelliteList    %需要捕获的卫星名单,为了加快捕获速度,可以排除一些卫星

settings.acqSearchBand    %[kHz]最大多普勒频移的估算过程

settings.acqThreshold    %阈值信号的确定

跟踪回路的参数设置

settings.dllDampingRatio    %衰减率    %C/A码跟踪回路参数

settings.dllNoiseBandwidth    %噪声带宽[Hz]

settings.dllCorrelatorSpacing    %相关器间距[chips]

settings.pllDampingRatio    %衰减率    %载波跟踪环路参数

settings.pllNoiseBandwidth    %噪声带宽[Hz]

导航定位方式的选择

settings.navSolPeriod    %计算伪距和位置的周期[ms]

settings.elevationMask    %去除低仰角的卫星[degrees 0 - 90] 初始化取10

settings.useTropCorr    %启用/禁用对流层校正0 - Off;1 - On

settings.truePosition.E     = nan;    %UTM系统(UNIVERSAL TRANSVERSE MERCARTOR GRID)

settings.truePosition.N     = nan;    %中天线的真实位置(如果已知),否则输入的所有NaN和平均位置将被用作参考。

settings.truePosition.U     = nan;

绘图参数设置

settings.plotTracking    %启用/禁用每个通道的跟踪结果绘图% 0 - Off

settings.c    %光速299792458

settings.startOffset    %[ms] Initial sign. travel time

PS:本人小白不知道如何将MATLAB程序添加至代码段,并能够有颜色显示的,因此只好截图。


setSettings.m


该文件中,定义了以下函数,为方便日后查找,函数部分加粗了。该文件的主要目的应该是能够通过GUI界面,并通过checkbox读取并改变变量“settings”的值。

setSettings(varargin)   返回一个值varargout,所有输入都通过varargin传递给setSettings_OpeningFcn。

setSettings_OpeningFcn(hObject, eventdata, handles, varargin)   尝试从变量“settings”中读取数据

setSettings_OutputFcn(hObject, eventdata, handles)   该函数的输出将返回到命令行,返回一个值varargout

edit_CreateFcn(hObject, eventdata, handles)   设置所有属性后,在对象创建期间执行。

edit_Callback(hObject, eventdata, handles)    在任何输入事件上启用apply按钮

checkbox_Callback(hObject, eventdata, handles)   在任何checkbox中按下按钮时执行

pushbuttonApply_Callback(hObject, eventdata, handles)   在按下applybutton按钮时执行

pushbuttonReset_Callback(hObject, eventdata, handles)   当Reset按钮按下按钮时,尝试从变量“settings”中读取数据

saveSettings(handles)   函数从GUI中读取值并更新设置参数,返回两个值,分别为[settings, error]

loadSettings(handles)   函数将设置加载到GUI中

getCheckbox(handle)   读取checkbox的当前状态,返回变量value(0或者1)

setCheckbox(handle, value)   设置checkbox状态,将“Value”变量设置为不等于“Min”或“Max”的数字会导致Matlab运行时错误。

edit2double(handle)   函数检查编辑字段是否包含数字值,并将字符串类型值转换为double。

pushbuttonSelectDataFile_Callback(hObject, eventdata, handles)   当按钮按下pushbuttonSelectDataFile时执行

pushbuttonProbeData_Callback(hObject, eventdata, handles)   当按钮按下pushbuttonProbeData时执行

pushbuttonDefault_Callback(hObject, eventdata, handles)

下附程序注解,大部分为翻译原文的解释:

以上是setSettings.m的程序注解,如理解有误,恳请大家批评指正!

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王少靖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值