Algorithme sur Matlab
Répondre à la discussion
Page 1 sur 3 12 DernièreDernière
Affichage des résultats 1 à 30 sur 65

Algorithme sur Matlab



  1. #1
    giu2

    Algorithme sur Matlab


    ------

    Bonsoir,
    J'ai un travail à réaliser sur Matlab en signal, et je vous prie de m'excuser d'avance pour mon manque de connaissances, je suis vraiment débutante.
    Je dois écrire un algorithme pour détecter la présence ou l'absence d'un signal audio, en supposant que les 50 premières millisecondes du signal ne contiennent pas de signal utile. Je me suis renseignée, et j'ai vu que les signaux peuvent être chargés grâce à la commande "audioread".
    Le professeur nous a donné des fichiers ".wav" à charger, sur lesquels nous devront tester notre algorithme à la fin. Il nous a mis en garde en précisant que certains signaux peuvent être en stéréo et qu'il faudra les ramener à un signal mono, par "moyennage des canaux gauche et droite", je préfère vous dire que je ne comprend pas cette phrase même en ayant essayé de me renseigner. J'ai seulement réussi à comprendre que l'on peut écouter les signaux à l’aide de la fonction sound, et qu'il faut choisir une longueur différente de fenêtre pour chaque type de signal, mais je ne sais pas comment la déterminer.
    Je suis tout de même capable de faire le minimum en ce qui concerne le code, c'est-à-dire utiliser des boucles for, if, while, etc..., et générer un signal classique.
    J'ai seulement besoin que l'on me guide sur la manière de procéder.
    Merci d'avance pour votre aide !!

    -----

  2. #2
    GBo

    Re : Algorithme sur Matlab

    Bonjour,
    Pour savoir si un fichier.wav est mono ou stéreo, perso j'essaierais de voir ce que ça donne en regardant le nombre de colonnes de y après avoir fait:
    [y,Fs] = audioread('fichier.wav');
    Ensuite si c'est stéreo, pour chaque ligne d'échantillions, je ferais la somme du sample gauche avec le sample droit et je diviserais par 2, ce qui est bien un moyennage (si je ne divise pas par deux, je risque de dépasser les valeurs extrêmes possible du wav d'entrée (qui est sur 8 bits ? 16 bits ?), ce qui peut être gênant pour la suite des opérations).
    cdlt,
    GBo

  3. #3
    Janpolanton

    Re : Algorithme sur Matlab

    Bonjour,
    Pour savoir si un fichier.wav est mono ou stéreo, perso j'essaierais de voir ce que ça donne en regardant le nombre de colonnes de y après avoir fait:
    [y,Fs] = audioread('fichier.wav');
    Et l'écoute au casque par exemple?

  4. #4
    GBo

    Re : Algorithme sur Matlab

    Citation Envoyé par Janpolanton Voir le message
    Bonjour,
    Et l'écoute au casque par exemple?
    "J'ai un travail à réaliser sur Matlab en signal"
    Le mélange de vrai et de faux est énormément plus toxique que le faux pur - Paul Valéry

  5. A voir en vidéo sur Futura
  6. #5
    Janpolanton

    Re : Algorithme sur Matlab

    Oui, j'ai vu, je sais lire...
    L'écoute au casque c'est en quelque sorte pour lever le doute sur le signal.

  7. #6
    giu2

    Re : Algorithme sur Matlab

    Bonsoir,
    Merci beaucoup pour vos réponses. J'ai essayé d'écrire la ligne de code que vous m'avez conseillé (avec la fonction "audioread"), mais Matlab affiche une erreur. Est ce que cette erreur vient du fait que je n'ai pas importé le fichier avant? Je ne sais pas si c'est nécessaire de le faire... Et, si c'est le cas, comment faire ?
    Dernière modification par giu2 ; 14/11/2020 à 17h56.

  8. #7
    GBo

    Re : Algorithme sur Matlab

    Comment s'appelle l'un de vos fichiers wav ? s'il est court vous pouvez le zipper et l'uploader ici, on verra si on peut l'ouvrir.
    Merci d'indiquer aussi votre version de Matlab (de chez MathWorks).
    Le mélange de vrai et de faux est énormément plus toxique que le faux pur - Paul Valéry

  9. #8
    giu2

    Re : Algorithme sur Matlab

    J'ai la version R2020b de Matlab. J'ai nommé mon fichier "Son1", vous le trouverez ci-joint.
    Fichiers attachés Fichiers attachés

  10. #9
    GBo

    Re : Algorithme sur Matlab

    OK. Chez moi il s'ouvre bien:
    >> [y,Fs] = audioread('Son1.wav');
    Si vous avez :
    Error using audioread (line 90)
    The filename specified was not found in the MATLAB path.

    -> vérifier que vous l'avez bien mis dans le "MATLAB path" (e.g. moi je l'ai mis dans le répertoire de Matlab au dessus de bin)
    Sinon quel est votre message d'erreur exactement ?
    Dernière modification par GBo ; 14/11/2020 à 19h54.

  11. #10
    GBo

    Re : Algorithme sur Matlab

    Ou plus simple, mettez Son1.wav dans le répertoire ou matlab se lance
    Par exemple chez moi il se lance dans D:\MATLAB_R2019B\bin (comme indiqué dans la ligne que l'on voit en haut avec un petit symbole gris de disque dur), je l'ai donc mis dans bin et ça marche dans ce cas quelque soit le path.

  12. #11
    GBo

    Re : Algorithme sur Matlab

    Ou vous le mettez dans le premier répertoire que vous voyez en tapant dans Matlab la commande:
    >> path
    Chez moi par exemple c'est:
    C:\Users\GBo\Documents\MATLAB
    Le mélange de vrai et de faux est énormément plus toxique que le faux pur - Paul Valéry

  13. #12
    giu2

    Re : Algorithme sur Matlab

    Ca fonctionne, merci !!
    Dernière modification par giu2 ; 14/11/2020 à 20h21.

  14. #13
    GBo

    Re : Algorithme sur Matlab

    Essayez la méthode du message #11. Il faut le faire sur la ligne de commande.
    >>
    Le mélange de vrai et de faux est énormément plus toxique que le faux pur - Paul Valéry

  15. #14
    GBo

    Re : Algorithme sur Matlab

    Citation Envoyé par giu2 Voir le message
    Ca fonctionne, merci !!
    Super. Alors, il est mono ou stéréo Son1 ?
    Le mélange de vrai et de faux est énormément plus toxique que le faux pur - Paul Valéry

  16. #15
    giu2

    Re : Algorithme sur Matlab

    Je pense qu'il est stéréo, puisque l'algorithme retourne pour le y "73946x2 double". Il faut donc procéder au moyennage des canaux comme le professeur nous l'a demandé. Qu'est ce que vous appelez "sample gauche" et sample droit" dans votre précédent message ?

  17. #16
    GBo

    Re : Algorithme sur Matlab

    C'est ça, deux colonnes dans la matrix y, donc stéréo.
    Sample = échantillon en anglais.
    Un fichier wav contient des échantillons audio, dans votre cas ils ont été échantillonnés à 96000 Hz comme indiqué par la variable Fs renseignée par audioread.
    En stéréo il y a deux canaux, gauche et droite; les samples sont les valeurs que l'on trouve dans chacune des colonnes de y.
    Le mélange de vrai et de faux est énormément plus toxique que le faux pur - Paul Valéry

  18. #17
    giu2

    Re : Algorithme sur Matlab

    J'ai essayé d'écrire ceci
    Code:
    y1 = y(:,1);
    y2 = y(:,2);
    y3 = mean(y1 + y2);
    Est-ce que c'est juste ?
    J'ai ensuite tenté de transformer ce signal stéréo en signal mono de cette manière
    Code:
    [y,Fs]=[y3,Fs];
    mais je ne pense pas que ça soit juste...

  19. #18
    GBo

    Re : Algorithme sur Matlab

    Il faut déjà s'exercer sur la ligne de commande:

    Code:
    >> a = [1 2; 3 4; 5 6; 7 8; 9 10]
    
    a =
    
         1       2
         3       4
         5       6
         7       8
         9      10
    
    >> b = mean(a, 2)
    
    b =
    
        1.5000
        3.5000
        5.5000
        7.5000
        9.5000
    
    >>


    En effet :
    "M = mean(A,dim) returns the mean along dimension dim. For example, if A is a matrix, then mean(A,2) is a column vector containing the mean of each row."
    Dernière modification par JPL ; 15/11/2020 à 13h53. Motif: ajout de la balise Code (#) pour garder l’indentation
    Le mélange de vrai et de faux est énormément plus toxique que le faux pur - Paul Valéry

  20. #19
    giu2

    Re : Algorithme sur Matlab

    J'ai compris, j'ai vérifié et en effet "y3 = mean(y1 + y2)" ne renvoyait pas ce que je cherchais. Je l'ai fait comme vous me l'avez montré et ca marche !!
    Du coup, j'ai juste à écrire ça
    Code:
    [y,Fs] = audioread('Son1.wav');
    y = mean(y, 2);
    Et je me retrouve avec un signal mono. C'est bien ça ?

  21. #20
    GBo

    Re : Algorithme sur Matlab

    Logiquement oui, mais vous devriez le vérifier par vous-même en examinant les variables dans le Workspace (il suffit de double-cliquer sur y 73946x1 double et le contenu apparait sous forme d'un tableau).
    Une bonne pratique est aussi de ne pas écraser la matrice y au cas où vous en auriez encore besoin (par exemple ici pour pouvoir comparer avant / après le mean() dans le Workspace) en utilisant un autre nom pour la version mono, qui est un vecteur et plus une matrice, du coup.
    Dernière modification par GBo ; 15/11/2020 à 10h58.
    Le mélange de vrai et de faux est énormément plus toxique que le faux pur - Paul Valéry

  22. #21
    giu2

    Re : Algorithme sur Matlab

    Oui, vous avez raison, je vais aussi garder en mémoire la version du signal stéréo.
    J'aurais aimé faire un système de boucle pour faire la même manoeuvre sur une dizaine de fichiers ".wav" stockés dans un sous-dossier appelé "dossier".
    Pour chaque fichier dans le sous dossier (qui doit être dans le MATLAB PATH ?) --> traduit par une boucle for
    (for … et la je ne sais pas quoi mettre pour les sélectionner un par un)
    y1 = y(:,1);
    y2 = y(:,2);
    Si c’est un signal mono --> traduit par une boucle if
    (If y1 == y2)
    Alors suite du programme, qui detecte la présence ou l’absence d’un signal audio utile
    Si c’est un signal stéréo
    (else)
    y3 = mean(y,2);
    Suite du programme, qui detecte la présence ou l’absence d’un signal audio utile
    Qu'en pensez-vous ?

  23. #22
    GBo

    Re : Algorithme sur Matlab

    Ca dépend du but de l'exercice, vous faire maniper sur Matlab pour en maîtriser les bases ou plutôt se focaliser sur la partie "Je dois écrire un algorithme pour détecter la présence ou l'absence d'un signal audio" ?
    En bref quel est le contexte, est-ce dans le cadre d'un cours sur le traitement du signal, et si oui quelles sont les notions déjà étudiées en cours qui doivent être mise en oeuvre selon vous ?
    Dernière modification par GBo ; 15/11/2020 à 12h02.

  24. #23
    giu2

    Re : Algorithme sur Matlab

    Le but est plutôt de se focaliser sur l'algorithme pour détecter la présence ou l'absence d'un signal grâce aux notions vues en cours. Nous sommes sur un chapitre qui concerne le traitement numérique du signal. On a vu les notions de valeur moyenne, puissance instantanée, énergie d'un signal, puissance moyenne, valeur efficace, intercorrélation et autocorrélation.

  25. #24
    GBo

    Re : Algorithme sur Matlab

    Voilà, c'est la dessus qu'il faut se concentrer, vous pourrez toujours raffiner les détails "programmatiques" ensuite.

  26. #25
    giu2

    Re : Algorithme sur Matlab

    D'accord, c'est peut-être mieux comme ça. Le problème c'est que je ne sais calculer aucune des valeurs sans avoir le signal y en fonction de t, et là je n'ai que les valeurs de y.

  27. #26
    GBo

    Re : Algorithme sur Matlab

    Vous avez le temps implicitement dans un fichier wav, puisqu'il est fait pour être joué sur un player (par exemple le lecteur "Windows Media" que vous avez avec Windows, vous pouvez d'ailleurs le jouer !).
    C'est le même principe qu'un morceau sur un CD, sauf que pour votre Son1.wav, votre prof à utilisé une fréquence d'échantillonnage de Fs (Sampling Freq.) = 96 KHz (et non = 44.1 KHz comme sur un CD). Autrement dit, dans votre Son1.wav (transformé en mono), vous avez 96000 samples par seconde.
    J'en déduis que votre son dure moins d'une seconde puisqu'il contient 73946 samples.

  28. #27
    GBo

    Re : Algorithme sur Matlab

    Un indice: une fois qu'un signal à temps continu est échantillonné, on est dans le domaine du temps discret.
    Est-ce qu'on va a donné des formules dans le temps discret dans votre cours ? (des formules sans intégrale dt donc, mais avec un sigma).
    Dernière modification par GBo ; 15/11/2020 à 14h29.

  29. #28
    giu2

    Re : Algorithme sur Matlab

    Alors j'ai déterminé la durée D en écrivant ceci :
    Code:
    L = length(y);
    D = L/Fs;
    Ensuite, j'ai simplement essayé d'afficher ce que j'ai appelé y2, le signal mono, en écrivant :
    Code:
    Ts = 1/Fs;
    t = 0:Ts:D;
    plot(t,y2)
    Mais ça me retourne l'erreur suivante : Vectors must be the same length. Je ne sais pas comment la corriger.
    J'ai donc seulement écrit "plot(y2)", et j'ai obtenu ce graphique :
    fs26.png
    Mais je ne sais pas si ça peut me donner des infos utiles.
    Enfin, j'ai calculé la puissance instantanée P et je l'ai affiché ainsi :
    Code:
    P = y2.^2;
    plot(P);
    J'ai obtenu ceci :
    fs27.png
    peut être que je peux l'utiliser pour la détection de présence ou absence de signal audio ?
    Pour ce qui est des formules avec un sigma, oui je les connais, mais je ne sais pas quoi en faire
    Dernière modification par Antoane ; 15/11/2020 à 16h02. Motif: Réparation PJ

  30. #29
    GBo

    Re : Algorithme sur Matlab

    Une première façon (la plus simple) de savoir si un fichier audio contient un signal ou pas, c'est de voir s'il contient de l'énergie, suivant la définition rappelée ici:
    Nom : Energy.JPG
Affichages : 354
Taille : 52,8 Ko
    Source: https://engineering.purdue.edu/~sund...E301_Notes.pdf

    Il faut donc sommer, pour tout le vecteur mono, les valeurs de chaque sample mis au carré (la valeur absolue est optionnelle, elle ne changera rien).


    (*) NB aux experts: c'est une façon discutable de procéder (j'aurais fait un spectrogramme par exemple) mais je m'adapte aux éléments de cours que le primo posteur nous a fourni.
    Dernière modification par GBo ; 15/11/2020 à 16h01.
    Le mélange de vrai et de faux est énormément plus toxique que le faux pur - Paul Valéry

  31. #30
    GBo

    Re : Algorithme sur Matlab

    Citation Envoyé par giu2 Voir le message
    Code:
    P = y2.^2;
    plot(P);
    J'ai obtenu ceci :
    Pièce jointe 425298
    peut être que je peux l'utiliser pour la détection de présence ou absence de signal audio ?
    Pour ce qui est des formules avec un sigma, oui je les connais, mais je ne sais pas quoi en faire
    Ah oui bonne idée, c'est un peu comme la première étape d'un détecteur d'enveloppe !
    https://s3.amazonaws.com/embeddedrel...fig3_11217.jpg
    Le mélange de vrai et de faux est énormément plus toxique que le faux pur - Paul Valéry

Page 1 sur 3 12 DernièreDernière

Discussions similaires

  1. algorithme tabo en matlab
    Par gouguia01 dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 26/07/2017, 17h48
  2. algorithme max sur matlab
    Par victorien2015 dans le forum Programmation et langages, Algorithmique
    Réponses: 6
    Dernier message: 14/07/2015, 08h54
  3. recherche d'une fonction ou d'un algorithme sur MATLAB
    Par patricia_ze dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 14/09/2014, 13h41
  4. Algorithme Matlab
    Par james_83 dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 12/04/2010, 08h17
  5. Matrice et algorithme Matlab
    Par invited028b400 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 14/01/2008, 13h53