I'm not sure: if I use the amplitudes 1 0.5 0.25, the peak amplitude is 1, and the wave is clearly outside of the 1/-1 boundaries.
then you are doing something wrong. why do you think the maximum of abs(sin(t)+½sin(2t)+¼sin(4t)) is "1"?
to analytically get the maxima of this function, you probably have to recall your high-school maths (get the derivative of the function (without the abs()), set it to "0" and solve it for every t to find the positions of the extrema; use these t's to get the values of the extrema)
since I almost flunked at math in high school, that's probably why I
didn't know what the peak amplitude was.
One thing about that context that I didn't explain: I'm not using an array
to read the waveshape, but adding the individual waves separately, so that
I can change the amplitudes dinamically each time the phase of each
partial is 0 (if I do it with sinesum+normalize, there's always clicks). I
was hoping to apply the formula of normalize directly, but now it seems
that the easiest way is to use sinesum+normalize in parallel as a fast way
to get the peak amplitude.
Best,
Joao
Basically what I'm trying to do is to find out what is the formula that does the "normalize" function.
however, the "formula" of "normalize is very simple:
- take a table
- iterate over all the elements of the table and get the maximum value
(absolute) you find in there
- iterate over all the elements of the table and divide each element by
the just found maximum.
gfmasdr IOhannes