在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
EETOP诚邀模拟IC相关培训讲师 创芯人才网--重磅上线啦!
查看: 6187|回复: 8

软件定义的GPS和伽利略接收机这本书提供的matlab代码运行出错

[复制链接]
发表于 2018-12-11 20:54:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
软件定义的GPS和伽利略接收机这本书提供的matlab代码运行出错。(代码链接:https://pan.baidu.com/s/1i3r7Pch )有哪位之前运行遇到过同样的情况么?谢谢。捕获和跟踪好像没有问题,最终位置解算有问题。
发表于 2019-5-16 17:04:22 | 显示全部楼层
本帖最后由 yanglsbb 于 2019-5-16 17:35 编辑

你好,代码在matlab 7上是可以正常运行的。在matlab 2017a上运行报错的。
我成功为代码进行了适配,并编写了脚本比对得出的结果,应该是没有问题的。

test23.rar

25.75 MB, 下载次数: 54 , 下载积分: 资产 -8 信元, 下载支出 8 信元

解算部分,需要依赖的M文件已包含

发表于 2019-5-16 17:19:42 | 显示全部楼层
本帖最后由 yanglsbb 于 2019-5-16 17:24 编辑

之前没有接触过卫星的知识,只是帮同学做毕设的程序设计部分。希望能帮到楼主。


postNavigation.m:





  1. 1、
  2. for channelNr = activeChnList


复制代码

改为




  1. for channelNr = 1:numel(activeChnList)


复制代码

channelNr 应为1或2或3......或8。但诡异的原因,channelNr可能意外的变成一行矩阵[1,2,3,4,5,6,7,8],导致接下来使用channelNr 的代码报错

同样的问题出现在,


calculatePseudoranges.m





  1. %--- For all channels in the list ...
  2. for channelNr = channelList


复制代码

改为




  1. for channelNr = 1:numel(channelList)


复制代码



postNavigation.m:





  1. activeChnList=intersect(find(satElev>=settings.elevationMask),readyChnList);


复制代码

改为




  1. 3、activeChnList=intersect(find(satElev>=settings.elevationMask),readyChnList,'legacy');


复制代码

或者




  1. activeChnList = intersect(find(satElev >= settings.elevationMask), ...
  2.                               readyChnList);
  3.      if size(activeChnList,2) == 1
  4.          activeChnList = activeChnList';
  5.      end


复制代码


因为原本satElev=[inf,inf,inf,inf,inf,inf,inf,inf]为行向量,
第一次运行代码




  1. activeChnList=intersect(find(satElev>=settings.elevationMask),readyChnList);


复制代码

activeChnList仍为行向量
但代码往下运行satElev = navSolutions.channel.el(:, currMeasNr);
因为等号后面是列向量,导致



  1. satElev = [number_A;
  2.                number_B;
  3.                number_C;
  4.                ......;
  5.                number_H]


复制代码

第二次运行代码



  1. activeChnList=intersect(find(satElev>=settings.elevationMask),readyChnList);


复制代码
将会导致activeChnList变成列向量
进而引发接收机判断卫星数量时出错



  1. if size(activeChnList, 2) > 3


复制代码

size(activeChnList, 2)取activeChnList的列数,列向量为1,所以导致总是返回1.则程序就走不通。
所以保证activeChnList是行向量是关键。可以在activeChnList=intersect(find(satElev>=settings.elevationMask),readyChnList);之后添加'legacy',或者检测当activeChnList是列向量则转置。
发表于 2019-6-8 14:11:18 | 显示全部楼层
你好,请问有MATLAB生成中频信号的程序吗?
发表于 2019-6-13 14:11:37 | 显示全部楼层
多谢大家
发表于 2020-9-25 09:50:46 | 显示全部楼层
学习一下
发表于 2021-9-13 10:58:58 | 显示全部楼层
这个可以么?
发表于 2022-2-23 18:55:49 | 显示全部楼层
谢谢,挺好
发表于 2022-2-23 19:14:11 | 显示全部楼层
谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-6 07:35 , Processed in 0.027866 second(s), 10 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表