ET创芯网论坛(EETOP)

找回密码

  登录   注册  

查看: 389|回复: 4

软件定义的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, 下载次数: 17 , 下载积分: 资产 -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 | 显示全部楼层
多谢大家
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

关于我们|联系我们|ET创芯网 ( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2019-7-23 15:12 , Processed in 0.061895 second(s), 12 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表