?? bitsprec.m
字號:
function y=bitsprec(x,n,mode)
%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
% Copyright (C) Mike Brookes 1997
%
% Last modified Mon Jun 4 08:18:22 2001
%
% VOICEBOX is a MATLAB toolbox for speech processing. Home page is at
% http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This program is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You can obtain a copy of the GNU General Public License from
% ftp://prep.ai.mit.edu/pub/gnu/COPYING-2.0 or by writing to
% Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if nargin<3
mode='sne';
end
if mode(1)=='f'
e=0;
else
[x,e]=log2(x);
end
switch mode(2)
case 'p'
y=pow2(ceil(pow2(x,n)),e-n);
case 'm'
y=pow2(floor(pow2(x,n)),e-n);
case 'z'
y=pow2(fix(pow2(x,n)),e-n);
otherwise
switch mode(3)
case 'a'
y=pow2(round(pow2(x,n)),e-n);
case 'p'
y=pow2(floor(pow2(x,n)+0.5),e-n);
case 'm'
y=pow2(ceil(pow2(x,n)-0.5),e-n);
otherwise
z=pow2(x,n-1);
switch mode(3)
case 'e'
y=pow2(floor(pow2(x,n)+0.5)-floor(z+0.75)+ceil(z-0.25),e-n);
case 'o'
y=pow2(ceil(pow2(x,n)-0.5)+floor(z+0.75)-ceil(z-0.25),e-n);
end
end
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -