From Jeskola Buzz Wiki
Trying to decipher a rather nerdy and way too math heavy pdf - this might not be correct, but here goes nothing...
How to do it (in plain english)
- Start by finding all local peaks and valleys of the audio data. The trick is: Everytime you see a sample that is taller than both the next and the previous sample, it's a peak. Everytime you see a sample that is lower than both the next and the previous sample, it's a valley.
- Do a "nice" interpolation between all the peaks. Let's call this the "max curve".
- Do a "nice" interpolation between all the valleys. Let's call this the "min curve".
- Create a resulting "mean curve" by averaging min and max: mean = (min+max)/2
- Save the difference between the original signal and the new "mean curve" as the first (or second or third) iteration.
- Overwrite the original signal with the new "mean curve" and jump back to 1. Repeat this 4 to 8 times (According to Professor Huang.)
- Do a Hilbert transform on all the resulting outputs from step 5.