[music-dsp] fast sin(x) function
Stephen Blinkhorn
stephen.blinkhorn at audiospillage.com
Wed Jun 11 16:40:39 EDT 2008
On 10 Jun 2008, at 15:31, robert bristow-johnson wrote:
> if the OP wants a sin() function for the purpose of generating a
> nice sine wave for sound, then i would also recommend LUT that is
> large enough that linear interpolation would be good enough.
Okay, for now I'm just using sin(x) I'll have a look at using a LUT.
> if instead the sin() function is used in control/coefficient
> generation, then i would suggest using the finite order series
> below. with the exception of arctan(), there is no division in any
> of these. should be fast for a DSP.
thanks for these I'll experiment with them later. I am finding that
sin(x) functions are cropping up in a variety of places in my work
(coefficients etc) as well as cos(x) so I've been on the lookout for
something fast and accurate but I have been trying to avoid using
lookup tables.. can't say why exactly something just told me to avoid
them in certain situations. Oh and I am developing for PowerPC and
Intel.
Thanks for all the suggestions.
Stephen.
>
>
>
>> Or, then, use one of the better math libraries, which...do that for
>> you. ;)
>
>
>
>
> log2(1+x) ~= 1.4425449290 * x
> + -0.7181451002 * x^2
> + 0.4575485901 * x^3
> + -0.2779042655 * x^4
> + 0.1217970128 * x^5
> + -0.0258411662 * x^6
>
> 0 <= x <= 1 |error| < 2.217e-6 (exact when x=0 and x=1)
> (about 1/375th of a cent)
>
> 2^x ~= 1.0
> + 0.6930321187 * x
> + 0.2413797743 * x^2
> + 0.0520323499 * x^3
> + 0.0135557571 * x^4
>
> 0 <= x <= 1 |error|/(2^x) < 3.340e-6 (exact when x=0 and x=1)
> (about 1/173rd of a cent)
>
> sqrt(x) ~= 0.2286139087
> + 1.3027308205 * x
> + -0.9125353819 * x^2
> + 0.5029902702 * x^3
> + -0.1217996175 * x^4
>
> 1/2 <= x <= 1 |error|/sqrt(x) < 1.076e-5
> (exact when x=1 and nearly exact when x=1/2)
>
>
> sin((pi/2)*x) ~= 1.5707963268 * x
> + -0.6459640619 * x^3
> + 0.0796915849 * x^5
> + -0.0046768800 * x^7
> + 0.0001530302 * x^9
>
> -1 <= x <= 1 (i can't find the max error results, but it's small)
>
>
> arctan(x) ~= x/f(x^2)
>
> where f(u) = 1.0
> + 0.3328895051 * u
> + -0.0846792282 * u^2
> + 0.0325223264 * u^3
> + -0.0074930586 * u^4
>
> -1 <= x <= 1 (can't find the error results here either, but it's
> small.)
>
>
> --
>
> r b-j rbj at audioimagination.com
>
> "Imagination is more important than knowledge."
>
> --
> dupswapdrop -- the music-dsp mailing list and website:
> subscription info, FAQ, source code archive, list archive, book
> reviews, dsp links
> http://music.columbia.edu/cmc/music-dsp
> http://music.columbia.edu/mailman/listinfo/music-dsp
More information about the music-dsp
mailing list