doppler3.py
Programme Python de l'Interros des Lycées
def SimuleDoppler (v=130.0, x0=10.0, cs=340.0, f=440.0, duree=8.0, sample_rate=22050):
vSI = v/3.6 # On convertit la vitesse en m/s
ystart = -vSI*duree/2
n_samples = int(duree * sample_rate)
samples = zeros(n_samples)
phase = 0
y = ystart
dt = 1/sample_rate
for i in arange(n_samples):
# Distance de la source
d = sqrt (x0**2+y**2)
# Valeur de la perturbation sonore
samples[i] = 128+127*(sin(phase)*0.5)*abs(x0/d)
# Position suivante de la source
y = y+vSI*dt
# Nouvelle distance de l'émetteur
dp= sqrt (x0**2+y**2)
# Vitesse d'éloignement de la source
ve = (dp-d)/dt
# Fréquence du son perçu
fp= f/(1.+ve/cs)
# Nouvelle phase de la perturbation sonore
phase = phase + 2*pi*fp*dt
play_samples(samples, sample_rate=sample_rate)