我有一個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