One tap equalizer design (MMSE equalizer and ZF equalizer)
53 次查看(过去 30 天)
显示 更早的评论
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));
0 个评论
采纳的回答
Idin Motedayen-Aval
2022-6-3
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.
0 个评论
更多回答(1 个)
Chaitanya Mallela
2020-3-12
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.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Test and Measurement 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!