-1

我有一个基于以下功能的问题。如果条件为假,如何返回 NaN 或空矩阵。

下面的函数实际上检查 Anchor ID 和 Source ID 是否存在,如果存在这样的组合,它会在循环内部进一步检查 Anchor Channel 和 Source Channel 是否存在,如果存在,那么它将计算“y”并继续。但是,如果在这种情况下不存在 Anchor Channel 和 source Channel 怎么办?还要考虑如果 Anchor ID 和 source 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)]);

注意:这只是其中的一部分条件,锚频道和源频道还有另外三种组合来评估。

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

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

4

1 回答 1

3

返回 Nan 的函数示例

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 (或者在你的情况下,rssi_dBm1)在函数的末尾 - 这个值都会被返回。因此,如果ret为空或NaN该函数仅返回一个空/NaN值。
您可以rssi_dBm1在函数的开头设置为空矩阵,并且仅在满足条件时才更改它。在这种情况下,如果所有条件都失败,该函数将返回默认值 - 一个空矩阵。

PS,
1. Matlab 中最好不要使用iandj作为变量名
2.您可以使用mean代替sum()/length()
3.代替disp( sprintf(...) )你可以使用fprintf(1, ... )

于 2013-04-23T09:46:31.357 回答