# -*- coding: utf-8 -*- """ Créé le 7 juillet 2014 @author: cbp """ import numpy as np from scipy import signal import matplotlib.pyplot as plt import matplotlib.pylab as pl import os # pour manipuler les répertoires #from sympy.functions.special.delta_functions import Heaviside ################################## ### la fonction d'Heaviside ################################## def h(x): if x<0: return 0 elif x==0: return 0.5 else: return 1 Heaviside=pl.vectorize(h) ################################## ### les constantes ################################## n=4096 # nombre de points duree = 1 # durée = 1 seconde t=np.linspace(-duree/2,duree/2,n) # on centre le signal f1 = 20 # fréquence 1 f2 = 100 # fréquence 2 ################################## ### fonction porte ################################## # définition de la fonction ft = Heaviside(1/f1-np.absolute(t)) Fw = np.fft.fft(ft)/n # transformée de Fourier numérique nu = np.fft.fftfreq(n,d=duree/n) # fréquences associées # tri des valeurs obtenues Fw = np.fft.fftshift(Fw) nu = np.fft.fftshift(nu) # représentation de la fonction plt.clf() plt.axis([-5.0/f1,5.0/f1,-.1,1.1]) plt.plot(t,ft) plt.title(u'Fonction porte') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.05,right=0.95) plt.show() # représentation du spectre sur une plus grande plage plt.clf() Fwmax=np.amax(np.absolute(Fw)) plt.axis([-300,300,0,Fwmax*1.1]) plt.plot(nu,np.absolute(Fw)) plt.title(u'Spectre') plt.xlabel(r'$\nu$') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) plt.show() ################################## ### fonction porte plus large ################################## # définition de la fonction ft = Heaviside(.33/f1-np.absolute(t)) Fw = np.fft.fft(ft)/n # transformée de Fourier numérique nu = np.fft.fftfreq(n,d=duree/n) # fréquences associées # tri des valeurs obtenues Fw = np.fft.fftshift(Fw) nu = np.fft.fftshift(nu) # représentation de la fonction plt.clf() plt.axis([-5.0/f1,5.0/f1,-.1,1.1]) plt.plot(t,ft) plt.title(u'Fonction porte') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.05,right=0.95) plt.show() # représentation du spectre sur une plus grande plage plt.clf() Fwmax=np.amax(np.absolute(Fw)) plt.axis([-300,300,0,Fwmax*1.1]) plt.plot(nu,np.absolute(Fw)) plt.title(u'Spectre') plt.xlabel(r'$\nu$') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) plt.show() ################################## ### fonction gauss ################################## # définition de la fonction ft = np.exp(-(t*f1)**2) Fw = np.fft.fft(ft)/n # transformée de Fourier numérique nu = np.fft.fftfreq(n,d=duree/n) # fréquences associées # tri des valeurs obtenues Fw = np.fft.fftshift(Fw) nu = np.fft.fftshift(nu) # représentation de la fonction plt.clf() plt.axis([-5.0/f1,5.0/f1,-.1,1.1]) plt.plot(t,ft) plt.title(u'Fonction gaussienne') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.05,right=0.95) plt.show() # représentation du spectre sur une plus grande plage plt.clf() Fwmax=np.amax(np.absolute(Fw)) plt.axis([-100,100,0,Fwmax*1.1]) plt.plot(nu,np.absolute(Fw)) plt.title(u'Spectre') plt.xlabel(r'$\nu$') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) plt.show() ################################## ### fonction gauss ################################## # définition de la fonction ft = np.exp(-(t*4*f1)**2) Fw = np.fft.fft(ft)/n # transformée de Fourier numérique nu = np.fft.fftfreq(n,d=duree/n) # fréquences associées # tri des valeurs obtenues Fw = np.fft.fftshift(Fw) nu = np.fft.fftshift(nu) # représentation de la fonction plt.clf() plt.axis([-5.0/f1,5.0/f1,-.1,1.1]) plt.plot(t,ft) plt.title(u'Fonction gaussienne') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.05,right=0.95) plt.show() # représentation du spectre sur une plus grande plage plt.clf() Fwmax=np.amax(np.absolute(Fw)) plt.axis([-100,100,0,Fwmax*1.1]) plt.plot(nu,np.absolute(Fw)) plt.title(u'Spectre') plt.xlabel(r'$\nu$') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) plt.show() ################################## ### arches de sinusoïdes ################################## # définition de la fonction ft = np.sin(2*np.pi*f2*t)*Heaviside(2.5/f2-np.absolute(t)) Fw = np.fft.fft(ft)/n # transformée de Fourier numérique nu = np.fft.fftfreq(n,d=duree/n) # fréquences associées # tri des valeurs obtenues Fw = np.fft.fftshift(Fw) nu = np.fft.fftshift(nu) # représentation de la fonction plt.clf() plt.axis([-7.0/f2,7.0/f2,-1.1,1.1]) plt.plot(t,ft) plt.title(u'Arches de sinusoïdes') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.05,right=0.95) plt.show() # représentation du spectre sur une plus grande plage plt.clf() Fwmax=np.amax(np.absolute(Fw)) plt.axis([-300,300,0,Fwmax*1.1]) plt.plot(nu,np.absolute(Fw)) plt.title(u'Spectre') plt.xlabel(r'$\nu$') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) plt.show() ################################## ### arches de sinusoïdes ################################## # définition de la fonction ft = np.sin(2*np.pi*f2*t)*Heaviside(5.0/f2-np.absolute(t)) Fw = np.fft.fft(ft)/n # transformée de Fourier numérique nu = np.fft.fftfreq(n,d=duree/n) # fréquences associées # tri des valeurs obtenues Fw = np.fft.fftshift(Fw) nu = np.fft.fftshift(nu) # représentation de la fonction plt.clf() plt.axis([-7.0/f2,7.0/f2,-1.1,1.1]) plt.plot(t,ft) plt.title(u'Arches de sinusoïdes') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.05,right=0.95) plt.show() # représentation du spectre sur une plus grande plage plt.clf() Fwmax=np.amax(np.absolute(Fw)) plt.axis([-300,300,0,Fwmax*1.1]) plt.plot(nu,np.absolute(Fw)) plt.title(u'Spectre') plt.xlabel(r'$\nu$') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) plt.show() ################################## ### arches de sinusoïdes dans gaussienne ################################## # définition de la fonction ft = np.sin(2*np.pi*f2*t)*np.exp(-(t*f2)**2) Fw = np.fft.fft(ft)/n # transformée de Fourier numérique nu = np.fft.fftfreq(n,d=duree/n) # fréquences associées # tri des valeurs obtenues Fw = np.fft.fftshift(Fw) nu = np.fft.fftshift(nu) # représentation de la fonction plt.clf() plt.axis([-15.0/f2,15.0/f2,-1.1,1.1]) plt.plot(t,ft) plt.title(u'Paquet gaussien') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.05,right=0.95) plt.show() # représentation du spectre sur une plus grande plage plt.clf() Fwmax=np.amax(np.absolute(Fw)) plt.axis([-300,300,0,Fwmax*1.1]) plt.plot(nu,np.absolute(Fw)) plt.title(u'Spectre') plt.xlabel(r'$\nu$') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) plt.show() ################################## ### arches de sinusoïdes dans gaussienne ################################## # définition de la fonction ft = np.sin(2*np.pi*f2*t)*np.exp(-(t*0.2*f2)**2) Fw = np.fft.fft(ft)/n # transformée de Fourier numérique nu = np.fft.fftfreq(n,d=duree/n) # fréquences associées # tri des valeurs obtenues Fw = np.fft.fftshift(Fw) nu = np.fft.fftshift(nu) # représentation de la fonction plt.clf() plt.axis([-15.0/f2,15.0/f2,-1.1,1.1]) plt.plot(t,ft) plt.title(u'Paquet gaussien') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.05,right=0.95) plt.show() # représentation du spectre sur une plus grande plage plt.clf() Fwmax=np.amax(np.absolute(Fw)) plt.axis([-300,300,0,Fwmax*1.1]) plt.plot(nu,np.absolute(Fw)) plt.title(u'Spectre') plt.xlabel(r'$\nu$') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) plt.show() ################################## ### arches de sinusoïdes dans gaussienne ################################## # définition de la fonction ft = np.sin(2*np.pi*f2*(t % (3.23/f2))) Fw = np.fft.fft(ft)/n # transformée de Fourier numérique nu = np.fft.fftfreq(n,d=duree/n) # fréquences associées # tri des valeurs obtenues Fw = np.fft.fftshift(Fw) nu = np.fft.fftshift(nu) # représentation de la fonction plt.clf() plt.axis([-7.0/f2,7.0/f2,-1.1,1.1]) plt.plot(t,ft) plt.title(u'Sinusoïde tronquée et concaténée') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.05,right=0.95) plt.show() # représentation du spectre sur une plus grande plage plt.clf() Fwmax=np.amax(np.absolute(Fw)) plt.axis([-300,300,0,Fwmax*1.1]) plt.plot(nu,np.absolute(Fw)) plt.title(u'Spectre') plt.xlabel(r'$\nu$') plt.subplots_adjust(left=0.05,top=0.95,bottom=0.1,right=0.95) plt.show()