somme_de_2_sinus_CSP.py
                
      
      
      
        
          
          
              
                
                somme_de_2_sinus.py
              
              
                  —
                  Python Source,
                  6 ko (6181 bytes)
              
          
          
          
        
      
    
    
            
Contenu du fichier
#!/usr/bin/env python
# coding: utf-8
# # Somme de 2 sinus de même frequence dont on fait varier la phase
# Author : Delphine Chareyron pour CultureSciencesPhysique.ens-lyon.fr
# In[1]:
# import de la bibliothèque numpy (gestion de matrices et routines mathématiques) en lui donnant le surnom np
import numpy as np
# import de la bibliothèque matplotlib (graphiques) en lui donnant le surnom plt
import matplotlib.pyplot as plt
# In[51]:
# Définition des signaux Y1, Y2 et Y3
f = 200 # fréquence des signaux (200Hz)
temps_total = 1 # en seconde
dt = 1*10**(-5)   # pas de temps en seconde
nb_points = int(temps_total/dt)
temps = np.linspace(0,nb_points,nb_points)*dt 
phi = np.pi/4 # valeur du déphasage
Y1 = np.sin(2*np.pi*f*temps)
Y2 = np.sin(2*np.pi*f*temps+phi)
Y3 = Y1+Y2
# # Affichage et axe temporel
# In[52]:
# Définition de la fonction sinusoïdale Y
f = 200 # fréquence du signal (200Hz)
temps_total = 1 # en seconde
dt = 1*10**(-5)   # pas de temps en seconde
nb_points = int(temps_total/dt)
temps = np.linspace(0,nb_points,nb_points)*dt 
Y = np.sin(2*np.pi*f*temps)
# Tracé du signal Y
plt.plot(temps,Y,"b-")
plt.title("Y = sin(2$\pi$f)")
plt.xlabel("temps (s)")  
plt.ylabel("Amplitude")
plt.grid(True)
plt.ticklabel_format(style='scientific', axis='x', scilimits=(0,0))
# In[53]:
# Définition de la fonction sinusoïdale Y
f = 200 # fréquence du signal (200Hz)
temps_total = 1 # en seconde
dt = 1*10**(-5)   # pas de temps en seconde
nb_points = int(temps_total/dt)
temps = np.linspace(0,nb_points,nb_points)*dt 
Y = np.sin(2*np.pi*f*temps)
# Tracé du signal Y
plt.plot(temps,Y,"b-")
plt.title("Y = sin(2$\pi$f)")
plt.xlabel("temps (s)")  
plt.ylabel("Amplitude")
plt.grid(True)
plt.xlim(0, 0.02)
plt.ticklabel_format(style='scientific', axis='x', scilimits=(0,0))
# # Apparté sur le pas de temps
# In[67]:
# Définition de la fonction sinusoïdale Y
f = 200 # fréquence du signal (200Hz)
temps_total = 1 # en seconde
dt_1 = 1*10**(-3)   # pas de temps en seconde
nb_points_1 = int(temps_total/dt_1)
temps_1 = np.linspace(0,nb_points_1,nb_points_1)*dt_1
Y = np.sin(2*np.pi*f*temps_1)
# Affichage de la période et du pas de temps
T = 1/f
print('la période du signal est : T =',T, 's')
print('le pas de temps est défini comme dt_1 =', dt_1, 's')
# Tracé du signal Y
plt.plot(temps_1,Y,"b-")
plt.title("Y = sin(2$\pi$f)")
plt.xlabel("temps (s)")  
plt.ylabel("Amplitude")
plt.grid(True)
plt.xlim(0, 0.02)
plt.ticklabel_format(style='scientific', axis='x', scilimits=(0,0))
# # Tracé des 3 sinus sur le même graphe
# In[55]:
# Tracé des signaux 
fig = plt.figure(figsize=(9,6)) # Taille de la figure
plt.plot(temps,Y1,"b-", label="Y1 = sin(2$\pi$f)")
plt.plot(temps,Y2,"g-", label="Y2 = sin(2$\pi$f+$\phi$)")
plt.plot(temps,Y3,"m-", label="Y3 = Y1+Y2")
# Affichage
plt.legend(loc = 'upper right') 
plt.title("Y3 = Y1+Y2")
plt.xlabel("temps (s)")  
plt.ylabel("Amplitude")
plt.text(0.0175,1,"$\phi$ = " + str(round(phi,2))+' rad',size=12,  
         # On crée une boite aux coins ronds, au bord noir et remplie en cyan 
         bbox=dict(boxstyle="round",ec=("k"),fc=("c"))) 
plt.xlim(0, 0.02)
plt.ylim(-2.2, 2.2)
plt.ticklabel_format(style='scientific', axis='x', scilimits=(0,0))
plt.grid(True)
# Sauvegarde de la figure
plt.savefig('somme_sinus_'+chr(934)+'='+str(round(phi,2))+'.png')  
# # Lecture audio des signaux Y1, Y2 et de leur somme Y3
# In[41]:
# Install a pip package in the current Jupyter kernel
import sys
get_ipython().system('{sys.executable} -m pip install pygame')
# In[1]:
clear
# In[2]:
# import de la bibliothèque numpy (gestion de matrices et routines mathématiques) en lui donnant le surnom np
import numpy as np
# import de la bibliothèque matplotlib (graphiques) en lui donnant le surnom plt
import matplotlib.pyplot as plt
# import de la bibliothèques pygame et du module wave pour gérer les sons 
import pygame
import wave
# In[6]:
# Définition des signaux Y1, Y2 et Y3  
# Les sons sont échantillonnés à la fréquence 44100Hz
f = 200 # fréquence des signaux (200Hz)
temps_total = 4 # en seconde
fech = 44100 # nombres d'échantillons par seconde 
dt = 1/fech  # pas de temps en seconde
  
nb_points = int(temps_total/dt)
temps = np.linspace(0,nb_points,nb_points)*dt 
#phi = np.pi # valeur du déphasage
phi=0
Y1 = np.sin(2*np.pi*f*temps)
Y2 = np.sin(2*np.pi*f*temps+phi)
Y3 = Y1+Y2
# In[4]:
print('Le nombre d échantillons pour un signal de',temps_total,'s est', 44100*temps_total)
print('Le nombre d échantillons dans le vecteur Y1 est de',len(Y1))     
# In[7]:
# Création des fichiers "son" 
# Pour chaque signal Y1, Y2 et Y3 on définit un fichier son différent sous la forme d'un wave
NomSon1 = 'sonY1.wav'
Son1 = wave.open(NomSon1,'wb') # Son1 correspond à Y1
NomSon2 = 'sonY2.wav'
Son2 = wave.open(NomSon2,'wb') # Son2 correspond à Y2
NomSon3 = 'sonY3_'+chr(934)+'='+str(round(phi,2))+'.wav'
Son3 = wave.open(NomSon3,'wb') # Son3 correspond à Y3
# Définition des paramètres audio 
nChannels = 1  # mono
nOctet = 1  # taille d'un échantillon : 1 octet = 8 bits
frameRate = fech   # fréquence d'échantillonnage
nFrames = nb_points  # nombre total d'échantillons dans les fichiers son
parametres = (nChannels,nOctet,frameRate,nFrames,'NONE','not compressed')
# On attribue les paramètres à chaque fichier son
Son1.setparams(parametres)
Son2.setparams(parametres)
Son3.setparams(parametres)
amplitude = 64
for i in range (0,nb_points,1) :
    val1 = wave.struct.pack('B',int(128.0 + Y1[i] * amplitude))
    val2 = wave.struct.pack('B',int(128.0 + Y2[i] * amplitude))
    val3 = wave.struct.pack('B',int(128.0 + Y3[i] * amplitude))
    
    # écriture des fichiers sons
    Son1.writeframes(val1) 
    Son2.writeframes(val2)
    Son3.writeframes(val3)
    
Son1.close()
Son2.close()
Son3.close()
# In[17]:
pygame.mixer.init(frequency=frameRate)
pygame.mixer.Sound('sonY1.wav').play()
# In[18]:
pygame.mixer.init(frequency=frameRate)
pygame.mixer.Sound('sonY2.wav').play()
# In[66]:
pygame.mixer.init(frequency=frameRate)
pygame.mixer.Sound('sonY3_'+chr(934)+'='+str(round(phi,2))+'.wav').play()
            

