diff options
author | shamikam | 2017-11-07 15:59:48 +0530 |
---|---|---|
committer | shamikam | 2017-11-07 15:59:48 +0530 |
commit | c0c0582462720ed597b00e116506570577614e89 (patch) | |
tree | 31dedd23698e5357b19c810b7d7a8464100ef44a /macros/uencode.sci | |
download | FOSSEE-Signal-Processing-Toolbox-c0c0582462720ed597b00e116506570577614e89.tar.gz FOSSEE-Signal-Processing-Toolbox-c0c0582462720ed597b00e116506570577614e89.tar.bz2 FOSSEE-Signal-Processing-Toolbox-c0c0582462720ed597b00e116506570577614e89.zip |
initial commit
Diffstat (limited to 'macros/uencode.sci')
-rw-r--r-- | macros/uencode.sci | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/macros/uencode.sci b/macros/uencode.sci new file mode 100644 index 0000000..4814998 --- /dev/null +++ b/macros/uencode.sci @@ -0,0 +1,85 @@ +function y=uencode(u,n,v,signflag) + //Performs uniform quantization of the input into 2^n levels + //Calling Sequence + //y=uencode(u,n,v,'signflag') + //Parameters + //u + //A vector, matrix or n-dimensional array + //n + //An integer between 2 and 32 + //v + //A positive real scalar + //'signflag' + //A string which can take only 2 values 'signed' or 'unsigned' + //Description + //Uniformly quantizes the input vector or n-dimensional array u into 2^n levels in the interval [-v,v] + //If v is not specified, its default value is 1 + //'signflag' is a string that determines the nature of the quantization + //If signflag='unsigned' then y contains unsigned integers in the range [0,2^n-1] corresponding to the 2^n levels + //If signflag='unsigned' then y contains signed integers in the range [-2^(n-1),2^(n-1)-1] corresponding to the 2^n levels + //The size of the integers in y in bits(8,16, or 32) depends on the value of n + //If the input lies beyond +/- v it is saturated + //Example + //y=uencode(-1:0.5:1,3) + // y = + // + // 0 2 4 6 7 + //Author + //Ankur Mallick + //References + //[1] International Telecommunication Union. General Aspects of Digital Transmission Systems: Vocabulary of Digital Transmission and Multiplexing, and Pulse Code Modulation (PCM) Terms. ITU-T Recommendation G.701. March, 1993. + //See also + //udecode + //floor + funcprot(0); + if(argn(2)<4) + signflag='unsigned'; + if(argn(2)<3) + v=1; + end + end + if(argn(2)>4|argn(2)<2) + error('Incorrect number of input arguments.'); + elseif(signflag~='signed'&signflag~='unsigned') + error('Sign flag must be signed or unsigned'); + elseif(~isscalar(v)|abs(v)~=v) + error('Peak value must be a positive real scalar'); + elseif(~isscalar(n)|round(n)~=n|n<2|n>32) + error('n must be an integer between 2 and 32') + else + if(or(imag(u(:))~=0)) + //Complex Number + u_real=real(u); + y_real=uencode(u_real,n,v,signflag); + disp(type(y_real)); + u_imag=imag(u); + y_imag=uencode(u_imag,n,v,signflag); + y=double(y_real)+%i*double(y_imag); + else + //Real Numbers + y=zeros(u); + L=2*v/(2^n); + y=floor((u+v)/L); + y(y<0)=0; + y(y>(2^n-1))=2^n-1; + if(signflag=='signed') + y=y-2^(n-1); + if(n>=2&n<=8) + y=int8(y); + elseif(n>=9&n<=16) + y=int16(y); + else + y=int32(y); + end + else + if(n>=2&n<=8) + y=uint8(y); + elseif(n>=9&n<=16) + y=uint16(y); + else + y=uint32(y); + end + end + end + end +endfunction |