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.

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.

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.

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.

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):

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:

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.

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.