|
|
Zero-forcing equalizerSummary
A channel may have a frequency response as shown in Figure 1:
A zero-forcing equalizer inverts the frequency response, by calculating
Ideally, the combination of channel and equalizer gives a flat frequency response and linear phase.
In reality, zero-forcing equalization does not work in most applications, for the following reasons:
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.
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)); © 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 |