[Speex-dev] normalize16()
Jerry Trantow
jtrantow at ieee.org
Fri Feb 3 14:11:37 PST 2006
I have a question on the normalize16() implementation. The DSP I am using
implements a norm() instruction that returns the number of bits up to the
first nonredundant sign bit.
Values in the range [-2^m, 2^m -1) return 30-m as the norm.
I am using this in an override of the normalize16() implementation. I'm
running some test vectors and comparing my routine to the speex
implementation. I think the default method is using the wrong shift for the
positive power of 2 boundary case.
This implements the following shifts
Value shift expected
+16383 0 0
-16384 0 0
+16384 0 1 Seems like a mistake.
+16385 1 1 Notice this requires a shift, but previous didn't.
-16385 1 1
I think the while (max_val>max_scale) comparison should be changed to >= and
the NEG32(tmp) changed to NEG32(tmp+1). This would shift values according
to the number of bits for the entire [-2^m,+2^m -1) range.
Jerry J. Trantow
Applied Signal Processing, Inc.
jtrantow at ieee.org
More information about the Speex-dev
mailing list