U_pcm.m
Upload User: loeagle
Upload Date: 2013-03-02
Package Size: 1236k
Code Size: 1k
Development Platform:

Matlab

  1. function [sqnr,a_quan,code]=u_pcm(a,n)
  2. %U_PCM   uniform PCM encoding of a sequence
  3. %        [SQNR,A_QUAN,CODE]=U_PCM(A,N)
  4. %        a=input sequence.
  5. %        n=number of quantization levels (even).
  6. %        sqnr=output SQNR (in dB).
  7. % a_quan=quantized output before encoding.
  8. % code=the encoded output.
  9. amax=max(abs(a));
  10. a_quan=a/amax;
  11. b_quan=a_quan;
  12. d=2/n;
  13. q=d.*[0:n-1];
  14. q=q-((n-1)/2)*d;
  15. for i=1:n
  16.   a_quan(find((q(i)-d/2 <= a_quan) & (a_quan <= q(i)+d/2)))=...
  17.   q(i).*ones(1,length(find((q(i)-d/2 <= a_quan) & (a_quan <= q(i)+d/2))));
  18.   b_quan(find( a_quan==q(i) ))=(i-1).*ones(1,length(find( a_quan==q(i) )));
  19. end
  20. a_quan=a_quan*amax;
  21. nu=ceil(log2(n));
  22. code=zeros(length(a),nu);
  23. for i=1:length(a)
  24.   for j=nu:-1:0
  25.     if ( fix(b_quan(i)/(2^j)) == 1)
  26. code(i,(nu-j)) = 1;
  27. b_quan(i) = b_quan(i) - 2^j;
  28.     end
  29.   end
  30. end
  31. sqnr=20*log10(norm(a)/norm(a-a_quan));