如果满足特定标准,则逐步检查间隔

时间:2016-11-16 10:34:16

标签: matlab loops frequency measurement bigdata

首先,我是编程方面的新手。

我有大量的频率测量值。我想检查频率(f)在t = 900 %sec.的整个时间间隔内是否具有以下特征:

f>=50.05 || f<=49.95

但是程序应该在接下来的900秒内每秒检查一次。如果满足标准。所以它应该检查f(i:i+900)。我尝试用循环来解决它以找到那些间隔,但数据的数量太大。这是代码:

T1 = zeros(length_f,1);
T2 = zeros(length_f,1);
for i = 1:length_f
    if f(i:i+900)>=50.05
    T1(i)=1;
    end
    if f(i:i+900)<=49.95
    T2(i)=1;
    end
end

K1=find(T1==1);
K2=find(T2==2);

谢谢!

1 个答案:

答案 0 :(得分:0)

您应该在较小版本的数据上使用分析器来检查哪些行会导致您出现“数据太大”的问题。

如果我理解正确,您需要查看数据的前900秒,如果i - th值满足您的任一条件,请查看i+900 - 点,记录满足向量K1K2条件的所有点的索引。

我建议修改循环以使用while循环并手动控制计数变量。像

这样的东西
% Fixed parameters
f_upper_lim = 50.05;
f_lower_lim = 49.95;
max_count = 900;

% Variables
% Position in f
ii = 1;
% Positions left to test
count = max_count;
% Indices where f(ii) >= f_upper_lim
K1 = [];
% Indices where f(ii) <= f_lower_lim
K2 = [];

while count > 0 & ii <= length_f
  if f(ii) >= f_upper_lim
    K1 = [K1, ii];
    % Reset count - test next max_count values
    count = max_count;
  elseif f(ii) <= f_lower_lim
    K2 = [K2, ii];
    % Reset count - test next max_count values
    count = max_count;
  else
    count = count - 1;
  end % if
  ii = ii + 1;
end % while

与以往一样,您应该使用一小组数据进行测试。