URL: https://linuxfr.org/forums/programmation-python/posts/urgent-d-ou-viennent-les-artifactes-de-la-fft-de-mon-signal Title: URGENT, D'où viennent les artifactes de la FFT de mon signal? Authors: Tassou Date: 2017年04月15日T16:13:39+02:00 License: CC By-SA Tags: transformations, numpy, fourrier et python Score: 0 Salut tout le monde, Je suis vraiement desepérée à la recherche de la cause des artifactes dans le fft de mon signal. N'ayez pas peur de la longeur du code, la partie importante est tout en bas, au début c'est juste la déclaration des variables et fonctions. Le tout revient à réaliser un signal disant s_pos et un autre s_neg. le s_neg n'est rien d'autre que s_pos mis au negatif et miroité. Étant ainsi, j 'attends que la transformé de Fourrier de s_neg qu'elle soit la même que: -np.conjugate(S_pos) puisque s_pos est réelle. Mais apparament le miroitement d'une convolution me donne des artifactes. Est-ce que quelqun pourrait SVP me dire pourquoi? et comment je fais pour m'en débarasser et retrouver la même chose pour : S_neg (Bleu) et S_neg_expected(Rouge) (Voir fichier attaché)?? Merci d'avance !!! import numpy as np import matplotlib.pyplot as plt amp = 18e-3 a = 1/.61e3 b = 5.5 fs=5e6 f0 = fs/2/102 t_min = 0 dt = 1./fs t_max = (10772) * dt t = np.arange(t_min,t_max,dt) x_min = -amp/b x_max = amp/b dx = dt*(x_min-x_max)/(t_min-t_max) x = np.arange(x_min,x_max,dx) def Lorentzian(xx): if not hasattr(xx, '__iter__'): xx = [ xx ] res = np.zeros(len(xx)) for i in range(len(xx)): x = xx[i] if np.fabs(x) < 0.1: res[i] = 1./3. - x**2/15. + 2.* x**4 / 189. - x**6/675. + 2.* x**8 / 10395. - 1382. * x**10 / 58046625. + 4. * x**12 / 1403325. else: res[i] = (1./x**2 - 1./np.sinh(x)**2) return res def distrib(x): res = np.zeros(np.size(x)) res[int(3*np.floor(np.size(x)/5))] = 6 res[int(3*np.floor(np.size(x)/5)+20)] = 6 return res def mirror(seq): output = list(seq[::-1]) return output func1 = lambda x : Lorentzian(b*(x/a)) x_s = lambda t : amp * np.cos(2*np.pi*f0*t)/b signal = lambda x : np.convolve(distrib(x), func1(x)-func1(x)[0], 'same') ## Partie importante #### s_pos = signal(x_s(t[0:102])) s_neg = mirror(-s_pos) S_pos = np.fft.fft(s_pos) S_neg_expected = -np.conjugate(S_pos) S_neg = np.fft.fft(s_neg) plt.figure() plt.plot(S_neg_expected,'r') plt.plot(S_neg,'b')

AltStyle によって変換されたページ (->オリジナル) /