Monday, August 16, 2010

Top Equalizer design example

Here i have sample Equalizer design example
% "Filter design" lecture notes (EE364) by S. Boyd % (figures are generated) % % Designs a frequency-domain and time-domain FIR equalizer for % a single-input single-output (SISO) channel. % % Frequency-domain equalization uses a Chebychev criteria and % is specified in terms of frequency response functions. % It is a convex problem (which can be formulated as an SOCP): % %   minimize   max |G(w)H(w) - G_des(w)|     for w in [0,pi] % % where H is the frequency response function and our variable % is the filter impulse response h. Function G is the unequalized % frequency response and G_des is the desired freq response. % % Time-domain equalization immediately designs the impulse % response function by specifying the problem in time (it's an LP): % %   minimize   max_{t neq D} |g_tilde(t)| %       s.t.   g_tilde(D) = 1 % % where g_tilde is the impulse response of equalized system, % and D is the delay of the system. % % Written for CVX by Almir Mutapcic 02/02/06  %******************************************************************** % problem specs %******************************************************************** % sample channel with impulse response g g =.5*[ 0.6526;  0.2157; -0.2639;  1.8024; -0.6430; ...         0.1096; -0.7190;  0.4206; -0.0193;  0.6603;];  % problem parameters n  = 30;              % filter order D  = 10;              % overall delay  %******************************************************************** % frequency domain equalization %******************************************************************** % number of freq samples (rule-of-thumb) m  = 15*(length(g) + n);  w = linspace(0,pi,m)'; G = exp( -j*kron(w,[0:length(g)-1]) )*g; A = exp( -j*kron(w,[0:n-1]) );  % desired frequency response is a pure delay (equalized channel) Gdes = exp(-j*D*w);  % formulate and solve the Chebyshev design problem cvx_begin   variable hf(n,1)   minimize( max( abs( G.*(A*hf) - Gdes ) ) ) cvx_end  % check if problem was successfully solved disp(['Frequency equalization problem is ' cvx_status]) if ~strfind(cvx_status,'Solved')   return end  %******************************************************************** % time-domain equalization %******************************************************************** % define the convolution matrix Tconv = toeplitz([g; zeros(n-1,1)],[g(1) zeros(1,n-1)]);  % create array of all times without t=D times_not_D = [1:D D+2:size(Tconv,1)];  % formulate and solve the time equalization problem cvx_begin   variable t   variable ht(n,1)    minimize( max( abs( Tconv(times_not_D,:)*ht ) ) )   subject to     Tconv(D+1,:)*ht == 1; cvx_end  % check if problem was successfully solved if ~strfind(cvx_status,'Solved')   disp(['Frequency equalization problem is ' cvx_status])   return end  %******************************************************************** % equalizer plots %******************************************************************** % plot g figure(1) plot([0:length(g)-1],g,'o',[0:length(g)-1],g,'b:') xlabel('t') ylabel('g(t)')  figure(2) H = exp(-j*kron(w,[0:length(g)-1]))*g; % magnitude subplot(2,1,1); plot(w,20*log10(abs(H))) axis([0,pi,-20,20]) xlabel('w') ylabel('mag G(w) in dB') % phase subplot(2,1,2) plot(w,angle(H)) axis([0,pi,-pi,pi]) xlabel('w') ylabel('phase G(w)')  % freq equalizer figure(3) plot([0:n-1],hf,'o',[0:n-1],hf,'b:') xlabel('t') ylabel('h(t)')  % plot g_tilde figure(4) gt=conv(g,hf); plot([1:length(gt)]-1,gt,'o',[1:length(gt)]-1,gt,'b:') xlabel('t') ylabel('g tilde(t)') axis([0,length(gt)-1,-.2 1.2])  figure(5) H = exp(-j*kron(w,[0:length(gt)-1]))*gt; % amplitude subplot(2,1,1) plot(w,20*log10(abs(H))) axis([0,pi,-20,20]) xlabel('w') ylabel('mag G tilde(w) in dB') % phase subplot(2,1,2) plot(w,angle(H)) axis([0,pi,-pi,pi]) xlabel('w') ylabel('phase G tilde(w)')  % time equalizer figure(6) plot([0:n-1],ht,'o',[0:n-1],ht,'b:') xlabel('t') ylabel('h(t)')  % plot g_tilde figure(7) gt=conv(g,ht); plot([1:length(gt)]-1,gt,'o',[1:length(gt)]-1,gt,'b:') xlabel('t') ylabel('g tilde(t)')  figure(8) H = exp(-j*kron(w,[0:length(gt)-1]))*gt; % magnitude subplot(2,1,1) plot(w,20*log10(abs(H))) axis([0,pi,-20,20]) xlabel('w') ylabel('mag G tilde(w) in dB') % phase subplot(2,1,2) plot(w,angle(H)) axis([0,pi,-pi,pi]) xlabel('w') ylabel('phase G tilde(w)')

No comments:

Post a Comment