|  | 
 
 发表于 2019-5-16 17:19:42
|
显示全部楼层 
| 本帖最后由 yanglsbb 于 2019-5-16 17:24 编辑 
 之前没有接触过卫星的知识,只是帮同学做毕设的程序设计部分。希望能帮到楼主。
 
 
 
 
    
        复制代码
 1、
for channelNr = activeChnList
 改为
 
 
 
    
        复制代码
 for channelNr = 1:numel(activeChnList)
 channelNr 应为1或2或3......或8。但诡异的原因,channelNr可能意外的变成一行矩阵[1,2,3,4,5,6,7,8],导致接下来使用channelNr 的代码报错
 
 同样的问题出现在,
 
 
 
 
    
        复制代码
 %--- For all channels in the list ... 
for channelNr = channelList
 改为
 
 
 
    
        复制代码
 for channelNr = 1:numel(channelList)
 
 
 
 
    
        复制代码
 activeChnList=intersect(find(satElev>=settings.elevationMask),readyChnList);
 改为
 
 
 
    
        复制代码
 3、activeChnList=intersect(find(satElev>=settings.elevationMask),readyChnList,'legacy');
 或者
 
 
 
    
        复制代码
 activeChnList = intersect(find(satElev >= settings.elevationMask), ...
                              readyChnList);
     if size(activeChnList,2) == 1
         activeChnList = activeChnList';
     end
 
 因为原本satElev=[inf,inf,inf,inf,inf,inf,inf,inf]为行向量,
 第一次运行代码
 
 
 
    
        复制代码
 activeChnList=intersect(find(satElev>=settings.elevationMask),readyChnList);
 activeChnList仍为行向量
 但代码往下运行satElev = navSolutions.channel.el(:, currMeasNr);
 因为等号后面是列向量,导致
 
 
    
        复制代码
 satElev = [number_A;
               number_B;
               number_C;
               ......;
               number_H]
 第二次运行代码
 
 
    将会导致activeChnList变成列向量
        复制代码
 activeChnList=intersect(find(satElev>=settings.elevationMask),readyChnList);
 进而引发接收机判断卫星数量时出错
 
 
    
        复制代码
 if size(activeChnList, 2) > 3
 size(activeChnList, 2)取activeChnList的列数,列向量为1,所以导致总是返回1.则程序就走不通。
 所以保证activeChnList是行向量是关键。可以在activeChnList=intersect(find(satElev>=settings.elevationMask),readyChnList);之后添加'legacy',或者检测当activeChnList是列向量则转置。
 
 | 
 |