equalizer_zfe

Compute an inverse filter by zero-forcing.

Namespace: dsp::telecom

Prototype

Vecf equalizer_zfe(const Vecf &h, int n)

Parameters

hChannel impulse response,
nNumber of taps for the FIR inverse filter.

Returns

FIR inverse filter (taps).

Description

Given the channel impulse response \(h\), this function computes the coefficients of a FIR filter \(g\), trying to approximate: \[ g\star h \sim \delta_d \],

where \(d\) is the global delay of the channel plus equalization filter pair. That is, \(g\) is the inverse filter (up to some delay \(d\)) of \(h\).

Note
This function assumes the channel response is known.

Warning
  • The inversion is only approximative, as the exact filter inverse would have an infinite number taps.
  • If the channel response has zeros (or low magnitude) in the frequency domaine, this kind of equalization is not recommanded (noise amplification).


Example

  // h = réponse du canal (supposée connue)
  soit h = Vecf::valeurs({0.02, -0.1, 0.1, 1, -0.05, 0.1, 0.05}),
  // g = filtre d'égalisation
       g = égaliseur_zfe(h, 15);

  // Essai sur un signal NRZ
  soit x0 = randi(2, 10).as<float>() * 2 - 1;
  x0 = (sah(x0, 3) | Vecf::zeros(10)); // NRZ + flush
  soit x1 = convol<float,float>(h, x0),
       x2 = convol<float,float>(g, x1);

Impulse responses (channel and equalization filter)

Frequency responses (channel and equalization filter)

Equalization example on a NRZ signal

See also

égaliseur_création()