Main Archive Specials Wiki | FAQ Links Submit Forum

 SaturationType : WaveshaperReferences : Posted by BramNotes : when the input is below a certain threshold (t) these functions return the input, if it goes over that threshold, they return a soft shaped saturation. Neigther claims to be fast ;-)Code : float saturate(float x, float t) { if(fabs(x) return x else { if(x > 0.f); return t + (1.f-t)*tanh((x-t)/(1-t)); else return -(t + (1.f-t)*tanh((-x-t)/(1-t))); } } or float sigmoid(x) { if(fabs(x)<1) return x*(1.5f - 0.5f*x*x); else return x > 0.f ? 1.f : -1.f; } float saturate(float x, float t) { if(abs(x) return x else { if(x > 0.f); return t + (1.f-t)*sigmoid((x-t)/((1-t)*1.5f)); else return -(t + (1.f-t)*sigmoid((-x-t)/((1-t)*1.5f))); } }

 CommentsAdded on : 15/10/02 by terry[ AT ]yahoo[ DOT ]comComment :              But My question is BUT HAVE YOU TRIED YOUR CODE!!!!!!!!!!!!!!!!???? I think no, 'cos give a compiling error. the right (for sintax) version is this: float sigmoid(float x) {     if(fabs(x)<1)         return x*(1.5f - 0.5f*x*x);     else         return x > 0.f ? 1.f : -1.f; } float saturate(float x, float t) {     if(abs(x) 0.f)             return t + (1.f-t)*sigmoid((x-t)/((1-t)*1.5f));         else             return -(t + (1.f-t)*sigmoid((-x-t)/((1-t)*1.5f)));     } }  Added on : 18/11/03 by imbeachhunt[ AT ]hotmail[ DOT ]comComment : except for the missing parenthesis of course =) the first line of saturate should be either if(fabs(x)) return x; or if(abs(x)) return x; depending on whether you're looking at the first or second saturate function (in the orig post)

 Add your own comment Comments are displayed in fixed width, no HTML code allowed! Email: Comment: Are you human?

Site created and maintained by Bram
Graphic design by line.out | Server sponsered by fxpansion