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".
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...
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
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
J'obtiens les diracs suivants, ce qui n'est pas correct :
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
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![]()
Partager