/
TFDCalculBrutVectorise.py
61 lines (48 loc) · 1.71 KB
/
TFDCalculBrutVectorise.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# -*- coding: utf-8 -*-
# Programme de calcul brut de la TFD d'un signal échantillonné par
# Dominique Lefebvre pour TangenteX.com
# 6 avril 2016
# importation des librairies
import matplotlib.pyplot as plt
from scipy import sin, pi, exp, arange, dot, log10
import time
# définition du signal à traiter
# Fmax = 20 Hz
# dF = 0.1 Hz résolution en fréquence de l'analyse spectrale
Fe = 40.0 # fréquence d'échantillonnage
dF = 0.1 # résolution fréquentielle
# le nombre d'échantillons est déterminé par la résolution fréquentielle
# hypothèse N = L
N = int(Fe/dF) # nombre d'échantillons
# la durée du signal à analyser (la période d'échantillonnage Te) dépend du
# nombre d'échantillons à acquérir et de la fréquence d'échantillonnage
# Te = N/Fe d'où Te = 1/dF
Te = 1.0/dF # durée du signal à échantillonner
# construction du signal échantillonné s
t = arange(0.0,Te,Te/N) # vecteur temps discrétisé
A0 = 5.0; F0 = 10.0 # amplitude et fréquence de la sinusoïde
A1 = 2.0; F1 = 5.0
s = A0*sin(2.0*pi*F0*t) + A1*sin(2.0*pi*F1*t)
# construction du vecteur fréquence
f = dF*arange(N)
# définition de la matrice M
n = arange(N)
k = n.reshape((N,1))
M = exp(-2j*pi*k*n/N)
# calcul de la transformée de Fourier discrète par simple produit
# matriciel X = M.s
tdebut = time.time()
X = dot(M,s)
print 'Temps de calcul (s) : ',time.time() - tdebut
# calcul du spectre SP normalisé
FacteurNorm = 2.0/N
SP = FacteurNorm * abs(X)
# pour affichage en dB
SP1 = 20*log10(SP/SP.max())
# affichage des résultats
fig = plt.figure(figsize=(14,8))
# affichage du spectre
plt.xlabel('frequence', fontsize = 16)
plt.ylabel('amplitude', fontsize = 16)
plt.plot(f,SP1)
plt.show()