基于MATLAB编写的GNSS

您所在的位置:网站首页 sdr接收机是什么 基于MATLAB编写的GNSS

基于MATLAB编写的GNSS

2024-06-10 17:50| 来源: 网络整理| 查看: 265

第一次使用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(errStrucssage); 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的程序注解,如理解有误,恳请大家批评指正!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3