1. A method comprising: receiving a first portion of an input data stream; generating a first portion of an output data stream by calculating a first exponential moving average value 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 state of the input data stream is a first state, incrementing a vote value; in response to determining that the state of the input data stream is 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 a second exponential moving average value 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.