Google

main
dspblog
cyclic_signals
FFT_interpolation
FFT_interpolation_how_does_it_work
FFT_smoothness_cyclic
discrete_time_reconstruction
discrete_time_reconstruction2
Nyquist_on_the_edge
FFT_delay_special_case
Fourier_reconstruction
pulse_and_Nyquist
FFT_complexError
matlabOctave
matlab_upsampling
matlab_downsampling
FFT_delay
FFT_filter_example
FFT_interpolation_example
FFT_bin_frequencies
fit_signal
FFT_peaksearch_audio_example
matlab_binary_readwrite
Octavesvg
C
FFTW_example
looprecord
SNR
SNR3
SNR_example_96kAudio
SNR_FFT_correlation_example
lua
luagpib
luasplit
luadump
mnoofltk
wxLuaDll
wxLua_loadAsDll
wxLua_HelloWorld
wxLua_simpleButton
wxLua_resourceManagement
wxLua_XMLparser
DSP
IQ_LO
IQ_LO_2
optimum_receiver
DSP_basics
sampleRateChange_terms
dirac_pulse
freqresp_s
zfilter_example
freqresp_z
freqresp_z_sign
misc
zero_forcing_equalizer_example
nonminphase_inverse
periodic_spectrum
lagrange_multipliers
Entropy
RC_chopper
TRex450_setup
EP100
EP100SE
EP100Gremlins
essential_spares
tail_rotor
motoradjustment
blade_balancing
blade_repair
GAUI_SAE12A
Walkera43


valid html (click to verify)



prevupnextdisable ads

Zero-forcing equalizer

Summary

The Zero-Forcing Equalizer applies the inverse of the channel to the received signal, to restore the signal before the channel.
It is not useful for practical applications - some exceptions -, but a textbook study case that is useful to explain more realistic equalizer concepts.

A channel may have a frequency response as shown in Figure 1:

Figure 1: Channel frequency response

F(f) causes frequency dependent gain and phase rotation.

A zero-forcing equalizer inverts the frequency response, by calculating C(f)=\frac{1}{F(f)}, as shown in Figure 2:

Figure 2: Zero forcing equalizer: The inverse of the channel frequency response

Ideally, the combination of channel and equalizer gives a flat frequency response and linear phase.

Figure 3: Zero forcing equalizer: Inverse of the channel frequency response

In reality, zero-forcing equalization does not work in most applications, for the following reasons:
  • Even though the channel impulse response has finite length, the impulse response of the equalizer needs to be infinitely long
  • The channel may have zeroes in its frequency response that cannot be inverted
  • At some frequencies, |F(f)| may be very small. To compensate, |C(f)| grows very large.
    As a consequence, any noise added after the channel gets boosted by a large factor and destroys the overall signal-to-noise ratio.
The third item is often the most important one.

Matlab example in frequency domain (using FFT)

The inverse of the channel is found using FFT. It is accurate in the frequency domain, but the content of the FFT shows only one cycle from a periodic impulse response, and the “tails” wrap around.
However, the (non-cyclic) convolution with the test signal shows the finite length, and the result is only an approximation.

Download
% *******************************************************
% Zero forcing equalizer example
% Markus Nentwig 2007
% This program is in the public domain
% Zero-forcing equalization does NOT WORK in most real-world
% applications. See Proakis why.
% *******************************************************

% time shifted pulse
% inverse convolution needs some space left and right
pulse=zeros(1, 256); pulse(128)=1;

% three-tap channel
chan=pulse; chan(130)=-2-3i; chan(133)=-3+4i;

% invert channel
%fft(chan) .* fft(eq) = fft(pulse)
eq=ifft(fft(pulse) ./ fft(chan));

p1=[1 2i 3 4 5]; % test signal
p2=conv(p1, chan); % channel output
p3=conv(p2, eq); % equalizer output

plot(abs(p3));
p3(128+256-1:128+256+6)

Matlab example in time domain (using least-squares solution)

This program uses a least-squares solution (backslash operator).
Figure 4, 5 and 6 show the channel impulse response and the equalizer outputs using a 15 tap and a 45 tap equalizer, respectively.

Figure 4: Channel impulse response (unequalized pulse)

Figure 5: Zero-forcing EQ, 15 tap

Figure 6: Zero-forcing EQ, 45 tap

Download
% *************************************************************
% Zero-forcing equalizer demo
% Markus Nentwig 2007
% This program is in the public domain
%
% Demonstration of zero forcing equalization
% Zero-forcing equalization does NOT WORK in most real-world
% applications. See Proakis why.
% *************************************************************
close all; clear all;

% Channel impulse response
chan = [1 0 -0.3i 4 5 -i];

% number of equalizer taps
ntaps=45;

% *************************************************************
% Calculate equalizer
% *************************************************************
base=[];
pchan=[chan zeros(1, ntaps)];
for k=1:ntaps
  base=[base; circshift(pchan, [0, k-1])];
end

ideal=zeros(1, length(chan)+ntaps); 
% Choose nominal delay
% Optimum depends also on channel
ideal(floor((ntaps+length(chan))/2))=1; 

% Backslash operator finds the least-squares solution for:
% sum of
% - 1st EQ tap times undelayed channel impulse response
% - plus 2nd EQ tap times 1-delayed ch. IR
% - plus 3rd EQ tap times 2-delayed ch. IR
% - plus ...
% equals ideal impulse response, allowing for some delay
eq=transpose(base)\transpose(ideal);

% *************************************************************
% Test it
% *************************************************************
v=[1]; % test pulse
%v=[1 0 0 2 0 0 3 0 0 4 0 0 5 0 0 6i]; % alternative test pulse

% convolve with channel impulse response
v=conv(v, chan);

% convolve with equalizer impulse response
v=conv(v, eq);

figure(); stem(abs(v));


prevupnextdisable ads

© Markus Nentwig 2007-2008
The content of this page is provided without any warranty and may not be reproduced without permission.

Comments? Questions?

Please send me a mail! mnentwig@elisanet.fi