One tap equalizer design (MMSE equalizer and ZF equalizer)

74 views (last 30 days)
Guys, these are my code to generate the BER vs SNR for MMSE equalizer and ZF equalizer for N tap of channel. I dunno why the ZF equalizer are showing a better result than the MMSE equalizer.
1) Is there any problem with my code? Is there anyway to simplify the code?
clc
clear
format long
N=100000;
SNRDB=6:2:16;
I_da=sign(rand(1,N)-0.5);
Q_da=sign(rand(1,N)-0.5);
s=I_da+1i*Q_da;
for i=1:length(SNRDB)
SNRLIN=10^(SNRDB(i)/10);
n=1/sqrt(2*10^(SNRDB(i)/10))*(randn(1,N)+1i*randn(1,N));
h=1/sqrt(2)*(randn(1,N)+1i*randn(1,N));
y=h.*s+n;
for j=1:3
if j==1
W(1,:) = ones(size(h));
elseif j==2
W(2,:)= 1./h;
elseif j==3
W(3,:)= conj(h)./((abs(h)).^2+n);
else
error('Unimplemented Equalizer');
end
z = W .* y;
z_=sign(real(z))+1i*sign(imag(z));
end
BER_no(i)=sum(s~=z_(1,:))/N;
BER_ZF(i)=sum(s~=z_(2,:))/N;
BER_MMSE(i)=sum(s~=z_(3,:))/N;
end
ax = [6 16 1e-04 8e-01];
axis(ax)
semilogy( SNRDB, BER_no, '*-k', SNRDB,BER_ZF, 'o--r',SNRDB, BER_MMSE, '>-b');
xlabel('E_b/N_0 [dB]');
ylabel('BER');
title('Equalizer for OFDM system');
legend('No Equalizer','ZF Equalizer','MMSE Equalizer');
grid on;
2) If now i wanna generate 11-tap channel, I will have to change the N to 11, but the code wont work if I just change like that. Any suggestion on this?
h=1/sqrt(2)*(randn(1,N)+1i*randn(1,N));

Accepted Answer

Idin Motedayen-Aval
Idin Motedayen-Aval on 3 Jun 2022
Answer provided by Chaitanya to item (1) is correct.
On item 2: Changing N to 11 (as the OP suggested) does not work because that is changing the number of random samples being generated (N is in fact the number of symbols being simulated here; not the number of channel taps).
Easiest way to simulate an 11-tap channel, is to use the comm.RayleighChannel object from the Communications Toolbox. Otherwise, you will have to implement that channel model yourself (this is by no means a trivial task!). You can read about the theory behind simulating fading channels here.

More Answers (1)

Chaitanya Mallela
Chaitanya Mallela on 12 Mar 2020
1. The Optimum response of MMSE equalizer has to be changed
W(3,:)= conj(h)./((abs(h)).^2+(var(n)/var(s)));
It is observed that the MMSE equalizer response is similar to ZF equalizer. But the significance of MMSE equalizer is that it does not amplify the noise term to recover the original signal in the deep nulls of the channel.
Try this by checking the code
[p,ind]=min(h)
abs(z(3,ind)) < abs(z(2,ind))
2. To satisfy the Central Limit Theorem, cumulative sum of large samples of Random Variables are necessary to approximate to Gaussian Random Variable.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!