equalizer_zfe
Compute an inverse filter by zero-forcing.
Namespace: dsp::telecom
Prototype
Vecf equalizer_zfe(const Vecf &h, int n)
Parameters
h | Channel impulse response, |
n | Number 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:
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()