Fréquence d’échantillonnage

Démontrer les effets de la fréquence d’échantillonnage avec GRC (GNU Radio Compagnon)

L’organigramme suivant sera utilisé pour démontrer les effets de la fréquence d’échantillonnage sur le traitement du signal. Dans cette discussion, le théorème d’échantillonnage de Nyquist-Shannon établit une fréquence d’échantillonnage minimale de deux fois la fréquence du signal. La version de Shannon du théorème déclare:

« Si une fonction x (t) ne contient pas de fréquences supérieures à B hertz, elle est complètement déterminée en donnant ses ordonnées à une série de points espacés de 1 / (2B) secondes. »

Remarque: la fréquence d’échantillonnage est réglée sur 32 kHz.

Démo Samp Rate fg.png

Fréquence : 2000

Avec la fréquence réglée à 2000, la trace temporelle montre l’onde sinusoïdale attendue et le tracé de fréquence montre un seul signal à 2,0 kHz.

Démonstration du taux Samp out1.png

Fréquence : 15000

En réglant la fréquence sur 15000, le tracé de fréquence montre un seul signal à 15,0 kHz, mais la trace temporelle montre une dégradation significative de la forme d’onde.

Démonstration du taux de Samp out2.png

Fréquence : 18000

En réglant la fréquence sur 18000, la trace temporelle montre non seulement une dégradation significative de la forme d’onde, mais le tracé de fréquence montre un seul signal à 14,0 kHz ! C’est ce qu’on appelle le «repliement», qui est un artefact d’une fréquence d’échantillonnage insuffisante.

Démonstration du taux de Samp out3.png

Exemple de source matérielle

Plusieurs facteurs déterminent la vitesse à laquelle les données circulent d’un bloc à l’autre. Cependant, de nombreux débutants supposent que si, par exemple, une source de forme d’onde est définie sur une certaine fréquence et qu’une fréquence d’échantillonnage est définie, alors ce signal de sortie sera à cette fréquence. Mais, contrairement à un circuit matériel, le signal n’est que des données dans un tampon. Les sections suivantes illustrent cela.

La discussion suivante est basée sur cet organigramme d’un récepteur RadioTeleTYpe (RTTY):

RTTY rcv.png

Les tonalités de changement de fréquence (FSK) sont entrées dans la prise microphone de l’ordinateur qui a une fréquence d’échantillonnage de 48 kHz. Ces données sont envoyées à un Frequency Xlating FIR Filter (Finite Impulse Response Filter, Filtre à Réponse Impulsionnelle Finie) qui décale les tonalités au-dessus et au-dessous de la fréquence centrale. Il décime (divise) également le taux d’échantillonnage par 50, produisant un taux d’échantillonnage de sortie de 960.

Le Quadrature Demod produit un signal positif ou négatif selon que la tonalité est supérieure ou inférieure à la fréquence centrale.

Le Rational Resampler interpole (multiplie) le taux d’échantillonnage par 500 et le décime (divise) par 960 pour produire un taux d’échantillonnage de sortie de 500. Pour le taux RTTY de 45,4545 bauds (la définition exacte est 1 / 0,022), cela produit exactement 11 échantillons pendant la durée d’un bit.

Le «  Terminal Display Sink  » est un bloc Python intégré qui lit le flux d’entrée de 1 et 0, se synchronise sur le bit de départ, crée un caractère Baudot à partir des cinq bits de données, convertit Baudot en UTF-8 et affiche les caractères sur le écran du terminal utilisateur.

Exemple d’afficheur (Sink) matériel

Alors que l’exemple ci-dessus est assez simple, le timing contrôlé par un récepteur matériel doit être analysé en commençant par la sortie et en remontant dans le diagramme !

La discussion suivante est basée sur cet organigramme d’un générateur de code Morse:

MorseGen fg.png

Pour cet exemple, la sortie Audio Sink a un taux d’échantillonnage de 48 kHz. Il est alimenté par un rééchantillonneur rationnel qui interpole (multiplie) la fréquence d’échantillonnage par 4, de sorte que la fréquence d’échantillonnage d’entrée doit être de 12 000 (12 kHz).

Les blocs Multiply, IIR Filter et Uchar to Float ne modifient pas la fréquence d’échantillonnage.

Le bloc de répétition prend chaque élément de données d’entrée et le répète 1200 fois. (Il s’agit d’une forme d’interpolation.) Cela force une fréquence d’échantillonnage d’entrée de 10, qui est la vitesse de transmission souhaitée. Pour fournir différentes vitesses de code, les blocs variables définissent les éléments suivants:

La variable speed en mots par minute peut être définie par l’utilisateur sur l’un des éléments suivants: 2, 3, 4, 6, 8, 12, 16 ou 24 (tous sont des facteurs de 48).

La variable baud = vitesse / 1,2

La variable repeat est fixée à 1200.

La variable samp_rate = baud * repeat

Le vecteur source de code Morse «Morse code vector source» est un bloc Python intégré qui récupère les caractères de la la boîte d’édition de message d’interface graphique QT  «QT GUI Message Edit box» et les convertit en vecteurs, où chaque 1 est un point d’une durée de un bit et chaque 0 est un espace d’un bit de durée. La description complète du code Morse est donnée ici . Le projet générateur de code Morse, y compris le diagramme de flux et le code Python, peut être trouvé dans gr-morse-code-gen .

Lorsqu’il n’y a pas de bloc matériel

Certains organigrammes, comme pour les tests ou la simulation, n’impliquent aucun périphérique matériel pour définir une fréquence d’échantillonnage. Dans ces cas, un bloc Throttle peut être utilisé à la place.

Et ou Xor fg.png

Cet organigramme montre l’utilisation des blocs logiques AND, OR et XOR. Puisqu’aucun périphérique matériel n’est impliqué, le bloc Throttle garantit que le processeur ne se bloquera pas en essayant de traiter les données à sa vitesse maximale possible.

Notez que le bloc Throttle n’a même pas besoin d’être dans le chemin de données «principal» pour fonctionner.