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

Φίλτρο FIR για πιο αξιόπιστη ανίχνευση συχνότητας: 5 βήματα
Φίλτρο FIR για πιο αξιόπιστη ανίχνευση συχνότητας: 5 βήματα

Βίντεο: Φίλτρο FIR για πιο αξιόπιστη ανίχνευση συχνότητας: 5 βήματα

Βίντεο: Φίλτρο FIR για πιο αξιόπιστη ανίχνευση συχνότητας: 5 βήματα
Βίντεο: Обратноходовой блок питания UC3845. Своими руками. Проектируем блок питания ноутбука! 2024, Ιούλιος
Anonim
FIR φιλτράρισμα για πιο αξιόπιστη ανίχνευση συχνότητας
FIR φιλτράρισμα για πιο αξιόπιστη ανίχνευση συχνότητας

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

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

Δυστυχώς, η δημιουργία ενός ψηφιακού φίλτρου δεν είναι εύκολη και περιλαμβάνει αρκετά μαθηματικά. Έτσι σκέφτηκα να δημιουργήσω ένα είδος προγράμματος για να απλοποιήσω τη δημιουργία τέτοιων φίλτρων, για να επιτρέψω σε οποιονδήποτε να τα χρησιμοποιήσει στα έργα του χωρίς να εμβαθύνει στις λεπτομέρειες.

Σε αυτό το Instructable, πρόκειται να εντοπίσω ένα ημιτονοειδές κύμα 50Hz σε μια θορυβώδη μέτρηση με ένα Arduino Uno (το Arduino δεν είναι πραγματικά απαραίτητο).

Βήμα 1: Το πρόβλημα

Το πρόβλημα
Το πρόβλημα

Φανταστείτε ότι τα μετρημένα δεδομένα εισόδου μοιάζουν με την καμπύλη παραπάνω - αρκετά θορυβώδη.

Αν κατασκευάσουμε έναν απλό ανιχνευτή συχνότητας όπως αυτόν του Akellyirl's Instructable, το αποτέλεσμα είναι "-inf" ή στην περίπτωση του παρακάτω κώδικα: "Ναι, πολύς θόρυβος …"

Σημείωση: Χρησιμοποίησα σχεδόν όλο τον κώδικα του akellyirl, αλλά πρόσθεσα έναν πίνακα rawData στο πάνω μέρος που περιέχει τις θορυβώδεις μετρήσεις.

Παρακάτω μπορείτε να βρείτε ολόκληρο τον κώδικα σε ένα αρχείο που ονομάζεται "unfiltered.ino".

Βήμα 2: Η λύση

Η λύση
Η λύση

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

Βήμα 3: EasyFIR

EasyFIR
EasyFIR

Το εργαλείο easyFIR είναι αρκετά εύκολο στη χρήση, απλώς κατεβάστε το αποθετήριο GitHub και εκτελέστε το αρχείο easyFIR.py με ένα δείγμα των μετρήσεων σας (σε μορφή CSV).

Εάν ανοίξετε το αρχείο easyFIR.py, θα βρείτε 5 παραμέτρους (δείτε την παραπάνω εικόνα) που μπορείτε και πρέπει να αλλάξετε ανάλογα με το αποτέλεσμα που θα θέλατε να επιτύχετε. Αφού τροποποιήσετε τις 5 παραμέτρους και εκτελέσετε το αρχείο python, θα δείτε τους υπολογισμένους συντελεστές στο τερματικό σας. Αυτοί οι συντελεστές είναι καθοριστικοί για το επόμενο βήμα!

Περισσότερες πληροφορίες για την ακριβή χρήση μπορείτε να βρείτε εδώ:

Βήμα 4: Φιλτράρισμα

Φιλτράρισμα
Φιλτράρισμα

Τώρα αν έχετε υπολογίσει τους απαιτούμενους συντελεστές φίλτρου, είναι πολύ εύκολο να εφαρμόσετε το πραγματικό αρχείο στο ανιχνευτή συχνότητας.

Όπως μπορείτε να δείτε στην παραπάνω εικόνα, χρειάζεται μόνο να προσθέσετε τους συντελεστές, τη συνάρτηση applyFilter και στη συνέχεια να φιλτράρετε τις μετρήσεις εισόδου.

Παρακάτω μπορείτε να βρείτε ολόκληρο τον κώδικα σε ένα αρχείο που ονομάζεται "filtered.ino".

Σημείωση: Χάρη σε αυτό το Stack Overflow Post για τον υπέροχο αλγόριθμο εφαρμογής φίλτρου!

Βήμα 5: Απολαύστε

Απολαμβάνω
Απολαμβάνω

Όπως μπορείτε να δείτε, τώρα είμαστε σε θέση να ανιχνεύσουμε ένα σήμα 50Hz ακόμη και σε θορυβώδες περιβάλλον;

Μη διστάσετε να προσαρμόσετε την ιδέα και τον κωδικό μου στις ανάγκες σας. Θα ήμουν πολύ ευγνώμων να συμπεριλάβω τις βελτιώσεις σας!

Αν σας αρέσει η δουλειά μου, θα εκτιμούσα πραγματικά αν υποστηρίζατε τη δουλειά μου με το αστέρι στο GitHub!

Ευχαριστώ για την υποστήριξη!:)

Συνιστάται: