Bonjour,

Je me permets d'écrire un message pour tenter de comprendre et résoudre mon problème.
J'ai une forme d'onde 'test' créé par mes soins pour vérifier mon code. C'est un signal carré de fréquence 100 Hz, 1 millions de points, d'amplitude crête à crête 2 V, durée du signal 200 secondes, pas de 200 µs, fréquence d'échantillonnage 5000 Hz.

Lors de mes tests et la création de mon code pour déterminer les diracs de cette forme d'onde, j'ai observé que la fft version zero padding ne donne pas les bons, ni les mêmes résultats que la version 'None".

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
y = np.fft.fft(amplitudes_signal, n=ech) / ech  # spectre du signal d'entrée
    mag0 = abs(y[0])  # magnitude of average level
    mag = abs(y)  # magnitude relative
    f = int(fe) * np.linspace(0, 1, ech)  # calcul du vector fréquence en Hz
    b = 2 * mag  # détermine le vecteur spectre ; facteur 2 pour l'énergie sur tout le spectre
Ce qui me donne les résultats suivants. Ils sont cohérent avec l'équation du signal carré, les amplitudes sont bonnes : (2A / n Pi) * sin(n Pi / 2) avec A amplitude crête à crête, n le numéro du dirac. Pour la première, si n = 1, on a 4/Pi = 1.273, je vous passe le reste...
V : [1.273, 0.425, 0.255, 0.182, 0.142, 0.117, 0.1, 0.088, 0.079, 0.073, 0.069, 0.067, 0.066, 0.067,
Freq : [100.0, 300.0, 500.0, 700.0, 900.0, 1100.0, 1300.0, 1500.0, 1700.0, 1900.0, 2100.0, 2300.0, 2500.0

Si maintenant je lance le code zeropadding
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
nfft = 2 ** (nextpow2(ech))  # Next power of 2 from lenght of y : la puissance suivante 1M est 20 soit 1048576 points, normalement complété par des zéros
    y = np.fft.fft(amplitudes_signal, n=nfft) / ech  # spectre du signal d'entrée
    mag0 = abs(y[0])  # magnitude of average level
    mag = abs(y)  # magnitude relative
    f = int(fe) * np.linspace(0, 1, nfft)  # calcul du vector fréquence en Hz
    b = 2 * mag  # détermine le vecteur spectre
J'obtiens les diracs suivants, ce qui n'est pas correct :
V : [0.878, 0.312, 0.199, 0.149, 0.122, 0.104, 0.092, 0.083, 0.076, 0.072, 0.069, 0.067, 0.066, 0.067,
Freq : [100.0, 300.0, 500.0, 700.0, 900.0, 1100.0, 1300.0, 1500.0, 1700.0, 1900.0, 2100.0, 2300.0, 2500.0

Est-ce moi qui est mal appliqué la fft ? Est-ce un problème avec le zero padding ? Autre chose ?

D'avance, merci

Un poulpe