Cours:Elen4 TNS TP TraitAudioEtDemodulation : Différence entre versions
(→Annulation de l'écho et de la réverbération) |
(→Annulation de l'écho et de la réverbération) |
||
Ligne 70 : | Ligne 70 : | ||
{{q| e)}} Comparer les filtres de la section ''Réverbération'' et de la section ''Écho'' et faire une remarque pertinente. | {{q| e)}} Comparer les filtres de la section ''Réverbération'' et de la section ''Écho'' et faire une remarque pertinente. | ||
− | {{q| f}} Est-il toujours possible de construire un filtre d'annulation, autrement dit, est-il toujours possible de construire un filtre réciproque d'un autre filtre ? (vous pouvez réfléchir en prenant exemple d'un filtre passe-bas par exemple) | + | {{q| f)}} Est-il toujours possible de construire un filtre d'annulation, autrement dit, est-il toujours possible de construire un filtre réciproque d'un autre filtre ? (vous pouvez réfléchir en prenant exemple d'un filtre passe-bas par exemple) |
=== Démodulation === | === Démodulation === |
Version actuelle datée du 29 mars 2023 à 08:26
TP5 : Traitements audio et démodulation d'amplitude
Le but de ce TP est d'ajouter puis de supprimer des effets audio (écho et réverbération). La source sera un enregistrement parlé numérisé. Les effets et leurs suppressions seront implémentés à l'aide de filtres numériques.
Sommaire
Traitements audio
Ces traitements seront implémentés dans GnuRadio.
Écho
Les échos se produisent lorsqu'au signal émis s'ajoutent une ou plusieurs répliques retardées et affaiblies de ce même signal source. Nous considérons une situation simple où seul un écho s'ajoute au signal original x(n). En raison de l'écho, le signal obtenu est
s(n) = x(n) + a x(n-d)
où a représente le facteur d'atténuation (0 < a < 1) et d est le nombre d'échantillons de retard du signal répliqué.
Vous travaillerez avec un retard de τ=0,5s en considérant que τ=d Te, Te étant la période d'échantillonnage.
a) Si la fréquence d’échantillonnage est fixée à Fe = 22050Hz, montrer que la fonction de transfert du filtre d'écho est
H(z) = 1 + a z-11025
b) Télécharger le fichier RienNeSertdeCourir.zip, et l'utiliser comme entrée dans Gnuradio à l'aide d'un bloc Wav File Source
. L'écouter en audio en l'envoyant dans un bloc Audio Sink
, en spécifiant 22050Hz comme fréquence d'échantillonnage.
c) Appliquer le filtre H à la phrase enregistrée pour créer une sortie y(n). Écouter cette phrase pour vérifier à l'oreille la présence d’un écho. L’application du filtre sera réalisée de la même façon qu'au TP3 - Implémentations de filtres.
Réverbération
La réverbération est due au mélange de réflexions directes ou indirectes et résulte en un son confus. Considérons une situation simple où une seule réverbération est présente. Soit x(n) le signal original, la réverbération est obtenue en additionnant le signal d’entrée avec le signal de sortie retardé :
y(n) = x(n) + b y(n-r)
où b est le facteur d’atténuation (0 < b < 1) et r le nombre d’échantillons de retard du signal répliqué. En choisissant un retard de τ (par exemple 0,1s), on a alors r = τFe.
a) La fréquence d’échantillonnage étant toujours fixée à Fe=22050Hz et en considérant un facteur d’atténuation b = 0,8 montrer que la fonction de transfert de la réverbération est
H(z) = |
1 |
| |
1 - b z-r |
b) Dans GnuRadio, l'implémentation de ce filtre n'est pas possible avec des blocs retards, gain et additionneur car GnuRadio n'accepte pas de boucles. Une solution simple est de passer par un bloc IIR Filter
. Dans ce type de bloc, il faut spécifier les coefficients du numérateur et du dénominateur. Pour le dénominateur, vous pourrez créer un bloc variable
avec le code suivant :
np.concatenate( (np.array([1]), np.zeros(N), np.array([-b])))
où N
est à remplacer par le nombre de zéros nécessaires et b
par sa valeur.
Ajouter un bloc import
avec le code suivant import numpy as np
Implémenter ce filtre et l’appliquer à l’enregistrement. Écouter le résultat y pour vérifier la présence d’une réverbération.
Annulation de l'écho et de la réverbération
d) On souhaite à présent concevoir un système d’annulation de l’écho. Il s’agit donc de déterminer un filtre numérique de réponse impulsionnelle g(n) qui doit permettre de supprimer l’écho.
Déterminer la fonction de transfert G(z) du filtre d’annulation en fonction de H(z).
e) Appliquer ce filtre au signal y et écouter le signal qui ne doit plus présenter de phénomène d’écho.
c) De même, concevoir un filtre d’annulation de la réverbération en déterminant sa fonction de transfert.
d) Appliquer ce filtre et écouter le résultat en vérifiant le bon fonctionnement (ie annulation de la réverbération).}}
e) Comparer les filtres de la section Réverbération et de la section Écho et faire une remarque pertinente.
f) Est-il toujours possible de construire un filtre d'annulation, autrement dit, est-il toujours possible de construire un filtre réciproque d'un autre filtre ? (vous pouvez réfléchir en prenant exemple d'un filtre passe-bas par exemple)
Démodulation
On dispose d'un signal modulé en amplitude par une porteuse de fréquence élevée. Afin de récupérer le signal utile, la démodulation d'amplitude consiste en deux étapes :
- Redressement du signal modulé
- Application d'un filtre passe-bas pour enlever la porteuse.
Fig : principe d'une démodulation d'amplitude.
- Le signal utile (pour référence) est disponible dans le fichier Fichier:Tns tp3 signal.hex (valeurs codées en
float
) - Le signal modulé est disponible dans le fichier Fichier:Tns tp3 signal mod.hex (valeurs codées en
float
)
Détermination du Filtre passe-bas
Dans Matlab :
- En affichant le graphe du contenu fréquentiel du signal modulé :
- Identifier l'information de signal utile et l'information de porteuse de modulation
- Proposer une fréquence de coupure normalisée Wn pour un passe-bas, permettant de rejeter la porteuse. Les fréquences normalisées sont comprises entre 0 et 1, 1 représentant la moitié de la fréquence d'échantillonnage.
- Déterminer les coefficients de la fonction de transfert de ce passe-bas, à l'aide de la fonction Matlab
butter(N, Wn)
(avecN=2
pour ne pas avoir trop de coefficients). Il s'agit d'un filtre à réponse impulsionnelle infinie du type Butterworth, qui contient une rétroaction.
Implémentations de la démodulation
N'oubliez pas le redressement dans la modulation !
Dans Matlab :
- Comme un filtre RIF, Puisque le filtre est IIR, la réponse impulsionnelle sera forcément tronquée. Vous pouvez l'obtenir dans Matlab à l'aide de la fonction
impz()
. - Par un produit dans le domaine fréquentiel. Vous pourrez obtenir la réponse fréquentielle du filtre à l'aide de la fonction
freqz()
.
Dans Gnuradio :
- Comme un filtre RIF, avec le bloc
Frequency Xlating FIR Filter
(comme dans le tutoriel Designing Filter Taps). - En implémentant le filtre IIR de la même façon que le filtre de réverbération.
- Vous pourrez également chercher à utiliser un bloc
Low Pass Filter
. Dans ce cas, vous aurez trois paramètres à régler dans ce bloc :- Cutoff Freq : une fraction de la fréquence d'échantionnage (
samp_rate
), déterminée dans la partie précédente. - Transition Width : également une fraction de la fréquence d'échantillonnage, qui détermine la plage de transition entre la partie passante et la partie bloquante du passe-bas.
- Window : choix de la fenêtre de pondération (qui vise à limiter les oscillations du filtre). Vous pourrez tester l'effet de ces diverses fenêtres (cf Fenêtrage).
- Cutoff Freq : une fraction de la fréquence d'échantionnage (