[music-dsp] fast sin(x) function

Denis Sbragion d.sbragion at infotecna.it
Wed Jun 11 02:49:35 EDT 2008


Hello Stephen,

On Tue, June 10, 2008 21:13, Stephen Blinkhorn wrote:
> I'm looking for a fast sin(x) type function.  So far I haven't found
> anything with the necessary precision for audio work.  Any ideas?

don't know if it has been already pointed out, but there's a fast and quite
accurate method to generate sin(x) sequences, i.e. not arbitrary values but
uniformly spaced values. Here it is a not so fast but easy to understand 
Octave snippet:

## usage: st = sintable(sv,sd,sn)
##
## Generate a sin table by recurrence
##
## sv: sine start value
## sd: sine delta
## sn: sine number of values

function st = sintable(sv,sd,sn);

	# Initializes the sin array
	st = zeros(1,sn);

	# Initializes the sine constants
	R = sin(sd/2);
	R = -4 * R * R;
	S = sin(sv);
	S = sin(sd) * cos(sv) + (S * (1 - cos(sd)));

	# Set the first value
	V = sin(sv);
	st(1) = V;

	# Sine generation loop
	for I = 2:sn
		S = R * V + S;
		V = V + S;
		st(I) = V;
	endfor

endfunction

I use this mehtod, translated to C, to generate a huge amount of Blackman
windowed lowpass FIR filters, and it turned out to be noticeably faster than
direct sin computation. Probably it could be also translated to vector code
(SSE or similar) making it even faster. If you need arbitrary values it's
quite difficult to beat the standard sin function unless you're ready to
accept a lower accuracy.

Bye,

-- 
	Denis Sbragion
	InfoTecna
	Tel: +39 0362 805396, Fax: +39 0362 805404
	URL: http://www.infotecna.it



More information about the music-dsp mailing list