Matlab 如何回报?

Matlab 如何回报?,matlab,matlab-deployment,Matlab,Matlab Deployment,实际上,我正在编写一个Matlab模拟,其中AnchorID和SourceID将相互报告。例如,如果我使用锚30和震源50,它将收集这些锚和震源之间的所有agc值,计算rssi_dB并显示它们。下面提到的是锚30和震源id 50的示例 注意:锚点ID和源ID的列表相同。例如30 50 55 58。这些ID对于锚点和源都是相同的 function A30(BlinkSet) for i=1:length(BlinkSet) xAnchorID=30; xSourceID=

实际上,我正在编写一个Matlab模拟,其中AnchorID和SourceID将相互报告。例如,如果我使用锚30和震源50,它将收集这些锚和震源之间的所有agc值,计算rssi_dB并显示它们。下面提到的是锚30和震源id 50的示例

注意:锚点ID和源ID的列表相同。例如30 50 55 58。这些ID对于锚点和源都是相同的

function A30(BlinkSet)
for i=1:length(BlinkSet)

      xAnchorID=30;
      xSourceID=50;
      a=BlinkSet{i}.AnchorID;
      b=BlinkSet{i}.SourceID;
      if xAnchorID==a && xSourceID==b
      xagc=BlinkSet{i}.agc;
      rssi_dB(i)=-(33+xagc*(89-33)/(29-1));
      end
  end
     rssi_dB(rssi_dB==0)=[];
     rssi_dBm=sum(rssi_dB(:))/length(rssi_dB);
     disp([sprintf('The rssi value is %0.0f',rssi_dBm)]);
当我在Matlab命令窗口中调用该函数时,我得到了上述函数的rssi值

另外,我的任务是,当我重复使用锚ID和源ID时,比如说锚为50,源为30,就像我在下面提到的函数一样,我得到一个错误,这个错误在下面的函数后面提到

function A50(BlinkSet)
for i=1:length(BlinkSet)

   xAnchorID=50;
   xSourceID=30;
   a=BlinkSet{i}.AnchorID;
   b=BlinkSet{i}.SourceID;
   if xAnchorID==a && xSourceID==b
   xagc=BlinkSet{i}.agc;
   rssi_dB(i)=-(33+xagc*(89-33)/(29-1));
   end

end
rssi_dB(rssi_dB==0)=[];
   rssi_dBm=sum(rssi_dB(:))/length(rssi_dB);
disp([sprintf('The rssi value is %0.0f',rssi_dBm)]);
当我调用这个函数时,我得到一个错误

??? Undefined function or variable "rssi_dB".

 Error in ==> A50 at 14
 rssi_dB(rssi_dB==0)=[];

 Error in ==> main_reduced at 26
 A50(BlinkSet);
在主函数中,我这样编码

 %A30(BlinkSet);
 A50(BlinkSet);

非常感谢您的帮助

在这两个函数中,只有当执行在循环中输入
if
语句时(即,if
xAnchorID==a&&xSourceID==b
在某个点为true),才能创建变量
rssi_dB
。显然,此代码永远不会在
A50
函数中执行。在不知道
BlinkSet
中的内容的情况下,诊断确切的问题有点困难,但这至少是原因所在

附带说明:当两个函数的代码几乎相同时,创建两个单独的函数来完成这项工作不是一个好主意。您应该在函数中添加一个输入参数,使其能够同时完成这两项工作。在这种特殊情况下,所有更改都是
xAnchorID
xSourceID
的值,因此您可以将这些值传入:

function srcToAnchorRssi(BlinkSet, xSourceID, xAnchorID)
    % The rest of the function stays the same!
如果要为这些参数提供一些默认值,可以这样做,例如:

if nargin < 3 || isempty(xAnchorID), xAnchorID = 50; end
if nargin < 2 || isempty(xSourceID), xSourceID = 30; end
如果nargin<3 | |为空(xAnchorID),xAnchorID=50;结束
如果nargin<2 | |为空(xSourceID),xSourceID=30;结束

在这种类型的语句中包含一个
isempty
,这样您的函数就可以支持类似
myFunction(myArg1,[],myArg3)
这样的语法。还要注意,操作数到
| |
的顺序至关重要;如果执行了
if isempty(theArgument)| nargin
且用户未传递
the argument
,则它将在
isempty
中出错,因为
该argument
不会作为局部变量存在。我们可以通过交换操作数的顺序来解决这个问题,因为MATLAB足够聪明,知道如果左操作数为
true
(注意,在许多其他编程语言中也是如此)。

实际上,BlinkSet是一个结构,它包含了大约。所以在每个单元格中都有不同的单元格,用它们的AnchorID和sourceID表示报告。你介意为你写的旁注举个例子吗?这会有帮助的!!谢谢你,瓦卡!出乎意料的是,现在确实有点道理了!我要试试这个@如果你的问题已经被回答了,你应该点击“接受答案”按钮,这样这个问题就不会循环回到首页(也可能会考虑对答案进行投票)。但是我没有足够的声誉去投票给答案!!