1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
function ber = ber_fm(SNR,br)
% Init
fe = 250e6; %fréquence d'échantillonnage
fi = 70e6; %fréquence porteuse
t_simu = 1e-3; %temps de simulation
filtre_actif = 0;
% Mod
[phase data_brutes] = nco_FM(fe,br,t_simu);
sig_mod = modulate(data_brutes,fi,fe,'fm',2*pi*(br/fe));
S = fftshift(abs(fft(sig_mod)));
% Bruit
sig_filtre_in = awgn(sig_mod,SNR);
% Filtre
h_demod = generer_canal_FM(1);
filtre_actif = 1;
sig_filtre_out = filter(h_demod,1,sig_filtre_in);
% Demod
if filtre_actif == 1
sig_demod = demod(sig_filtre_out(128:end),fi,fe,'fm',2*pi*(br/fe));
else
sig_demod = demod(sig_mod,fi,fe,'fm',2*pi*(br/fe));
end
% Decision
for l = 0:br*t_simu-1
if (l+1)*fe/br <= 249840
aire(l+1) = sum(sig_demod(l*(fe/br)+1:(l+1)*fe/br))/(fe/br);
end
if l+1 <= 249840*br/fe
if aire(l+1)>0.5
sig_demod(l*fe/br+1:(l+1)*fe/br) = 1;
else
sig_demod(l*fe/br+1:(l+1)*fe/br) = 0;
end
end
end
% Corrections
if br == 10e6 || br == 12.5e6
sig_demod(1:end-1) = sig_demod(2:end);
sig_demod = sig_demod(1:249799);
end
% BER
compt = 0;
compt2 = 0;
for l = 0:br*t_simu-1
if (l+1)*fe/br <= 249799
aire1 = sum(sig_demod(l*(fe/br)+1:(l+1)*fe/br))/(fe/br);
aire2 = sum(data_brutes(l*(fe/br)+1:(l+1)*fe/br))/(fe/br);
end
if aire1 ~= aire2
compt = compt + 1;
end
compt2 = compt2 + 1;
end
ber = compt/compt2;
% figure
% plot(data_brutes(1:249873))
% hold on
% plot(sig_demod(1:249873),'r') |
Partager