【发布时间】:2012-11-26 20:57:56
【问题描述】:
我在 Matlab 中有一个 86400 风速 (WS) 值的 1 秒数据集,需要帮助来过滤它。这需要一定程度的聪明才智。
如果平均 WS 超过:
- 25m/s,600s 时间间隔
- 28m/s,30s 时间间隔
- 3 秒时间间隔内 30 米/秒
如果满足这些参数中的任何一个,则 WS 被视为“无效”,直到平均 WS 在 300 秒的时间间隔内保持在 22m/s 以下。
这是我对 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”是指风速?
-
好的,谢谢。我添加了那个。
-
你想用最后的语句做什么?
-
好的,我想我明白你要做什么了。那么,您最后的陈述是否按预期工作?如果不是,它会返回错误吗?
标签: matlab filter indexing find octave