Расчет времени первого и последнего значения выше порога - PullRequest
0 голосов
/ 17 октября 2019

У меня есть сигнал в Simulink (R2015b), который соответствует выходной мощности. Сигнал представляет собой дискретный скаляр с интервалом в 1 минуту. Каждый день в определенное время (т. Е. 00:00) я хочу рассчитать время предыдущего дня (или индекса, поскольку значения дискретны с интервалом в 1 минуту), когда сигнал пересек определенный порог в первый и последний раз (см. Изображение).

Я хотел бы реализовать это в функциональном блоке Simulink, если это возможно, если нет более простого решения.

Спасибо!

image

Ответы [ 2 ]

1 голос
/ 17 октября 2019

Учитывая, что t, signal и threshold имеют данные, о которых вы говорите, другой вариант:

getfield(t(signal>threshold),{[1 sum(signal>threshold)]})

, это даст вам первое и последнее значения времени tгде signal>threshold ...

1 голос
/ 17 октября 2019

Для этого вы можете использовать функцию find . Я не знаю, может ли это быть реализовано как функциональный блок Simulink, я понятия не имею о Simulink:

% fake some data
t = 0:200;
signal = 100*exp(-((t - 100)/50).^2) + randn(1,201)*10;

% plot signal
plot(t, signal);

threshold = 50;

% find first above threshold
ind1 = find(signal > threshold, 1, 'first');

% find last above threshold
ind2 = find(signal > threshold, 1, 'last');

% plot it
hold on;
plot([1 1] * t(ind1), [0 100], 'r-', [1 1] * t(ind2), [0 100], 'r-');

enter image description here

...