Hi! I need to use this code of fxquant, but I cant' do it. What I want to do is to reduce the signal sawtooth using fxquant with 2 bits, RMODE: 'round' and LMODE:'sat'. The idea is to graph the original signal vs the quantized one. Thanks!

4 visualizzazioni (ultimi 30 giorni)
%signal sawtooth t=-10:0.01:50; width=0.10; f_sierra=sawtooth(2*pi*0.1*t,width);
function X = fxquant( s, bit, rmode, lmode ) %FXQUANT simulated fixed-point arithmetic %------- % Usage: X = fxquant( S, BIT, RMODE, LMODE ) % % returns the input signal S reduced to a word-length % of BIT bits and limited to the range [-1,1). The type of % word-length reduction and limitation may be chosen with % RMODE: 'round' rounding to nearest level % 'trunc' 2's complement truncation % 'magn' magnitude truncation % LMODE: 'sat' saturation limiter % 'overfl' 2's complement overflow % 'triang' triangle limiter % 'none' no limiter
%--------------------------------------------------------------- % copyright 1994, by C.S. Burrus, J.H. McClellan, A.V. Oppenheim, % T.W. Parks, R.W. Schafer, & H.W. Schussler. For use with the book % "Computer-Based Exercises for Signal Processing Using MATLAB" % (Prentice-Hall, 1994). %---------------------------------------------------------------
if nargin ~= 4; error('usage: fxquant( S, BIT, RMODE, LMODE ).'); end; if bit <= 0 | abs(rem(bit,1)) > eps; error('wordlength must be positive integer.'); end;
Plus1 = 2^(bit-1);
X = s * Plus1; if strcmp(rmode, 'round'); X = round(X); elseif strcmp(rmode, 'trunc'); X = floor(X); elseif strcmp(rmode, 'ceil'); X = ceil(X); elseif strcmp(rmode, 'magn'); X = fix(X); else error('unknown wordlength reduction spec.'); end;
if strcmp(lmode, 'sat'); X = min(Plus1 - 1,X); X = max(-Plus1,X); elseif strcmp(lmode, 'overfl'); X = X + Plus1 * ( 1 - 2*floor((min(min(X),0))/2/Plus1) ); X = rem(X,2*Plus1) - Plus1; elseif strcmp(lmode, 'triang'); X = X + Plus1 * ( 1 - 2*floor((min(min(X),0))/2/Plus1) ); X = rem(X,4*Plus1) - Plus1; f = find(X > Plus1); X(f) = 2*Plus1 - X(f); f = find(X == Plus1); X(f) = X(f) - 1; elseif strcmp(lmode, 'none'); % limiter switched off else error('unknown limiter spec.'); end;
X = X / Plus1;

Risposte (0)

Categorie

Scopri di più su MATLAB Mobile Fundamentals in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by