Utiliser Scilab pour analyser les signaux audio

Slides:



Advertisements
Présentations similaires
1 Jean-Paul Stromboni, mars 2005, Révision des cinq premières séances S.S.I. Jean-Paul Stromboni, mars 2005, ESSI1 Elève : ______________________ groupe.
Advertisements

Comment calculer le spectre d’un signal audio
Cours 5 – Comment bien échantillonner le signal audio
1 Jean-Paul Stromboni, octobre 2007, SI3 Réviser le devoir surveillé n°1 du cours S.S.I.I. Jean-Paul Stromboni, octobre 2007, SI3 Elève : ______________________.
Calcul de la composition fréquentielle du signal audio
1 Jean-Paul Stromboni, mars 2005, Révision des cinq premières séances S.S.I. Jean-Paul Stromboni, mars 2005, ESSI1 Elève : ______________________ groupe.
Traiter le signal audio numérique avec Matlab ou Scilab
Sous-échantillonner le signal audio pour compresser
1 PolytechNice-Sophia, Département S.I., S.I.3, octobre 2012, Jean-Paul Stromboni Séance 7 : Retour sur les cinq premiers chapitres du cours S.S.I.I.
S.S.I.I., , n°7 : Construire et utiliser un banc de filtres Page 1 Construire et utiliser un banc de filtres pour analyser le spectre dun signal.
SSII : séance finale , lundi 9/01/2012 Page 1 Voici quelques questions pour assimiler la seconde partie du cours S.S.I.I., spectre, filtrage, banc.
S.S.I.I., , cours n°8 : Compresser avec un banc de filtres Page 1 Compresser avec un banc de filtres Le contenu de ce cours : T.D. n° 8 : simulation.
1 par Jean-Paul Stromboni, octobre 2008 Un autobilan pour réviser le devoir surveillé n°1 du cours S.S.I.I., par Jean-Paul Stromboni, octobre 2008 Elève.
Un principe de compression d’image
1 Jean-Paul Stromboni, octobre 2007, SI3 Réviser le devoir surveillé n°1 du cours S.S.I.I. Jean-Paul Stromboni, octobre 2007, SI3 Elève : ______________________.
Filtrer le signal audio numérique
Un moyen de compresser le signal audio présenté à travers un exemple
Créer des signaux audio en temps discret avec Scilab
S.S.I.I., , cours n°9 : Compresser avec un banc de filtres Page 1 Compresser avec un banc de filtres Contenu de cette séance : T.D. n° 9 : application.
Calcul de la composition fréquentielle du signal audio
SSII, séance n°13, bilan du cours 15 décembre 2015 Dernière séance 2015 Résumé des chapitres et notions abordées en 2015.
Formation des enseignants Formation MATLAB. Formation des enseignants MATLAB® (pour MATrix LABoratory) est un logiciel scientifique de calcul numérique.
Toulibre : présentation de... par Rémy Sanchez +.
Thème 1 : Ondes et Matière. O M 3 O n d e s s o n o r e s.
1 Description harmonique des signaux périodiques 1Notion de composition harmonique 2Représentations spectrales 3Valeur efficace 4Détermination des éléments.
UE2 - M22 Licence acoustique
Ajouter le code dans une page html
Suites ordonnées ou mettre de l’ordre
Exploitation de logiciels :
Pierre Joli Cours de Mathématique Pierre Joli
Visite guidée - session 3 Les postes de charge et les gammes
Chapitre 01: Structure d'un module VHDL
AIDE A L’UTILISATION DU LOGICIEL LATISPRO
Nous allons pouvoir passer à la suite…
Préparer par : Intissare et kaoutare
Ajouter le code dans une page html
pensez à nettoyer vos scripts !
Rappels sur la transformée de Fourier
Un Algorithme , c'est Quoi ?
1°) Equations de droites : équations réduites :
Les tableaux.
Programmation en C++ C++ de base
Modulation numérique. Transmission numérique  Avantages techniques Immunité au bruit Optimalisation de la bande passante Facilité de traitement de l’information.
Cours N°10: Algorithmiques Tableaux - Matrices
Calcul Scientifique Initiation à SCILB
Filtre en traitement du signal entrée filtre sortie e s h
Polytech'Nice-Sophia, Département Sciences Informatiques Cours de 4 ème année : Commande par Ordinateur. semaine 5/6, 29/04/2018Page 1 Commande optimale.
Polytech'Nice-Sophia, Département Sciences Informatiques Cours de 4 ème année : Commande par Ordinateur. semaine 5/6, 04/09/2018Page 1 Commande optimale.
1 Copyright © 2004, Oracle. Tous droits réservés. Extraire des données à l'aide de l'instruction SQL SELECT.
ANALYSE FREQUENTIELLE
Compresser avec un banc de filtres
Chapitre 3 suite Acoustique musicale
Le signal audio numérique
Introduction du cours à partir d’extraits
Commande optimale de l'alunissage de Lunar Lander
Chapitre 3: Les scriptes
TP 1 : Fichiers Script et Type de données et de Variables.
Modulation numérique. Transmission numérique  Avantages techniques Immunité au bruit Optimalisation de la bande passante Facilité de traitement de l’information.
Sous-échantillonner le signal audio pour compresser
Construire et utiliser un banc de filtres
Atos, Atos et le poisson, Atos Origin et le poisson, Atos Consulting ainsi que le poisson seul sont des marques déposées d'Atos Origin SA. © 2006 Atos.
Modulation numérique. Transmission numérique  Avantages techniques Immunité au bruit Optimalisation de la bande passante Facilité de traitement de l’information.
Projet Logimage ESP Dakar Janvier 2019 Alain Faye
Description harmonique des signaux périodiques
Sous-échantillonner le signal audio pour compresser
Les graphiques des relations linéaires
Exploiter la fonction fft(.) de Scilab
Apprentissage de la lecture au cycle 2
DONNÉE DE BASE QM Manuel de formation. Agenda 2  Introduction  Objectif de la formation  Données de base QM: Caractéristique de contrôle Catalogue.
Les Commandes de base Linux. 1 L’aide sur les commandes Linux ◦ help : obtenir de l’aide pour une commande interne du shell. Elle permet aussi d'afficher.
Transcription de la présentation:

Utiliser Scilab pour analyser les signaux audio Jean-Paul Stromboni, Polytech'Nice-Sophia, Dépt Sciences Informatiques, SI3 Durée 50 minutes, avec Scilab, un vidéo projecteur, des hauts parleurs Dans cette séance, on montre comment : Utiliser Scilab, environnement, fonctionnalités et langage de scripts Créer et traiter des signaux audio dans des vecteurs Scilab Sous-échantillonner, sur-échantillonner, et quantifier avec Scilab Utiliser des scripts et des fonctions Scilab Synthétiser des timbres d’instruments de musique, en reproduisant l’enveloppe et la composition fréquentielle, d’après l’ouvrage : [1] Musique et Acoustique, de l’Instrument à l’Ordinateur, Philippe Guillaume, Editions Lavoisier cf. http://cours.polytech.unice.fr/ssii/z.Supplements/PhilippeGuillaume/ Le TD n°3 illustre tout ou partie de ces points avec Scilab

Bureau et environnement de travail proposé par Scilab (5.4.1)

Créer et traiter des signaux audio dans des vecteurs avec Scilab

Afficher des chronogrammes avec Scilab Exporter la figure Figure and Axes properties Rotation 2D/3D zoom Data tips lire coordonnées

Sous-échantillonner un signal audio avec Scilab pour compresser Consiste à conserver 1 échantillon sur M dans un signal (et donc à en oublier M-1 sur M !)

Sur-échantillonner un signal audio pour décompresser Consiste à insérer M-1 échantillons nuls entre deux échantillons (du signal sous-échantillonné)

Implémenter la quantification sur b bits d’un signal avec Scilab

Créer des timbres d’instruments de musique D’après l’ouvrage [1]: ‘Musique et Acoustique : de l’Instrument à l’Ordinateur’, par Philippe Guillaume, professeur à l’Insa Toulouse cf. page http://cours.polytech.unice.fr/ssii/z.Supplements/PhilippeGuillaume/, Les scripts Matlab envelop.m, synthad.m, cloche.m et gammes.m sont traduits en Scilab. Principe : synthétiser des timbres d’instruments de musique en reproduisant la composition fréquentielle et l’enveloppe : On crée le signal s(t) en sommant des harmoniques de fréquences et d’amplitudes différentes (synthèse additive, fonction ‘synthad’ suivante) On crée l’enveloppe env(t) définie par des segments de droite (cf. fonction ‘envelop’ suivante) On multiplie s(t) par env(t) à chaque instant t pour obtenir la note Composition fréquentielle et enveloppe d’un son de cloche (fonction ‘cloche’ suivante):

Analyse de la fonction ‘cloche’ (fichier ‘cloche.sce’) Ligne d’en tête function s = cloche(f1,T,Fe) // s = cloche(f1,T,Fe) // imitation d'une cloche // f1 = fréquence fondamentale // Fe = fréquence d‘échantillonnage // T = durée du son //--------------------------------------------- h = 1/Fe; th = 0:h:T; f = f1*[0.5 1 1.188 1.530 2.0000 2.470 2.607 2.650 2.991 ... 3.367 4.137 4.487 4.829 5.385 5.863 6.709 8.077 ... 8.547 9.017 9.530 11.026 12.393]; a = [350 950 500 150 700 100 250 370 1000 180 300 ... 100 150 300 100 100 50 20 10 ... 35 5 15]; s = synthad(a,f,0*f,T,Fe); t = T*[0 .001 .01 .4 .6 .9 1]; a = [0 .6 1 .4 .2 .1 0]; env = envelop(t,a,Fe); s = s.*env; endfunction Commentaire accessible dans l’aide Matlab p >>help cloche (mais pas en Scilab) vecteur des fréquences, composition harmoniques vecteur des amplitudes des composantes fréquentielles allure de la courbe d'enveloppe a(t) pour T=1 s

Analyse de la fonction ‘synthad’ (définie dans ‘synthad.sce’) function s = synthad(a,f,p,T,Fe) // s = synthad(a,f,p,T,Fe) // synthese additive // cette fonction cree un son de duree T, // compose des partiels f(n), d'amplitude a(n) // et de phase a l'origine p(n). // Fe est la frequence d'echantillonnage //--------------------------------------------- // création du vecteur temps discret dt = 1/Fe; t = 0:dt:T; n = length(t); // création du son, boucle pour ajouter une à une // les composantes fréquentielles s = zeros(1,n); K = length(f); for k = 1:K s = s+a(k)*sin(2*%pi*f(k)*t+p(k)); end // normalisation pour que les valeurs soient // toutes dans l'intervalle [-0.99 0.99] s = .99*s/max(abs(s)); endfunction cumul des harmoniques décrits dans les vecteurs a : amplitude, f : fréquence et p : phase maximum de s ramené à 0.99 en valeur absolue

Analyse de la fonction ‘envelop’ (fichier envelop.sce) h est la période d’échantillonnage th contient les instants d’échantillonnage entre 0 et T function [env] = envelop(t,a,Fe) lt = length(t); T = t(lt); h = 1/Fe; th = 0:h:T; if t(1) >= T // test de validite de t error('t incompatible dans envelop'); end if lt ~= length(a) // test de compatibilité de t et a error('t et a de longueur différente dans envelop'); // au cas où t ne serait pas strictement croissant : for k = 2:lt-1 if (t(k) <= t(k-1)) | (t(k) >= t(lt)) t(k) = (t(k-1)+t(lt))/2; n = length(th); env = zeros(1,n); ni = lt-1; c = zeros(1,ni+1); b = c; h2 = 0; for k = 1:ni h1 = h2+1; h2 = 1+floor(t(k+1)/h); cb = [t(k) 1; t(k+1) 1]\[a(k) ; a(k+1)]; c = cb(1); b = cb(2); env(h1:h2) = c*th(h1:h2)+b; env = .99*env/max(env); endfunction a a(k+1) a(k) t t(k) t(k+1) a= c*t+b pour t(k) < t <t(k+1) Que valent c et b ? Système de 2 équations à deux inconnues c et b a(k)=c*t(k)+b a(k+1)=c*t(k+1)+b A\B calcule la solution x de A*x = B, soit x=A-1*B on s'en sert ici pour trouver les coefficients directeurs c et b de l'enveloppe entre t(k) et t(k+1) : Construction de l’enveloppe dans env entre th(h1) et th(h2)

Créer des sons de cloche d’après ce principe (‘gammes.sce’) // on joue une gamme chromatique au clavier clear all exec("envelop.sci"); exec("synthad.sci"); exec("cloche.sci"); // clavier azerty : notes = ['a','z', 'e', 'r', 't', 'y', 'u', 'i','o', 'p','q', 's', 'd']; // Fe = 22050; f0 = 440; // la3 440 Hz est la première note temp = 2.^((0:12)/12); // fr = f0*temp; // fréquence des notes de la3 à la4 T = 1.5; // durée des notes for k = 1:13 // on crée les tons et demi tons de la gamme note = notes(k); execstr( strcat([note,'= cloche(fr(k),T, Fe);'])); end // et on joue : disp('pour jouer, rentrez une note parmi :'); disp(‘saisir a z e r t y u i o p q s ou d, puis enter, et x pour finir'); x = 0; // saisir x pour terminer note = a; // length(note)= ? while length(note) >1 note = input('note suivante ?'); if length(note) == 1 disp('termine'); break sound(note,Fe); efface toutes les variables précédemment définies Déclare les fonctions qui seront utilisées vecteur ligne de caractères ‘a’  note pour k=1 Pour k=1, ‘execstr’ exécute : a = cloche(fr(1),T,fe); T*Fe échantillons ‘sound’ joue ‘note’ à la fréquence Fe

Retrouver la durée et la composition fréquentielle du signal s= flute(440, 1, fe)

Tracer M+N valeurs du spectre d’amplitude d’un signal de taille N

Utiliser la fonction spectrogram (‘spectrogram.sce’)

Comparer ‘Console Scilab’ et ‘Matlab Command Window’  // En SCILAB, le prompt est ’’  // est un commentaire N=3  N=3; N  n Message=[’date’,string(28), ’septembre’]  disp(Message) help disp //aide complète // il y a un éditeur de ligne commande pwd, dir, cd // lancer une application Windows ou Unix  dos(‘notepad.exe’) ou unix(‘notepad.exe’) //exécuter un script ou une fonction Scilab exec(’sinus.sce’) // fichiers .sce et .sci sinus //sinus.sce doit être dans le path %pi format(20) Clc string(N) //traduit N en chaîne de caractèr. // pour évaluer une chaîne de caractères : execstr(’la3= 440;’); la3 >> % en Matlab, le prompt est ’>>’ >> N=3 % avec ou sans caractère ';' ? N = 3 >> N=3; >> n >> Message=[‘S.I.‘,num2str(N),’.’]; >> disp(Message) >> help disp % aide succincte % il y a un éditeur de ligne de commande % on a droit aux commandes de shell >> pwd, ls, dir, cd !notepad % lance une application MSDOS % exécuter le script MATLAB ’sinus.m’ >> sinus % sinus.m doit être dans le PATH >> pi >> format long % 10 chiffres décimaux % effacer la fenêtre Command Window >> clc >> num2str(3) %traduit 3 en chaîne de caractères % noter l’instruction eval >> eval([‘la’,num2str(3),’=440’])

Créer une note pure dans la fonction ‘jouer’ (fichier ‘jouer.sce’) function note=jouer(fr, Dur, amp, Fs) // fr est la fréquence de la note, Dur est sa durée en seconde, // ampl est son amplitude, Fs la fréquence d'échantillonnage. // enveloppe linéaire, fr=440Hz, Dur=1s, amp=1, Fs=8kHz nbin=argn(2); // nbout=argn(1);// ne marche pas, toujours égal à 1 ??? f=440; D=1; a=1; fe=8000; select nbin case 1 then f=fr; case 2 then f=fr; D=Dur; case 3 then f=fr; D=Dur; a=amp; case 4 then f=fr; D=Dur; a=amp; fe=Fs; end t=[0:1/fe:D]; note=a*sin(2*%pi*f*t).*(1-t/D); // tester nbout pour reproduire nargout endfunction

Créer des arpèges avec la fonction ‘jouer’ (‘creegammes.sce’) //créer les notes jouer des mélodies gamme=['do','dod','re','red','mi','fa','fad', ... 'sol','sold','la','lad','si']; [nl,nc]=size(gamme); dt=2^(1/12); for g=1:5, frla=110*2^(g-1); for n=1:nc, execstr([gamme(n)+string(g)+'=frla*dt^(n-10);']) end //créer une mélodie exec('jouer.sce'); s=jouer(la3,.3,1); s=[s,jouer(si3,.3,0.75)]; s=[s,jouer(dod4,.3,0.5)]; s=[s,jouer(mi4,.3,.5)]; s=[s,jouer(re4,.3,.5)]; s=[s,jouer(fad4,.3,1)]; s=[s,jouer(mi4,.3,1)]; s=[s,jouer(mi4,.4,1)]; s=[s,jouer(la4,.4,1)]; s=[s,jouer(sold4,.4,1)]; sound(s,8000); savewave('majoie.wav',s,8000) Combien de gammes générées ici ? Combien de notes par gamme ? Que réalise la fonction execstr(string) ? Utilité de l’instruction exec(‘jouer.sce’) ? Que contient la variable la3 ? Et la variable la4 ? Que réalise savewave ?

Fonctions chronogramme, spectre et spectrogram (sur la page du cours SSII)