2016-11-16 18 views
0

Прежде всего, я очень новичок в программировании.проверять интервал шаг за шагом, если выполняется конкретный критерий

У меня есть большое количество измеренных значений частоты. Я хочу, чтобы проверить, если частота (е) имеет следующие характеристики в течение всего интервала 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

Будьте осторожны! 'length()' является встроенной матричной функцией – bushmills

+0

ok, я изменю ее на 'length_f' –

ответ

0

Вы должны использовать профилировщик на более мелкой версии своих данных, чтобы проверить, какие строки ведут к вашей проблеме «слишком большие данные».

Если я правильно понял, вы хотите проверить первые 900 секунд своих данных, и если i -е значение удовлетворяет любому из ваших условий, проверьте до i+900-й пункт, записав индексы всех точек, которые удовлетворяют условиям в векторах K1 и K2.

Я бы предложил изменить цикл, чтобы использовать цикл 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 

Как всегда, вы должны проверить это с помощью небольшого набора данных.

+0

Не видел дату вопроса ... – Steve

 Смежные вопросы

  • Нет связанных вопросов^_^