clear all;clc;cla;close all;
format longg; %%15位有效数
%% 一、  设定GPS数据文件参数 %%%%%%%%%%%%%%
gps_bd = 0; % 0:gps, 1:bd
n_mean_count = 200; %bias count
if gps_bd == 0% 这个中频数据是 bit8filename = '.\data\GPS_sim_5mfs_if1.42m.txt';% 相对路径 当前工程文件夹下的data文件夹下的GPS_sim_5mfs_if1.42m.txt文件fs = 5e6; % 采样率★书本260页实际采样在5E6fc = 1.42e6;% 采样数据中频★sv = 1:32;% 要捕获跟踪的卫星号 若不知道有哪些星可以设置为 sv=1:32 但这样处理速度会比较慢★Readtype = 'bit8';%数据读取位宽,要注意 不同的中频信号采样位是否一致,有符号采样时,高位为符号位,低位为幅值位%     filename = 'D:\9.WorkInTheLab\0.Project\0.GNSS_SignalQualityMonitor\1.data\2771\data\GPSL1_8bit_fs16.369M_fc3.996M.bin';
%     fc = 3.996e6;
%     fs = 16.369e6;
%     sv = 28;
%     Readtype = 'bit8';%     filename = 'C:\MATLAB7\work\BDSB1-8bit-PwrSpectAbnorm-202006172224.bin';
%     fc = 3.996e6;
%     fs = 16.369e6;
%     sv = 1:32;
%     Readtype = 'bit8';disp 'gps acq'
elsefilename = 'C:\MATLAB7\work\usbdata.bin';fc = 3.999875e6;fs = 16.369e6;sv = 1:32;Readtype = 'bit8';disp 'bd acq'
end
%% 二、  任务配置 %%%%%%%%%%%%%%
task_AcqOnly= 0  ;             %捕获标志,为1时只进行捕获,为0时则进行捕获跟踪
task_Acq_Track=1;              %捕获跟踪标志,为1 - 则进行捕获、跟踪;为 0 则调用以前结果进行NAV定位
track_acqresultsName='capture_test.mat';%%捕获跟踪后生成的数据保存名字,task_Acq_Track = 0 时则直接调用此数据进行定位解算。注意每次用不同的中频数据时取不同的名字,以免覆盖。
task_frameFindChk=  1    ;      %找子帧标志, 1则找子帧,其他则不进行                            0
task_nav = 1           ;        %定位解算标志 1则参与定位解算,其他则不进行                      0
plotAcq_AND_Channel=  1  ;      %捕获通道画图标志,1则画图,其他则不进行
plot_Acq_ACF= 1        ;        %捕获三维图和相关累加画图标志,1则画图,其他则不进行
if task_Acq_Track==1            %捕获跟踪标志,为1 - 则进行捕获、跟踪;为 0 则调用以前结果进行NAVtask_load_results= 0   ;
elsetask_load_results=  0 ;
end
%% 三、  捕获、跟踪参数设置 %%%%%%%%%%%%%%
% file_sec=0.400;              %跟踪时间★,单位为秒,理论上大于30秒后方可能定位解算,一般取33来验证,也可长时间跑看定位效果  %%!!!!!!注意如果有时数据长度不够的话,会报错。如此时的数据GPS_sim_5mfs_if1.42m.txt用36s就会报错,用33则不会。
file_sec=33;                    %跟踪时间要这么长?★
channels=8;                     %通道数设置★8-12书上,但后面真正用到的不一定是8,可能<8
acq_th=2.5;                       %捕获门限★
K=1;                            %非相干累加次数★
fc_lo=fc-5000;fc_hi=fc+5000;step=100;%doppler bin★
nav_interval=0.001;             %导航定位解算时间间隔,单位为秒★
ts=1/fs;                        %采样时间★
n=fs/1000;   n_mli=n;           %1ms的采样点数 ★
nn=0:n-1;                       %采样点范围 ★
num_sec=0.011;                  %读取文件中的长度设置,★
n_samples=fs*num_sec;           %读取文件中的采样点个数,如当前设置为10ms采样数据
plot_acq_bar_par = [];          %捕获柱状画图卫星SNR计数%% 四、  读取 真实采集数据或调用以前的处理结果%%%%%%%%%%%%%%%%%%%%%
if task_Acq_Track==1    fid = fopen(filename,'rb');          %打开filename路径读取文件 skipNumberOfBytes = fs * 3;            %为什么是3?fseek(fid,skipNumberOfBytes, 'bof');data_sum=fread(fid,n_samples,Readtype);     %以Readtype为文件格式,以n_samples为 数据长度已读取文件保存到data中fclose(fid);                            %关闭文件      data_sum=data_sum';%%%对读取数据进行处理,目的是把数据的值缩小一半缩小计算量,也可不处理拿来直接用n=4;data=data_sum;[data_bias,mean_data] = bias_control(data,n_mean_count);data = data_bias;plotPSD(data,fs);grid on;                    %功率画图xlabel('频率/MHz'); ylabel('功率谱密度/dB·Hz');title ('信号功率谱密度');
end
%%%%%%%%*********.load 以前的结果进行定位解算. .**********%%%%%%%%
if task_load_results==1load(track_acqresultsName);             %导入捕获跟踪存储的数据直接用来导航定位解算
end%% 五、  ★捕获%%%%%%%%%%%%%%%%%%%%
if task_Acq_Track==1disp '1..Acqisiting.!----'acq=[];                 %acq初始化j=1;                    %捕获卫星个数变量,用于保存捕获通道参数指向路径fprintf('(');for i=1:length(sv)      %捕获设定的卫星编号svnum=sv(i);        %当前捕获的卫星编号        if gps_bd == 0% 输入参数:中频数据,卫星编号,采样频率,频率搜索起点,频率搜索步长,频率搜索截止点,非相干累加次数,捕获门限% 输出参数:捕获成功标志,捕获的载波频率,捕获的码相位,非相干累加值,非相干累加值峰均比
%             [acqOK,f,ph,acf,PAR]=GPSacquisition(data,svnum,fs,fc_lo,step,fc_hi,K,acq_th);[acqOK,f,ph,acf,PAR] = GPSacquisition_s(data,svnum,fs,fc_lo,step,fc_hi,K,acq_th);else[acqOK,f,ph,acf,PAR]=BDacquisition(data,svnum,fs,fc_lo,step,fc_hi,K,acq_th);endplot_acq_bar_par(i)=PAR;% ★捕获成功时,缓存捕获信息:非相干累加值,卫星编号,牵引载波频率,码相位% 画捕获三维图和非相干累加值图if acqOK  figure;acfhandler=mesh(acf);set(acfhandler,'EdgeColor','none','Facecolor','interp');text=sprintf('SV %i',svnum);title(text);  xlabel('码相位');ylabel('载波多普勒');[m fbin]=max(max(acf'));% 行号即是载波多普勒   [m ccn]=max(max(acf));% 列号即是码相位
%             figure; plot(abs(acf(:,ccn)),'-o');
%             xlabel('多普勒');ylabel('非相干积分值');
%             figure; plot(abs(acf(fbin,:)),'-o');
%             xlabel('码相位');ylabel('非相干积分值');
%             [f_pull,dfreq]=gps_pvt_fpullin(data,svnum,f,fs,ph); % 5hz 高分辨率acq(j,1)=PAR;                   acq(j,2)=sv(i);                 %卫星编号acq(j,3)=f;  acq(j,4)=ph;                    %码相位j=j+1;                          %每捕获一颗星,通道号+1fprintf('%d,', sv(i));         %捕获成功是则输出卫星号      elsefprintf('.');                  %未捕获成功时则输出"."end endfprintf(')\n');  if isempty(acq)disp '---acq is failed---';return;elseplot_acq_bar(plot_acq_bar_par,acq_th); %捕获柱状画图       disp '2..Configure channels for track: 'disp ' _______________________________________________________'disp '|  CH | PRN | Frequency  | Doppler | CodePhase | PAR    |';channel_num=min(channels,size(acq,1));                          %取决于初始通道数和捕获卫星数if plotAcq_AND_Channel==1for i=1 : channel_numfprintf('| %2d  | %2d  | %6.2f |  %6.0f |  % 6d   |  %2.2f  | \n',...i, ...                  %显示通道号                acq((i),2), ...         %显示卫星编号acq((i),3), ...         %载波频率acq((i),3) - fc, ...    %多普勒频移 acq((i),4),...          %码相位acq((i),1));            %非相干累加幅值endenddisp '  --end of  Acqisition!AND Sort acqresults by PAR-----';[acq_SNRdescend]=gps_SoftReceiver_sort_acqdescending(acq);%把捕获的结果按SNR的顺序由大到小重新排列acq=acq_SNRdescend; end
end
%% 六、★跟踪并处理、保存结果
if task_AcqOnly==0    %到本脚本的结束位置       if (task_Acq_Track==1&&task_AcqOnly==0)%%6.1---跟踪初始化 % %disp '3..Tracking.!----'length_ms=file_sec*1000;                            %跟踪时间长度Ips=zeros(channel_num,length_ms);                   %I路信号初始化Qps=zeros(channel_num,length_ms);                   %Q路信号初始化code_shifts=zeros(channel_num,length_ms);           %码相位偏移初始化navidatas=zeros(channel_num,length_ms/20+2);        %电文数据比特长度初始化navdata_indexs=zeros(channel_num,length_ms/20+2);   %电文数据比特长度深度初始化 carr_Freqs=zeros(channel_num,length_ms);            %载波频率初始化carr_remPhases=zeros(channel_num,length_ms);        %载波角频率初始化code_Freqs=zeros(channel_num,length_ms);            %码频率初始化code_remPhases=zeros(channel_num,length_ms);        %码角频率初始化%%6.2******跟踪-输出导航电文  +  数据解调+1-1 并主意这里的跟踪相位*%%%%%%%%%Bit_sync_OK =0;Bit_sync =zeros(channel_num,length_ms); for i=1:channel_numfprintf('  %d ',i)                              %输出当前跟踪通道phase=acq((i),4);                               %码相位%函数:gps_pvt_track_beijingNCO  跟踪环% 输入:[路径文件名,卫星号,采样频率,捕获载波频率,捕获码相位,跟踪时间,读取数据位宽,捕获通道总数,当前通道号]% 输出:[I路数据,Q路数据,码相位偏移地址,EPL功率值,包含多普勒频移载波频率,载波角相位,码频率,码角相位] [Ip,Qp,code_ph_shift,acf_EPL,carr_Freq,carr_remPhase,code_Freq,code_remPhase]=gpsTracking(filename,acq((i),2),fs,acq((i),3),phase,file_sec,Readtype,skipNumberOfBytes,channel_num,i);%             Ips(i,1:length(Ip))=Ip;                                         %Ip路数据
%             Qps(i,1:length(Qp))=Qp;                                         %Qp路数据
%             code_shifts(i,1:length(code_ph_shift))=code_ph_shift;           %码相位偏移地址
%             carr_Freqs(i,1:length(carr_Freq))=carr_Freq;                    %包含多普勒频移的载波频率
%             carr_remPhases(i,1:length(carr_remPhase))=carr_remPhase;        %载波角相位
%             code_Freqs(i,1:length(code_Freq))=code_Freq;                    %码NCO
%             code_remPhases(i,1:length(code_remPhase))=code_remPhase;        %码角相位end
%         save (track_acqresultsName, 'channel_num', 'navidatas','code_shifts', 'Qps', 'Ips', ...
%             'navdata_indexs','Bit_sync','acf_EPL' ,'acq','fs','carr_Freqs','carr_remPhases','code_Freqs','code_remPhases','fc');%注意每次保存后更改data的名字 以免覆盖
%         fprintf('\n');disp '..End of Track AND track_acqresults saved!----'elsedisp 'task_track=0'endfigure; subplot(2,1,1),plot(Ips,'-o');subplot(2,1,2), plot(Qps,'-*');
end
%

GPS软件接收机matlab程序学习笔记(一)相关推荐

  1. MATLAB接收机位置解算,GPS-receiver GPS软件接收机代码 完整的捕获 解算定位 (可 8个通道) matlab 240万源代码下载- www.pudn.com...

    文件名称: GPS-receiver下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 148 KB 上传时间: 2015-07-02 下载次数: 0 提 供 ...

  2. 微信小程序学习笔记一 + 小程序介绍 前置知识

    微信小程序学习笔记一 1. 什么是小程序? 2017年度百度百科十大热词之一 微信小程序, 简称小程序, 英文名 Mini Program, 是一种不需要下载安装即可使用的应用 ( 张小龙对其的定义是 ...

  3. 小程序 pagescrollto_微信小程序学习笔记(三)-- 首页及详情页开发

    一.常用组件 在上一个章节中讲解了封装请求数据的模块,在此处请求轮播图的数据 1.首页轮播图数据的请求以及渲染 1.1 轮播图数据的请求 pages/home/home.js import 2 使用组 ...

  4. 微信小程序学习笔记(1)

    微信小程序学习笔记 1.小程序代码结构 2.逻辑层和视图层 3. 小程序的宿主环境(通信模型.运行机制.组件.API) 4. 数据绑定和事件绑定 1.小程序代码结构 当开发者新建一个工程时,项目文件包 ...

  5. 系统辨识理论及MATLAB仿真——学习笔记(1)

    系统辨识理论及MATLAB仿真学习笔记(1) 前言 目录 第1章 绪论 1.1 建立数学模型的基本方法 1.2 系统辨识的定义 1.3 系统辨识的研究目的 1.4 数学模型的分类 1.5 几种常见的数 ...

  6. matlab bwmorph spur,matlab图像处理学习笔记-数学形态与二值图像操作

    matlab图像处理学习笔记-数学形态与二值图像操作 数学形态学主要处理的是二值图像,因为二值图像的处理操作比较简单. 9.1 数学形态学图像处理 基本思想:利用一个称作结构元素(structurin ...

  7. Linux0.12引导启动程序学习笔记(i386)

    // 主题:Linux0.12引导启动程序学习笔记(i386) // 作者:kevinjz2010@gmail.com // 版权:kevinjz原创 // 平台:80386 // 发布日期:2011 ...

  8. 微信小程序学习笔记(七)----简单文章推荐列表和分类图标的实现

    想要实现一个顶部是几篇纯文字的推荐文章,推荐文章下面是四个分类图标,具体实现出来是这个样子的,比较简单: 首先先来找一下素材,这几个图标是我在阿里巴巴图标库下载的,这里是下载地址: http://ww ...

  9. 小程序学习笔记(1)

    小程序学习笔记(1) 以下是学习期间记录的笔记: 10-18号晚上学习笔记: 小程序实际上是需要下载安装的,只是很小,用户基本上觉察不到 组件是具有一定的功能的代码的集合 移动端适配: 物理像素:是图 ...

最新文章

  1. iMeta | 中科院生态中心邓晔组发布微生物组网络分析平台iNAP(图文/视频教程)
  2. 极大似然估计_计量经济学 | 极大似然估计
  3. Eclipse项目部署到Tomcat中路径
  4. Qt中的QDialog
  5. [数据结构]快速排序
  6. nginx大量TIME_WAIT的解决办法 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'...
  7. 使用opencv读取图片错误([ WARN:0@13.701] global D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\..)
  8. android 使用String.format(%.2f,67.876)自已定义语言(俄语、西班牙语)会把小数点变为逗号...
  9. 【在线报表设计】提升报表外观的15个技巧
  10. java inputstream字节流_Java输入输出流ByteArrayInputStream和ByteArrayOutPutStream
  11. java空类型方法无参_类的无参方法
  12. struts2 防止重复提交 与 进入等待画面
  13. CDQZ_Training 2012-05-24 聪明的打字员
  14. awk if 不包含_linux高级运维必会命令——AWK命令详解及实例分享
  15. python 列表操作详解,Python列表解析操作实例总结
  16. 遍历图像方法以及注意事项
  17. 基于JavaWeb的幼儿园信息管理
  18. 调试技巧(Debugging)
  19. 小白的编程经验(vim编辑器的使用)
  20. 中企故事汇:铁匠之乡借东风出海

热门文章

  1. 季节性时间序列分析-SARIMAX模型的python实现
  2. 周期性时间序列的预测
  3. 计算公式 - 四则运算实现
  4. literal_eval不能执行函数及其本质
  5. 2017全国计算机教育大会,GCCCE 2017 全球华人计算机教育应用大会
  6. oneinstack_OneinStack常用命令
  7. android studio 中无法安装或打开sdk管理,或者是异常android studio Illegal char 《:》 at index 40
  8. HBuildX的下载与安装
  9. c语言整形实数除法四舍五入吗,如何确保整数除法总是四舍五入?
  10. python 大整数的精确计算——除法(/)、整数除法(//)