1. A method comprising: receiving a first portion of an input data stream; generating a first portion of an output data stream by calculating an exponential moving average based, at least in part, on the first portion of the input data stream and a smoothing factor; receiving a second portion of the input data stream; determining a state of the input data stream; in response to determining that the input data stream is in a first state, incrementing a vote value; in response to determining that the input data stream is in a second state, decrementing the vote value; updating a value of the smoothing factor based on the vote value; and generating a second portion of the output data stream having reduced noise relative to the second portion of the input data stream by calculating an exponential moving average based, at least in part, on the first portion of the output data stream, the second portion of the input data stream, and the smoothing factor.