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 autour d’une enceinte de puissance acoustique . 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 et cherche la distance à partir de laquelle le niveau repasse sous le seuil de risque auditif ( 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 :
- Compléter la ligne du calcul de
L(fonction utile :math.log10). - Écrire la boucle
whileet le blocif/elsequi détectent le premier passage sous le seuil. - Exécuter : quelle distance limite le script affiche-t-il ? Retrouver ce résultat par le calcul littéral ().
- 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()