Adloun

Un programme qui numérise

Exercice supplémentaire · niveau 2 · enseignement scientifique (première), chapitre 12 — Le son, une information à coder

Énoncé

On étudie le programme suivant.


from math import sin, pi

def numeriser(frequence, duree, f_ech, n_bits, u_max):
    """Renvoie la liste des entiers ecrits par le convertisseur."""
    pas = u_max / 2**n_bits
    n_points = int(f_ech * duree)
    codes = []
    for k in range(n_points):
        t = k / f_ech                       # instant du k-ieme releve
        u = u_max/2 * (1 + sin(2*pi*frequence*t))
        codes.append(round(u / pas))        # niveau le plus proche
    return codes

son = numeriser(440, 1.0, 44100, 16, 5.0)
print(len(son), "echantillons ;", max(son), "niveau maximal")
print("taille brute :", len(son)*16/8/1000, "ko")

Numérisation d'un son pur : le programme n'utilise aucune bibliothèque de traitement du signal, il applique la définition.

1. Que valent pas et n_points avec les valeurs de l'appel ? 2. Qu'affiche la dernière ligne ? 3. Où, dans ce programme, se produit l'échantillonnage ? Où se produit la quantification ? 4. On remplace par . Que va contenir la liste, et pourquoi est-ce trompeur ?

Corrigé

1. pas V, soit V. n_points relevés.

2. La deuxième ligne affiche échantillons et un niveau maximal voisin de — la tension atteint au sommet de la sinusoïde. La troisième affiche ko : une seconde de son pur, en mono, sur bits.

3. L'échantillonnage est la boucle for k in range(n_points) et la ligne t = k / f_ech : c'est là qu'on décide de ne regarder le signal qu'à des instants isolés. La quantification est le round(u / pas) : c'est là que la valeur exacte est remplacée par un entier.

4. Avec Hz et Hz, on viole le critère de Shannon (). La liste contiendra les échantillons d'une sinusoïde de Hz. Le programme ne signalera aucune erreur — il n'a aucun moyen de savoir. C'est le point important : un programme correct peut produire un résultat faux si l'on ne respecte pas les conditions de validité du modèle qu'il applique. Aucun filtre anti-repliement n'est simulé ici ; dans un vrai convertisseur, il y en aurait un.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.