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 :

Algorithme traitement du signal


Sujet :

Signal

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Algorithme traitement du signal
    Bonjour à tous,
    J'ai un travail à réaliser sur matlab en traitement du signal. Je dois écrire un algorithme pour comparer les fréquences de deux sons audio purs. Il doit renvoyer un résultat binaire : 1 si les deux fréquences sont les mêmes, à une marge d’erreur près, 0 sinon. On me donne seulement les informations suivantes :
    - les fréquences sont dans l’intervalle [130Hz,4000Hz]
    - Fe = 16KHz.
    Je dois générer aléatoirement les autres paramètres des signaux (amplitude, fréquence et phase).
    Le premier signal a obligatoirement une phase nulle, le deuxième doit en avoir une non nulle.
    Pour l'instant, je sais qu'un son pur est de la forme : A*cos(2*pi*f*t + phi)). L'amplitude doit être strictement positive. Les deux signaux doivent être de même durée, et la durée doit être égale à alpha/f1, avec alpha >0.
    J'ai pensé à écrire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Fe =16000;
    Te = 1/Fe;
    f1 = randi([130,4000]);
    f2 = randi([130,4000]);
    t = 0:Te:D;
    phi1 = 0;
    x1 = A1*cos(2*pi*f1*t + phi1);
    x2 = A2*cos(2*pi*f2*t+phi2);
    plot(t, x1);
    plot(t,x2);
    Cependant, pour la phase2 et l'amplitude, je ne sais pas comment les générer aléatoirement, parce qu'on ne m'a pas donné d'intervalle, je dois le déterminer moi même. Comment savoir ? Je ne sais pas non plus comment déterminer alpha.
    Pour la deuxième partie de cet algorithme, je dois uniquement avoir accès aux signaux générés et aux paramètres deja fixés. On ne connait ni l'amplitude, ni la phase, ni la durée, et encore moins la fréquence, puisque c'est ce qui nous intéresse. On peut les estimer si besoin.
    J'ai pensé à m'inspirer de l'intercorrélation, mais celle-ci sert à comparer deux signaux, et pas leur fréquence.
    Pouvez-vous me guider sur la manière de procéder s'il vous plait?
    Je précise que je n'ai pas encore appris à utiliser Fourier, donc au cas ou il serait utile, je ne peux pas m'en servir...
    Merci d'avance pour votre aide.

  2. #2
    Membre émérite
    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
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour,

    Il est certain que la FFT est le moyen le mieux adapté.

    Tu peux calculer le déphasage.

    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
    % Calcul du dephasage entre deux nsinusoides
    clear
    Fe =16000;
    Te = 1/Fe;
    %f1 = randi([130,4000]);
    %f2 = randi([130,4000]);
    f1=400;
    f2=450;
    D=1/min([f1 f2]);
    t = 0:Te:D;
    phi1 = 0;A1=1;A2=20;phi2=pi/6
    x1 = (A1*cos(2*pi*f1*t + phi1));
    x2 = (A2*cos(2*pi*f2*t+phi2));
     
    x1=x1/max(x1);x2=x2/max(x2);
    t2min=zeros(x2)
    plot(t, x1,t,x2);
    grid
    % Test du dephasage
    a=find(x1(1:end-1).*x1(2:end)<0)
    b=find(x2(1:end-1).*x2(2:end)<0)
    deltat=b(1)-a(1) % Déph&asage en echantillons
    deltat*Te % Déphasage en temps

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 23
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour, merci pour votre réponse. Je suis débutante en traitement du signal et en matlab, donc je ne comprend pas comment le déphasage pourrait m'aider à comparer les fréquences des deux signaux. Pouvez-vous m'expliquer votre méthode de réflexion svp?

  4. #4
    Membre émérite
    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
    Points : 2 841
    Points
    2 841
    Par défaut
    Bonjour,

    Quand tu sais détecter les zéros, tu peux calculer les périodes et leurs écart à tester sur un seuil de battement :
    Le déphasage n'intervient pas. C'est un exemple.
    Cette méthode n'est précise que sur des signaux purs. S'il y a du bruit ou d'autres harmoniques, il faut filtrer ou utiliser la FFT.

    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
    % Calcul du dephasage entre deux nsinusoides
    clear
    Fe =16000;
    Te = 1/Fe;
    %f1 = randi([130,4000]);
    %f2 = randi([130,4000]);
    f1=400;
    f2=650;
    D=1/min([f1 f2]);
    t = 0:Te:D;
    phi1 = 0;A1=1;A2=20;phi2=pi/6
    x1 = (A1*cos(2*pi*f1*t + phi1));
    x2 = (A2*cos(2*pi*f2*t+phi2));
    x1=x1/max(x1);x2=x2/max(x2);
    t2min=zeros(x2)
    plot(t, x1,t,x2);
    grid
    % Test du dephasage
    a=find(x1(1:end-1).*x1(2:end)<0);
    b=find(x2(1:end-1).*x2(2:end)<0);
    deltat=b(1)-a(1) % Déph&asage en echantillons
    deltat*Te; % Déphasage en temps
    % Calcul des periodes
    P1=(a(2)-a(1))*2*Te
    P2=(b(2)-b(1))*2*Te
    % Ecart des periodes à tester avec un seuil
    deltaPeriode=P2-P1

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/12/2018, 15h17
  2. Enveloppe spectrale dans le traitement du signal
    Par AsmaHaj dans le forum MATLAB
    Réponses: 4
    Dernier message: 05/04/2007, 00h28
  3. [Traitement du signal] Convolution en passant par la FFT
    Par parp1 dans le forum Traitement du signal
    Réponses: 8
    Dernier message: 25/04/2006, 13h26
  4. DSP traitement du signal
    Par miminou dans le forum Autres architectures
    Réponses: 4
    Dernier message: 24/03/2005, 14h49

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