140 likes | 321 Views
Calcul de la composition fréquentielle du signal audio. Jean-Paul Stromboni, pour les élèves SI3, nécessite un vidéo projecteur, durée 50mn , octobre 2012. Voici ce que vous devez savoir faire après cette séance :. Définir le spectre d’un signal sinusoïdal
E N D
Calcul de la composition fréquentielle du signal audio Jean-Paul Stromboni, pour les élèves SI3, nécessite un vidéo projecteur, durée 50mn , octobre 2012 Voici ce que vous devez savoir faire après cette séance : • Définir le spectre d’un signal sinusoïdal • Définir la Transformée de Fourier Discrète (TFD) de taille N • Trouver la TFD des signaux constante et sinusoïde. • Mesurer l’effet de la taille du signal de de la fenêtre d’apodisation • Utiliser les fonctions fft(.) et spectrogram(.) de MATLAB Travaux Dirigés : calculer et exploiter TFD et FFT Savez vousrépondre aux questions suivantes ?
Composition fréquentielle ou spectre • Depuis Joseph Fourier (1768-1830), physicien et mathématicien français, on sait décomposer une fonction du temps s(t) quelconque en une somme de fonctions sinusoïdales, ou spectre : • Soit s(t), fonction du temps définie quelque soit t, S(f) ci-dessous détermine le spectre de s(t) : • Inversement, connaissant le spectre S(f) de s(t), on détermine s(t) par : • S(f) est une quantité complexe : • Si la composante fréquentielle de s(t) à la fréquence f s’exprime par : • On aura : et • Dans la suite de ce cours, on se limite au module de S(f), c’est-à-dire au spectre d’amplitude :
Matlab, Scilab, Goldwave, utilisent la Transformée de Fourier Discrète (TFD) pour calculer le spectre • Définition de la TFD : pour un signal x(t) échantillonné à la fréquence fe, MATLAB calcule le spectre en limitant le signal à une fenêtre temporelle de N échantillons : • X(f) estle spectre de x(n/fe), • X(f) est périodique, la valeur de la période est fe • |X(f)| est symétrique par rapport à la fréquence fe/2 • la fenêtre de calcul dure NTe (contient N échantillons) • Calcul de la TFD : en pratique, on calcule seulement N valeurs de la TFD, les X(fk) pour les seules fréquences fk : • est la résolution fréquentielle • Note : pour mieux reconstruire la fonction X(f), on peut calculer et afficher M > N valeursau lieu de N • Algorithme de transformée de Fourier rapide (en anglais Fast Fourier Transform) • Si N est une puissance de 2, on accélère le calculdu fait des périodicités et symétries des exponentielles complexes • Matlab, Scilab, Goldwave, … utilisent l’algorithme de FFT pour calculer la transformée de Fourier discrète
Calcul de la T.F.D. du signal constant de taille N • TFD de la fonction constante, du signal de fréquence nulle, ou de la fenêtre rectangulaire de durée NTe • Que valent : • R(0) • R(fe) • R(-fe) • R(fe/N) • La périodicité du dénominateur • La périodicité du numérateur
Analyse d’un exemple : x = 0.75, N = 16, fe = 8kHz Tracé sur une période [ 0, fe [ Relation entre [0,fe/2] et [fe/2, fe] ? Tracé de spectre/N entre 0 et fe Tracé de spectre/N : reporter les N valeurs calculées R(kfe/N), k= 0 … N-1
TFD du signal sinusoïdal (sans calcul) Analyser le spectre d’amplitude suivant (où |S(f)| est déjà divisé par N) Tracé de |S(f)|/N sur une période Lire fe R(f0) R(fe-f0) R(fe/N) a et f0 Placer les N= 16 valeurs calculées par la TFD f0 varie de 100 Hz, que prévoir ?
Influence du nombre N d’échantillons (fenêtre rectangulaire, ou pas de fenêtre) s= 0.75*cos(2*pi*440*t), D=0.04s, fe=8kHz f0= a0= fe = N = NTe = Df = spectre/N = f0= a0= fe = N = NTe = Df = spectre/N =
Influence de la fenêtre de Hamming Comparaison des spectres d'amplitude de ces deux fenêtres : fe= N= durée= fe/N= fmin= fmax= Hamming amplMax= nbLobes= largeur= Rectangle amplMax= nbLobes= largeur:
Influence de la taille N du signal dans le cas de la fenêtre de Hamming s= 0.75*cos(2*pi*440*t), D=0.04s, fe=8kHz f0= a0= fe = N = NTe = Df = spectre/N = Dessiner la forme de la fenêtre de Hamming Comparer au spectre obtenu avec la fenêtre rectangulaire
Erreur ou problème de synchronisation On illustre avec le signal s suivant composé d'une ou de deux fréquences f0 et f1 : s=a*cos(2*pi*f0*t)+a1*cos(2*pi*f1*t) • erreur sur l'amplitude et sur la position de la raie si f1 n'est pas l'une des fréquences calculées : • risque de confusion, si les deux composantes de fréquence sont trop proches
Spectre et spectrogramme (avec Goldwave) Spectrogramme de s(t), fe=8kHz, f=500Hz, fenêtre rectangulaire, 30fps spectre = composition fréquentielle Spectrogramme=spectre (temps)
Spectre et spectrogramme avec MATLAB • fe=8000; N=4096; • t=[0:16000]/fe; • s=0.5*cos(2*pi*1000*t)+ 0.75*cos(4000*pi*t); • f=[-N/2:N/2-1]*fe/N; • spec= fftshift(fft(s(1:N))) • plot(f,abs(spec)), grid, figure • spectrogram(s,hamming(N),N/2,N,fe,'yaxis') • colorbar • Noter pour le spectrogramme : • la fenêtre utilisée est une fenêtre de Hamming • le code de couleurs donnant l’amplitude en dB est à droite
Exploitation du tracé du spectre d'amplitude • sur les tracés suivants, retrouver : fe, N, a0 et f0, la durée de la fenêtre temporelle et l'axe de symétrie. Que vaut M ? Que vaut Df ?Quelle est la relation entre les tracés ?
Représentation 3D du spectrogramme • pour le signal vocal, on sait que la durée de la fenêtre d’analyse ne doit pas dépasser 30ms (?) • si fe=8 kHz, c’est une fenêtre de 240 échantillons. • On calcule la TFD de la fenêtre, • on déplace la fenêtre et on recommence • On regroupe les résultats dans un spectrogramme, en 3D (cf. ci-dessous) ou en 2D (cf. Goldwave) • Quelle est ici la résolution fréquentielle ? • Comment obtenir une fenêtre de 20ms, sachant que fe=22050Hz ? Donner la résolution fréquentielle. • Voici le spectrogramme de piano_c3.wav tracé par WaveLab : retrouver les informations de fréquence fondamentale, durée du signal, enveloppe …