


% -*- texinfo -*-
% @deftypefn {Function File} {} golombenco (@var{sig}, @var{m})
%
% Returns the Golomb coded signal as cell array.
% Also total length of output code in bits can be obtained.
% This function uses a @var{m} need to be supplied for encoding signal vector
% into a golomb coded vector. A restrictions is that
% a signal set must strictly be non-negative. Also the parameter @var{m} need to
% be a non-zero number, unless which it makes divide-by-zero errors.
% The Golomb algorithm [1], is used to encode the data into unary coded
% quotient part which is represented as a set of 1's separated from
% the K-part (binary) using a zero. This scheme doesnt need any
% kind of dictionaries, it is a parameterized prefix codes.
% Implementation is close to O(N^2), but this implementation
% *may be* sluggish, though correct. Details of the scheme are, to
% encode the remainder(r of number N) using the floor(log2(m)) bits
% when rem is in range 0:(2^ceil(log2(m)) - N), and encode it as
% r+(2^ceil(log2(m)) - N), using total of 2^ceil(log2(m)) bits
% in other instance it doesnt belong to case 1. Quotient is coded
% simply just using the unary code. Also accroding to [2] Golomb codes
% are optimal for sequences using the bernoulli probability model:
% P(n)=p^n-1.q & p+q=1, and when M=[1/log2(p)], or P=2^(1/M).
%
% Reference: 1. Solomon Golomb, Run length Encodings, 1966 IEEE Trans
% Info' Theory. 2. Khalid Sayood, Data Compression, 3rd Edition
%
% An exmaple of the use of @code{golombenco} is
% @example
% @group
% golombenco(1:4,2) %
% golombenco(1:10,2) %
% @end group
% @end example
% @end deftypefn
% @seealso{golombdeco}