Range of quantizer to avoid clipping of transmitted signal

I have a signal ,say
s = sqrt(0.5) * (randn(1,10000) + 1i * randn(1,10000))
After quantizing it to say 512 levels, I observe that there is clipping of the original signal. I would like to know if there is a method in matlab to calculate the range of quantizer for a signal with complex normal distribution (signal s defined above) in a way that the original signal is not clipped.
Thank you in advance!

Answers (1)

No, there is not. As I explained before, Normal Distribution has an infinite tail in both directions. If you quantize it to any finite number of bins of finite width then you cannot cover the entire range, so the signal will be clipped. To avoid the clipping you would either need to use an infinite number of quantization levels or else an infinite width for each level.

6 Comments

Thanks! Is there some specific method to compute this clipping factor?
Actually I am quantizing the signal by limiting it to the range of the quantizer[minValue, maxValue],i.e
rIn = min(max(real(s),minValue),maxValue);
rIn = round(rIn/q)*q; % q is the step size
After doing it in this way I expected that the range of the transmitted signal would be covered and there would be no clipping! But unfortunately the signal gets clipped. However, if I increase the range of the quantizer, amount of clipping is decreased. So I was wondering if there is some formula to determine this range!
Which variety? The one with infinite bins, or the one with infinite width per bin?
The one with bins defined in a range [minValue, maxValue](since by using rIn = min(max(real(s),minValue),maxValue) I have tried to limit the signal s in the range [minValue, maxValue]).
Bin width needs to be a fraction of the range not of the minimum value. Max minus min. And remember to take the complex portion into account.
Does the following make sense:
rIn = min(max(real(s),minValue),maxValue);
rIn = round(rIn/q)*q; %q is defined as q = (maxValue-minValue)/2^enob
rQuad = min(max(imag(s),minValue),maxValue);
rQuad = round(rQuad/q)*q;
rQuant = rIn + 1i*rQuad

Sign in to comment.

Asked:

on 29 Sep 2015

Commented:

on 29 Sep 2015

Community Treasure Hunt

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

Start Hunting!