void SPpcBWexp (double bwexp, const float pc[], float pcb[], int Np)


Bandwidth expand a set of predictor coefficients


The procedure forms the bandwidth expanded version of a set of predictor coefficients. The roots of the all-pole LPC filter are radially scaled by the factor bwexp. This has the effect of increasing the bandwidth of the resonant peaks in the frequency response (speech formants). Let the prediction error filter be
              Np       -k
  A(z) = 1 - SUM p(k) z  .
The corresponding all-pole filter is 1/A(z). The filter with the radially scaled poles is 1/A(b*z). The bandwith expanded polynomial A(b*z) has coefficients,

   p'(k) = p(k) * b^k  for 1 <= k <= Np.

The effective bandwidth expansion of a sharp resonance can be determined from that for an isolated pole pair. Consider a simple filter with poles at z1 = r exp (j w0) and z2 = r exp (-j w0),

               z^2 - 1
  H(z) = ------------------------- .
         z^2 - 2r cos(w0) z  + r^2
The frequency response of this filter has a peak at w = w0 with a 3 dB bandwidth
  BW = pi/2 - 2 atan (r^2)     normalized radians.

If the pole positions are scaled radially, r' = r * b, with b < 1, the bandwidth of the resonance increases. The increase in bandwidth can be computed to be

  dBW = 2 atan (r^2 (1-b^2) / (1 + b^2 r^4))
For a 8 kHz sampling rate, the bandwidths expansions for different values of b are shown below (calculated for r=1).
     b       BW exp
   1.000      0
   0.996     10.2 Hz
   0.995     12.8 Hz
   0.994     15.3 Hz
   0.990     25.6 Hz
   0.980     51.4 Hz
For speech analysis, bwexp is often chosen to give a bandwidth expansion of 10 to 25 Hz.

Predictor coefficients are usually expressed algebraically as vectors with 1-offset indexing. The correspondence to the 0-offset C-arrays is as follows.

  p(1)  <==> pc[0]       predictor coefficient corresponding to lag 1
  p(k)  <==> pc[k-1]     1 <= k < Np
  p'(1) <==> pcb[0]      predictor coefficient corresponding to lag 1
  p'(k) <==> pcb[k-1]    1 <= k < Np


-> double bwexp
Bandwidth expansion factor
-> const float pc[]
Input predictor coefficients (Np values)
<- float pcb[]
Output predictor coefficients (Np values). The output values can overlay the input values.
-> int Np
Number of predictor coefficients

Author / revision

P. Kabal / Revision 1.12 2003/05/09

See Also


Main Index libtsp