我有一个1秒的86400风速(WS)值在Matlab中的数据集,需要过滤它的帮助。它需要一定程度的聪明。Brain teaser - 使用移动平均数的过滤算法
如果平均WS超过:
- 25米/ s的在600秒的时间间隔
- 28米/秒在一个30秒的时间间隔
- 30米/ s的在3秒时间间隔
如果满足这些参数中的任何一个,则在300秒的时间间隔内平均WS保持在22m/s以下之前,WS被视为“无效”。
下面是我对600秒的要求。我对“数据集”中包含的数据做了600秒和300秒的移动平均数。我从平均25m/s的第一次出现到下一次出现低于22m/s的数值的时间间隔过滤为“NaN”。过滤后,我会再做600秒的平均值,并且带有用NaN标记的值的间隔将保留为NaN。
即
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
这将需要巧妙地利用“查找”和一些索引。有人可以帮我吗? 28m/s和30m/s过滤器将遵循相同的方法。
这不是说它与解决问题过度相关,但我猜测“WS”是指风速? – Mac
是的,谢谢。我补充说。 – user1854628
你想用最后一条语句做什么? – jerad