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 vous répondre aux questions suivantes ? Quelle est l’information donnée par le spectre d’un signal audio ? Quelle est la résolution fréquentielle d'une FFT de taille N= 32 si fe= 8kHz ? Pourquoi diviser le spectre d'amplitude par la taille N de la fenêtre temporelle ? Quelle est la période du spectre d'un signal audio numérique échantillonné à 22050Hz ? Si on calcule M = 2048 valeurs de la TFD, préciser les fréquences fk si fe=8000Hz : Quelle est la durée d'une fenêtre de 1024 échantillons, à fe = 44100Hz Donner la composition fréquentielle de x(t) Pourquoi limiter le calcul du spectre à une fenêtre de taille N échantillons ?
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) est le 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 valeurs au 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 calcul du 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 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 …