基于MATLAB编写的GNSS |
您所在的位置:网站首页 › sdr接收机是什么 › 基于MATLAB编写的GNSS |
第一次使用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程序添加至代码段,并能够有颜色显示的,因此只好截图。 该文件中,定义了以下函数,为方便日后查找,函数部分加粗了。该文件的主要目的应该是能够通过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 |