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

Ukelele Tuner Using LabView and NI USB-6008: 5 Steps
Ukelele Tuner Using LabView and NI USB-6008: 5 Steps

Βίντεο: Ukelele Tuner Using LabView and NI USB-6008: 5 Steps

Βίντεο: Ukelele Tuner Using LabView and NI USB-6008: 5 Steps
Βίντεο: University of Arizona - AME487 - Ukulele tuner project 2024, Νοέμβριος
Anonim
Ukelele Tuner Using LabView and NI USB-6008
Ukelele Tuner Using LabView and NI USB-6008
Ukelele Tuner Using LabView and NI USB-6008
Ukelele Tuner Using LabView and NI USB-6008

Ως πρόγραμμα εκμάθησης βάσει προβλημάτων για το μάθημα LabVIEW & Instrumentation στο Humber College (Electronics Engineering Technology), δημιούργησα έναν δέκτη ukulele που θα έπαιρνε μια αναλογική είσοδο (ήχος χορδής ukulele), θα έβρισκα τη θεμελιώδη συχνότητα, θα αποφάσιζα ποια νότα προσπαθούσε για να συντονιστείτε και πείτε στο χρήστη εάν η συμβολοσειρά έπρεπε να συντονιστεί πάνω ή κάτω. Η συσκευή που χρησιμοποίησα για τη μετάφραση της αναλογικής εισόδου σε ψηφιακή είσοδο ήταν το National Instruments USB-6008 DAQ (συσκευή λήψης δεδομένων) και η διεπαφή χρήστη υλοποιήθηκε με το LabVIEW.

Βήμα 1: Τυπικός συντονισμός Ukelele

Τυπική ρύθμιση Ukelele
Τυπική ρύθμιση Ukelele
Τυπική ρύθμιση Ukelele
Τυπική ρύθμιση Ukelele

Το πρώτο βήμα ήταν να μάθουμε τις θεμελιώδεις συχνότητες των μουσικών νότες και σε ποιο εύρος είναι συνήθως προσαρμοσμένες οι χορδές του ukulele. Χρησιμοποίησα αυτά τα δύο διαγράμματα και αποφάσισα ότι θα κάνω το εύρος των τόνων μου μεταξύ 262 Hz (C) και 494Hz (High B). Οτιδήποτε μικρότερο από 252 Hz θα θεωρούνταν πολύ χαμηλό για να αποκρυπτογραφήσει το πρόγραμμα ποια νότα προσπαθούσε να παιχτεί και οτιδήποτε μεγαλύτερο από 500 Hz θα θεωρούνταν πολύ υψηλό. Το πρόγραμμα, ωστόσο, εξακολουθεί να λέει στον χρήστη πόσα Hz απέχουν από την πλησιέστερη αποκωδικοποιήσιμη νότα και εάν η συμβολοσειρά πρέπει να συντονιστεί προς τα πάνω (σημείωση πολύ χαμηλή) ή κάτω (σημείωση πολύ υψηλή) για να φτάσει σε μια διαθέσιμη νότα.

Επιπλέον, δημιούργησα εύρη για κάθε νότα, αντί για μία μόνο συχνότητα, έτσι ώστε να είναι ευκολότερο για το πρόγραμμα να βρει ποια νότα παίζεται. Για παράδειγμα, το πρόγραμμα θα πει στον χρήστη ότι παίζεται ένα C εάν η νότα είχε θεμελιώδη συχνότητα μεταξύ 252 Hz (στα μισά του δρόμου έως Β) και 269Hz (στα μισά της διαδρομής στην C#), αλλά για να αποφασίσει εάν πρέπει να συντονιστεί ή προς τα κάτω, θα συνέχιζε να συγκρίνει τη νότα που παίζεται με τη θεμελιώδη συχνότητα του C που είναι 262Hz.

Βήμα 2: Δημιουργία ενός καθαρά ψηφιακού θεωρητικού μοντέλου

Δημιουργία ενός καθαρά ψηφιακού θεωρητικού μοντέλου
Δημιουργία ενός καθαρά ψηφιακού θεωρητικού μοντέλου
Δημιουργία ενός καθαρά ψηφιακού θεωρητικού μοντέλου
Δημιουργία ενός καθαρά ψηφιακού θεωρητικού μοντέλου

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

Χρησιμοποίησα το SoundFileSimpleRead. VI που είναι διαθέσιμο στο LabVIEW για να διαβάσω ένα αρχείο.wav από μια διαδρομή που έχω ορίσει, έβαλα το σήμα σε έναν πίνακα ευρετηρίου και τροφοδότησα αυτό το σήμα στο HarmonicDistortionAnalyzer. VI για να βρω τη θεμελιώδη συχνότητα. Πήρα επίσης το σήμα από το SoundFileSimpleRead. VI και το συνέδεσα απευθείας σε έναν δείκτη γραφήματος κυματομορφής, έτσι ώστε ο χρήστης να μπορεί να δει την κυματομορφή του αρχείου στον μπροστινό πίνακα.

Δημιούργησα 2 δομές πεζών: η μία για να αναλύσω ποια νότα παιζόταν και η άλλη για να προσδιορίσω εάν η συμβολοσειρά έπρεπε να γυρίσει προς τα πάνω ή προς τα κάτω. Για την πρώτη περίπτωση, δημιούργησα εύρη για κάθε νότα και αν το βασικό σήμα συχνότητας από το HarmonicDistortionAnalyzer. VI ήταν σε αυτό το εύρος, θα έλεγε στο χρήστη ποια νότα παίζεται. Μόλις καθοριστεί η νότα, η αξία της νότα που παίχτηκε αφαιρέθηκε από την πραγματική θεμελιώδη συχνότητα της νότας και, στη συνέχεια, το αποτέλεσμα μεταφέρθηκε στη δεύτερη περίπτωση που καθορίζει τα εξής: εάν το αποτέλεσμα είναι πάνω από το μηδέν, τότε η συμβολοσειρά πρέπει να συντονιστεί. εάν το αποτέλεσμα είναι ψευδές (όχι πάνω από το μηδέν), τότε η περίπτωση ελέγχει εάν η τιμή είναι ίση με το μηδέν και εάν είναι αληθές, τότε το πρόγραμμα θα ειδοποιήσει το χρήστη ότι η σημείωση είναι συντονισμένη. εάν η τιμή δεν είναι ίση με μηδέν, τότε σημαίνει ότι πρέπει να είναι μικρότερη από μηδέν και ότι η συμβολοσειρά πρέπει να συντονιστεί. Πήρα την απόλυτη τιμή του αποτελέσματος για να δείξω στον χρήστη πόσα Hz απέχουν από την πραγματική νότα.

Αποφάσισα ότι ένας δείκτης μετρητή θα ήταν ο καλύτερος για να δείξει οπτικά στο χρήστη τι πρέπει να γίνει για να συντονιστεί η σημείωση.

Βήμα 3: Στη συνέχεια, το αναλογικό κύκλωμα

Στη συνέχεια, το αναλογικό κύκλωμα
Στη συνέχεια, το αναλογικό κύκλωμα
Στη συνέχεια, το αναλογικό κύκλωμα
Στη συνέχεια, το αναλογικό κύκλωμα
Στη συνέχεια, το αναλογικό κύκλωμα
Στη συνέχεια, το αναλογικό κύκλωμα

Το μικρόφωνο που χρησιμοποίησα για αυτό το έργο είναι το ηλεκτρικό μικρόφωνο συμπύκνωσης CMA-6542PF. Το φύλλο δεδομένων για αυτό το μικρόφωνο είναι παρακάτω. Σε αντίθεση με τα περισσότερα μικρόφωνα συμπύκνωσης αυτού του τύπου, δεν χρειάστηκε να ανησυχώ για την πολικότητα. Το φύλλο δεδομένων δείχνει ότι η τάση λειτουργίας για αυτό το μικρόφωνο είναι 4,5 - 10V, αλλά συνιστάται 4,5 V και η τρέχουσα κατανάλωσή του είναι 0,5mA max, κάτι που πρέπει να προσέξετε όταν σχεδιάζετε ένα κύκλωμα προενίσχυσης για αυτό. Η συχνότητα λειτουργίας είναι 20Hz έως 20kHz που είναι ιδανική για ήχο.

Εφάρμοσα έναν απλό σχεδιασμό κυκλώματος προενίσχυσης στο breadboard και ρύθμισα την τάση εισόδου, διασφαλίζοντας ότι δεν υπήρχαν περισσότερα από 0,5mA στο μικρόφωνο. Ο πυκνωτής χρησιμοποιείται για το φιλτράρισμα του θορύβου DC που μπορεί να συζευχθεί μαζί με τα ηλεκτρικά σήματα (έξοδος) και ο πυκνωτής έχει πολικότητα, οπότε φροντίστε να συνδέσετε το θετικό άκρο με την ακίδα εξόδου του μικροφώνου.

Αφού ολοκληρώθηκε το κύκλωμα, συνέδεσα την έξοδο του κυκλώματος με τον πρώτο αναλογικό πείρο εισόδου (AI0, pin 2) του USB-6008 και συνέδεσα τη γείωση του breadboard με τον αναλογικό πείρο γείωσης (GND, pin 1). Συνδέσα το USB-6008 στον υπολογιστή με USB και ήρθε η ώρα να κάνω προσαρμογές στο πρόγραμμα LabVIEW για να λάβω ένα πραγματικό αναλογικό σήμα.

Βήμα 4: Ανάγνωση αναλογικών σημάτων με τον βοηθό DAQ

Ανάγνωση αναλογικών σημάτων με τον βοηθό DAQ
Ανάγνωση αναλογικών σημάτων με τον βοηθό DAQ
Ανάγνωση αναλογικών σημάτων με τον βοηθό DAQ
Ανάγνωση αναλογικών σημάτων με τον βοηθό DAQ

Αντί να χρησιμοποιήσω το SoundFileSimpleRead. VI και το HarmonicDistortionAnalyzer. VI, χρησιμοποίησα το DAQ Assistant. VI και το ToneMeasurements. VI για να αντιμετωπίσω την αναλογική είσοδο. Η ρύθμιση του DAQ Assistant είναι αρκετά απλή και το ίδιο το VI σας οδηγεί στα βήματα. Το ToneMeasurements. VI έχει πολλές εξόδους για να διαλέξετε (πλάτος, συχνότητα, φάση), οπότε χρησιμοποίησα την έξοδο συχνότητας που δίνει τη θεμελιώδη συχνότητα του τόνου εισόδου (από τον Βοηθό DAQ. VI). Η έξοδος του ToneMeasurements. VI έπρεπε να μετατραπεί και να τεθεί σε πίνακα προτού μπορέσει να χρησιμοποιηθεί στις δομές της υπόθεσης, αλλά οι υπόλοιποι προγραμματισμοί/δείκτες LabVIEW παρέμειναν οι ίδιοι.

Βήμα 5: Συμπέρασμα

συμπέρασμα
συμπέρασμα

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

Συνιστάται: