循环中的函数提示和i = i + 1,Matlab

时间:2012-11-06 16:46:22

标签: function matlab while-loop

我在matlab中遇到了一个函数问题。该特定功能用于过滤光信号。正如您在下面看到的,我添加了我在函数和while循环中使用的编码。代码是为NXT乐高机器人编写的。

有没有提示如何让计数变量(i = i + 1)在函数中工作,所以我们可以绘制Light(i)?因为当我们尝试不同的代码使它工作时,我们会得到一堆错误消息。

function  [light]  = filter_func( i)
  lightI(i) = GetLight(SENSOR_3);  

  if i==1
    light(i)=lightI(i)

  elseif i==2
    light(i) =  0.55*lightI(i) + 0.45*lightI(i-1)
  else
    light(i) =  0.4*lightI(i) + 0.3*lightI(i-1) + 0.3*lightI(i-2);
  end

end

i=1
while true
  lightI(i) = GetLight(SENSOR_3); % Get’s a lightvalue between    0 and 1024.
  if i>2
    light =filter_func(i)
    light=round(light); 
  else
    light(i) = GetLight(SENSOR_3);;
  end
  i=1+i  

  plot(light(end-90:end), 'r-');
  title('Lightvalue')
  axis([0 100 0 1023]) ;
end

1 个答案:

答案 0 :(得分:0)

你可能主要得到错误,因为你不允许在MATLAB中混合这样的脚本和函数(就像你在Python中一样)。

您的过滤功能仅在i> 2时使用,那么您为什么要进行前2次测试?看起来你想将lightI作为一个全局变量,但这不是你所做的。函数内的lightI与while循环中的lightI不同。

由于你的while循环永远运行,也许你不必担心前两次更新情节。在这种情况下,您可以这样做:

filter                  = [0.4 0.3 0.3]';
latest_filtered_light   = nan(90,1);
lightI                  = [];
p                       = plot(latest_filtered_light, 'r-');
title('Lightvalue')
axis([0 100 0 1023]) ;

while True
    lightI(end+1,1) = rand*1024; % Get’s a lightvalue between    0 and 1024.
    if i>=3
        new_val               = lightI(end-2:end,1)'*filter;
        latest_filtered_light = [latest_filtered_light(2:end);...
                                new_val];
        set(p, 'ydata', latest_filtered_light)
        drawnow
    end
end

我认为每次不打电话都是重要的一点 - 至少如果你最不关心表现的话。