# GPS_SDR **Repository Path**: scorpionhat/baldeRF-GPS-L1-receiver ## Basic Information - **Project Name**: GPS_SDR - **Description**: baldeRF GPS L1 receiver;baldeRF GPS L1 接收机 - **Primary Language**: Matlab - **License**: 0BSD - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 5 - **Created**: 2023-11-01 - **Last Updated**: 2023-11-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # BladeRF基于matlab的GPS L1接收机 ## 0.简单说明 ### 0.1开发环境 1. 本人使用**MATLAB** 2021 ,低版本应该可以使用,但是不做保证 2. 需要额外下载链接库(链接库会包含在本项目中,其他文件以及bladerf测试详见[nuand网站](https://www.nuand.com/support/)) 3. 项目使用[BladeRF XA4](https://www.nuand.com/product/bladerf-xa4/)) ### 0.2版本信息 1. 当前版本:1.0.2 2. 更新日期:18/11/2021 3. 作者:xiaoyeyimier 4. 联系方式: 5. **当前md仅用作交流,维护程序,谢谢。本人组内同学随意使用,提供全部版权,无需注明** ### 0.3 其他说明 如有不足之处请Issue或者发邮件 ## 1.BladeRF Setup 参考[Install documents](https://www.nuand.com/bladeRF-doc/guides/bladeRF_windows_installer.html) ### 1.1下载Installer 最新的安装程序可以在以下的链接下载到: https://nuand.com/windows_installers/bladeRF-win-installer-latest.exe 历史版本见: https://nuand.com/installers.php 在安装程序成功完成前,不要连接bladeRF,除非固件升级控制台指示这样做。首先运行exe文件。如果Windows提示是否允许程序执行,请在单击“是”之前验证该发行商是否为Nuand, LLC。启动后,将显示一个欢迎视窗,如下所示。根据提示操作就行。 ![install1.PNG](https://i.loli.net/2021/11/18/bwZaH4DpFCyj7fE.png) ### 1.2 固件更新 下面的页面提供了在安装过程中更新bladeRF固件的选项。v2.0.0 bladeRF固件引入了一个新的USBVID/PID。这需要libbladeRF (bladeRF.dll) v1.16.0或更高版本。然而,第三方应用程序或其他系统(例如,实时映像、Linux发行版)可能提供较旧的libbladeRF版本,这些版本无法检测到运行这个新固件的设备。 因此,v1.9.1固件也提供了反向兼容性的目的。总是可以使用bladeRF-cliprogram2在稍后的时间升级(或降级)固件。FX3固件镜像在bladerf安装中的FX3固件文件夹中提供。这个安装程序也可以重新运行以在v1.9.3和v2.0.0固件之间切换。 ![install2.PNG](https://i.loli.net/2021/11/18/WEKfm3ujV6g1nQ9.png) ### 1.3 MATLAB®搜索路径 如果检测到安装了64位**MATLAB**,将显示以下视窗。建议选择将bladeRF项添加到**MATLAB**搜索路径的默认选项。 ![install3.PNG](https://i.loli.net/2021/11/18/SLI7n3YHuaP4mlw.png) ### 1.4 开始菜单 这个页面提供了自定义开始菜单位置的功能,在该位置可以放置到bladeRF-cli和卸载程序的快捷方式。 ![install4.PNG](https://i.loli.net/2021/11/18/JR3xGFvjpdPsCHy.png) ### 1.5 安装 按照提示操作(懒得翻译了,ψ(`∇´)ψ) ### 1.6 系统路径 在安装结束时,将显示以下视窗。将bladeRF项目添加到%PATH%将允许从cmd.exe执行bladeRF-cli,以及其他程序来定位bladeRF.dll ![install5.PNG](https://i.loli.net/2021/11/18/aEIQnyDW1ptXf6g.png) ### 1.7 安装完成 完成前面的步骤后,将显示最后的完成视窗。重要地,为了使对系统路径和**MATLAB**搜索路径变量的更改生效,您可能需要注销并重新登录 ### 1.8 测试基本设备接入 验证安装成功的一种快速方法是使用bladeRF-cli程序查看有关bladeRF的信息。可以从开始菜单中选择的位置执行bladeRF-cli的快捷方式。也可以通过cmd.exe执行命令:在命令行界面中,bladeRF-cli -iOnce可以通过version、info、print命令获取设备信息。示例输出如下所示。 ![install6.PNG](https://i.loli.net/2021/11/18/hIy2tqL7JzmQNEA.png) ### 1.9 MATLAB搜索路径 如果在第[1.3小节](#jump1_3)中没有将bladeRF项添加到**MATLAB**搜索路径中,那么以下路径必须提供给**MATLAB** 的 *addpath*函数。;例如: c:\Program Files\bladeRF\x64 C:\Program Files\bladeRF\matlabChange C:\Program Files\bladeRF + ***至此所有安装结束***[(不清楚的戳这里┐( ‾᷅㉨‾᷅ )┌ )](https://www.nuand.com/bladeRF-doc/guides/bladeRF_windows_installer.html) ## 2.项目简介 ### 2.1 目的 接IQ GPS L1数据,验证BladeRF功能 ### 2.2 基本baldeRF设置 基本配置见于:\SetBladeRF.m ```matlab %% set bladerf rootpath = cd; DevSettings.sampletime = 30; % Data receiving time [s] DevSettings.num_rxs = 10; % Number of batches stored [times] DevSettings.Fs = 6e6; % Sampling Frequency [Hz] DevSettings.Fc = 1575.42e6; % Center Frequency [Hz] DevSettings.Bw_rx = 1.5e6; % Bandwidth [Hz] DevSettings.num_buf = 512; % buffer size of BladeRF DevSettings.channel = 'RX2'; % Choose Channel 'RX1'/'RX2' DevSettings.biastee = 1; % Biastee (1/0 = open or close) DevSettings.dataType = 'double'; % Data type (BladeRF & GPS Receiver) DevSettings.SavePath = [rootpath,'\',... datestr(now,'mmmm-dd-yyyy__HH-MM-SS')];% Save file path named as now time DevSettings.FileName = datestr(now,'mmmm-dd-yyyy__HH-MM-SS'); % Stored file named as now time DevSettings.LibPath = 'C:\Program Files\bladeRF\matlab'; % BladeRF matlab lib DevSettings.RealTimeProcess = true; % if RealTimeProcess = false,use history data DevSettings.HistoryDataPath = 'C:\matlab项目\BladeRF_GPS\有源天线_10_8\'; % It only works when RealTimeProcess = false DevSettings.HistoryDataName = 'GPSData@Fs10000KHz_Fc1575420KHz_Bw200_'; % It only works when RealTimeProcess = false DevSettings.FileType = 'txt'; % File type (BladeRF & GPS Receiver) ``` | 字段 | 单位 | 意义 | | :-------------: | :------------: | :----------------------------------------------------------: | | sampletime | 秒 | 采样时间 | | num_rxs | 次 | 储存批次数 | | Fs | Hz | 采样频率 | | Fc | Hz | 中心频率 | | Bw_rx | Hz | 带宽 | | num_buf | 个 | BladeRF的缓冲大小 | | channel | 'RX1'/'RX2' | 通道号 | | biastee | 1/0 | 宽带放大器馈电电路 | | dataType | MATLAB数据格式 | 保存数据格式 | | SavePath | 可设置 | 保存数据路径,不建议修改 | | FileName | 可设置 | 保存数据文件名,不建议修改 | | LibPath | 自行选择 | BladeRF链接库位置([忘记了戳这里](#jump1_3),[再戳这里](#jump1_9)) | | RealTimeProcess | true/false | true接收机直接使用当前数据,false使用历史数据 | | HistoryDataPath | 自行选择 | 如果选择回放历史数据,其路径 | | HistoryDataName | 自行选择 | 如果选择回放历史数据,其文件名 | | FileType | txt | 读取和保存文件的类型 | 我们知道matlab是**无法实现多线程的**,因此我们再文件存储时就没法进行接收机的数据读取,造成实际接收数据存在一定的gap,所以采样时间、储存批次数之间的关系就显得很重要,储存批次数太大,gap过多可能导致无法跟踪。储存批次数太小,开辟内存太大,可能导致程序卡死。如当前程序采样30秒,分10批次,一次采集3s数据,需要开辟 $$ \frac{T_{totalsample}}{N_{rxs}}\times F_S\times L_{DataType} \\=3\times10^7\times 8=240MBytes $$ IQ支路需要480MBytes ### 2.2 输出格式 成功运行一次程序,输出一个文件夹,文件夹格式”*Month-dd-yy_hour-min-sec*“,如下图所示: ![output1.png](https://i.loli.net/2021/11/18/2jpCmglwGOYWXJS.png) 文件夹中包含Idata,Qdata,Log三个文件。 其中Log文件记录了一些当前运行时的接收机设置 ![output3.png](https://i.loli.net/2021/11/18/XPZoFE8wzKnaA2M.png) 接收机部分是一个**功能非常不完全的接收机**,实际上我只是为了**验证数据接收完好,读取有效**而抄了一小段程序。仅包含了**捕获和跟踪,没有定位**。*欢迎使用者自己开发。*~( ̄▽ ̄~)~ 显示捕获结果 ![UnCJc3.png](https://m1.im5i.com/2021/11/18/UnCJc3.png) 显示跟踪结果(这个中间掉电了┐( ‾᷅㉨‾᷅ )┌ ) [![UnCfiM.png](https://m1.im5i.com/2021/11/18/UnCfiM.png)](https://macimg.com/image/UnCfiM) ## 3.硬件链接 硬件连接需要注意: + USB保证是3.0接口 + 需要一个biastee,不知道为什么内置biastee打开了也没用 + 不要用电脑USB端口给biastee供电,电流不够,需外接移动电源 ## 4.接收机配置 ```matlab %% Processing settings =========================================== % Number of milliseconds to be processed used 36000 + any transients (see % below - in Nav parameters) to ensure nav subframes are provided %% read settings of bladerf Fs = DevSettings.Fs; IF = DevSettings.Fc-1575.42e6; Bw = DevSettings.Bw_rx; ms2Process = 25000; %[ms] ms2Skip = 50; %[ms] dataType = DevSettings.dataType; eval(['Tempa=',dataType,'(0);']); Info_A = whos('Tempa'); BytesPerData = Info_A.bytes; skipNumberOfBytes = ms2Skip*Fs*BytesPerData*1e-3; %% Acquisition settings ========================================== % List of satellites to look for. Some satellites can be excluded to speed % up acquisition % Intermediate, sampling and code frequencies AcqSettings.samplingFreq = Fs; AcqSettings.codeLength = 1023; AcqSettings.IF = IF; AcqSettings.acqSearchBand = 10; AcqSettings.acqSatelliteList = 1:32; AcqSettings.acq_Acc_ms_No = 5; AcqSettings.OnlyI = false; AcqSettings.codeFreqBasis = 1.023e6; AcqSettings.acqThreshold = 2; AcqSettings.numberOfChannels = 8; %% Tracking loops settings ======================================= %% Fields of settings used TrackingSettings.msToProcess = ms2Process; TrackingSettings.skipNumberOfBytes = skipNumberOfBytes; TrackingSettings.numberOfChannels = 8; TrackingSettings.codeFreqBasis = 1.023e6; TrackingSettings.samplingFreq = Fs; TrackingSettings.codeLength = 1023; TrackingSettings.Pa = 5e-3; TrackingSettings.BytesPerData = BytesPerData; % Code tracking loop parameters TrackingSettings.dllDampingRatio = 0.7; TrackingSettings.dllNoiseBandwidth = 2; %[Hz] TrackingSettings.dllCorrelatorSpacing = 0.5; %[chips] % Carrier tracking loop parameters TrackingSettings.pllDampingRatio = 0.7; TrackingSettings.pllNoiseBandwidth = 25; %[Hz] TrackingSettings.dataType = dataType; TrackingSettings.IsBlanking = true; ``` ### 4.1 捕获参数 | 字段 | 单位 | 意义 | | ---------------- | ---------- | -------------------------- | | msToProcess | Hz | 采样频率 | | codeLength | bits | 伪码长度 | | IF | Hz | 中频 | | acqSearchBand | KHz | 多普勒搜索带宽 | | acqSatelliteList | 编号无量纲 | 卫星编号PRN | | acq_Acc_ms_No | 个(毫秒) | 非相干积分时间(多少个毫秒) | | OnlyI | true/false | 1只是用I支路,0用IQ支路 | | codeFreqBasis | bits/s | 伪码速率 | | acqThreshold | 比值无量纲 | 相关峰主峰与次峰门限 | | numberOfChannels | 个 | 最大捕获个数 | ### 4.2 跟踪参数 | 字段 | 单位 | 意义 | | ----------------- | ------------------ | ---------------------------- | | skipNumberOfBytes | bits | 跳过起始不稳定时间 | | Pa | 概率无量纲 | 干扰消除虚警率(计算门限用) | | dataType | MATLAB数据格式 | 读取·数据格式 | | IsBlanking | SavePathtrue/false | 可设置是否进行干扰消除 | 其余参数为标准CT参数,懒得解释了。