Πίνακας περιεχομένων:

Δέκτης: 9 βήματα
Δέκτης: 9 βήματα

Βίντεο: Δέκτης: 9 βήματα

Βίντεο: Δέκτης: 9 βήματα
Βίντεο: πώς λύνω τον κύβο του Ρούμπικ 3x3 για αρχάριους πανευκολα/ how to solve the rubik's cube beginners!! 2024, Ιούλιος
Anonim
Image
Image
Λίστα εξοπλισμού (πάρτε μια φωτογραφία του πίνακα και του Kevin's Comp)
Λίστα εξοπλισμού (πάρτε μια φωτογραφία του πίνακα και του Kevin's Comp)

Αυτό το έργο σχεδιάστηκε για να φτιάξει έναν δέκτη κιθάρας χρησιμοποιώντας το Vivado και μια οθόνη 7 τμημάτων. Μόλις ο δέκτης εντοπίσει τη συχνότητα του εισερχόμενου ήχου, ο δέκτης θα συγκρίνει αυτήν την τιμή με μια λίστα σκληρών κωδικοποιημένων τιμών για ακριβείς συχνότητες που είναι γνωστές ως τυπική συχνότητα για το σωστό βήμα μιας νότας. Στη συνέχεια, ο δέκτης θα εμφανίσει πόσο κοντά ή μακριά είναι ο εισαγόμενος ήχος σας από τη νότα που θέλετε. Αυτό που είναι ενδιαφέρον είναι ότι ένα ηχητικό κύμα είναι ένας συνδυασμός πολλαπλών ημιτονοειδών κυματομορφών με πραγματικά και φανταστικά συστατικά. Ενώ αυτό μπορεί να φαίνεται δύσκολο να συνεργαστεί σε όσους δεν είναι εξοικειωμένοι, υπάρχουν μερικοί τρόποι με τους οποίους μπορούμε ακόμα να αναλύσουμε ένα κύμα με πραγματικές και φανταστικές αξίες.

Διαδήλωση:

Βήμα 1: Λίστα εξοπλισμού (τραβήξτε μια φωτογραφία του πίνακα και του Kevin's Comp)

Αρχικά χρειαζόμαστε έναν πίνακα Basys 3 και έναν υπολογιστή που υποστηρίζει τα ακόλουθα προγράμματα. Garageband/Audacity ή άλλο DAW - για εγγραφή μέσω μικροφώνου και εξαγωγή αρχείων wavfi

Python - μπορεί να χρησιμοποιήσει pylab και scipy για δειγματοληψία και fft

Vivado - για να συνδεθείτε με τον πίνακα Basys 3 και να δείτε οπτικά τα αποτελέσματα

Βήμα 2: Επισκόπηση

ΣΦΑΙΡΙΚΗ ΕΙΚΟΝΑ
ΣΦΑΙΡΙΚΗ ΕΙΚΟΝΑ

Ένας δέκτης αποτελείται από λίγα σημαντικά στοιχεία: μικρόφωνο, δειγματολήπτη, FFT (Fast Fourier Transform), συγκριτή, αποκωδικοποιητή και οθόνη. Ο σκοπός του μικροφώνου είναι να συλλάβει την κυματομορφή εισόδου. Ο δειγματολήπτης λαμβάνει το σήμα εξόδου του μικροφώνου και χρησιμοποιεί το FFT για να μετατρέψει το σήμα σε έξοδο μεγέθους σε συχνότητες. Στη συνέχεια, χρησιμοποιώντας την έξοδο του FFT και βρίσκοντας το μέγιστο μέγεθος και τη συχνότητα που σχετίζεται με αυτό διαιρούμενο με 2, μπορεί να βρεθεί η συχνότητα που σχετίζεται με το βήμα της κυματομορφής. Αυτή η τιμή μπορεί στη συνέχεια να εισέλθει στη σύγκριση. Στη συνέχεια, συγκρίνεται με έναν πίνακα αναζήτησης, ο οποίος έχει ήδη ορίσει τιμές συχνότητας για τέλεια βήματα όλων των σημειώσεων. Στον συγκριτή δίνεται μια είσοδος για την επιθυμητή νότα, την οποία στη συνέχεια μπορεί να αντιστοιχίσει την επιθυμητή νότα με τη σωστή συχνότητα από τον πίνακα αναζήτησης. Στη συνέχεια, ο συγκριτής θα επιλέξει τη νότα με την πλησιέστερη συχνότητα στη μέγιστη συχνότητα. Ο συγκριτής θα συγκρίνει τις δύο τιμές και θα δει κοντά η τιμή της συχνότητας στην επιθυμητή και στη συνέχεια θα θέσει αυτά τα δεδομένα σε σήμα. Ο συγκριτής θα στείλει αυτό το σήμα στον αποκωδικοποιητή, όπου ο αποκωδικοποιητής θα επιλέξει τις εισόδους για τις ανόδους της οθόνης των 7 τμημάτων για να δείξει την ακρίβεια της σημείωσης.

Βήμα 3: Αρχείο Wav

Αρχείο Wav
Αρχείο Wav

Σε αυτό το βήμα, θα πάρουμε ένα αρχείο wav ενός βήματος και θα προσπαθήσουμε να εξάγουμε τη συχνότητα αυτού του βήματος.

Πρώτα χρειάζεστε ένα αρχείο wav μιας σημείωσης. Σε αυτό το παράδειγμα θα χρησιμοποιήσουμε ένα στερεοφωνικό αρχείο 16 bit με ρυθμό δειγματοληψίας 44,1 kHz. Αυτό μπορεί είτε να δημιουργηθεί σε ένα DAW όπως το Garageband είτε να γίνει λήψη. Για αυτό το παράδειγμα, μπορείτε να κατεβάσετε ένα ημιτονοειδές κύμα A4 440Hz που δημιουργήθηκε από εμάς στο Garageband.

Βήμα 4: Python- Χρήσεις Pylab και Scipy

Python- Χρήσεις Pylab και Scipy
Python- Χρήσεις Pylab και Scipy

Χρησιμοποιήσαμε τη βιβλιοθήκη Python για να κάνουμε το "Fast Fourier transform". Ο διαδικτυακός πόρος μας επέτρεψε να μιμηθούμε και να δούμε τι είναι χρήσιμο στο pylab και το scipy.

1. Εάν δεν έχετε εγκαταστήσει pylab ή scipy, πρέπει να το κάνετε. Or, το Pycharm έχει ένα πολύ καλό χαρακτηριστικό, όταν δοκιμάζετε να εισάγετε pylab ή scipy, υπάρχει μια περίεργη υπογράμμιση που σας λέει ότι δεν έχετε εγκαταστήσει ακόμα τη βιβλιοθήκη. Στη συνέχεια, μπορείτε να τα εγκαταστήσετε απευθείας πιέζοντας τον κόκκινο λαμπτήρα (θα εμφανιστεί όταν τοποθετήσετε τον κέρσορα κοντά στην ευαίσθητη υπογράμμιση).

2. Χρησιμοποιώντας τη λειτουργία scipy.io.wavfile.read, διαβάστε και τραβήξτε δεδομένα από το δείγμα αρχείου wav. Εκτελέστε τα δεδομένα από το pylab.fft, θα σας επιστρέψει μια λίστα μεγέθους για την ισχύ.

3. Στη συνέχεια, βρείτε το μέγιστο της ισχύος που εκπέμπεται από τη λίστα. Αναζητήστε το ευρετήριο λίστας όπου εμφανίζεται η μέγιστη ισχύς επειδή ο ταχύτερος τρόπος για να βρείτε ποια συχνότητα σχετίζεται με αυτήν την ισχύ. Τέλος επιστρέψτε τη μέγιστη συχνότητα. Δεδομένου ότι αργότερα πρέπει να εισαγάγουμε ένα δυαδικό σήμα συχνότητας σε κώδικα VHDL, μπορούμε να μετατρέψουμε τη συχνότητα σε float σε δυαδικό και να το επιστρέψουμε.

Βήμα 5: Δείγμα Python και FFT (Εμφάνιση κώδικα και των αποτελεσμάτων του)

Σε αυτό το βήμα, οι πλήρεις πιστώσεις πηγαίνουν στον παρακάτω σύνδεσμο για τη δειγματοληψία και το FFT.

samcarcagno.altervista.org/blog/basic-sound…Κωδικός μας:

Μετά την εγκατάσταση του pylab και του scipy, τα αρχεία wav μπορούν να εισαχθούν και να διαβαστούν.

από pylab import*από scipy.io εισαγωγή wavfile

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

Στη συνέχεια, το snd.shape αντιπροσωπεύει τα δείγματα και τον αριθμό των καναλιών. Στην περίπτωσή μας, τα σημεία δειγμάτων εξαρτώνται από το πόσο καιρό είναι το αρχείο wavfile και το # των καναλιών είναι 2 επειδή είναι στερεοφωνικό.

Στη συνέχεια snd = snd / (2. ** 15) …… xlabel ('Time (ms)')

οργανώνει το σήμα ώρας σε έναν πίνακα.

Στη συνέχεια, το FFT δημιουργεί έναν πίνακα σε συχνότητα και μέγεθος (Ισχύς)

Στη συνέχεια, μέσα σε λίγο βρόχο βρίσκεται το μέγιστο μέγεθος και η συχνότητα που σχετίζεται με αυτό. Αυτή η συχνότητα/2 αντιπροσωπεύει το βήμα του αρχείου wavfile.

Στη συνέχεια, χρησιμοποιώντας τον δικό μας κώδικα, ο ακέραιος αριθμός που αντιπροσωπεύει τη συχνότητα μετατράπηκε σε δυαδικό αριθμό 12 bit και δημιουργήθηκε ένα αρχείο κειμένου με αυτόν τον αριθμό σε αυτόν.

Βήμα 6: Vivado (Συγκριτής)

Vivado (Συγκριτής)
Vivado (Συγκριτής)

Σε αυτό το μέρος της διαδικασίας, χρειαζόμαστε έναν συγκριτή για να συγκρίνουμε δύο συχνότητες εισόδου.

1. Δημιούργησε ένα συγκριτικό για να συγκρίνει εάν η συχνότητα εισόδου (δέκτη) είναι υψηλότερη, χαμηλότερη ή εντός της σημείωσης που ορίζεται από το εύρος περιθωρίου 2 Hz. (ο τυπικός δέκτης κιθάρας κυμαίνεται από e2 έως g5, 82 Hz έως 784 Hz).

2. Κατά τη δημιουργία ενός περιθωρίου 2 Hz, χρησιμοποιήσαμε ένα RCA για να προσθέσουμε το "000000000010" στη συχνότητα του δέκτη και να ελέγξουμε πού είναι ακόμα πολύ χαμηλό για είσοδο χρήστη. Εάν συμβαίνει αυτό, το σήμα ενός bit "υψηλό" <= "0", "χαμηλό" <= "1". Στη συνέχεια, προσθέτουμε "000000000010" στην είσοδο του χρήστη για να δούμε αν η είσοδος του δέκτη είναι ακόμη υψηλότερη από αυτήν. Εάν συμβαίνει αυτό, "υψηλό" <= "1", "χαμηλό" <= "0". Καμία από τις δύο περιπτώσεις δεν θα επέστρεφε "0".

3. Δεδομένου ότι το επόμενο μέρος της ενότητας χρειάζεται συγκεκριμένα δεδομένα 4-bit για να πει ποια είναι η σημείωση του δέκτη, όχι μόνο επιστρέφοντας τις 2 συγκριτικές εξόδους (χαμηλή και υψηλή), πρέπει να επιστρέψουμε τον κωδικό συσχετισμού σε σημείωση, ο οποίος συσχετίζεται με η συχνότητα. Ανατρέξτε στο παρακάτω διάγραμμα:

Γ | 0011

C# | 1011

Δ | 0100

D# | 1100

Ε | 0101

F | 0110

F# | 1110

G | 0111

G# | 1111

A | 0001

A# | 1001

Β | 0010

Χρησιμοποιώντας πολλές προτάσεις if για να τις κατηγοριοποιήσετε σε σημείωση και να τις κωδικοποιήσετε σε ό, τι χρειάζεται για τον αποκωδικοποιητή των επτά τμημάτων.

Βήμα 7: ΕΙΚΟΝΕΣ ΤΟΥ BASYS 3 Πίνακας

ΕΙΚΟΝΕΣ BASYS 3 Πίνακας
ΕΙΚΟΝΕΣ BASYS 3 Πίνακας

Βήμα 8: Vivado (Αποκωδικοποιητής 7 τμημάτων με πολυπλεξία)

Vivado (αποκωδικοποιητής 7 τμημάτων με πολυπλεξία)
Vivado (αποκωδικοποιητής 7 τμημάτων με πολυπλεξία)

Όλα χρειάζονται οθόνη. Είναι ένας σημαντικός παράγοντας που καθορίζει την αξία ενός σχεδίου. Επομένως, πρέπει να δημιουργήσουμε μια οθόνη χρησιμοποιώντας αποκωδικοποιητή επτά τμημάτων, η οποία θα μας επιτρέψει να αποδείξουμε την ικανότητά μας να σχεδιάζουμε ένα δέκτη στην πλακέτα Β. Επίσης, θα μας βοηθήσει στη δοκιμή και τον εντοπισμό σφαλμάτων.

Ένας αποκωδικοποιητής επτά τμημάτων περιέχει εισόδους με όνομα Σημείωση, χαμηλή, υψηλή και CLK, ενώ παράγει SSEG, AN και Fiz_Hz. Υπάρχει μια εικόνα του μπλοκ διαγράμματος παραπάνω για να μας βοηθήσει να κατανοήσουμε το σχέδιο.

Ο σκοπός της ύπαρξης δύο ξεχωριστών χαμηλών και υψηλών εισόδων είναι να παρέχει στον σχεδιαστή του συγκριτή την ελευθερία να χειρίζεται εάν η συχνότητα ήχου (κύματος) είναι υψηλότερη ή χαμηλότερη από τη συχνότητα εισόδου (Fix_Hz) που θέλει να συγκρίνει ο χρήστης. Επιπλέον, η έξοδος SSEG αντιπροσωπεύει την επίδειξη επτά τμημάτων και την τελεία που ακολουθεί ενώ το ΑΝ αντιπροσωπεύει τις ανόδους για τις οποίες το σύνολο των επτά τμημάτων εμφανίζεται.

Σε αυτόν τον αποκωδικοποιητή επτά τμημάτων, το ρολόι (CLK) παίζει σημαντικό ρόλο στην εμφάνιση δύο διαφορετικών τιμών σε δύο ή περισσότερες διαφορετικές άνοδος. Καθώς ο πίνακας δεν μας επιτρέπει να εμφανίζουμε δύο διαφορετικές τιμές ταυτόχρονα, πρέπει να χρησιμοποιήσουμε την πολυπλεξία για να εμφανίσουμε μια τιμή κάθε φορά, ενώ μεταβαίνουμε σε άλλη τιμή αρκετά γρήγορα ώστε τα μάτια μας να μην μπορούν να την καταγράψουν. Εδώ παίζει ρόλο η είσοδος CLK.

Για περισσότερες πληροφορίες, ανατρέξτε στον πηγαίο κώδικα.

Βήμα 9: Vivado (Συνδυασμός εξαρτημάτων)

Με κάθε μονάδα (δέκτης python, συγκριτής, αποκωδικοποιητής επτά τμημάτων κ.λπ.) που ολοκληρώθηκε, στη συνέχεια συγκεντρώσαμε τη χρήση μιας μεγαλύτερης μονάδας. Ακριβώς όπως η εικόνα στην ενότητα "Over view" που εμφανίζεται, συνδέουμε κάθε σήμα ανάλογα. Για αναφορά, ελέγξτε τον πηγαίο κώδικα "SW_Hz.vhd".

Σας ευχαριστώ. Ελπίζω να σου αρέσει.

Συνιστάται: