Briain teaser - Filtering for particular algorithm
Info
This question is closed. Reopen it to edit or answer.
Show older comments
I have a 1 second dataset of 86400 wind speed (WS) values and need assistance in filtering it. It requires a certain level of cleverness.
If the average WS exceeds:
- 25m/s in a 600s time interval
- 28m/s in a 30s time interval
- 30m/s in a 3 s time interval
If any of these parameters are met, the WS is deemed 'invalid' until the average WS remains below 22m/s in a 300 s time interval.
Here is what I have for the 600 second requirement. I do a 600 and 300 second moving average on the data contained in 'dataset'. I filter the intervals from the first appearance of an average 25m/s to the next appearance of a value below 22m/s as 'NaN'. After filtering, I will do another 600 second average, and the intervals with values flagged with a NaN will be left a NaN.
i.e.
Rolling600avg(:,1) = tsmovavg(dataset(:,2), 's', 600, 1);
Rolling300avg(:,1) = tsmovavg(dataset(:,2), 's', 300, 1);
a = find(Rolling600avg(:,2)>25)
b = find(Rolling300avg(:,2)<22)
dataset(a:b(a:find(b==1)),2)==NaN; %?? Not sure
This is going to require a clever use of 'find' and some indexing. Could someone help me out? The 28m/s and 30m/s filters will follow the same method.
Answers (1)
Walter Roberson
on 26 Nov 2012
T = cumsum(dataset(:,2));
Rolling600avg = (T(601:end) - T(1:end-600)) ./ 600;
Rolling300avg = (T(301:end) - T(1:end-300)) ./ 300;
Rolling3avg = (T(4:end) - T(1:end-3)) ./ 3;
valid = true(1, size(dataset,1));
valid(601:end) = Rolling600avg < 25;
valid(301:end) = valid(301:end) & (Rolling300avg < 38);
valid(4:end) = valid(4:end) & (Rolling3avg < 30);
dataset(~valid) = NaN;
6 Comments
Braden
on 26 Nov 2012
Walter Roberson
on 26 Nov 2012
Doesn't look quite right, but I will need to think about it more.
Isn't it the case that when a violation occurs, the "end" of the violation is not until the first instance after that window, that Rolling300avg < 22 ?
What should happen if Rolling300avg turns < 22 in the middle of a 600 violation?
Braden
on 26 Nov 2012
Walter Roberson
on 26 Nov 2012
To confirm, "next time" refers to past the current window? Excluding any data in the current window?
Braden
on 26 Nov 2012
This question is closed.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!