Inhaltsverzeichnis:

Stimmgerät: 9 Schritte
Stimmgerät: 9 Schritte

Video: Stimmgerät: 9 Schritte

Video: Stimmgerät: 9 Schritte
Video: Gitarre kinderleicht stimmen mit Belfort® Stimmgerät (für Gitarre, Ukulele, Bass, Violine uvm.) 2024, Juli
Anonim
Image
Image
Ausrüstungsliste (mach ein Foto vom Board und Kevins Comp)
Ausrüstungsliste (mach ein Foto vom Board und Kevins Comp)

Dieses Projekt wurde entwickelt, um einen Gitarrentuner mit Vivado und einer 7-Segment-Anzeige herzustellen. Sobald der Tuner die Frequenz des eingegebenen Tons gefunden hat, vergleicht der Tuner diesen Wert mit einer Liste hartcodierter Werte für genaue Frequenzen, die als Standardfrequenz für die richtige Tonhöhe einer Note bekannt sind. Dann zeigt der Tuner an, wie nah oder weit Ihr eingegebener Klang von Ihrer gewünschten Note ist. Interessant ist, dass eine Schallwelle eine Kombination mehrerer sinusförmiger Wellenformen mit Real- und Imaginärkomponenten ist. Auch wenn dies für Unbekannte schwierig erscheinen mag, gibt es einige Möglichkeiten, eine Welle mit realen und imaginären Werten zu analysieren.

Demo:

Schritt 1: Ausrüstungsliste (mache ein Bild vom Board und Kevins Comp)

Zuerst benötigen wir ein Basys 3-Board und einen Computer, der die folgenden Programme unterstützt. Garageband/Audacity oder eine andere DAW - um über ein Mikrofon aufzunehmen und Wav-Dateien zu exportieren

Python - kann pylab und scipy für Sampling und fft. verwenden

Vivado - um sich mit dem Basys 3-Board zu verbinden und die Ergebnisse visuell zu sehen

Schritt 2: Übersicht

Überblick
Überblick

Ein Tuner besteht aus wenigen wichtigen Komponenten: Mikrofon, Sampler, FFT (Fast Fourier Transform), Komparator, Decoder und Display. Der Zweck des Mikrofons besteht darin, die Eingangswellenform zu erfassen. Der Sampler empfängt das Ausgangssignal des Mikrofons und verwendet die FFT, um das Signal in eine Ausgabe von Frequenzen umzuwandeln. Dann kann unter Verwendung der Ausgabe der FFT und der Ermittlung des maximalen Betrags und der damit verbundenen Frequenz geteilt durch 2 die mit der Tonhöhe der Wellenform verbundene Frequenz gefunden werden. Dieser Wert kann dann in den Komparator gehen. Es wird dann mit einer Nachschlagetabelle verglichen, die bereits Frequenzwerte für perfekte Tonhöhen aller Noten enthält. Der Komparator erhält eine Eingabe für die gewünschte Note, die er dann der gewünschten Note mit ihrer richtigen Frequenz aus der Nachschlagetabelle zuordnen kann. Dann wählt der Komparator die Note mit der Frequenz, die der maximalen Frequenz am nächsten ist. Der Komparator vergleicht die beiden Werte und sieht den Wert der Frequenz mit dem gewünschten Wert und setzt diese Daten dann in ein Signal um. Der Komparator sendet dieses Signal an den Decoder, wo der Decoder die Eingänge für die Anoden der 7-Segment-Anzeige wählt, um die Genauigkeit der Note anzuzeigen.

Schritt 3: Wav-Datei

Wav-Datei
Wav-Datei

In diesem Schritt nehmen wir eine WAV-Datei einer Tonhöhe und versuchen, die Frequenz dieser Tonhöhe auszugeben.

Zuerst benötigen Sie eine wav-Datei einer Notiz. In diesem Beispiel verwenden wir eine 16-Bit-Stereo-WAV-Datei mit einer Abtastrate von 44,1 kHz. Diese kann entweder in einer DAW wie Garageband erstellt oder heruntergeladen werden. Für dieses Beispiel kann eine von uns auf Garageband erzeugte A4 440Hz Sinuswelle hier heruntergeladen werden.

Schritt 4: Python - Verwendung von Pylab und Scipy

Python – Verwendung von Pylab und Scipy
Python – Verwendung von Pylab und Scipy

Wir haben die Python-Bibliothek für die "Fast Fourier Transformation" verwendet. Die Online-Ressource ermöglichte es uns, nachzuahmen und zu sehen, was in pylab und scipy nützlich ist.

1. Wenn Sie pylab oder scipy nicht installiert haben, müssen Sie dies tun. Oder, Pycharm hat eine sehr gute Funktion, wenn Sie versuchen, pylab oder scipy zu importieren, gibt es eine verschnörkelte Unterstreichung, die Ihnen mitteilt, dass Sie die Bibliothek noch nicht installiert haben. Sie können sie dann direkt installieren, indem Sie auf die rote Glühbirne drücken (sie erscheint, wenn Sie den Cursor in die Nähe der verschnörkelten Unterstreichung bringen).

2. Verwenden Sie die Funktion scipy.io.wavfile.read, um Daten aus der Beispiel-WAV-Datei zu lesen und herauszuziehen. Durchlaufen Sie die Daten von pylab.fft, es wird Ihnen eine Liste der Größen für die Leistung zurückgegeben.

3. Ermitteln Sie dann die maximale abgegebene Leistung aus der Liste. Suchen Sie nach dem Listenindex, in dem die maximale Leistung auftritt, da Sie schneller herausfinden können, welche Frequenz mit dieser Leistung verbunden ist. Geben Sie schließlich die maximale Frequenz zurück. Da wir später ein binäres Frequenzsignal in VHDL-Code eingeben müssen, können wir die Frequenz in Float in Binär umwandeln und zurückgeben.

Schritt 5: Python-Sampling und FFT (Code und seine Ergebnisse anzeigen)

In diesem Schritt gehen die vollständigen Credits für das Sampling und die FFT zu diesem Link unten.

samcarcagno.altervista.org/blog/basic-sound…Unser Code:

Nach der Installation von pylab und scipy können wav-Dateien importiert und gelesen werden.

from pylab import*from scipy.io import wavfile

sampFreq, snd = wavfile.read('440_sine.wav')

Dann repräsentiert snd.shape die Abtastpunkte und die Anzahl der Kanäle. In unserem Fall hängen die Abtastpunkte davon ab, wie lang die Wavdatei ist und die Anzahl der Kanäle 2 beträgt, da es sich um Stereo handelt.

Dann snd = snd / (2.**15)…… xlabel('Zeit (ms)')

organisiert das Zeitsignal in einem Array.

Dann erstellt die FFT ein Array in Frequenz und Größe (Power)

Dann wird durch eine while-Schleife die maximale Größe und die damit verbundene Frequenz gefunden. Diese Frequenz/2 repräsentiert die Tonhöhe der Wavdatei.

Dann wurde mit unserem eigenen Code die ganze Zahl, die die Frequenz darstellt, in eine 12-Bit-Binärzahl umgewandelt und eine Textdatei mit dieser Zahl erstellt.

Schritt 6: Vivado (Komparator)

Vivado (Vergleicher)
Vivado (Vergleicher)

In diesem Teil des Prozesses benötigen wir einen Komparator, um zwei Eingangsfrequenzen zu vergleichen.

1. Erstellt einen Komparator, um zu vergleichen, ob die Eingangsfrequenz (Empfänger) höher, niedriger oder innerhalb des definierten 2 Hz-Grenzbereichs liegt. (typischer Gitarrenstimmer reicht von e2 bis g5, 82 Hz bis 784 Hz).

2. Beim Erstellen eines Spielraums von 2 Hz haben wir einen Cinch verwendet, um der Empfängerfrequenz „000000000010“hinzuzufügen und zu prüfen, wo sie noch zu niedrig für Benutzereingaben ist. Ist dies der Fall, Einzelbitsignal „high“<= „0“, „low“<= „1“. Dann fügen wir "000000000010" zur Benutzereingabe hinzu und sehen, ob die Empfängereingabe noch höher ist. Wenn dies der Fall ist, „hoch“<= „1“, „niedrig“<= „0“. Keiner der Fälle würde beide „0“zurückgeben.

3. Da der nächste Teil des Moduls spezifische 4-Bit-Daten benötigt, um zu sagen, was die Empfängernote ist, müssen wir nicht nur die 2 Vergleichsausgänge (Low und High) zurückgeben, sondern den Code zurückgeben, der mit der Note verknüpft ist die Frequenz. Bitte beachten Sie die folgende Tabelle:

C | 0011

C# | 1011

D | 0100

D# | 1100

E | 0101

F | 0110

F# | 1110

G | 0111

G# | 1111

A | 0001

A# | 1001

B | 0010

Verwenden mehrerer if-Anweisungen, um sie in Notizen zu kategorisieren und sie in das zu codieren, was für den Sieben-Segment-Decoder benötigt wird.

Schritt 7: BILDER VON BASYS 3 Board

BILDER VON BASYS 3 Board
BILDER VON BASYS 3 Board

Schritt 8: Vivado (7-Segment-Decoder mit Multiplexing)

Vivado (7-Segment-Decoder mit Multiplexing)
Vivado (7-Segment-Decoder mit Multiplexing)

Alles braucht eine Anzeige. Es ist ein wichtiger Faktor, der den Wert eines Designs bestimmt. Daher müssen wir eine Anzeige mit Sieben-Segment-Decoder erstellen, die es uns ermöglicht, unsere Fähigkeit zu demonstrieren, einen Tuner auf dem B-Board zu entwickeln. Außerdem würde es uns beim Testen und Debuggen helfen.

Ein Sieben-Segment-Decoder enthält Eingaben mit den Namen Note, Low, High und CLK, während er SSEG, AN und Fiz_Hz ausgibt. Oben befindet sich ein Bild des Blockdiagramms, das uns hilft, das Design zu verstehen.

Der Zweck von zwei getrennten niedrigen und hohen Eingängen besteht darin, dem Konstrukteur des Komparators die Freiheit zu geben, zu manipulieren, ob die Schall-(Wellen-)Frequenz höher oder niedriger als die Eingangsfrequenz (Fix_Hz) ist, die der Benutzer vergleichen möchte. Außerdem repräsentiert der Ausgang SSEG die Sieben-Segment-Anzeige und der Punkt daneben, während der AN die Anoden repräsentiert, für die der Satz der Sieben-Segment-Anzeige aufleuchten soll.

Bei diesem Sieben-Segment-Decoder spielt die Uhr (CLK) eine wichtige Rolle bei der Anzeige zweier verschiedener Werte an zwei oder mehr verschiedenen Anoden. Da das Board es uns nicht erlaubt, zwei verschiedene Werte gleichzeitig anzuzeigen, müssen wir Multiplexing verwenden, um einen Wert nacheinander anzuzeigen, während wir schnell genug in einen anderen Wert wechseln, damit unsere Augen ihn nicht erfassen können. Hier kommt der CLK-Eingang ins Spiel.

Weitere Informationen finden Sie im Quellcode.

Schritt 9: Vivado (Kombinieren von Komponenten)

Wenn alle Module (Python-Empfänger, Komparator, Sieben-Segment-Decoder usw.) abgeschlossen sind, setzen wir dann ein größeres Modul zusammen. Genau wie im Bild unter dem Abschnitt "Übersicht" gezeigt, verbinden wir jedes Signal entsprechend. Als Referenz überprüfen Sie bitte unseren Quellcode "SW_Hz.vhd".

Dankeschön. Ich hoffe dir gefällt es.

Empfohlen: