Q13. Ecrire une fonction trans_fourier(U) retournant le module de la transformée de Fou-
rier discrète sous la forme d’une liste de taille Ncontenant les modules des termes T Uf(k)
en utilisant notamment des appels aux fonctions précédentes trans_fourier_freq(U,k) et
module(a,b).
Solution Python
def t r a n s _ f o u r i e r (U) :
TFU = z e r o s ( l e n (U) )
f o r ki n range ( l e n (U) ) :
ak , bk = t r a n s _ f o u r i e r _ f r e q (U, k )
TFU[ k ] = module ( ak , bk )
r e t u r n TFU
Solution Scilab
function TFU = t r a n s _ f o u r i e r (U)
TFU = z e r o s (l e n g t h (U) )
f o r k = [ 0 : l e n g t h (U) −1]
[ ak , bk ] = t r a n s _ f o u r i e r _ f r e q (U, k )
TFU( k+1) = module ( ak , bk )
end
endfunction
Q14. Déterminer la complexité du calcul de la transformée de Fourier par la fonction trans_fourier(U)
en fonction de Net commenter en quelques phrases de l’efficacité de l’algorithme utilisé.
On a deux boucles de taille Nimbriquées ce qui donne une complexité en ΘN2. Cet algorithme
n’est pas du tout optimal.
Q15. Déterminer la liste des fréquences pour :
–N= 10 et T e = 1/10,
–N= 11 et T e = 1/11.
Pour N= 10,[0,1,2,3,4,−5,−4,−3,−2,−1]
Pour N= 11,[0,1,2,3,4,5,−5,−4,−3,−2,−1]
Q16. Ecrire une fonction freq_fourier(U,Te) qui renvoie la liste des fréquences freq.
def f r e q _ f o u r i e r (U, Te) :
w = z e r o s ( l e n (U) )
i f ( l e n (U)%2 == 1 ) :
f o r iin ra ng e ( 0 , l e n (U) //2+1) :
w[ i ] = i / Te / l e n (U)
f o r iin range ( l e n (U) //2+1 , l e n (U) ) :
w[ i ] = ( i −l e n (U) ) / Te / l e n (U)
e l s e :
f o r iin ra ng e ( 0 , l e n (U) // 2) :
w[ i ] = i / Te / l e n (U)
f o r iin ra ng e ( l e n (U) / /2 , l e n (U) ) :
w[ i ] = ( i −l e n (U) ) / Te / l e n (U)
r e t u r n w
Solution Scilab
function w = f r e q _ f o u r i e r (U, Te)
w = zeros (l e n g t h (U) )
i f (modulo(l e n g t h (U) , 2 ) == 1 )
5/10