Hi,
I am trying to find when my data goes below a threshold, but not everytime it goes below threshold. Given a certain event when it goes below a threhsold (both in the forward and reverse direction). I have a logical matrix of 1's and 0's that signal when my data is above a threshold (1) and not (0)( attached low_thresh). I also have a matrix of of index locations where events occur (baseline_waves). For each location event, I want to find where the next place the data goes below the threshold (in both the forward and reverse direction). Specifically where these locations are and the distance between the occurence in the reverse and forward direction. Every location will be above the threshold, just as a side note. I have tried a few ways, but cannot seem to come up with a good way to do this.
Any help would be appreciated.

 Réponse acceptée

Image Analyst
Image Analyst le 19 Fév 2021

0 votes

Can't you just mask it, like
indexes = above_threshold & baseline_waves;
then examine that logical with find() or strfind()?
If not, post a picture of a plot of the data with threshold indicated and the "events" located, and the indexes you want to find in the forward and reverse directions (do you mean "first" and "last"? If not explain forward and reverse.)

3 commentaires

So I used indexing to get the locations to get the locations in baseline_waves. I am struggling with having to indexes and trying to find data from one based off of the other.
To simplify I attached an image. The high threshold is in red - and the location when that goes over that would be the "baseline_waves." So the red arrow would indicate when that data goes above the "high thresh", once it goes above, I want to find when that signal for this event "first" went above the lower threshold and then when it goes back below the low thresh - "last" shown by the arrow. Please let me know if this clarifies anything or if you have any advice?
% Find indexes above highThreshold
aboveHighIndexes = signal > highThreshold;
firstHigh = find(aboveHighIndexes, 1, 'first');
% "find when that signal for this event "first" went above the lower threshold"
% Make copy with values below the first index set to -inf
signalCopy = signal;
signalCopy(1:firstHigh - 1) = -inf;
% Now find where the signal is first above the lower threshold.
firstLow = find(signalCopy > lowThreshold, 1, 'first');
% Now find where the signal is first dives below the lower threshold, but after the first low index.
signalCopy(1 : firstLow) = inf;
nextLow = find(signalCopy <= lowThreshold, 1, 'first');
Attach actual data and expected results if you need more help.
Yes, this is great. Setting to infinity was great. Thanks so much, as always Image Analyst for your help!

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by