Matlab 如何回报?
实际上,我正在编写一个Matlab模拟,其中AnchorID和SourceID将相互报告。例如,如果我使用锚30和震源50,它将收集这些锚和震源之间的所有agc值,计算rssi_dB并显示它们。下面提到的是锚30和震源id 50的示例 注意:锚点ID和源ID的列表相同。例如30 50 55 58。这些ID对于锚点和源都是相同的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=
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
语句时(即,ifxAnchorID==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表示报告。你介意为你写的旁注举个例子吗?这会有帮助的!!谢谢你,瓦卡!出乎意料的是,现在确实有点道理了!我要试试这个@如果你的问题已经被回答了,你应该点击“接受答案”按钮,这样这个问题就不会循环回到首页(也可能会考虑对答案进行投票)。但是我没有足够的声誉去投票给答案!!