Bonjour,
J'ai un petit problème avec un code matlab dont l'objectif est de créer une chaîne complète de modulation (modulateur, canal, démodulation, calcul du TEB etc...).
Actuellement je bloque sur la partie démodulation FSK (de fréquence).

mon programme fonctionne de la maniére suivante :
- on stock dans un vecteur "produit" la multiplication de r(t)*cos(2*pi*fc*t+w(i)*t). Ainsi produit(1, x) contient la multiplication avec w1, produit(2, x) contient la multiplication pour w2 etc... Sachant qu'il y a un nombre M de w.
- On effectue l'intégrale en sommant les k*Ts/Te points. Nos échantillons étant espacés de Te, nous avons pour une durée Ts, Ts/Te points, et notre vecteur total contient Ns*Ts/Te points (c'est pour ça qu'on fait varier k jusqu'a Ns).
- Une fois qu'on a l'intégrale, on regarde si le symbole 'n' (il y en a un nombre Ns) correspond à la pulsation w1 ou w2, et on en déduit sa valeur (0 ou 1 pour M=2).

Voyez vous où est ce que je me suis planté ?

Merci

r = signal modulé par fréquence porteuse
fc = fréquence de la porteuse
Te = Fréquence d'échantillonage
Ts = Temps symbole
M = nombre de symboles différents (lié au nombre de bits par symboles)
time_axis = vecteur temps (pour l'affichage).

Code:
function bits_est= demod_FSK (r,fc,Te,Ts,M,time_axis)
Ns = (length(r)/(Ts/Te))/(M/2) ; %nombre de symboles
delta_f=1/(2*Ts); %ecart entre deux fréquences
w=[]; 
produit=[];
%% Multiplication par fréquence
for i = 1: M
     w(i)=2*pi*(2*i-(M-1))*delta_f/2;
    %w(i)=2*pi*(i+1)*delta_f/2; %w(0)=w0, w(1)=w1, w(2)=w2 etc...
    produit=[produit;r.*(cos(2*pi*fc*time_axis+w(i)*time_axis))];%produit(0)=r(t)*cos(2*pi*fc*t+w0*t), produit(1)=r(t)*cos(2*pi*fc*t+w1*t) etc...
end
size(produit)
%produit = [produit_temp(1:size(produit_temp)/M);produit_temp(size(produit_temp)/M);

%for k=1 : log2(M) : Ns 
    %% intégrale avec méthode des sommes
    for i=1 : M 
        for k = 1:Ns %On exécute Ns fois une boucle qui va s'exécuter Ts/Te fois.
            for j= 1:Ts/Te 
                temp_somme(j)=produit(i,(k-1)*(Ts/Te)+j);
            end
             somme = sum(temp_somme);
             integrale(i,k) = somme ;
        end
        
    end
  %integrale(cos(2*pi*fn*t)*cos(2*pi*fn*t)) = 0 si j != n ou cste si j = n
  %suffit de regarder à quel endroit on a la cste pour trouver le symbole
    for i=1 : Ns
       if(M==2)
           if(max(abs(integrale(1,i)))>max(abs(integrale(2,i))))
                bits_est(i)=0;
            elseif(max(abs(integrale(1,i)))<max(abs(integrale(2,i))))
                bits_est(i)=1;
            end
       end
    end