% (uniquan.m) function [q_out, Delta,SQNR]=uniquan(sig_in,L) % Usage % [q_out, Delta,SQNR]=uniquan(sig_in,L) % L - number of uniform quantization levels % sig_in - input signal vector % Function ouputs: % q_out - quantized output % Delta - quantization interval % SQNR - actual signal to quantization noise ratio sig_pmax=max(sig_in);% finding the positive peak; sig_nmax=min(sig_in);% finding the negative peak Delta=(sig_pmax-sig_nmax)/L; % quantization interval q_level=sig_nmax+Delta/2:Delta:sig_pmax-Delta/2;% dfine Q-levels L_sig=length(sig_in); % find signal length sigp=(sig_in-sig_nmax)/Delta+1/2;% convert into 1/2 to L+1/2 range qindex=round(sigp); % round to 1,2,... L levels qindex=min(qindex,L); % eleminate L+1 as a rare possibility q_out=q_level(qindex);% use index vector to generate output SQNR=20*log10(norm(sig_in)/norm(sig_in-q_out));% actual SQNR value end