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 69 70 71 72 73 74 75 76 77 78
| clear all; clc; clear;
fs =100e3; %frequence d'echantillonnage
fft_size=512;
dt=1/fs; % pas d'échantillonnage
t=0:dt:0.01; % axe du temps
t_dif=t(2:end);
% parceque la fonction diff retire un échantillon du signal on modifie l'axe de temps pour pouvoir représenter le signal à la sortie du dérivateur%
f=fs*(0:fft_size/2)/fft_size; % axe de fréquence
%Signal informatif
fimax=3400;
u1=1;
Sig_inf=u1*cos(2*pi*fimax*t);
%Modulation de frequence
kf=1.5; up=2 ; fp= 15000;
Sig_int=cumsum(Sig_inf); % la sortie de l'integrateur
Sig_int=Sig_int/max(Sig_int); % normalisation du signal intégré
Sig_fm=up*cos(2*pi*fp*t+kf*Sig_int); % signal modulé en FM
subplot(211);
plot(t*1000,Sig_inf,'b');grid on ; hold on;
plot(t*1000,Sig_fm,'r');grid on ; hold on;
xlim([0 2]);
Sp_fm = spectre (Sig_fm,fft_size);
subplot(212); plot(f/1000,Sp_fm); grid on; hold on;
xlabel('frequence (KHZ)');
%Demodulation FM
%Derivation
Sig_der=diff(Sig_fm);
figure;
subplot(211);
plot(t_dif*1000,Sig_der,'b');grid on;hold on;
xlim([0 2]);
%Spectre du signal derivé
Sp_der = spectre (Sig_der,fft_size);
subplot(212); plot(f/1000,Sp_der); grid on; hold on;
xlabel('frequence (KHZ)');
%Redressement
Sig_red=abs (Sig_der);
figure;
subplot(211);
plot(t_dif*1000,Sig_red,'b');grid on;hold on;
xlim([0 2]);
%Spectre du signal redressé
Sp_red = spectre (Sig_red,fft_size);
subplot(212); plot(f/1000,Sp_red); grid on; hold on;
xlabel('frequence (KHZ)');
%Filtrage
[b a]=butter[5,[fimax]*2/fs);
Sig_fil=filtfilt(b ,a,Sig_red);
figure;
subplot(211);
plot(t_dif*1000,Sig_fil,'r');grid on;hold on;
xlim([0 2]);
%Spectre du signal filtré
Sp_fil= spectre(Sig_fil,fft_size);
subplot(212); plot(f/1000,Sp_fil,'r'); grid on; hold on;
xlabel('frequence (KHZ)');
%Elimination de la composante continue
Sig_out=Sig_fil-mean(Sig_fil);
Sig_out=Sig_out*6;
figure;
subplot(211);plot(t*1000,Sig_out,'r');grid on; hold on; |
Partager