IP Library › Granted Patent US 9,405,389
Granted Patent B2
US 9,405,389 · App. 14/473,919 · Granted Aug 2, 2016

Noise reduction through democratic alpha smoothing

Inventor: Peter Beissinger (Redmond, WA)
Assignee: Microsoft Technology Licensing, LLC
G06F3/041G06F17/18
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 9,405,389
App. No.
14/473,919
Granted
Aug 2, 2016
Kind
B2
Abstract

An iterative exponential moving average algorithm generates a smoothed output data stream from a noisy input data stream. A smoothing factor used in calculating the exponential moving average is updated with each iteration of the exponential moving average algorithm based on a cumulative vote value, which is based, at least in part, on an estimated state of the input data stream.

Claims (65)

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.

2. A method as recited in claim 1 , wherein determining the state of the input data stream comprises:

determining whether values from the input data stream are trending upward, trending downward, or flickering;

in response to determining that the values from the input data stream are trending upward or trending downward, determining that the input data stream is in the first state; and

in response to determining that the values from the input data stream are flickering, determining that the input data stream is in the second state.

3. A method as recited in claim 2 , wherein determining whether values from the input data stream are trending upward, trending downward, or flickering comprises evaluating a difference between the second portion of the input data stream and the first portion of the output data stream.

4. A method as recited in claim 3 , wherein evaluating the difference between the second portion of the input data stream and the first portion of the output data stream comprises:

determining a first sign by determining whether the difference between the second portion of the input data stream and the first portion of the output data stream is positive or negative;

determining a second sign by determining whether a difference between a previous portion of the input data stream and a previous portion of the output data stream was positive or negative; and

in an event that the first sign and the second sign are different, determining that the values from the input data stream are flickering.

5. A method as recited in claim 4 , wherein evaluating the difference between the second portion of the input data stream and the first portion of the output data stream further comprises:

in response to determining that the first sign and the second sign are the same:

determining whether the difference between the second portion of the input data stream and the first portion of the output data stream is within a threshold range of values; and

in response to determining that the difference between the second portion of the input data stream and the first portion of the output data stream is within the threshold range of values, determining that the values from the input data stream are flickering; and

in response to determining that the first sign and the second sign are not the same and the difference between the second portion of the input data stream and the first portion of the output data stream is not within the threshold range of values, determining that the values from the input data stream are trending upward or trending downward.

6. A method as recited in claim 1 , wherein incrementing the vote value comprises:

adding a constant value to the vote value to generate a new vote value;

comparing the new vote value to a maximum vote value; and

in response to the new vote value being greater than the maximum vote value, setting the new vote value equal to the maximum vote value.

7. A method as recited in claim 1 , wherein decrementing the vote value comprises:

subtracting a constant value from the vote value to generate a new vote value;

comparing the new vote value to a minimum vote value; and

in response to the new vote value being less than the minimum vote value, setting the new vote value equal to the minimum vote value.

8. A method as recited in claim 7 , wherein the constant value is greater than one.

9. A method as recited in claim 1 , wherein updating the value of the smoothing factor based on the vote value comprises:

calculating a vote ratio by dividing the vote value by a maximum vote value; and

calculating an updated smoothing factor as a product of the vote ratio and a maximum smoothing factor value.

10. A method as recited in claim 9 , wherein updating the value of the smoothing factor based on the vote value further comprises raising the vote ratio to a pre-defined power prior to calculating the updated smoothing factor.

11. A system, comprising:

one or more processors;

a memory, communicatively coupled to the one or more processors;

a voting module, stored in the memory and executed by the one or more processors, configured to:

determine a state of an input data stream; and

selectively increment or decrement a total vote value based on the state of the input data stream;

a dynamic alpha generator, stored in the memory and executed by the one or more processors, configured to calculate a value of a smoothing factor based, at least in part, on the total vote value; and

an exponential moving average module, stored in the memory and executed by the one or more processors, configured to calculate an iteration of an exponential moving average based, at least in part, on the value of the smoothing factor and a portion of the input data stream.

12. A system, as recited in claim 11 , wherein:

a first state indicates that values sampled from the input data stream are trending upward or trending downward; and

a second state indicates that values sampled from the input data stream are not trending upward or trending downward.

13. A system, as recited in claim 12 , wherein the second state is determined based, at least in part, on a determination that values sampled from the input data stream are remaining within a threshold range of values.

14. A system, as recited in claim 12 , wherein the threshold range of values is determined, at least in part, relative to a smoothed value calculated in a previous iteration of the exponential moving average.

15. A system, as recited in claim 12 , wherein:

the voting module increments the total vote value in response to determining that the input data stream is in the first state; and

the voting module decrements the total vote value in response to determining that the input data stream is in the second state.

16. A system, as recited in claim 11 , wherein the voting module determines the state of the input data stream based, at least in part, on a calculated difference between a current sampled value from the input data stream and a smoothed value calculated in a previous iteration of the exponential moving average.

17. One or more computer storage media comprising computer-executable instructions that, when executed, direct a computing system to:

receive an input data stream comprising a plurality of sampled data values; and

generate an output data stream comprising a plurality of smoothed data values having reduced noise relative to the input data stream by calculating multiple iterations of an exponential moving average algorithm, wherein:

each iteration of the exponential moving average algorithm is calculated based on a current sampled data value, a previously calculated smoothed data value, and a smoothing factor;

the smoothing factor is determined independently for each iteration of the exponential moving average algorithm; and

for each iteration of the exponential moving average algorithm:

a state of the input data stream is determined based, at least in part, on the current sampled data value;

a total vote value is updated based on the state of the input data stream; and

the smoothing factor for the current iteration of the exponential moving average algorithm is determined based, at least in part, on the total vote value.

18. One or more computer storage media as recited in claim 17 , wherein, the total vote value is restricted within a pre-defined range of vote values.

19. One or more computer storage media as recited in claim 18 , wherein, the smoothing factor is restricted within a pre-defined range of alpha values such that as the total vote value varies from a minimum vote value to a maximum vote value, the smoothing factor varies from a minimum alpha value to a maximum alpha value.

20. One or more computer storage media as recited in claim 19 , wherein, as the total vote value varies linearly from a minimum vote value to a maximum vote value, the smoothing factor varies non-linearly from a minimum alpha value to a maximum alpha value.

Assignments (2)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 9, 2015
From: MICROSOFT CORPORATION
To: MICROSOFT TECHNOLOGY LICENSING, LLC
Reel/Frame 039025/0454 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Aug 29, 2014
From: BEISSINGER, PETER
To: MICROSOFT CORPORATION
Reel/Frame 033643/0427 →
Continuity (1)
Related Publication 20160062493A1 · Mar 3, 2016