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)')