Companding in Fixed Point DSPs

Download Report

Transcript Companding in Fixed Point DSPs

Companding in Fixed Point DSPs
A scheme to reduce the quantization
(roundoff) errors in Fixed Point DSPs
ADVANTAGE OF LARGE
SIGNALS
• When the signals in the DSP are large, they
take full advantage of the available bits.
• When the signals in the DSP are small, only
a few of the available bits are used.
• The roundoff error is essentially
independent of the signal level, so the
distortion due to roundoff is much worse for
small signals
To reduce roundoff error, I
would like to keep all digital
signals as large as possible at all
times.
Since the system has a set
overflow tolerance, I would
like all digital signals to have a
roughly constant envelope,
where the constant is slightly
lower than the system
overflow tolerance
Suppose I have analog input, u(t), and analog
output, y(t), so I need an ADC and a DAC:
u(t)
ADC
DAC
y(t)
Consider multiplying the analog input by a time
varying signal, g(n), which is LARGE when the
input signal is SMALL, and SMALL when the
input signal is LARGE, so that I get a roughly
constant envelope signal
For example, if env(n) is the (sampled) envelope
of the input, g(n) could be k/env(n) where k is
some constant slightly lower than the system
overflow tolerance level.
If g(n) is LARGE when u(nT) is SMALL, and SMALL
when u(nT) is LARGE, then g(n)*u(nT) stays at a
roughly constant signal level, and can be set large always.
I would therefore like to multiply my input by g(n)
BEFORE it gets to the ADC, so that the ADC ALWAYS
sees a large signal.
To preserve the input/output behavior (but with less
quantization noise), I would like to multiply the output signal
by 1/g(n).
The multiplication by 1/g(n) should come AFTER the DAC so
that THE SIGNAL STAYS LARGE WHENEVER IT IS
DIGITAL.
So I would get:
u(nT)
X
ADC
g(n)
X
DAC
y(nT)
1/g(n)
This is “classical” companding.
The input signal level can vary wildly, but the digital system
sees a signal level that is essentially constant.
This can therefore allow a digital system to cover a large
dynamic range with only a few bits.
But note that there is NO DSP here between the ADC and DAC
I would like to try this with a DSP in between the ADC and DAC.
Would the scheme below work?
u(nT)
g(n)
X
ADC
DSP
DAC
1/g(n)
X
y(nT)
NO! Using classical companding
on a DSP will horribly distort the
input/output behavior
Taking a DSP, multiplying its input by
a time-varying signal g(n), and then
multiplying the output by 1/g(n) will,
in general, CHANGE the input/output
behavior of the DSP (dramatically)
For example, let y(n)=u(n-k)
So the DSP is a k-sample delay.
If I do:
u(nT)
g(n)
X
ADC
Z-k
DAC
X
y(nT)
1/g(n)
•The output is now g(n-k)*u(n-k)/g(n)
•This is NOT equal to u(n-k).
•It is DISTORTED by the factor g(n-k)/g(n).
•This is a time-varying distortion.
•More complicated systems will have more complicated distortions
All is not lost: I can preserve
input/output behavior by making
internal corrections in the DSP
Consider a system given
by:
x(n+1)=A*x(n)+B*u(n)
y(n)=C*x(n)+D*u(n)
I want the internal states to be large for all n,
so I will do a change of basis in the state space:
w(n)=G(n)*x(n)
w(n)=G(n)*x(n) so x(n)=G-1(n)*w(n)
w(n+1)=G(n+1)*x(n+1)=
G(n+1)*A*x(n)+G(n+1)*B*u(n)=
[G(n+1)*A* G-1(n)]*w(n)+[G(n+1)*B]*u(n)
y(n)=[C*G-1(n)]*w(n)+D*u(n)
This is a new internally time-varying system,
whose states are always large, but whose
input/output behavior is identical to the original
system’s!
In block form:
u(nT)
gu(n)
X
ADC
DSP
DAC
G(n)
X
gy(n)
Taken together, the multiplications at the input and
output, along with the internal corrections in the
DSP, ensure two things:
•All digital signals are always large
•The input/output behavior (not including
quantization error) is the same as in the original
(non-companding) DSP
y(nT)
Companding for DSPs
•Multiplies the input by a signal (based on the G(n) matrix), which
ensures that the signal at the ADC is always large.
•Makes internal corrections to the states of the DSP to ensure that the
states are always large.
•Multiplies the output of the DAC by another signal (based on G(n)).
This is necessary, since companding ensures that the output of the DAC
is always large, while the actual output will not always be large.
•These modifications do NOT change the input/output behavior (they
only lower the quantization error).
Project Proposal
•Implement companding on an actual
DSP – a simple digital reverberator
Project Proposal (cont’d)
• For a given output “quality” how many bits
are needed in the original, non-companding
DSP versus in the companding DSP?
• For a given number of bits, how does the
output “quality” compare between the
original, non-companding DSP versus the
companding DSP?
Project Proposal (cont’d)
• Can I quantify the improvements?
For example:
•Mean square error of output
•SNR (as a function of signal level)
•Harmonic distortion in spectrum
I would like to find all these for both the companding and the
non-companding systems as a function of the number of bits
used in the system.