Moving window in a Queue FIFO buffer

I'm trying to find how often an event occurs over a moving time window in Simulink - say, how many times a boolean input goes true over the past 60 seconds. I see the Queue block will act as a FIFO buffer and can report the number of entries in the block, or if the block is full. But I'd also like to drop/pop any entries older than 60 seconds.
Can this be accomplished?

回答(1 个)

Jack
Jack 2025-3-12
You can implement a moving window by storing the timestamps of each event (when the boolean input goes true) in a FIFO buffer and then continuously removing (or “popping”) any timestamps that are older than 60 seconds. One straightforward approach is to use a MATLAB Function block to maintain an array of event timestamps. When an event occurs, you append the current simulation time to the array. At each simulation step, compare the current time to each stored timestamp and remove any that are older than (current time – 60 seconds). The number of remaining timestamps in the buffer represents the count of events in the last 60 seconds.
Follow me so you can message me anytime with future questions. If this helps, please accept the answer and upvote it as well.

类别

帮助中心File Exchange 中查找有关 Subsystems 的更多信息

产品

版本

R2023b

标签

提问:

2025-3-12

回答:

2025-3-12

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by