Tôi có một bộ dữ liệu thứ hai về giá trị tốc độ gió 86400 (WS) trong Matlab và cần hỗ trợ lọc nó. Nó đòi hỏi một mức độ thông minh nhất định.Brain teaser - thuật toán lọc sử dụng đường trung bình di chuyển
Nếu WS trung bình vượt quá:
- 25m/s trong một thời gian 600s khoảng
- 28m/s trong một khoảng thời gian 30 giờ
- 30m/s trong khoảng thời gian 3 s
Nếu bất kỳ tham số nào được đáp ứng, WS được coi là 'không hợp lệ' cho đến khi WS trung bình vẫn dưới 22m/s trong khoảng thời gian 300 s.
Đây là những gì tôi có cho yêu cầu 600 giây. Tôi làm trung bình di chuyển 600 và 300 giây trên dữ liệu chứa trong 'dataset'. Tôi lọc các khoảng thời gian từ lần xuất hiện đầu tiên có giá trị trung bình 25m/s sang lần xuất hiện tiếp theo có giá trị dưới 22m/s là 'NaN'. Sau khi lọc, tôi sẽ thực hiện 600 giây trung bình khác, và khoảng thời gian với các giá trị được gắn cờ bằng NaN sẽ bị bỏ lại một NaN.
ví dụ:
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
Điều này sẽ đòi hỏi phải có sử dụng thông minh của 'tìm' và một số chỉ mục. ai đó có thể giúp tôi không? Bộ lọc 28m/s và 30m/s sẽ theo cùng một phương pháp.
Không phải là nó quá liên quan để giải quyết vấn đề, nhưng tôi đoán rằng bằng "WS" bạn có nghĩa là tốc độ gió? – Mac
Vâng, cảm ơn. Tôi đã thêm vào đó. – user1854628
bạn đang cố gắng làm gì với tuyên bố cuối cùng đó? – jerad