2013-04-23 56 views
-1

我有一个基于以下函数的问题。如果条件为false,如何返回NaN或空矩阵。如何在条件为假的情况下返回NaN或空矩阵

下面的函数实际检查Anchor ID和Source ID是否存在,如果存在这样的组合,它会在循环内部进一步检查Anchor Channel和Source Channel是否存在(如果存在),那么它将计算“y”上。但是如果Anchor Channel和Source Channel不存在这种情况呢?还要考虑Anchor ID和源ID不存在的情况!如果它不存在,那么我希望它返回到NaN或者只是零。

如何修改此功能符合我的要求?

function [rssi_dBm1]= sampletrue(BlinkSetList,AnchorID,SourceID) 

for i=1:length(BlinkSetList) 
    S=cell2mat(BlinkSetList(i));         
    for j=1:length(S) 
     if S(j).AnchorID==AnchorID && S(j).SourceID==SourceID  
      if S(j).AnchorChan==0 && S(j).SourceChan==0    
       y=S(j).agc;            
       rssi_dB1(i)= -(33+y*(89-33)/(29-1)); 
      else 
       rssi_dB1(i)=NaN;    
      end 
     end 
    end 
end 

rssi_dB1(rssi_dB1==0)=[]; 
rssi_dBm1=sum(rssi_dB1(:))/length(rssi_dB1); 
disp([sprintf('The rssi value with A-Chan 0 and S-Chan 0 is %0.0f',rssi_dBm1)]); 

注意:这只是条件的一部分,锚点通道和源通道还有三个组合需要评估。

如果问题仍然不清楚,请发表您的疑问,我会尽力更准确地解释它。

非常感谢您的帮助。提前致谢。

+0

什么是函数声明行('function ...'语句)? – Shai 2013-04-23 09:44:19

+0

@Shai看看编辑过的版本。现在有意义 – 2013-04-23 09:58:00

回答

3

返回楠

function ret = retNan(value) 
if value == true 
    ret = 1; 
else 
    ret = NaN; % set returned value to Nan 
end 

返回一个空矩阵

function ret = retEmpty(value) 
if value == true 
    ret = 1; 
else 
    ret = []; % set returned value to an empty matrix 
end 

编辑功能的函数的一个例子:
底线,可变ret的任何的值(或在case,rssi_dBm1)在函数的结尾 - 返回此值。因此,如果ret为空或NaN该函数只返回空值/ NaN值。
您可以在函数的开头将rssi_dBm1设置为空矩阵,并且只在条件满足时才更改它。在这种情况下,如果所有条件都失败,函数将返回默认值 - 一个空矩阵。

PS,
1.最好是not to use i and j as variable names in Matlab
2.您可以使用mean而不是sum()/length()
3.代替disp(sprintf(...))你可以使用fprintf(1, ...)

+2

不是它影响答案,但肯定只是'如果价值'?为什么'== true'? – Dan 2013-04-23 09:51:28

+0

@丹 - 我想明确“价值”的含义。它仅用于演示。 – Shai 2013-04-23 09:54:30

+0

@Shai我现在编辑了代码。那么它现在如何工作? – 2013-04-23 10:11:14

相关问题