Calcul numérique de la transformée de Fourier Applications: Détecteur de tonalité numérique ...
description
Transcript of Calcul numérique de la transformée de Fourier Applications: Détecteur de tonalité numérique ...
• Calcul numérique de la transformée de Fourier
• Applications:– Détecteur de tonalité numérique (TP2)
– Détection DTMF (TP3)
– Démodulation FSK (TP4)
– Mise en pratique de la FFT (TP5)
Signal Spectre
x(t) X(f)
Temps Fréquences
Transformée de Fourier (rappels)
Approximations: -nombre fini d’échantillons : N-fréquence d’échantillonnage : Te-Durée du signal : T0 = (N-1).Te
Calcul approché pour un signaléchantillonné x(nTe)
La TFD calcule N valeurs espacées de f0=Fe/N
Transformée de Fourier discrète
temps
x(nTe)
Re(X(kf0))
Im(X(kf0))fréquence
fréquence
Fe/N
Fe/N
Fe
Fe
Te NTe
On calcule séparément la partie réelle et la partie imaginaire
Calcul de la TFD
Fréquences f = k.Fe/N avec k entier de 0 à N-1
Module
Amplitude des raies spectrales:
Spectre d’amplitude
Algorithme de calcul rapide de la TFD
N doit être une puissance entière de 2 : N = 2M
N = … 16, 32, 64, 128, 256, 512, 1024, 2048….M = … 4, 5, 6, 7, 8, 9, 10, 11…
Ne retourne en général que les N/2 premières valeurs de X(k) lorsque x(n) est une suite de nombre réels.
Résolution : f0 = Fe/2M Hz
Transformée de Fourier rapideFFT
- But:Détecter la présence d’une composante de fréquence F connue dans un signal.
-UtilisationCommuter une relais de communication (1750Hz)Décodeur DTMF, démodulation FSK, Télétypes..
-Méthode utilisée
Le calcul de la transformée de Fourier discrète pour k = F/f0 permet de déterminer l’amplitude de la composante fréquentielle recherchée.
Détecteur de tonalité
Indiquer au compilateur et au linker d’utiliser la virgule flottante(FPU)
- Option de compilation: -V28 -- float_support=fpu32 (ou cochez la case fpu32)
- Librairie pour l’édition de liens: rts2800_fpu32.lib
Virgule flottante dans le DSP 320F28335
Texas Instrument fournit une collection de fonctions optimisées pour le calcul de la FFT en virgule flottante:
- C28x_FPU_Lib_Beta1.lib
Installation:- Télécharger et installer sprc624 - Répertoire \tidcs\c28\C28x_FPU_Lib\beta1\lib\
Vous y trouverez:- FPU.h - C28x_FPU_Lib_Beta1.lib- des explications: C28x_FPU_Library_Beta1.pdf
Mise en œuvre de la FFTdans le DSP 320F28335 (TP5)
void RFFT_f32 (RFFT_F32_STRUCT *)void RFFT_f32_mag (RFFT_F32_STRUCT *)
typedef struct {float32 *InBuf;float32 *OutBuf;float32 *CosSinBuf;float32 *MagBuf;float32 *PhaseBuf;Uint16 FFTSize;Uint16 FFTStages;
} RFFT_F32_STRUCT;
Déclarations dans le fichier FPU.h
Exemple
#include FPU.h#define FFT_SIZE 128 // Nombre de points 32, 64, 128, 256,…#define FFT_STAGES 7 // log2(FFT_SIZE) // !!!!! La section « INBUF » doit être définie et alignée dans le fichier .cmd.#pragma DATA_SECTION(Inbuf, "INBUF");float32 InBuffer[FFT_SIZE]; // pour stocker les échantillons…float32 OutBuffer[FFT_SIZE]; // pour récupérer les résultats (Re et Im)float32 MagBuffer[FFT_SIZE/2]; // pour récupérer les amplitudesfloat32 TwiddleBuffer[FFT_SIZE]; //les coefficients sin.. et cos..RFFT_F32_STRUCT fft; //la structure main(){ fft.InBuf = InBuffer; //initialisation
fft.OutBuf = OutBuffer; fft.MagBuf = MagBuffer;fft.CosSinBuf = TwiddleBuffer;fft.FFTSize = FFT_SIZE; fft.FFTStages = FFT_STAGES; //……remplir InBuffer[] avec les échantillons (par interruption, DMA,…)RFFT_f32_sincostable(&fft) // fin initialisationRFFT_f32(&fft); //Calcul de la FFT (les Re et Im)RFFT_f32_mag(&fft);//Calcul des amplitudes //… Utiliser les résultats…
}
Alignement de la section « INBUF »
- Ligne à ajouter au fichier .cmd
INBUF ALIGN( 256 ) : { } > RAML6 PAGE 1
- Cette ligne sera utilisée par l’éditeur de liens (linker)
2 fois la taille de la FFT (ici FFT 128 points)
Nom de la section
Zone mémoire à utiliser
Performances
RFFT_f32
RFFT_f32_mag