Linear FIR equalizer

design of TSE optimum non-recursive linear equalizer (FIR) for second order IIR system using impulse response ** lab12_1.m * mw * 04/25/2007

Contents

Input dialog

prompt = {'Order of equalizer p','Delay m','Block size K > p'};
dlg_title = 'lab12_1'; num_lines = 1; def = {'3','0','41'};
answer = inputdlg(prompt,dlg_title,num_lines,def);
if isempty(answer)
    Ne = 3; M = 0; K = 41;      % default
else
    Ne = str2num(answer{1});   % equalizer order
    M  = str2num(answer{2});   % delay
    K  = str2num(answer{3});   % simulated length of impulse response
end

Test signal and filtering

b = .5775*[1 0 .81]; a = [1 -.71 .25]; % numerator and denominator coefficients
% b = .24192*[1 2 1];     % numerator coefficients
x = [1 zeros(1,K-1)];     % impulse function
u = filter(b,a,x);        % simulated impulse response

Empirical acf and ccf

rr = zeros(Ne,Ne);        % time autocorrelation matrix
for m=0:Ne-1
    rr(1+m,1+m) = lab12_rxx(m,m,u);
    for n=m+1:Ne-1
        rr(1+m,1+n) = lab12_rxx(m,n,u);
        rr(1+n,1+m) = rr(1+m,1+n);
    end
end
d = [zeros(1,M) x(1:K-M)];   % delayed and truncated test signal
r = zeros(Ne,1);             % time crosscorrelation function
for n=0:Ne-1
    r(1+n) = lab12_rxy(n,d,u);
end
be = rr\r;                   % equalizer coefficients rr^-1 * r
TSEopt = lab12_rxx(0,0,d) - be'*r;  % mean power of prediction error
fprintf('lab12_1 Equalizer coefficients for order p = %g\n',Ne)
for k=1:Ne
fprintf([' b(',num2str(k-1),') = %g \n'],be(k))
end
fprintf('Minimum TSE for K = %g and m = %g\n',K,M)
fprintf(' TSEopt = %g \n',TSEopt)
lab12_1 Equalizer coefficients for order p = 30
 b(0) = 1.73069 
 b(1) = -1.2288 
 b(2) = -0.968048 
 b(3) = 0.994535 
 b(4) = 0.782998 
 b(5) = -0.804597 
 b(6) = -0.632845 
 b(7) = 0.650517 
 b(8) = 0.510896 
 b(9) = -0.52543 
 b(10) = -0.411716 
 b(11) = 0.42376 
 b(12) = 0.330886 
 b(13) = -0.340976 
 b(14) = -0.264803 
 b(15) = 0.273389 
 b(16) = 0.210522 
 b(17) = -0.217986 
 b(18) = -0.165623 
 b(19) = 0.172298 
 b(20) = 0.128105 
 b(21) = -0.134289 
 b(22) = -0.096297 
 b(23) = 0.102265 
 b(24) = 0.0687806 
 b(25) = -0.0747988 
 b(26) = -0.0443296 
 b(27) = 0.0506663 
 b(28) = 0.0218543 
 b(29) = -0.0287918 
Minimum TSE for K = 41 and m = 0
 TSEopt = 0.000528185 

Equalizer and simulated TSE

v = conv(be,u);
TSE = sum((d-v(1:length(d))).^2); % TSE
fprintf(' TSEsim = %g\n',TSE)
 TSEsim = 0.000528185

Spectra

Nfft = 1024; % DFT length
H = fft(u,Nfft); B = fft(be,Nfft); V = fft(v,Nfft);               % DFT spectra
H = abs(H(1:Nfft/2)); B = abs(B(1:Nfft/2)); V = abs(V(1:Nfft/2)); % magnitude
w = 0:Nfft/2-1; w = w/(Nfft/2); % normalized radian frequency scale
Dmax = max(abs(V-1));           % maximum deviation
fprintf('Maximum deviation = %g \n\n',Dmax)
Maximum deviation = 0.0687169 

Graphics

FIG = figure('Name',['lab12_1 : FIR equalizer of order p = ',num2str(Ne)],...
    'NumberTitle','off');
L = 1 + 10*ceil(Ne/10);
subplot(3,2,1), stem(0:L-1,u(1:L),'filled'),grid
xlabel('n \rightarrow'), ylabel('h[n] \rightarrow')
title('Impulse response (channel)')
subplot(3,2,2), plot(w,H),grid
xlabel('\Omega / \pi \rightarrow'), ylabel('|H(e^{j\Omega})| \rightarrow')
title('Frequency response (channel)')
subplot(3,2,3), stem(0:L-1,[be; zeros(L-Ne,1)],'filled'),grid
xlabel('n \rightarrow'), ylabel('b[n] \rightarrow')
title('Impulse response (equalizer)')
subplot(3,2,4), plot(w,B),grid
xlabel('\Omega / \pi \rightarrow'), ylabel('|B(e^{j\Omega})| \rightarrow')
title('Frequency response (equalizer)')
subplot(3,2,5), stem(0:L-1,v(1:L),'filled'),grid
xlabel('n \rightarrow'), ylabel('v[n] \rightarrow')
title('Impulse response (cascade)')
subplot(3,2,6), plot(w,V),grid
xlabel('\Omega / \pi \rightarrow'), ylabel('|V(e^{j\Omega})| \rightarrow')
title('Frequency response (cascade)')