Algorithme sur Matlab - Page 2
Répondre à la discussion
Page 2 sur 3 PremièrePremière 2 DernièreDernière
Affichage des résultats 31 à 60 sur 65

Algorithme sur Matlab



  1. #31
    Jack
    Modérateur

    Re : Algorithme sur Matlab


    ------

    Citation Envoyé par GBo Voir le message
    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).
    Je ne pense pas qu'il s'agisse à proprement parler de la valeur absolue, mais plutôt du module, la fonction pouvant traiter des valeurs complexes.

    -----

  2. #32
    GBo

    Re : Algorithme sur Matlab

    Une amélioration de l'utilisation de la formule "energy" vue au-dessus serait peut-être de faire un intervalle [n1 n2] plus petit que la totalité du vecteur (par exemple 10 samples), et de faire "glisser" la formule à intervalle réduit le long du vecteur, en plottant les valeurs obtenues ? Je ne sais pas, c'est juste une idée. Je n'ai pas la solution à votre exercice et il doit y avoir plusieurs façons de faire en fonction de ce que vous avez acquis, à vous d'imaginer.
    Dernière modification par GBo ; 15/11/2020 à 16h40.

  3. #33
    GBo

    Re : Algorithme sur Matlab

    Citation Envoyé par Jack Voir le message
    Je ne pense pas qu'il s'agisse à proprement parler de la valeur absolue, mais plutôt du module, la fonction pouvant traiter des valeurs complexes.
    Oui en effet, ma note concernait le cas particulier des valeurs réelles (fichier audio de l'exercice), mais merci de la correction.
    Le mélange de vrai et de faux est énormément plus toxique que le faux pur - Paul Valéry

  4. #34
    giu2

    Re : Algorithme sur Matlab

    Dans la définition de mon cours, l'énergie est égale à ce que vous avez mis, mais le tout multiplié par la période d'échantillonnage. Quelle est la bonne formule ?
    J'ai écrit ceci :
    Code:
    E = 0;
    L = length(y2);
    for k = 1:L 
        E = E + y2(k)^2;
    end
    L'algorithme m'affiche une valeur de E, mais que faire de celle-ci pour répondre à l'énoncé ?

  5. #35
    GBo

    Re : Algorithme sur Matlab

    On peut faire sans boucle for en Matlab, regarder la fonction sum().
    En formule pour le temps discret je ne connais que celle du "signal energy" donnée plus haut, ou alors celle du "signal power" où l'on divise E par le nombre d'échantillons, mais je ne connais pas tout
    Une fois que vous avez la valeur E, vous devez l'expérimenter avec des fichiers audio qui ne contiennent que du silence ou du bruit de fond de faible volume pour définir un "seuil" pragmatique au delà duquel vous estimez qu'il y a un signal ou pas.
    Et vous pouvez faire cela avec fenêtres temporelles (glissantes ou fixes) plus courtes que tout le fichier, tout au long du fichier comme suggéré précédemment.
    Encore une fois, c'est ce qui me vient à l'esprit en fonction de votre cours (il y a plus complexe, vous verrez sûrement plus tard), mais observer les autres WAV à votre disposition devait vous mettre sur la piste de ce que votre prof veut vous faire faire exactement.
    Dernière modification par GBo ; 15/11/2020 à 18h22.
    Le mélange de vrai et de faux est énormément plus toxique que le faux pur - Paul Valéry

  6. #36
    GBo

    Re : Algorithme sur Matlab

    Ah il y a aussi la formule de la moyenne quadratique qui peut être intéressante :



    Qu'en pensent les collègues ?

  7. #37
    giu2

    Re : Algorithme sur Matlab

    Mon professeur nous a signalé qu'on suppose qu'il n'y a pas de signal utile durant les 50 premières millisecondes de chaque signal. Si je n'ai pas de fichier audio qui ne contient que du silence ou du bruit de fond, est ce que je peux "découper" mon fichier audio "Son1.wav" en deux sons, dont le premiers ne contiendraient justement que ces 50 premières millisecondes, ce qui me permettrait de définir ce seuil dont vous me parlez ?

  8. #38
    GBo

    Re : Algorithme sur Matlab

    Oui c'est probable qu'il/elle ne l'ai pas dit pour rien, Matlab permet facilement de faire ce que vous dites (tout le vecteur moins les x premiers échantillons correspondant à cette durée de 50ms). Par contre attention à Fs, est-ce que tous vos fichiers sont à 96 kHz ?
    Dernière modification par GBo ; 15/11/2020 à 19h49.
    Le mélange de vrai et de faux est énormément plus toxique que le faux pur - Paul Valéry

  9. #39
    giu2

    Re : Algorithme sur Matlab

    Je viens de vérifier, et non, les fréquences d'échantillonnage ne sont pas toutes les mêmes...

  10. #40
    GBo

    Re : Algorithme sur Matlab

    Ca ne sera pas le même nombre d'échantlllons à chaque fois pour 50 ms, mais ce n'est pas génant puisque vous avez Fs dans le programme, récupéré par audioread, vous saurez donc le calculer.

  11. #41
    GBo

    Re : Algorithme sur Matlab

    J'ai vérifié sur Son1.wav, le son commence tout de suite et pas après 50 ms, c'est dommage de le couper. De quoi sont faits les autres sons au fait? de la voix aussi ?
    Sinon, plus important:
    Citation Envoyé par giu2 Voir le message
    Dans la définition de mon cours, l'énergie est égale à ce que vous avez mis, mais le tout multiplié par la période d'échantillonnage. Quelle est la bonne formule ? [...]
    Oui je crois que votre prof a raison, sachant que les fichiers n'ont pas tous le même Fs : s'il faut les comparer entre eux, il serait injuste de chiffrer d'autant plus d'énergie que l'audio est suréchantillonné, ça n'a pas de sens physique (par rapport au signal analogique initial).
    Il faudrait donc diviser E par le Fs du fichier (ce qui revient au même que multiplier par Ts).
    Donc récapitulons en 3 lignes de code :
    Code:
    >> [y,Fs] = audioread('Son1.wav');
    >> m = mean(y, 2);
    >> E = sum(m.^2)/Fs
    La valeur de E est ainsi comparable pour des fichiers de Fs différents.
    Après si vous voulez savoir à quoi ça correspond dans l'absolu, il faut à chaque fois faire le rapport avec le E d'un audio mono de même longueur et de même Fs mais pour lequel les échantillons sont tous au maximum (e.g. signal alternant entre les valeurs extrêmes "Full Scale").

    cdlt,
    GBo
    Le mélange de vrai et de faux est énormément plus toxique que le faux pur - Paul Valéry

  12. #42
    giu2

    Re : Algorithme sur Matlab

    Les autres sons sont des paroles ou de la musique (violon, piano, flute, etc...). Pour ce qui est des trois lignes de code, j'ai écrit la même chose Merci beaucoup, ça veut dire que j'avais réellement compris et ça m'encourage beaucoup pour la suite.
    Par contre, je suis désolée, mais j'ai toujours du mal à comprendre comment je vais atteindre mon objectif qui est de détecter le signal utile... Le chemin pour y parvenir est assez flou. En fait, c'est surtout parce que, étant donné que les 50 premières millisecondes ne sont pas que du bruit, comment avoir le seuil dont on aurait besoin ? Si le professeur ne nous a pas donné de "référence", comment pouvoir distinguer le bruit du signal utile ?
    Merci beaucoup pour votre aide !!

  13. #43
    GBo

    Re : Algorithme sur Matlab

    Là je donne ma langue au chat. Quel est l'énoncé exact du problème ?

  14. #44
    giu2

    Re : Algorithme sur Matlab

    Il faut proposer un algorithme qui détecte la présence et l'absence d’un signal
    audio. L'énoncé stipule ce que je vous ai dit plus haut, à savoir que l'on supposera que les 50 premières millisecondes du signal ne contiennent pas de signal utile, mais uniquement le bruit ambiant (pourtant, en vérifiant, vous m'avez dit que le son commençait tout de suite, donc je ne comprend pas bien ce que cette phrase vient faire la...). Il faut ensuite tester cet algorithme sur les signaux donnés ("Son1.wav" en fait partie).

  15. #45
    GBo

    Re : Algorithme sur Matlab

    Est-ce qu'il y a des silences entre les notes de flute, violon etc...?
    Le mélange de vrai et de faux est énormément plus toxique que le faux pur - Paul Valéry

  16. #46
    giu2

    Re : Algorithme sur Matlab

    Pour certains fichiers, on peut, rien qu'en les écoutant, détecter le silence. Par exemple, j'ai chargé un signal mono, et j'ai seulement écrit "plot(y)". J'ai obtenu ceci : graphiqueFlute.png. On voit clairement l'arrêt en plein mieux du signal sur le graphique.
    Pour ce qui est d'autres sons, j'ai fait la même chose en prenant l'exemple de celui-ci : graphiqueViolon.png. Il s'agit d'une seule note, mais on peut, si je ne me trompe pas, apercevoir que le signal commence un peu après le début et se termine un peu avant la fin. Peut-être que dans ces cas là c'est seulement ce "bruit" que je dois enlever ?

  17. #47
    GBo

    Re : Algorithme sur Matlab

    Bonjour,
    oui alors maintenant le problème est compréhensible : l'algo consiste donc à balayer le fichier son pour afficher le critère signal (1) / pas signal (0) en fonction d'un seuil basé sur les 50 premières ms (le fait que ces 50 premières ms contienne ce qui doit être considéré comme du "bruit ambiant" est un terme important de l'énoncé qui manquait au post initial, cela nous aurait mis sur la voie !).
    Si vous voulez, vous pouvez uploader le son (toujours en zip) correspondant à celui affiché avec l'arrêt au milieu (car Son1.wav ne contient aucun silence ou bruit de fond au milieu, c'est une voix qui dit "bonjour", donc pas vraiment adapté à montrer le critère signal / pas signal).
    cdlt,
    GBo
    Dernière modification par GBo ; 16/11/2020 à 06h51.
    Le mélange de vrai et de faux est énormément plus toxique que le faux pur - Paul Valéry

  18. #48
    giu2

    Re : Algorithme sur Matlab

    Merci beaucoup, le voici : SonFlute.zip.

  19. #49
    GBo

    Re : Algorithme sur Matlab

    Oui là ça marche tout de suite mieux avec la flûte et un algo comme décrit au-dessus (j'utilise comme seuil le E des 50 premiers samples):
    Nom : laflute.jpg
Affichages : 183
Taille : 24,6 Ko

  20. #50
    GBo

    Re : Algorithme sur Matlab

    Le E des samples des 50 premières ms je voulais dire.

  21. #51
    GBo

    Re : Algorithme sur Matlab

    Fait en 10 minutes sans chercher à débugger finement, je suis sûr qu'il y a mieux donc ne regardez pas SVP pour ne pas être influencée.
     Cliquez pour afficher

    cdlt,
    GBo

  22. #52
    giu2

    Re : Algorithme sur Matlab

    Merci beaucoup, j'ai à peu près réussi à coder l'ensemble de l'algorithme, en utilisant les mêmes méthodes que vous, avec l'énergie seuil.
    J'ai cependant rencontré quelques problèmes pendant la programmation :
    1) Je n'ai pas réussi à coder la boucle if, qui renvoie 0 ou 1 en fonction de l'absence ou de la présence du signal utile. J'ai regardé ce que vous avez écrit, et si j'ai bien compris, vous calculez l'énergie du signal toutes les 50 ms, et vous la comparez à l'énergie seuil ? Mais pourquoi écrire "z(ba+i) = 1" ? Comment avez-vous choisi l'indice ?
    2) N'y a-t-il pas de formule pour calculer la marge adéquate, et être sur de bien l'avoir choisi ?

  23. #53
    GBo

    Re : Algorithme sur Matlab

    Hello, pour la boucle for, elle s'incrémente de 1 en 1, donc en fait je compare de nouveau avec le seuil en avançant à chaque fois d'un cran (un cran = 1 sample) dans le vecteur audio. On aurait pu aussi réévaluer tous les ba samples, c'est une autre façon de faire, je n'ai pas essayé (mais si c'est votre façon de faire et que ça donne de bons résultats, gardez votre façon de faire bien sûr).
    Pour z(ba+i) = 1, j'ai du considérer qu'il fallait laisser les ba premiers indices de z à 0, car dans un programme "à la volée", on ne pourrait pas commencer à pouvoir dire qu'il y a du signal utile avant d'avoir accumulé au moins l'énergie de ba samples. Là encore vous pouvez faire différemment puisque ce n'est pas un programme "à la volée", on a déjà toutes les données avant de commencer le traitement. Je ne pense pas qu'il y ait une solution idéale.
    Dernière modification par GBo ; 16/11/2020 à 14h18.

  24. #54
    giu2

    Re : Algorithme sur Matlab

    Merci beaucoup pour l'explication !
    Mais juste pour la marge, je comprend son utilité en ayant faire tourner le programme sans, mais comment la déterminer sans l'ajuster par observation ?
    Dernière modification par giu2 ; 16/11/2020 à 15h31.

  25. #55
    GBo

    Re : Algorithme sur Matlab

    Vous avez essayé sans marge (marge = 0) sur l'exemple de la flute, vous avez donc vu que "ça bagotte" au niveau de la décision signal/pas signal pendant le "silence" au milieu, c'est à cause de ça que j'ai rajouté une marge. Le souci c'est qu'elle est d'un ordre de grandeur > au E_seuil pour bien faire (i.e. ne plus bagotter), c'est donc une rustine pour compenser le fait que le silence est presque total pendant les 50 premières ms (ce qui n'est pas le cas du Son1.wav). C'est pour ça que ce n'est pas forcément le meilleur algo, mais ça marchotte et ça utilise une formule de votre cours (Energie sur une fenêtre de samples). Au fait je n'ai pas divisé E par Fs car là il s'agit de comparer au sein d'un même fichier audio et non d'un fichier à l'autre de Fs différent. Tout ça est un peu pragmatique...
    Dernière modification par GBo ; 16/11/2020 à 15h51.

  26. #56
    giu2

    Re : Algorithme sur Matlab

    Bonjour à tous,
    J’ai pensé à me pencher sur la puissance moyenne et la puissance instantanée pour détecter le signal utile. Pouvez vous m’aider sur la façon de calculer la puissance moyenne sur matlab?
    Merci !

  27. #57
    GBo

    Re : Algorithme sur Matlab

    Re-Bonjour,
    vous voulez essayer un autre algo, très bien, mais avant de relancer Matlab, il faut mettre les choses au clair sur le papier avant tout codage, c'est d'ailleurs comme ça qu'il faudrait faire quand on débute en programmation (désolé d'avoir loupé cette étape au-dessus, mais moi je débute en ... professorat ).

    Quelques questions préliminaires donc :
    - quelle est la formule de la puissance moyenne que vous comptez utiliser
    - quelle serait votre algorithme exactement (en pseudo-code)

    cdlt,
    GBo
    Dernière modification par GBo ; 17/11/2020 à 15h19.
    Le mélange de vrai et de faux est énormément plus toxique que le faux pur - Paul Valéry

  28. #58
    giu2

    Re : Algorithme sur Matlab

    Alors, c'est un signal échantillonné, donc dans l'ordre :
    - La puissance moyenne entre n1 et n2 est égale à [1/(n2-n1+1)]*somme(y) de n1 à n2. Mais on peut estimer la puissance d'un signal échantillonné en chaque instant nTe ainsi :
    Nom : Puissance estimée.png
Affichages : 139
Taille : 4,9 Ko
    Avec (2K + 1)Te la durée de la fenêtre temporelle pour l'estimation.
    - La puissance instantanée en n est égale à y(n).^2
    - Mon algorithme serait :
    - Charger un fichier ".wav"
    - Si besoin, le convertir en signal mono
    - Calculer sa puissance moyenne durant les 50 premières ms
    - Calculer sa puissance en chaque instant nTe avec la formule ci-dessus
    - Comparer les puissances pour détecter le signal
    En l'écrivant, je me demande si je ne vais pas rencontrer le même problème de marge que précédemment ? J'aurais besoin que mon algorithme soit assez précis, donc si c'est le cas, avez vous une solution?
    A part ca, est ce que vous pensez que c'est une bonne idée, ou que je peux trouver mieux avec les notions vu en cours?

  29. #59
    GBo

    Re : Algorithme sur Matlab

    Je ne pense pas que ce soit une bonne idée de comparer une puissance instantanée (d'un sample audio) avec une puissance moyenne du bruit ambiant du début, vous détecterez du signal utile même dans la partie bruit (je n'ai pas vérifié mais c'est logique vu que le bruit est moyenné justement pour lisser ses hauts et ses bas).

    L'inconvénient de l'algo codé lundi (qui n'est qu'une variante de moyenne quadratique glissante comparée à un seuil), est que le seuil est à ajuster manuellement à chaque fichier si on veut que le booléen de détection détoure bien les notes.

    Si c'est rédhibitoire, il faut chercher un algo qui auto-apprend le bon seuil.

    cdlt,
    GBo
    Dernière modification par GBo ; 17/11/2020 à 19h45.
    Le mélange de vrai et de faux est énormément plus toxique que le faux pur - Paul Valéry

  30. #60
    giu2

    Re : Algorithme sur Matlab

    N'avez-vous pas une autre idée d'algorithme ? Je dois avouer que là, je coince...

Page 2 sur 3 PremièrePremière 2 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