Je fais une FFT sur un signal carré, 100Hz, amplitude 5V, rapport cyclique 50%
En toute logique la valeur moyenne (ou composante continue qui est à la fréquence 0Hz), d'un tel signal c'est simplement 2.5V puisque ce signal de 5V est haché de 50%. Mais dans l'image ci dessous, la valeur moyenne est bien trop grande.
Je tourne en rond depuis quelques jours car je ne comprends pas pourquoi j'ai une valeur moyenne (composante continue) aussi grande sur la courbe issue d'un calcul avec scipy.fftpack ? Est ce que je l'utilise mal ?
D'avance merci.
A+
Voici mon code. Nota : Pourtant la fondamentale est ok (à 100Hz elle fait 2.5V d'amplitude) ensuite on voit les harmoniques de rang impaire (300Hz, 500Hz, 700Hz, ...), typique d'un signal carré. Ce qui cloche c'est la composante continue
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 from scipy.fftpack import fft from scipy import signal import matplotlib.pyplot as plt import numpy as np # # configuration # time analyse = L * (1/Fsample) # L = 512 # lenght buffer Fsample = 2000 # frequency sample Fsignal = 100 # frequency #******************************** # perdiode sample Tsample = 1.0/Fsample # time vector, start = 0s, stop = 0.1024s, step = (0.1024s / (1/Fe)) t = np.linspace(0.0, L*Tsample, L) # signal definition, DC offet = 2.5V, Amplitude = 2.5V signal = 2.5 + 2.5*signal.square(2 * np.pi * Fsignal * t, 0.5) # plot time signal plt.subplot(2,1,1) plt.plot(t, signal) # fft of time signal yf = fft(signal) # time vector of fft xf = np.linspace(0.0, 1.0/(2.0*Tsample), L//2) # plot spectral plt.subplot(2,1,2) plt.plot(xf, 2.0/L * np.abs(yf[0:L//2]))
Partager