IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Signal Discussion :

Intercorrélation de deux signaux


Sujet :

Signal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 23
    Par défaut Intercorrélation de deux signaux
    Bonsoir à tous,
    Je dois coder un programme sous matlab qui me permettrait de comparer les fréquences de deux sons audio purs (donc de forme Acos(2*pi*f*t)), que j'ai préalablement générés. Cette partie est correcte d'après mon professeur.
    On connait la fréquence d’échantillonnage, qui est de 16KHz. L'algorithme doit renvoyer un résultat binaire : 1 si les deux fréquences sont les mêmes, à une marge d’erreur près, 0 sinon.
    Je dois pour cela utiliser l'intercorrélation dont la formule est ci-dessous. Voilà ce que j'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    N = length(x1);
    Cxx = zeros (1,2*N);  
    inter = zeros(1,N);
     
    for k = 1 : N
        for n = k : N-1
            inter(n) = x1(n)*x2(n+k);           
        end   
        Cxx(k) = 1/N * sum(inter);    
    end
     
    plot(Cxx) ;
    Cependant, on m'affiche l'erreur : Index exceeds the number of array elements (501).
    Error in Exercice (line 43)
    inter(n) = x1(n)*x2(n+k);

    Si je comprend bien, je pense que je n’ai pas bien indicé la boucle for, mais je n’arrive pas à trouver comment corriger ce problème.
    Merci d'avance pour votre aide.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Par défaut
    Bonjour,

    Un essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     clear
    Te=1/12000;
    A=1;f1=200;f2=200;
    t=0:Te:0.01;
    x1=A*cos(2*pi*f1*t);
    x2=A*cos(2*pi*f2*t);
     
    N = length(x1);
    Cxx = zeros(1,2*N);
    inter = zeros(1,N);
    [c,lags]=xcorr(x1,x2);
    figure(1)
    plot(lags,c)
    grid
    for k = 1: N-1
        for n = 1 : N-k-1
            inter(n) = x1(n)*x2(n+k);
        end
        Cxx(k) = 1/N*sum(inter);
    end
    figure(2)
    plot(Cxx) ;
    grid
     
    figure(3)
    plot(lags,c/max(c))
    hold on
    plot(Cxx/max(Cxx),'r')
    grid

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 23
    Par défaut
    Bonjour,
    Merci pour votre réponse !
    Pouvez-vous m'expliquer pourquoi avoir utilisé la fonction xcorr, et comment puis-je renvoyer une réponse binaire par rapport à une marge d'erreur?

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Par défaut
    Bonjour,
    J’ai utilisé xcorr pour comparer les résultats de matlab avec ton programme (voir figure 3)
    Je regarde la suite.

    Tu peux regarder la discussion ci-dessous qui traite le même sujet où on trouve un algorithme de mesure de période du signal.

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mai 2008
    Messages
    2 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 040
    Par défaut
    Bonjour,

    Un essai avec le test sur la période de la fonction d'intercorrélation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    clear
    Te=1/12000;
    A=1;f1=200;f2=210;
    t=0:Te:0.02;
    x1=A*cos(2*pi*f1*t);
    x2=A*cos(2*pi*f2*t);
    N = length(x1);
    for k = 1: N-1
        for n = 1 : N-k-1
            inter(n) = x1(n)*x2(n+k);
        end
        Cxx(k) = 1/N*sum(inter);
    end
    figure(1)
    plot((1:N-1)*Te,Cxx) ;
    grid
    d=find(Cxx(1:end-1).*Cxx(2:end)<0);
    dd=diff(d(2:end-1))
    %dd=dd(1:end-1)
    %diff(dd)
    % Résultat binaire
    if max(dd)-min(dd) > 2
        disp('signaux dfifférents')
    else
        disp('signaux prochent')
    end

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 23
    Par défaut
    Bonjour,
    Pouvez-vous m'expliquer ce que vous faites dans votre algorithme svp ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Corrélation de deux signaux sons
    Par paissad dans le forum LabVIEW
    Réponses: 0
    Dernier message: 01/12/2008, 16h29
  2. Réponses: 2
    Dernier message: 10/07/2008, 11h26
  3. Multiplication de deux signaux
    Par Neocid dans le forum Signal
    Réponses: 10
    Dernier message: 03/03/2008, 11h52
  4. Réponses: 10
    Dernier message: 19/06/2007, 11h31
  5. Calcul intercorrélation entre 2 signaux
    Par jmhohen dans le forum Signal
    Réponses: 1
    Dernier message: 07/03/2007, 18h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo