Table des matières:
- Étape 1: Liste d'équipement (prendre une photo de la planche et de la composition de Kevin)
- Étape 2: Aperçu
- Étape 3: Fichier Wav
- Étape 4: Python - Utilisations de Pylab et Scipy
- Étape 5: Python-Sampling et FFT (Afficher le code et ses résultats)
- Étape 6: Vivado (Comparateur)
- Étape 7: IMAGES DE LA CARTE BASYS 3
- Étape 8: Vivado (décodeur 7 segments avec multiplexage)
- Étape 9: Vivado (combinaison de composants)
Vidéo: Accordeur : 9 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:09
Ce projet a été conçu pour fabriquer un accordeur de guitare utilisant Vivado et un affichage à 7 segments. Une fois que l'accordeur trouve la fréquence du son entré, l'accordeur comparera cette valeur à une liste de valeurs codées en dur pour les fréquences exactes qui sont connues comme la fréquence standard pour la hauteur correcte d'une note. Ensuite, l'accordeur affichera à quel point le son entré est proche ou éloigné de la note souhaitée. Ce qui est intéressant, c'est qu'une onde sonore est une combinaison de multiples formes d'onde sinusoïdales avec des composantes réelles et imaginaires. Bien que cela puisse sembler difficile à travailler pour ceux qui ne sont pas familiers, il existe plusieurs façons d'analyser une vague avec des valeurs réelles et imaginaires.
Démo:
Étape 1: Liste d'équipement (prendre une photo de la planche et de la composition de Kevin)
Nous avons d'abord besoin d'une carte Basys 3 et d'un ordinateur prenant en charge les programmes suivants. Garageband/Audacity ou un autre DAW - pour enregistrer via un microphone et exporter des fichiers wav
Python - capable d'utiliser pylab et scipy pour l'échantillonnage et fft
Vivado - pour se connecter à la carte Basys 3 et voir visuellement les résultats
Étape 2: Aperçu
Un tuner est composé de quelques composants importants: microphone, échantillonneur, FFT (Fast Fourier Transform), comparateur, décodeur et affichage. Le but du microphone est de capturer la forme d'onde d'entrée. L'échantillonneur reçoit le signal de sortie du microphone et utilise la FFT pour convertir le signal en une sortie d'amplitude en fréquences. Ensuite, en utilisant la sortie de la FFT et en trouvant la magnitude maximale et la fréquence qui lui est associée divisée par 2, la fréquence associée à la hauteur de la forme d'onde peut être trouvée. Cette valeur peut ensuite entrer dans le comparateur. Il est ensuite comparé à une table de recherche, qui a déjà défini des valeurs de fréquence pour des hauteurs parfaites de toutes les notes. Le comparateur reçoit une entrée pour la note souhaitée, qu'il peut ensuite faire correspondre la note souhaitée à sa fréquence correcte à partir de la table de consultation. Ensuite, le comparateur choisira la note dont la fréquence est la plus proche de la fréquence maximale. Le comparateur comparera les deux valeurs et verra de près la valeur de la fréquence est celle souhaitée, puis mettra ces données dans un signal. Le comparateur enverra ce signal au décodeur, où le décodeur choisira les entrées pour les anodes de l'affichage à 7 segments pour montrer la précision de la note.
Étape 3: Fichier Wav
Dans cette étape, nous allons prendre un fichier wav d'une hauteur et essayer de sortir la fréquence de cette hauteur.
Vous avez d'abord besoin d'un fichier wav d'une note. Dans cet exemple, nous utiliserons un fichier wav stéréo 16 bits avec un taux d'échantillonnage de 44,1 kHz. Cela peut être soit créé dans un DAW tel que Garageband ou téléchargé. Pour cet exemple, une onde sinusoïdale A4 440Hz générée par nos soins sur Garageband peut être téléchargée ici.
Étape 4: Python - Utilisations de Pylab et Scipy
Nous avons utilisé la bibliothèque Python pour effectuer la « transformation rapide de Fourier ». La ressource en ligne nous a permis d'imiter et de voir ce qui est utile dans pylab et scipy.
1. Si vous n'avez pas installé pylab ou scipy, vous devez le faire. Ou, Pycharm a une très bonne fonctionnalité, lorsque vous essayez d'importer pylab ou scipy, il y a un soulignement ondulé vous indiquant que vous n'avez pas encore installé la bibliothèque. Vous pouvez ensuite les installer directement en appuyant sur l'ampoule rouge (elle apparaîtra lorsque vous placerez votre curseur près du soulignement ondulé).
2. À l'aide de la fonction scipy.io.wavfile.read, lisez et extrayez les données de l'exemple de fichier wav. Parcourez les données par pylab.fft, il vous renverra une liste de grandeur pour la puissance.
3. Ensuite, trouvez le max de la puissance émise dans la liste. Recherchez l'index de liste où se produit la puissance maximale, car il s'agit du moyen le plus rapide de trouver la fréquence associée à cette puissance. Renvoyez enfin la fréquence max. Étant donné que nous devons plus tard entrer un signal de fréquence binaire dans le code VHDL, nous pouvons convertir la fréquence en float en binaire et la renvoyer.
Étape 5: Python-Sampling et FFT (Afficher le code et ses résultats)
Dans cette étape, les crédits complets vont sur ce lien ci-dessous pour l'échantillonnage et la FFT.
samcarcagno.altervista.org/blog/basic-sound…Notre code:
Une fois pylab et scipy installés, les fichiers wav peuvent être importés et lus.
à partir de l'importation de pylab * à partir du fichier wav d'importation de scipy.io
sampFreq, snd = wavfile.read('440_sine.wav')
Ensuite, snd.shape représente les points d'échantillonnage et le nombre de canaux. Dans notre cas, les points d'échantillonnage dépendent de la longueur du fichier wav et le nombre de canaux est de 2 car il est stéréo.
Alors snd = snd / (2.**15)…… xlabel('Time (ms)')
organise le signal temporel dans un tableau.
Ensuite, la FFT crée un tableau en fréquence et en amplitude (Puissance)
Ensuite, à travers une boucle while, la magnitude maximale et la fréquence qui lui est associée sont trouvées. Cette fréquence/2 représente la hauteur du fichier wav.
Ensuite, en utilisant notre propre code, l'entier représentant la fréquence a été converti en un nombre binaire de 12 bits et un fichier texte a été créé avec ce nombre dedans.
Étape 6: Vivado (Comparateur)
Dans cette partie du processus, nous avons besoin d'un comparateur pour comparer deux fréquences d'entrée.
1. Création d'un comparateur pour comparer si la fréquence d'entrée (récepteur) est supérieure, inférieure ou dans la plage de marge de 2 Hz définie note. (l'accordeur de guitare typique va de e2 à g5, 82 Hz à 784 Hz).
2. Lors de la création d'une marge de 2 Hz, nous avons utilisé un RCA pour ajouter « 00000000010 » à la fréquence du récepteur et vérifier où elle est encore trop basse pour la saisie de l'utilisateur. Si tel est le cas, signal à un seul bit « haut » <= « 0 », « bas » <= « 1 ». Ensuite, nous ajoutons "00000000010" à l'entrée utilisateur pour voir si l'entrée du récepteur est encore plus élevée que cela. Si tel est le cas, « élevé » <= « 1 », « faible » <= « 0 ». Aucun des deux cas ne retournerait tous les deux « 0 ».
3. Étant donné que la partie suivante du module a besoin de données spécifiques de 4 bits pour indiquer quelle est la note du récepteur, non seulement en retournant les 2 sorties comparatives (bas et haut), nous devons retourner le code associé à noter, qui s'associe à la fréquence. Veuillez vous référer au tableau ci-dessous:
C | 0011
C# | 1011
D | 0100
D# | 1100
E | 0101
F | 0110
Fa# | 1110
G | 0111
Sol# | 1111
A | 0001
A# | 1001
B | 0010
Utilisation de plusieurs instructions if pour les classer en note et les encoder en fonction de ce qui est nécessaire pour le décodeur à sept segments.
Étape 7: IMAGES DE LA CARTE BASYS 3
Étape 8: Vivado (décodeur 7 segments avec multiplexage)
Tout a besoin d'un affichage. C'est un facteur important qui détermine la valeur d'une conception. Par conséquent, nous devons créer un affichage utilisant un décodeur à sept segments, ce qui nous permettrait de démontrer notre capacité à concevoir un tuner sur la carte B. En outre, cela nous aiderait dans les tests et le débogage.
Un décodeur à sept segments contient des entrées nommées Note, low, high et CLK, tout en émettant SSEG, AN et Fiz_Hz. Il y a une image du schéma fonctionnel ci-dessus pour nous aider à comprendre la conception.
Le but d'avoir deux entrées séparées pour les basses et les hautes est de fournir au concepteur du comparateur la liberté de déterminer si la fréquence du son (onde) est supérieure ou inférieure à la fréquence d'entrée (Fix_Hz) que l'utilisateur souhaite comparer. De plus, la sortie SSEG représente l'affichage à sept segments et le point à côté tandis que l'AN représente les anodes pour lesquelles l'ensemble des sept segments s'allume.
Dans ce décodeur à sept segments, l'horloge (CLK) joue un rôle important dans l'affichage de deux valeurs différentes sur deux ou plusieurs anodes différentes. Comme la carte ne nous permet pas d'afficher deux valeurs différentes en même temps, nous devons utiliser le multiplexage pour afficher une valeur une à la fois, tout en passant à une autre valeur assez rapidement pour que nos yeux ne puissent pas la capturer. C'est là que l'entrée CLK entre en jeu.
Pour plus d'informations, veuillez vous référer au code source.
Étape 9: Vivado (combinaison de composants)
Une fois tous les modules (récepteur python, comparateur, décodeur à sept segments, etc.) terminés, nous avons ensuite assemblé à l'aide d'un module plus grand. Tout comme l'image sous la section "Sur la vue" montrée, nous connectons chaque signal en conséquence. Pour référence, veuillez consulter notre code source "SW_Hz.vhd".
Merci. Espérons que vous apprécierez.
Conseillé:
Comment faire un accordeur de guitare Arduino : 4 étapes
Comment faire un accordeur de guitare Arduino : Ce sont les instructions pour faire un accordeur de guitare à partir d'un Arduino et de plusieurs autres composants. Avec des connaissances de base en électronique et en codage, vous serez en mesure de fabriquer cet accordeur de guitare.Tout d'abord, vous devez savoir quels sont les matériaux.Ma
Comment fabriquer une antenne double biquade 4G LTE en quelques étapes faciles : 3 étapes
Comment créer une antenne double biquade 4G LTE Étapes faciles : La plupart du temps, je n'ai pas une bonne force de signal pour mes travaux quotidiens. Donc. Je recherche et essaye différents types d'antenne mais ne fonctionne pas. Après une perte de temps, j'ai trouvé une antenne que j'espère fabriquer et tester, car ce n'est pas un principe de construction
Game Design dans Flick en 5 étapes : 5 étapes
Game Design dans Flick en 5 étapes : Flick est un moyen très simple de créer un jeu, en particulier quelque chose comme un puzzle, un roman visuel ou un jeu d'aventure
Système d'alerte de stationnement en marche arrière Arduino - Étapes par étape : 4 étapes
Système d'alerte de stationnement en marche arrière Arduino | Étapes par étape : dans ce projet, je vais concevoir un circuit de capteur de stationnement inversé pour voiture Arduino simple à l'aide d'un capteur à ultrasons Arduino UNO et HC-SR04. Ce système d'alerte de marche arrière basé sur Arduino peut être utilisé pour une navigation autonome, une télémétrie de robot et d'autres r
Accordeur de guitare Arduino : 3 étapes
Accordeur de guitare Arduino : Voici un accordeur de guitare que j'ai fait avec un Arduino Uno et quelques trucs que j'avais qui traînaient. Cela fonctionne comme ceci : Il y a 5 boutons chacun qui produiront une note différente dans l'accord de guitare standard EADGBE. Comme je n'avais que 5 boutons, j'ai écrit du code pour que