Create a logical array based on signal thresholds

9 Ansichten (letzte 30 Tage)
Cassandra Thompson
Cassandra Thompson am 19 Apr. 2018
Kommentiert: Star Strider am 20 Apr. 2018
How can i create a logical array of zeros and ones based on a threshold (mean +- 3SD) of my signal? I would like to assign a 0 whenever the signal (FxRMS) is above the UpperFxThreshold and below the LowerFxThreshold. When the signal is between these two threshold levels, then i would like to assign a 1. I have plotted the logical array (code below) against my data however, it is incorrect, and i am unsure of how to correct it. I have attached a copy of the script that i have written and example data.
i
%Create a logical array of force data, where: force above and or below threshold limit = 0,
%and force between threshold limits = 1
FxLogic = zeros(size(FxRMS));
for iiFx = 500:numel(FxRMS)
if FxRMS(iiFx)>UpperFxThresh
FxLogic(iiFx) = 0;
elseif FxRMS(iiFx)<LowerFxThresh
FxLogic(iiFx) = 0;
else LowerFxThresh<FxRMS(iiFx)<UpperFxThresh
FxLogic(iiFx) = 1;
end
end

Akzeptierte Antwort

Star Strider
Star Strider am 19 Apr. 2018

If I understand correctly what you are doing, and if ‘FxRMS’ is a vector, you can completely eliminate the loop and do your test in one line:

FxLogic = (FxRMS > LowerFxThresh) & (FxRMS < UpperFxThresh);

This sets ‘FxLogic’ to logical 1 or true for ‘FxRMS’ within the limits, and 0 elsewhere. Logical arrays become numeric arrays by doing any operation on them, for example putting a ‘+’ in front of it:

FxLogic = +((FxRMS > LowerFxThresh) & (FxRMS < UpperFxThresh));

producing a double vector.

This should work.

  4 Kommentare
Cassandra Thompson
Cassandra Thompson am 19 Apr. 2018

FxRMS is medio-lateral ground reaction force (sampled @1000Hz, for 20seconds) during a jump-landing task.

I wanted to ignore any samples prior to ground contact and chose the 500th sample arbitrarily, based on observations of the approximate timing of ground contact between trials, but it's not accurate.

I have created a separate variable to identify the time of ground contact called 'tGND' - and you have just given me the idea to start indexing at the time of ground contact instead.

iiFx = tGND(FxRMS):numel(FxRMS)

So thank you again!

Star Strider
Star Strider am 20 Apr. 2018
As always, my pleasure!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Time-Frequency Analysis finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by