Chapitre 09

Activités Python

Ondes, son et effet Doppler

Activité

Calculer un niveau sonore

Consigne

Ouvrez la page des scripts du chapitre pour consulter le code et télécharger les fichiers .py.

Le script Ch09_niveau_sonore.py (dossier scripts/) calcule le niveau sonore L(r)L(r) autour d’une enceinte de puissance acoustique P=1,0WP = 1{,}0\ \text{W}. On utilise le modèle du §4 : source ponctuelle en champ libre, sans réflexion sur le sol ni directivité.

Le script trace la courbe L(r)L(r) et cherche la distance à partir de laquelle le niveau repasse sous le seuil de risque auditif (8585 dB). Deux parties sont à compléter : l’expression de L, puis un petit algorithme de recherche utilisant uniquement while et if/else (fiche O5).

Questions :

  1. Compléter la ligne du calcul de L (fonction utile : math.log10).
  2. Écrire la boucle while et le bloc if/else qui détectent le premier passage sous le seuil.
  3. Exécuter : quelle distance limite le script affiche-t-il ? Retrouver ce résultat par le calcul littéral (r=P/(4πIseuil)r = \sqrt{P/(4\pi I_{\text{seuil}})}).
  4. Que devient la distance limite si on double la puissance de l’enceinte ? Vérifier avec le script, puis justifier par le calcul.

Fiche O5 — Python. Boucle while, listes et append, math.log10, tracé point par point : tout y est rappelé.

Script élève

# -*- coding: utf-8 -*-
# Chapitre 9 — Atténuation géométrique du son
# Une enceinte de puissance acoustique P = 1,0 W est posée au sol.
# Modèle simplifié : source ponctuelle en champ libre, sans réflexion sur le sol.
# On calcule le niveau sonore L à la distance r, et on cherche à partir
# de quelle distance L passe sous le seuil de risque auditif (85 dB).

import math
import matplotlib.pyplot as plt

P = 1.0        # puissance acoustique de la source (W)
I0 = 1.0e-12   # seuil d'audibilité (W/m2)
SEUIL = 85.0   # seuil de risque auditif (dB)

distances = []   # liste des distances r (m)
niveaux = []     # liste des niveaux sonores L (dB)

r = 1.0
while r <= 100.0:
    I = P / (4 * math.pi * r**2)          # intensité sonore à la distance r
    L = 0                                 # niveau sonore  # À COMPLÉTER
    distances.append(r)
    niveaux.append(L)
    r = r + 0.5

# recherche de la première distance où L passe sous le seuil
r_limite = 0.0
i = 0
trouve = False
# À COMPLÉTER : écrire une boucle while qui cherche tant que trouve vaut
# False. Si niveaux[i] est inférieur à SEUIL, mémoriser distances[i] et
# faire passer trouve à True ; sinon, augmenter i de 1.

print("À r =", r_limite, "m, le niveau sonore passe sous", SEUIL, "dB.")

plt.plot(distances, niveaux)
plt.axhline(SEUIL, linestyle="--")
plt.xlabel("distance r (m)")
plt.ylabel("niveau sonore L (dB)")
plt.grid(True)
plt.show()

← Retour au portail du chapitre