Home > voicebox > bitsprec.m

bitsprec

PURPOSE

BITSPREC round values to a specified fixed or floating precision (X,N,MODE)

SYNOPSIS

function y=bitsprec(x,n,mode)

DESCRIPTION

```BITSPREC round values to a specified fixed or floating precision (X,N,MODE)

mode is of the form 'uvw' where:
u: s - n significant bits (default)
f - fixed point: n bits after binary point
v: n - round to nearest (default)
p - round towards +infinity
m - round towards -infinity
z - round towards zero
w is only needed if v=n in which case it dictates what to
do if x is min-way between two rounded values:
w: p,m - as above
e - round to nearest even number (default)
o - round to nearest odd number
a - round away from zero
mode='*ne' and '*no' are convergent rounding and introduce
no DC offset into the result so long as even and odd integer parts are
equally common.

Examples of y=bitsprec(x,0,'***'):

x    fp-  fm-  fz-  fne  fno  fnp  fnm  fna

2.5    3    2    2    2    3    3    2    3
1.5    2    1    1    2    1    2    1    2
1.1    2    1    1    1    1    1    1    1
1.0    1    1    1    1    1    1    1    1
0.9    1    0    0    1    1    1    1    1
0.5    1    0    0    0    1    1    0    1
0.1    1    0    0    0    0    0    0    0
-0.1    0   -1    0    0    0    0    0    0
-0.5    0   -1    0    0   -1    0   -1   -1
-0.9    0   -1    0   -1   -1   -1   -1   -1
-1.5   -1   -2   -1   -2   -1   -1   -2   -2```

CROSS-REFERENCE INFORMATION

This function calls:
This function is called by:

SOURCE CODE

```0001 function y=bitsprec(x,n,mode)
0002 %BITSPREC round values to a specified fixed or floating precision (X,N,MODE)
0003 %
0004 % mode is of the form 'uvw' where:
0005 %     u: s - n significant bits (default)
0006 %        f - fixed point: n bits after binary point
0007 %     v: n - round to nearest (default)
0008 %        p - round towards +infinity
0009 %        m - round towards -infinity
0010 %        z - round towards zero
0011 % w is only needed if v=n in which case it dictates what to
0012 %        do if x is min-way between two rounded values:
0013 %     w: p,m - as above
0014 %        e - round to nearest even number (default)
0015 %        o - round to nearest odd number
0016 %        a - round away from zero
0017 % mode='*ne' and '*no' are convergent rounding and introduce
0018 % no DC offset into the result so long as even and odd integer parts are
0019 % equally common.
0020 %
0021 % Examples of y=bitsprec(x,0,'***'):
0022 %
0023 %      x    fp-  fm-  fz-  fne  fno  fnp  fnm  fna
0024 %
0025 %     2.5    3    2    2    2    3    3    2    3
0026 %     1.5    2    1    1    2    1    2    1    2
0027 %     1.1    2    1    1    1    1    1    1    1
0028 %     1.0    1    1    1    1    1    1    1    1
0029 %     0.9    1    0    0    1    1    1    1    1
0030 %     0.5    1    0    0    0    1    1    0    1
0031 %     0.1    1    0    0    0    0    0    0    0
0032 %    -0.1    0   -1    0    0    0    0    0    0
0033 %    -0.5    0   -1    0    0   -1    0   -1   -1
0034 %    -0.9    0   -1    0   -1   -1   -1   -1   -1
0035 %    -1.5   -1   -2   -1   -2   -1   -1   -2   -2
0036
0037 %      Copyright (C) Mike Brookes 1997
0038 %      Version: \$Id: bitsprec.m 713 2011-10-16 14:45:43Z dmb \$
0039 %
0040 %   VOICEBOX is a MATLAB toolbox for speech processing.
0042 %
0043 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0044 %   This program is free software; you can redistribute it and/or modify
0046 %   the Free Software Foundation; either version 2 of the License, or
0047 %   (at your option) any later version.
0048 %
0049 %   This program is distributed in the hope that it will be useful,
0050 %   but WITHOUT ANY WARRANTY; without even the implied warranty of
0051 %   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0052 %   GNU General Public License for more details.
0053 %
0054 %   You can obtain a copy of the GNU General Public License from
0055 %   http://www.gnu.org/copyleft/gpl.html or by writing to
0056 %   Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA.
0057 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0058
0059 if nargin<3
0060    mode='sne';
0061 end
0062 if mode(1)=='f'
0063    e=0;
0064 else
0065    [x,e]=log2(x);
0066 end
0067 switch mode(2)
0068 case 'p'
0069    y=pow2(ceil(pow2(x,n)),e-n);
0070 case 'm'
0071    y=pow2(floor(pow2(x,n)),e-n);
0072 case 'z'
0073    y=pow2(fix(pow2(x,n)),e-n);
0074 otherwise
0075    switch mode(3)
0076    case 'a'
0077       y=pow2(round(pow2(x,n)),e-n);
0078    case 'p'
0079       y=pow2(floor(pow2(x,n)+0.5),e-n);
0080    case 'm'
0081       y=pow2(ceil(pow2(x,n)-0.5),e-n);
0082    otherwise
0083       z=pow2(x,n-1);
0084       switch mode(3)
0085       case 'e'
0086          y=pow2(floor(pow2(x,n)+0.5)-floor(z+0.75)+ceil(z-0.25),e-n);
0087       case 'o'
0088          y=pow2(ceil(pow2(x,n)-0.5)+floor(z+0.75)-ceil(z-0.25),e-n);
0089       end
0090    end
0091 end
0092```

Generated on Mon 06-Aug-2018 14:48:32 by m2html © 2003