# Looking for an automated method for plotting the amplitude envelope of an audio signal

Started by October 18, 2007
```>maxplanck wrote:
>
>   ...
>
>> For the method that you described consisting of upsampling then taking
>> absolute value, do you then simply connect the local maxima with a line
to
>> produce the envelope?  Or is there a method for calculating a curve to
>> connect the local maxima points?
>
>If the upsampled points are close enough, straight lines will do.
>(Doubling the number of samples reduces the area between the chords and
>the true curve by a factor of about four, etc.) If you intend to
>interpolate, you may not need to upsample at all. Quadratic or cubic
>interpolation will let you keep the sample points further apart. I
>suspect that upsampling to the extent that straight lines do will be the

>simplest to implement correctly. Interpolation may be faster once tou
>work it out.
>
>Jerry

Do you know of any software that can do this?  I understand the algorithm,
but I don't have knowledge of a computer programming language by which to
implement it.
```
```maxplanck wrote:
>>maxplanck wrote:
>>
>>  ...
>>
>>
>>>For the method that you described consisting of upsampling then taking
>>>absolute value, do you then simply connect the local maxima with a line
>
> to
>
>>>produce the envelope?  Or is there a method for calculating a curve to
>>>connect the local maxima points?
>>
>>If the upsampled points are close enough, straight lines will do.
>>(Doubling the number of samples reduces the area between the chords and
>>the true curve by a factor of about four, etc.) If you intend to
>>interpolate, you may not need to upsample at all. Quadratic or cubic
>>interpolation will let you keep the sample points further apart. I
>>suspect that upsampling to the extent that straight lines do will be the
>
>
>>simplest to implement correctly. Interpolation may be faster once tou
>>work it out.
>>
>>Jerry
>
>
> Do you know of any software that can do this?  I understand the algorithm,
> but I don't have knowledge of a computer programming language by which to
> implement it.

Have you looked at Scilab ( http://www.scilab.org/ ) yet?
I may have to dare you to try it ;)
```
```Richard Owlett wrote:
> maxplanck wrote:
> [snip]
>> Do you know of any software that can do this?  I understand the
>> algorithm,
>> but I don't have knowledge of a computer programming language by which to
>> implement it.
>
>
> Have you looked at Scilab ( http://www.scilab.org/ ) yet?
> I may have to dare you to try it ;)

Guess I will have to dare you into getting your programming feet wet ;)

Have just done envelope detection in 20 lines of Scilab.
[ *INCLUDING* generating and proving test case]

Most advanced programing concept used was a loop.

```
```maxplanck wrote:
>> maxplanck wrote:
>>
>>   ...
>>
>>> For the method that you described consisting of upsampling then taking
>>> absolute value, do you then simply connect the local maxima with a line
> to
>>> produce the envelope?  Or is there a method for calculating a curve to
>>> connect the local maxima points?
>> If the upsampled points are close enough, straight lines will do.
>> (Doubling the number of samples reduces the area between the chords and
>> the true curve by a factor of about four, etc.) If you intend to
>> interpolate, you may not need to upsample at all. Quadratic or cubic
>> interpolation will let you keep the sample points further apart. I
>> suspect that upsampling to the extent that straight lines do will be the
>> simplest to implement correctly. Interpolation may be faster once you
>> work it out.

> Do you know of any software that can do this?  I understand the algorithm,
> but I don't have knowledge of a computer programming language by which to
> implement it.

You have several choices.

Scilab http://www.scilab.org/. Read the documentation that comes with it
and ask here for what to do or in the program-specific newsgroup for how
to do it.

2. Find a colleague who can give you a boost up. OR

3. Hire a professional.

To upsample, insert the requisite number of zeros between each pair of
original samples, then low-pass filter the result. The original data had
no information above half the original sample rate*, and the upsampled
data must not have any either. Hence the filter.

Jerry
____________________________________
* Even if you thought it did. Proper sampling requires that such
information be removed *before sampling* to avoid corrupting the data
with aliases. After sampling, it is too late.
--
Engineering is the art of making what you want from things you can get.
&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;&macr;
```
```>Richard Owlett wrote:
>> maxplanck wrote:
>> [snip]
>>> Do you know of any software that can do this?  I understand the
>>> algorithm,
>>> but I don't have knowledge of a computer programming language by which
to
>>> implement it.
>>
>>
>> Have you looked at Scilab ( http://www.scilab.org/ ) yet?
>> I may have to dare you to try it ;)
>
>Guess I will have to dare you into getting your programming feet wet ;)
>
>Have just done envelope detection in 20 lines of Scilab.
>[ *INCLUDING* generating and proving test case]
>
>Most advanced programing concept used was a loop.

Richard, would you mind sharing your code?
```
```maxplanck wrote:
>>Richard Owlett wrote:
>>
>>>maxplanck wrote:
>>>[snip]
>>>
>>>>Do you know of any software that can do this?  I understand the
>>>>algorithm,
>>>>but I don't have knowledge of a computer programming language by which
>
> to
>
>>>>implement it.
>>>
>>>
>>>Have you looked at Scilab ( http://www.scilab.org/ ) yet?
>>>I may have to dare you to try it ;)
>>
>>Guess I will have to dare you into getting your programming feet wet ;)
>>
>>Have just done envelope detection in 20 lines of Scilab.
>>[ *INCLUDING* generating and proving test case]
>>
>>Most advanced programing concept used was a loop.
>
>
>
> Richard, would you mind sharing your code?

*WHEN* you've tried ;)

I'll give a hint by listing the Help headings for ALL keywords I used:

abs brackets colon comments comparison diff end equal
for matrices parenthesis plot2d plus semicolon sin star

PS I subscribe to "Give a man a fish, he eats for a day. Teach him to
fish ..."

```
```>maxplanck wrote:
>>>Richard Owlett wrote:
>>>
>>>>maxplanck wrote:
>>>>[snip]
>>>>
>>>>>Do you know of any software that can do this?  I understand the
>>>>>algorithm,
>>>>>but I don't have knowledge of a computer programming language by
which
>>
>> to
>>
>>>>>implement it.
>>>>
>>>>
>>>>Have you looked at Scilab ( http://www.scilab.org/ ) yet?
>>>>I may have to dare you to try it ;)
>>>
>>>Guess I will have to dare you into getting your programming feet wet
;)
>>>
>>>Have just done envelope detection in 20 lines of Scilab.
>>>[ *INCLUDING* generating and proving test case]
>>>
>>>Most advanced programing concept used was a loop.
>>
>>
>>
>> Richard, would you mind sharing your code?
>
>*WHEN* you've tried ;)
>
>I'll give a hint by listing the Help headings for ALL keywords I used:
>
>abs brackets colon comments comparison diff end equal
>for matrices parenthesis plot2d plus semicolon sin star
>
>PS I subscribe to "Give a man a fish, he eats for a day. Teach him to
>fish ..."

I'll give it a shot.

I understand what you mean, but this may be the only dsp coding fish i'll
ever need (so far i've been able to do everything i want to do with audio
using the Reaktor software/visual programming language.  This envelope
calculation is the only thing so far that i've needed to do which Reaktor
wasn't capable of (as far as i can tell)).
```
```maxplanck wrote:

[ SNIP *MUCH* ;]
>>>
>>>Richard, would you mind sharing your code?
>>
>>*WHEN* you've tried ;)
>>
>>I'll give a hint by listing the Help headings for ALL keywords I used:
>>
>>abs brackets colon comments comparison diff end equal
>>for matrices parenthesis plot2d plus semicolon sin star
>>
>>PS I subscribe to "Give a man a fish, he eats for a day. Teach him to
>>fish ..."
>
>
> I'll give it a shot.

>
> I understand what you mean, but this may be the only dsp coding fish i'll
> ever need

*BUT* are there _other_ fish to be hooked?

> (so far i've been able to do everything i want to do with audio
> using the Reaktor software/visual programming language.  This envelope
> calculation is the only thing so far that i've needed to do which Reaktor
> wasn't capable of (as far as i can tell)).

Please understand that Jerry is a only few years older than I.
AND he has held my feet to fire on occasion ;) *ROFL* !

I have not been following thread in detail.
*BUT* I've noted Jerry's responses to you.
My interpretation is that he thinks you are capable of solving your
problem *AND* it's worthwhile to nudge you in "right" direction.

```
```maxplanck wrote:

..
> I'll give it a shot.
>
> I understand what you mean, but this may be the only dsp coding fish i'll
> ever need (so far i've been able to do everything i want to do with audio
> using the Reaktor software/visual programming language.  This envelope
> calculation is the only thing so far that i've needed to do which Reaktor
> wasn't capable of (as far as i can tell)).

I don't have Reaktor, but this is a little surprising. It might be
called "envelope follower" or something similar; a necessary building
block of any compressor/expander.  There are three possible "standard"
forms for an envelope follower or tracker based on the tracking method:
peak, rms or average (all over some small sliding window of samples,
perhaps 5msecs).

And there is always Csound, of course!

Richard Dobson
```
```>maxplanck wrote:
>
>..
>> I'll give it a shot.
>>
>> I understand what you mean, but this may be the only dsp coding fish
i'll
>> ever need (so far i've been able to do everything i want to do with
audio
>> using the Reaktor software/visual programming language.  This envelope
>> calculation is the only thing so far that i've needed to do which
Reaktor
>> wasn't capable of (as far as i can tell)).
>
>I don't have Reaktor, but this is a little surprising. It might be
>called "envelope follower" or something similar; a necessary building
>block of any compressor/expander.  There are three possible "standard"
>forms for an envelope follower or tracker based on the tracking method:
>  peak, rms or average (all over some small sliding window of samples,
>perhaps 5msecs).

Reaktor has an envelope follower, but the algorithm is a real time
algorithm, which is the core reason why it's less accurate than the
"absolute value then line between local maxima" method for the signals
that i'm trying to analyze.

A real time algorithm can't know when and where the next local maxima is
going to be, it can only compute a guess for each successive sample based
on the previous samples.  The "absolute value then line between local
maxima" method, being a non-real time method, knows where every local
maxima occurs, and can draw a straight line between each one and its