Frank Lorenz
2010-Feb-05  10:36 UTC
[Speex-dev] Fwd: Re: Fixed Point on wideband-mode: Single Frame loss on 2000 Hz sine causes "freak off"
Hi Jean-Marc,
I did what you proposed. I changed the levinson durbin algorithm to:
{
   int i, j;  
   spx_word16_t r;
   spx_word16_t error = ac[0];
   for (i = 0; i < p; i++)
       lpc[i] = 0;
   if (ac[0] == 0)
   {
      //for (i = 0; i < p; i++)
      //   lpc[i] = 0;
      return 0;
   }
   for (i = 0; i < p; i++) {
      /* Sum up this iteration's reflection coefficient */
      spx_word32_t rr = NEG32(SHL32(EXTEND32(ac[i + 1]),13));
      for (j = 0; j < i; j++) 
         rr = SUB32(rr,MULT16_16(lpc[j],ac[i - j]));
#ifdef FIXED_POINT
	  // stop calculation if error < 30
	  if ( error <= 30 ) {
	  	 return error;
	  }
      //r = DIV32_16(rr+PSHR32(error,1),ADD16(error,10 ));
	  r = DIV32_16(rr+PSHR32(error,1),error);
	  
#else
      r = rr/(error+.003*ac[0]);
#endif
This improves the situation. There's no more "freak out" for most
cases. I tested with 2000 Hz, 2200 Hz and 3000 Hz input for different complexity
and quality settings. Nevertheless, for 2200 Hz, quality 7 complexity 3,
there's still this horrible overdrive.
It is also interesting that the limit (30 in my case) for stopping the iteration
is very important. While even a limit of 0 is o.k. for 2000 and 2200 Hz signals,
this will not work for 3000 Hz. If I put the limit up to 100, 2200 Hz signals
cause the "freak out" again.
Another point is that beside the "freak out", there is still
distortion in the re-synthesized signal for harmonic inputs - a strong amplitude
modulation, in some cases with a clear period equal to have the frame rate (160
samples). You can reduce this by setting the complexity to higher values (5 and
above work quite well).
A third point is a time-variable and sometimes very slow "fade in" of
the re-synthesized signal after a frame loss. The steepness of the "fade
in" is varying. It is depenent on some parameter I cannot find (changing
complexity/quality or even the limit inside the levinson-durbin algorithm
changes it quite chaotically).
So we are on the right track, but did not reach the goal up to now ;-)
Do you think it is a good idea to but the levinson-durbin algorithm to a higher
precision? Or do you have some other idea how to proceed?
best regards,
Frank
   Jean-Marc Valin <Jean-Marc.Valin at USherbrooke.ca> hat am 4. Februar
 2010 um 15:47 geschrieben:
> Now that's an interesting 
analysis! Thanks a lot for spending the time to dig> into this. I
 now think the whole idea of adding a small value to the error
was>
 misguided from the beginning. Instead, what the code should probably do
 is just> stop once the error has reached a small enough value 
(and set the remaining LPC> coefs to zero).
> 
>? ? 
?Jean-Marc
___________________________________________________________
GRATIS f?r alle WEB.DE-Nutzer: Die maxdome Movie-FLAT!
Jetzt freischalten unter http://movieflat.web.de
Possibly Parallel Threads
- Fwd: Re: Fixed Point on wideband-mode: Single Frame loss on 2000 Hz sine causes "freak off"
 - Fwd: Fixed Point on wideband-mode: Single Frame loss on 2000 Hz sine causes "freak off"
 - Fixed Point on wideband-mode: Single Frame loss on 2000 Hz sine causes "freak off"
 - FW: Re: Fwd: Re: Fixed Point on wideband-mode: Single Frame loss on 2000 Hz sine causes "freak off"
 - Fixed Point on wideband-mode: Single Frame loss on 2000 Hz sine causes "freak off"
 
