fixed gain in ramdom generator (hopefully for fixed and float)
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Sat, 1 Oct 2005 08:07:48 +0000 (08:07 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Sat, 1 Oct 2005 08:07:48 +0000 (08:07 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@10105 0101bb08-14d6-0310-b084-bc0e0c8e3800

libspeex/misc.c

index fd78d0b..34453e9 100644 (file)
@@ -176,8 +176,10 @@ void speex_warning_int(const char *str, int val)
 #ifdef FIXED_POINT
 spx_word32_t speex_rand(spx_word16_t std, spx_int32_t *seed)
 {
+   spx_word32_t res;
    *seed = 1664525 * *seed + 1013904223;
-   return MULT16_16(EXTRACT16(SHR32(*seed,16)),std);
+   res = MULT16_16(EXTRACT16(SHR32(*seed,16)),std);
+   return SUB32(res, SHR(res, 3));
 }
 #else
 spx_word16_t speex_rand(spx_word16_t std, spx_int32_t *seed)
@@ -187,8 +189,8 @@ spx_word16_t speex_rand(spx_word16_t std, spx_int32_t *seed)
    union {int i; float f;} ran;
    *seed = 1664525 * *seed + 1013904223;
    ran.i = jflone | (jflmsk & *seed);
-   ran.f -= 1;
-   return 1.7321*std*ran.f;
+   ran.f -= 1.5;
+   return 3.4642*std*ran.f;
 }
 #endif