function [Q,I] = myquant(X,M,N)
% [Q,I] = myquant(X,M,N) Quantize values uniformly
% Q returns X quantized to N levels (default 256), and I returns
% integer indexes corresponding to each value in Q. M specifies
% the range of levels; for M scalar (default 1.0), the values
% are between -M and M. If M has two values, quantization is
% between M(1) and M(2). Q is 'dequantized' back to be an
% approximation of X; to get the quantized level, multiply
% N and divide by 2M (or M(2) - M(1)).
% 2001-03-20 dpwe@ee.columbia.edu
if nargin < 2
M = 1.0;
end
if nargin < 3
N = 256;
end
if length(M) == 1
M = [-M,M];
end
qstep = (M(2) - M(1))/N;
% Q = max(M(1), min(M(2), M(1) + qstep*round( (X - M(1)) / qstep )));
I = max(0, min(N-1, round( (X - M(1)) / qstep )));
Q = M(1) + qstep*I;