Πρακτική εφαρμογή του μετασχηματισμού Fourier για επεξεργασία σήματος. Ψηφιακή επεξεργασία σήματος σε μικροελεγκτές ARM7 Μετασχηματισμός Fourier avr

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

Γρήγορος μετασχηματισμός Fourier

Ο Γρήγορος Μετασχηματισμός Fourier είναι ένας αλγόριθμος υπολογισμού που εκμεταλλεύεται με επιτυχία τις ιδιότητες περιοδικότητας των τριγωνομετρικών συναρτήσεων για να αποφύγει περιττούς υπολογισμούς στον διακριτό μετασχηματισμό Fourier (DFT), καθιστώντας έτσι ταχύτερη την εύρεση συντελεστών στην επέκταση Fourier. Η κύρια διαφορά από τη διακριτή μετατροπή είναι μόνο στη μέθοδο υπολογισμού αριθμητικών τιμών (αλγόριθμος) και όχι στην ίδια την επεξεργασία σήματος. Τόσο στην περίπτωση του FFT όσο και στην περίπτωση του DFT, το αποτέλεσμα των υπολογισμών είναι το ίδιο. Η μόνη απαίτηση για τον αλγόριθμο FFT είναι ένα μέγεθος δείγματος που είναι πολλαπλάσιο του N = 2L, όπου L είναι οποιοσδήποτε θετικός ακέραιος αριθμός. Οι πιο συνηθισμένοι αλγόριθμοι FFT βάσης-2 είναι: αποδεκατισμένος με χρόνο και αποδεκατισμένος με συχνότητα.

Σε αυτή την εργασία, υλοποιείται ένας αλγόριθμος FFT radix-2 με χρονική αραίωση (αλγόριθμος Cooley-Tukey). Είναι εύκολο να το αποκτήσετε μελετώντας ορισμένους νόμους του DFT. Ας εισαγάγουμε τον λεγόμενο συντελεστή περιστροφής:

Σε αυτήν την περίπτωση, στο DFT, οι συντελεστές Fourier για έναν αριθμό τιμών σήματος (f0,f1,…,fN-1) εκφράζονται με τη σχέση:

Θεωρήστε μια σειρά σημάτων 4 τιμών: (f0,f1,f2,f3). Ας παρουσιάσουμε τον μετασχηματισμό Fourier σε μορφή πίνακα (ο συντελεστής κανονικοποίησης 1/N περιλαμβάνεται στο διάνυσμα στήλης Cij στη δεξιά πλευρά της παράστασης):

Έχοντας γράψει τους συντελεστές περιστροφής χρησιμοποιώντας τον τύπο του Euler και προσδιορίσετε τις τιμές τους για k = 0, 1, 2,.. 9, μπορείτε να κατασκευάσετε ένα διάγραμμα (Εικ. 2), από το οποίο φαίνεται το μοτίβο των επαναλαμβανόμενων συντελεστών.

Σχήμα 2. Σειρά ισχύος w για N=4

Αντικαθιστώντας τις αριθμητικές τιμές σε (4) παίρνουμε:

Δηλαδή, οι τιμές του w, ξεκινώντας από το w4, είναι ίσες με την αντίστοιχη τιμή από το w0 έως το w3. Στη συνέχεια, ξαναγράφουμε την εξίσωση πίνακα (4) σε μια μη τυπική μορφή (παρόμοιες σημειώσεις εισάγονται για σαφήνεια περαιτέρω λειτουργιών):

Ας ανταλλάξουμε τις στήλες του πίνακα, χωρίζοντάς τον σε δύο ομάδες: με άρτιους δείκτες f0, f2 και περιττούς δείκτες f1, f3:

Ας λάβουμε υπόψη ότι wk+1 = wkw1, τότε η έκφραση (6) θα ξαναγραφεί ως εξής:

Χρησιμοποιώντας τις αναλογίες:

Λαμβάνουμε τους απαιτούμενους συντελεστές επέκτασης με τη μορφή ενός διανύσματος στήλης με τιμές κελιών:

Η γραφική αναπαράσταση του αλγορίθμου (Εικ. 3) μοιάζει με πεταλούδα με ανοιχτά φτερά, γι' αυτό και αυτή η μέθοδος υπολογισμού ονομάζεται «πεταλούδα».

Εικόνα 3. Γράφημα πεταλούδας για μια σειρά 4 όρων

Έτσι, στο πρώτο βήμα του αλγορίθμου, τα μέλη ενός αριθμού τιμών σήματος χωρίζονται σε ζυγούς και περιττούς δείκτες. Στη συνέχεια εκτελείται το γράφημα «πεταλούδα» που αποτελείται από δύο στάδια, ο αριθμός τους είναι ίσος με την ισχύ δύο του μεγέθους του δείγματος (N = 4 = 22). Σε κάθε στάδιο εκτελούνται δύο «πεταλούδες» και ο συνολικός αριθμός τους παραμένει αμετάβλητος. Κάθε πράξη πεταλούδας αντιστοιχεί σε μία λειτουργία πολλαπλασιασμού. Για σύγκριση: στο DFT με δειγματοληψία (f0,f1,f2,f3), η λειτουργία πολλαπλασιασμού θα πρέπει να εκτελεστεί 4×4 = 16 φορές και στην περίπτωση του FFT μόνο 4 φορές.

Αυτή η σειρά μπορεί επίσης να γραφτεί ως:

(2),
όπου , k-ο μιγαδικό πλάτος.

Η σχέση μεταξύ των συντελεστών (1) και (3) εκφράζεται με τους ακόλουθους τύπους:

Σημειώστε ότι και οι τρεις αυτές αναπαραστάσεις της σειράς Fourier είναι απολύτως ισοδύναμες. Μερικές φορές, όταν εργάζεστε με σειρές Fourier, είναι πιο βολικό να χρησιμοποιείτε εκθέτες του φανταστικού ορίσματος αντί για ημίτονο και συνημίτονο, δηλαδή να χρησιμοποιείτε τον μετασχηματισμό Fourier σε σύνθετη μορφή. Αλλά είναι βολικό για εμάς να χρησιμοποιήσουμε τον τύπο (1), όπου η σειρά Fourier παρουσιάζεται ως άθροισμα συνημιτόνων με τα αντίστοιχα πλάτη και φάσεις. Σε κάθε περίπτωση, είναι λάθος να πούμε ότι ο μετασχηματισμός Fourier ενός πραγματικού σήματος θα έχει ως αποτέλεσμα πολύπλοκα αρμονικά πλάτη. Όπως λέει σωστά το Wiki, "Ο μετασχηματισμός Fourier (;) είναι μια πράξη που συνδέει μια συνάρτηση μιας πραγματικής μεταβλητής με μια άλλη συνάρτηση, επίσης μια πραγματική μεταβλητή."

Σύνολο:
Η μαθηματική βάση για τη φασματική ανάλυση των σημάτων είναι ο μετασχηματισμός Fourier.

Ο μετασχηματισμός Fourier σάς επιτρέπει να αναπαραστήσετε μια συνεχή συνάρτηση f(x) (σήμα), που ορίζεται στο τμήμα (0, T) ως το άθροισμα ενός άπειρου αριθμού (άπειρης σειράς) τριγωνομετρικών συναρτήσεων (ημιτονοειδές και/ή συνημίτονο) με ορισμένες πλάτη και φάσεις, που λαμβάνονται επίσης υπόψη στο τμήμα (0, T). Μια τέτοια σειρά ονομάζεται σειρά Fourier.

Ας σημειώσουμε μερικά ακόμη σημεία, η κατανόηση των οποίων απαιτείται για τη σωστή εφαρμογή του μετασχηματισμού Fourier σε ανάλυση σήματος. Αν λάβουμε υπόψη τη σειρά Fourier (το άθροισμα των ημιτονοειδών) σε ολόκληρο τον άξονα Χ, μπορούμε να δούμε ότι έξω από το τμήμα (0, T) η συνάρτηση που αντιπροσωπεύεται από τη σειρά Fourier θα επαναλαμβάνει περιοδικά τη συνάρτησή μας.

Για παράδειγμα, στο γράφημα του Σχ. 7, η αρχική συνάρτηση ορίζεται στο τμήμα (-T\2, +T\2) και η σειρά Fourier αντιπροσωπεύει μια περιοδική συνάρτηση που ορίζεται σε ολόκληρο τον άξονα x.

Αυτό συμβαίνει επειδή τα ίδια τα ημιτονοειδή είναι περιοδικές συναρτήσεις και κατά συνέπεια το άθροισμά τους θα είναι περιοδική συνάρτηση.


Εικ.7 Αναπαράσταση μιας μη περιοδικής αρχικής συνάρτησης με μια σειρά Fourier

Ετσι:

Η αρχική μας συνάρτηση είναι συνεχής, μη περιοδική, που ορίζεται σε ένα συγκεκριμένο τμήμα μήκους T.
Το φάσμα αυτής της συνάρτησης είναι διακριτό, δηλαδή παρουσιάζεται με τη μορφή μιας άπειρης σειράς αρμονικών συνιστωσών - της σειράς Fourier.
Στην πραγματικότητα, η σειρά Fourier ορίζει μια συγκεκριμένη περιοδική συνάρτηση που συμπίπτει με τη δική μας στο τμήμα (0, T), αλλά για εμάς αυτή η περιοδικότητα δεν είναι σημαντική.

Οι περίοδοι των αρμονικών συνιστωσών είναι πολλαπλάσια της τιμής του τμήματος (0, T) στο οποίο ορίζεται η αρχική συνάρτηση f(x). Με άλλα λόγια, οι αρμονικές περίοδοι είναι πολλαπλάσιες της διάρκειας της μέτρησης του σήματος. Για παράδειγμα, η περίοδος της πρώτης αρμονικής της σειράς Fourier είναι ίση με το διάστημα T στο οποίο ορίζεται η συνάρτηση f(x). Η περίοδος της δεύτερης αρμονικής της σειράς Fourier είναι ίση με το διάστημα T/2. Και ούτω καθεξής (βλ. Εικ. 8).


Εικ.8 Περίοδοι (συχνότητες) των αρμονικών συνιστωσών της σειράς Fourier (εδώ T = 2;)

Αντίστοιχα, οι συχνότητες των αρμονικών συνιστωσών είναι πολλαπλάσια του 1/Τ. Δηλαδή, οι συχνότητες των αρμονικών συνιστωσών Fk είναι ίσες με Fk = k\T, όπου το k κυμαίνεται από 0 έως?, για παράδειγμα k = 0 F0 = 0; k=1 F1=1\T; k=2 F2=2\T; k=3 F3=3\T;… Fk= k\T (σε μηδενική συχνότητα - σταθερή συνιστώσα).

Έστω η αρχική μας συνάρτηση ένα σήμα που καταγράφεται κατά τη διάρκεια T=1 sec. Τότε η περίοδος της πρώτης αρμονικής θα είναι ίση με τη διάρκεια του σήματος μας T1=T=1 sec και η αρμονική συχνότητα θα είναι 1 Hz. Η περίοδος της δεύτερης αρμονικής θα είναι ίση με τη διάρκεια του σήματος διαιρούμενη με το 2 (T2=T/2=0,5 sec) και η συχνότητα θα είναι 2 Hz. Για την τρίτη αρμονική T3=T/3 sec και η συχνότητα είναι 3 Hz. Και ούτω καθεξής.

Το βήμα μεταξύ αρμονικών σε αυτή την περίπτωση είναι 1 Hz.

Έτσι, ένα σήμα με διάρκεια 1 δευτερολέπτου μπορεί να αποσυντεθεί σε αρμονικές συνιστώσες (λήψη φάσματος) με ανάλυση συχνότητας 1 Hz.
Για να αυξήσετε την ανάλυση κατά 2 φορές στα 0,5 Hz, πρέπει να αυξήσετε τη διάρκεια μέτρησης κατά 2 φορές - έως και 2 δευτερόλεπτα. Ένα σήμα διάρκειας 10 δευτερολέπτων μπορεί να αποσυντεθεί σε αρμονικές συνιστώσες (για να ληφθεί ένα φάσμα) με ανάλυση συχνότητας 0,1 Hz. Δεν υπάρχουν άλλοι τρόποι για να αυξήσετε την ανάλυση συχνότητας.

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

3. Διακριτά σήματα και διακριτός μετασχηματισμός Fourier

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

Το συνηθισμένο σχήμα για τη μέτρηση και την ψηφιοποίηση ενός σήματος έχει ως εξής.


Εικ.9 Διάγραμμα του καναλιού μέτρησης

Σήμα από μορφοτροπέα μέτρησηςφτάνει στο ADC κατά τη διάρκεια μιας χρονικής περιόδου T. Τα δείγματα σήματος (δειγματοληψία) που λαμβάνονται κατά τη διάρκεια του χρόνου T μεταφέρονται στον υπολογιστή και αποθηκεύονται στη μνήμη.


Εικ. 10 Ψηφιοποιημένο σήμα - Λήφθηκαν N δείγματα κατά τη διάρκεια του χρόνου T

Ποιες είναι οι απαιτήσεις για τις παραμέτρους ψηφιοποίησης σήματος; Μια συσκευή που μετατρέπει ένα αναλογικό σήμα εισόδου σε έναν διακριτό κωδικό ( ψηφιακό σήμα) ονομάζεται μετατροπέας αναλογικού σε ψηφιακό (ADC, Αγγλικά μετατροπέας αναλογικού σε ψηφιακό, ADC) (Wiki).

Μία από τις κύριες παραμέτρους του ADC είναι η μέγιστη συχνότητα δειγματοληψίας (ή ρυθμός δειγματοληψίας, ρυθμός δειγματοληψίας στα αγγλικά) - ο ρυθμός δειγματοληψίας ενός χρονικά συνεχούς σήματος κατά τη δειγματοληψία του. Μετριέται σε Hertz. ((Wiki))

Σύμφωνα με το θεώρημα του Kotelnikov, εάν ένα συνεχές σήμα έχει φάσμα που περιορίζεται από τη συχνότητα Fmax, τότε μπορεί να ανακατασκευαστεί πλήρως και ξεκάθαρα από τα διακριτά δείγματά του που λαμβάνονται σε χρονικά διαστήματα , δηλ. με συχνότητα Fd; 2*Fmax, όπου Fd είναι η συχνότητα δειγματοληψίας. Fmax - μέγιστη συχνότητα του φάσματος σήματος. Με άλλα λόγια, η συχνότητα ψηφιοποίησης του σήματος (συχνότητα δειγματοληψίας ADC) πρέπει να είναι τουλάχιστον 2 φορές μεγαλύτερη από τη μέγιστη συχνότητα του σήματος που θέλουμε να μετρήσουμε.

Τι θα συμβεί αν πάρουμε δείγματα με χαμηλότερη συχνότητα από αυτή που απαιτείται από το θεώρημα του Kotelnikov;

Σε αυτήν την περίπτωση, εμφανίζεται το φαινόμενο «aliasing» (γνωστό και ως στροβοσκοπικό φαινόμενο, φαινόμενο moiré), στο οποίο ένα σήμα υψηλής συχνότητας, μετά την ψηφιοποίηση, μετατρέπεται σε σήμα χαμηλής συχνότητας, το οποίο στην πραγματικότητα δεν υπάρχει. Στο Σχ. 5 κόκκινο ημιτονοειδές κύμα υψηλής συχνότητας είναι ένα πραγματικό σήμα. Ένα μπλε ημιτονοειδές χαμηλότερης συχνότητας είναι ένα πλασματικό σήμα που προκύπτει λόγω του γεγονότος ότι κατά τη διάρκεια του χρόνου δειγματοληψίας έχει χρόνο να περάσει περισσότερο από μισή περίοδος του σήματος υψηλής συχνότητας.


Ρύζι. 11. Η εμφάνιση ενός ψευδούς σήματος χαμηλής συχνότητας σε ανεπαρκώς υψηλό ρυθμό δειγματοληψίας

Για να αποφευχθεί το φαινόμενο aliasing, τοποθετείται ένα ειδικό φίλτρο anti-aliasing μπροστά από το ADC - ένα φίλτρο χαμηλής διέλευσης (LPF), το οποίο διέρχεται συχνότητες κάτω από τη μισή συχνότητα δειγματοληψίας ADC και διακόπτει τις υψηλότερες συχνότητες.

Για τον υπολογισμό του φάσματος ενός σήματος από τα διακριτά δείγματά του, χρησιμοποιείται ο διακριτός μετασχηματισμός Fourier (DFT). Ας σημειώσουμε για άλλη μια φορά ότι το φάσμα ενός διακριτού σήματος «εξ ορισμού» περιορίζεται από τη συχνότητα Fmax, η οποία είναι μικρότερη από τη μισή συχνότητα δειγματοληψίας Fd. Επομένως, το φάσμα ενός διακριτού σήματος μπορεί να αναπαρασταθεί από το άθροισμα ενός πεπερασμένου αριθμού αρμονικών, σε αντίθεση με το άπειρο άθροισμα για τη σειρά Fourier ενός συνεχούς σήματος, το φάσμα του οποίου μπορεί να είναι απεριόριστο. Σύμφωνα με το θεώρημα του Kotelnikov, η μέγιστη συχνότητα μιας αρμονικής πρέπει να είναι τέτοια ώστε να αντιστοιχεί σε τουλάχιστον δύο δείγματα, επομένως ο αριθμός των αρμονικών είναι ίσος με το ήμισυ του αριθμού των δειγμάτων ενός διακριτού σήματος. Δηλαδή, εάν υπάρχουν Ν δείγματα στο δείγμα, τότε ο αριθμός των αρμονικών στο φάσμα θα είναι ίσος με N/2.

Ας εξετάσουμε τώρα τον διακριτό μετασχηματισμό Fourier (DFT).

Συγκρίνοντας με τη σειρά Fourier

Βλέπουμε ότι συμπίπτουν, εκτός από το ότι ο χρόνος στο DFT είναι διακριτής φύσης και ο αριθμός των αρμονικών περιορίζεται κατά N/2 - το ήμισυ του αριθμού των δειγμάτων.

Οι τύποι DFT γράφονται σε αδιάστατες ακέραιες μεταβλητές k, s, όπου k είναι οι αριθμοί των δειγμάτων σήματος, s είναι οι αριθμοί των φασματικών συνιστωσών.
Η τιμή s δείχνει τον αριθμό των πλήρων αρμονικών ταλαντώσεων κατά την περίοδο T (διάρκεια μέτρησης σήματος). Ο διακριτός μετασχηματισμός Fourier χρησιμοποιείται για να βρεθούν τα πλάτη και οι φάσεις των αρμονικών χρησιμοποιώντας μια αριθμητική μέθοδο, π.χ. "στον υπολογιστη"

Επιστρέφοντας στα αποτελέσματα που ελήφθησαν στην αρχή. Όπως αναφέρθηκε παραπάνω, όταν επεκτείνουμε μια μη περιοδική συνάρτηση (το σήμα μας) σε μια σειρά Fourier, η σειρά Fourier που προκύπτει αντιστοιχεί στην πραγματικότητα σε μια περιοδική συνάρτηση με περίοδο T (Εικ. 12).


Εικ. 12 Περιοδική συνάρτηση f(x) με περίοδο T0, με περίοδο μέτρησης T>T0

Όπως φαίνεται στο Σχ. 12, η ​​συνάρτηση f(x) είναι περιοδική με περίοδο T0. Ωστόσο, λόγω του γεγονότος ότι η διάρκεια του δείγματος μέτρησης Τ δεν συμπίπτει με την περίοδο της συνάρτησης T0, η συνάρτηση που προκύπτει ως σειρά Fourier έχει ασυνέχεια στο σημείο Τ. Ως αποτέλεσμα, το φάσμα αυτής της συνάρτησης θα περιέχει ένας μεγάλος αριθμός αρμονικών υψηλής συχνότητας. Εάν η διάρκεια του δείγματος μέτρησης Τ συνέπιπτε με την περίοδο της συνάρτησης T0, τότε το φάσμα που λαμβάνεται μετά τον μετασχηματισμό Fourier θα περιέχει μόνο την πρώτη αρμονική (ημιτονοειδές με περίοδο ίση με τη διάρκεια δειγματοληψίας), αφού η συνάρτηση f(x) είναι ημιτονοειδής.

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

Ως αποτέλεσμα, εμφανίζονται αρμονικές στο φάσμα, οι οποίες θα πρέπει να συνοψίζουν το σχήμα της συνάρτησης, συμπεριλαμβανομένης αυτής της ασυνέχειας.

Έτσι, για να ληφθεί το «σωστό» φάσμα ενός σήματος, το οποίο είναι το άθροισμα πολλών ημιτονοειδών με διαφορετικές περιόδους, είναι απαραίτητο ένας ακέραιος αριθμός περιόδων κάθε ημιτονοειδούς να ταιριάζει στην περίοδο μέτρησης του σήματος. Στην πράξη, αυτή η προϋπόθεση μπορεί να ικανοποιηθεί για μια αρκετά μεγάλη διάρκεια μέτρησης σήματος.


Εικ. 13 Παράδειγμα της λειτουργίας και του φάσματος του σήματος κινηματικού σφάλματος του κιβωτίου ταχυτήτων

Με μικρότερη διάρκεια, η εικόνα θα φαίνεται "χειρότερη":


Εικ. 14 Παράδειγμα της λειτουργίας και του φάσματος ενός σήματος δόνησης ρότορα

Στην πράξη, μπορεί να είναι δύσκολο να κατανοήσουμε πού βρίσκονται τα «πραγματικά στοιχεία» και πού τα «τεχνουργήματα» που προκαλούνται από τις μη πολλαπλές περιόδους των εξαρτημάτων και τη διάρκεια της δειγματοληψίας σήματος ή τα «άλματα και σπασίματα» στο σχήμα του σήματος . Φυσικά, οι λέξεις «πραγματικά συστατικά» και «τεχνουργήματα» μπαίνουν σε εισαγωγικά για κάποιο λόγο. Η παρουσία πολλών αρμονικών στο γράφημα φάσματος δεν σημαίνει ότι το σήμα μας στην πραγματικότητα «αποτελείται» από αυτές. Αυτό είναι το ίδιο με το να πιστεύουμε ότι ο αριθμός 7 "αποτελείται" από τους αριθμούς 3 και 4. Ο αριθμός 7 μπορεί να αναπαρασταθεί ως το άθροισμα των αριθμών 3 και 4 - αυτό είναι σωστό.

Άρα το σήμα μας… ή μάλλον ούτε καν το «σήμα μας», αλλά μια περιοδική συνάρτηση που αποτελείται από την επανάληψη του σήματος μας (δειγματοληψία) μπορεί να αναπαρασταθεί ως άθροισμα αρμονικών (ημιτονοειδών κυμάτων) με συγκεκριμένα πλάτη και φάσεις. Αλλά σε πολλές περιπτώσεις που είναι σημαντικές για πρακτική (δείτε τα παραπάνω σχήματα), είναι πράγματι δυνατό να συσχετιστούν οι αρμονικές που λαμβάνονται στο φάσμα με πραγματικές διεργασίες που είναι κυκλικής φύσης και συμβάλλουν σημαντικά στο σχήμα του σήματος.

Μερικά αποτελέσματα

1. Ένα πραγματικό μετρημένο σήμα διάρκειας T δευτερολέπτων, ψηφιοποιημένο από ένα ADC, δηλαδή, που αντιπροσωπεύεται από ένα σύνολο διακριτών δειγμάτων (N τεμάχια), έχει ένα διακριτό μη περιοδικό φάσμα, που αντιπροσωπεύεται από ένα σύνολο αρμονικών (N/ 2 κομμάτια).

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

3. Ένα σήμα που μετράται σε ένα χρονικό διάστημα T προσδιορίζεται μόνο σε ένα χρονικό διάστημα T. Τι συνέβη πριν αρχίσουμε να μετράμε το σήμα, και τι θα συμβεί μετά από αυτό, είναι άγνωστο στην επιστήμη. Και στην περίπτωσή μας, δεν είναι ενδιαφέρον. Το DFT ενός χρονικά περιορισμένου σήματος δίνει το «αληθινό» του φάσμα, με την έννοια ότι, υπό ορισμένες συνθήκες, επιτρέπει σε κάποιον να υπολογίσει το πλάτος και τη συχνότητα των συνιστωσών του.

Υλικά που χρησιμοποιούνται και άλλα χρήσιμα υλικά.

Ως συσκευή προβολής χρησιμοποιείται μια ένδειξη LCD δύο χαρακτήρων. Το κύριο σημείο στην υλοποίηση αυτού του έργου δεν είναι το υλικό, αλλά το λογισμικό, πιο συγκεκριμένα η υλοποίηση του διακριτού μετασχηματισμού Fourier (DFT) σε έναν μικροελεγκτή 8 bit. Θα πρέπει να σημειωθεί αμέσως ότι ο συγγραφέας δεν είναι ειδικός σε αυτόν τον τομέα και επομένως ξεκίνησε με τα βασικά - με έναν απλό διακριτό μετασχηματισμό Fourier. Ο γρήγορος αλγόριθμος μετασχηματισμού Fourier δεν είναι μόνο γρήγορος, αλλά και αρκετά περίπλοκος.

Το Discrete Fourier Transform (στην αγγλική βιβλιογραφία DFT, Discrete Fourier Transform) είναι ένας από τους μετασχηματισμούς Fourier που χρησιμοποιούνται ευρέως σε αλγόριθμους επεξεργασίας ψηφιακών σημάτων (οι τροποποιήσεις του χρησιμοποιούνται στη συμπίεση ήχου σε MP3, στη συμπίεση εικόνας σε JPEG κ.λπ.), καθώς και σε άλλοι τομείς που σχετίζονται με την ανάλυση των συχνοτήτων σε ένα διακριτό (για παράδειγμα, ψηφιοποιημένο αναλογικό) σήμα. Ο διακριτός μετασχηματισμός Fourier απαιτεί μια διακριτή συνάρτηση ως είσοδο. Τέτοιες συναρτήσεις δημιουργούνται συχνά με δειγματοληψία (δειγματοληψία τιμών από συνεχείς συναρτήσεις).

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

Το ψηφιακό μέρος σχηματίζεται από έναν μικροελεγκτή και μια ένδειξη LCD συνδεδεμένη σε αυτό. Ο μικροελεγκτής είναι χρονισμένος από αντηχείο χαλαζία 16 MHz, η τάση τροφοδοσίας +5 V χρησιμοποιείται ως τάση αναφοράς για το ADC του μικροελεγκτή.
Ο δίαυλος δεδομένων της ένδειξης LCD συνδέεται στη θύρα C του μικροελεγκτή (γραμμές εισόδου/εξόδου PC0-PC3), ο δίαυλος ελέγχου συνδέεται στη θύρα D (PD5, PD6) του μικροελεγκτή. Η ένδειξη λειτουργεί σε λειτουργία 4 bit. Για τη ρύθμιση της αντίθεσης χρησιμοποιείται μεταβλητή αντίσταση με ονομαστική τιμή 4,7 kOhm. Για να εργαστείτε με την ένδειξη, δημιουργήθηκαν προσαρμοσμένα σύμβολα για την εμφάνιση 8 οριζόντιων στηλών του αναλυτή· αυτά τα προσαρμοσμένα σύμβολα καταλαμβάνουν και τα 64 Byte της μνήμης RAM της ένδειξης LCD.

Ο μικροελεγκτής λειτουργεί από έναν εξωτερικό συντονιστή χαλαζία 16 MHz.

Το αναλογικό μέρος της συσκευής είναι το πιο σημαντικό μέρος και είναι ένας προενισχυτής του σήματος του ηλεκτρικού μικροφώνου, η έξοδος του οποίου συνδέεται με το κανάλι ADC0 του ADC που είναι ενσωματωμένο στον μικροελεγκτή. Πρέπει να θέσουμε το μηδενικό επίπεδο στην είσοδο ADC στο μισό ακριβώς της τάσης αναφοράς, δηλ. 2,5 V. Σε αυτή την περίπτωση, μπορούμε να χρησιμοποιήσουμε το θετικό και το αρνητικό μισό κύμα του σήματος, αλλά το πλάτος του δεν πρέπει να υπερβαίνει το καθορισμένο όριο, δηλ. Το κέρδος πρέπει να ρυθμιστεί με ακρίβεια για να αποφευχθεί η υπερφόρτωση. Όλες οι παραπάνω προϋποθέσεις πληρούνται από ένα κοινό μικροκύκλωμα λειτουργικού ενισχυτή χαμηλής ισχύος.

Ο αλγόριθμος DFT είναι ελαφρώς πιο αργός σε σύγκριση με τον Γρήγορο Μετασχηματισμό Fourier. Αλλά ο αναλυτής φάσματος δεν απαιτεί υψηλή ταχύτητα και εάν μπορεί να παρέχει ρυθμό ενημέρωσης περίπου 30 καρέ ανά δευτερόλεπτο, αυτό θα είναι περισσότερο από αρκετό για να οπτικοποιήσει το φάσμα ενός ηχητικού σήματος. Σε κάθε περίπτωση, στην έκδοσή μας είναι δυνατό να επιτευχθεί ταχύτητα 100 καρέ ανά δευτερόλεπτο, αλλά αυτή είναι ήδη πολύ υψηλή τιμή παραμέτρου για μια ένδειξη LCD δύο γραμμών χαρακτήρων και δεν συνιστάται. Η συχνότητα δειγματοληψίας είναι 20 kHz για ένα διακριτό μετασχηματισμό Fourier 32 σημείων και επειδή το αποτέλεσμα του μετασχηματισμού είναι συμμετρικό, χρειάζεται μόνο να χρησιμοποιήσουμε το πρώτο μισό, δηλ. τα πρώτα 16 αποτελέσματα. Επομένως, μπορούμε να εμφανίσουμε το φάσμα συχνοτήτων έως και 10 kHz και η ανάλυση του αναλυτή είναι 10 kHz/16 = 625 Hz.

Ο συγγραφέας του σχεδίου έκανε προσπάθειες να αυξήσει την ταχύτητα των υπολογισμών DFT. Εάν αυτός ο μετασχηματισμός έχει N σημεία, τότε πρέπει να βρούμε τιμές N2/2 του ημιτονοειδούς και του συνημιτόνου. Για τον μετασχηματισμό των 32 σημείων μας πρέπει να βρούμε 512 τιμές ημιτονοειδούς και συνημιτονοειδούς. Όμως, πριν τα βρούμε, πρέπει να υπολογίσουμε τη γωνία (μοίρες), η οποία θα πάρει λίγο χρόνο CPU, γι' αυτό αποφασίστηκε να χρησιμοποιηθούν πίνακες τιμών για αυτούς τους υπολογισμούς. Κατά τον υπολογισμό στο πρόγραμμα μικροελεγκτή, δεν χρησιμοποιούνται αριθμοί κινητής υποδιαστολής και διπλής ακρίβειας, καθώς θα χρειαστεί περισσότερος χρόνος για την επεξεργασία σε έναν μικροελεγκτή 8 bit. Αντίθετα, οι τιμές στους πίνακες αναζήτησης χρησιμοποιούν ακέραια δεδομένα 16 bit πολλαπλασιαζόμενα επί 10000. Στη συνέχεια, μετά την εκτέλεση της μετατροπής, τα αποτελέσματα διαιρούνται με το 10000. Με αυτήν την προσέγγιση, είναι δυνατή η εκτέλεση 120 μετατροπών 32 σημείων ανά δεύτερον, το οποίο είναι υπεραρκετό για τις συσκευές μας.

Επίδειξη λειτουργίας αναλυτή φάσματος σε μικροελεγκτή ATmega32

Λήψεις

Πηγαίος κώδικας (πρόγραμμα μικροελεγκτή, πίνακες δεδομένων ημιτονίου, συνημιτόνου και γωνίας) -

  • Είναι σαφές ότι είναι δύσκολο να προχωρήσουμε περισσότερο από το φως και τη μουσική σε ένα AVR, οι παράμετροι δεν είναι σωστές. Ωστόσο, 120 μετατροπές 32 σημείων ανά δευτερόλεπτο μπορεί να είναι επαρκείς για τις περισσότερες εργασίες. Και μπορείτε, φυσικά, να πάρετε άλλο ένα δείγμα 625 Hz ή μάλλον να χάσετε τον ρυθμό ανανέωσης. Αξίζει να σημειωθεί ότι το MK θα αισθανθεί άσχημα· όσον αφορά τις επιδόσεις, δεν υπάρχουν πολλά άλλα που μπορείτε να καρφιτσώσετε πάνω του. Αλλά εδώ μπορείτε να οργανώσετε την έξοδο του αποτελέσματος χρησιμοποιώντας μεθόδους μεταφοράς δεδομένων υλικού. Τότε θα είναι ένας βοηθητικός μικροελεγκτής και ο κύριος θα λαμβάνει μόνο δεδομένα από αυτόν και θα τα επεξεργάζεται συμβατά με άλλες διεργασίες. Σε γενικές γραμμές, εξακολουθεί να εξαρτάται από τη συχνότητα του επεξεργαστή. Κάποτε ήταν δυνατό να υπερχρονιστεί το mega πάνω από 20 MHz, αλλά για αυτές τις εργασίες πιθανότατα θα έχουμε δυσλειτουργίες μόνο σε υψηλές συχνότητες. Η ιδέα είναι καλή, αν γράφονταν περισσότερα από τα μαθηματικά μέρη... είναι η υλοποίησή του στο MK
  • Έχω κάνει επίσης πιο ενδιαφέροντες αναλυτές: You Tube ή έκδοση σε έγχρωμη οθόνη LCD: Το You Tube βασίζεται στη διάσημη βιβλιοθήκη Chen :)
  • "Πρέπει να υπολογίσουμε τη γωνία (μοίρες)" Μπορεί κάποιος να μας πει με περισσότερες λεπτομέρειες πώς υπολογίζονται οι τιμές για αυτούς τους πίνακες;
  • Όλα είναι ξεκάθαρα με τον πίνακα ημιτονίων και συνημιτόνων. Δεν είναι σαφές πώς υπολογίζονται οι τιμές στον πίνακα βαθμού_αναζήτησης;

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

Έφτιαξα έναν μικρό αναλυτή φάσματος ήχου (0 - 10 kHz) από LCD 16x2 και μικροελεγκτή ATmega32. Ξεκίνησα με απλά DFT (Discrete Fourier Transform). Το FFT (Fast Fourier Transform) διαφέρει από το DFT μόνο σε μεγαλύτερη ταχύτητα και λίγο πιο σύνθετο αλγόριθμο, δεν το χρησιμοποίησα, ίσως το προσθέσω αργότερα.

Το DFT είναι αργό σε σύγκριση με το FFT. Ο αναλυτής φάσματος LCD μου δεν απαιτεί την υψηλή ταχύτητα που μπορεί να παρέχει το FFT και εάν η εικόνα στην οθόνη αλλάζει με ρυθμό περίπου 30 καρέ/δευτερόλεπτο, τότε αυτό είναι περισσότερο από αρκετό για να οπτικοποιήσετε το φάσμα ήχου. Αλλά μπορώ ήδη να πετύχω περίπου 100 fps, ωστόσο, δεν συνιστάται πολύ υψηλός ρυθμός ανανέωσης για μια οθόνη LCD. Η δειγματοληψία ήχου στα 20 kHz παράγει 32 σημεία DFT. Δεδομένου ότι το αποτέλεσμα μετασχηματισμού είναι συμμετρικό, χρειάζεται μόνο να χρησιμοποιήσω τα πρώτα 16 αποτελέσματα. Αντίστοιχα, η μέγιστη συχνότητα είναι 10 kHz. Έτσι, 10kHz/16 = 625Hz.

Προσπαθούσα να αυξήσω την ταχύτητα του υπολογισμού του DFT. Εάν υπάρχει ένα σημείο N DFT, τότε πρέπει να βρούμε το ημίτονο και συνημίτονο (N^2)/2. Για ένα DFT 32 σημείων, πρέπει να βρούμε το ημίτονο και το συνημίτονο του 512. Πριν βρούμε το ημίτονο και το συνημίτονο, πρέπει να βρούμε τη γωνία (μοίρες) που καταλαμβάνει λίγο χρόνο CPU. Για να γίνει αυτό, έφτιαξα πίνακες για ημιτονοειδή και συνημίτονο. Έκανα μεταβλητές ημιτονοειδούς και συνημιτόνου 16-bit πολλαπλασιάζοντας τις τιμές ημιτόνου και συνημιτόνου επί 10000. Μετά τη μετατροπή, πρέπει να διαιρέσω κάθε αποτέλεσμα με το 10000. Τώρα μπορώ να υπολογίσω 120 DFT 32 σημείων ανά δευτερόλεπτο, που είναι περισσότερο από αρκετά για έναν αναλυτή φάσματος.

Απεικόνιση

Χρησιμοποίησα προσαρμοσμένους χαρακτήρες LCD που φορτώθηκαν στα 64 Byte της ενσωματωμένης μνήμης LCD. Είδα ένα βίντεο στο διαδίκτυο όπου μια οθόνη LCD 16x2 χρησιμοποιείται ως οθόνη αναλυτή φάσματος και χρησιμοποίησα αυτήν την ιδέα.

ΕΙΣΑΓΩΓΗ ΗΧΟΥ

Ένα από τα πιο σημαντικά μέρη ενός αναλυτή φάσματος είναι η λήψη του σήματος από ένα ηλεκτρικό μικρόφωνο. Ιδιαίτερη προσοχή πρέπει να δοθεί στην ανάπτυξη προενισχυτήςγια μικρόφωνο. Πρέπει να ορίσουμε το μηδενικό επίπεδο στην είσοδο ADC και το μέγιστο επίπεδο ίσο με το μισό της τάσης τροφοδοσίας, δηλ. 2,5V. Μπορεί να τροφοδοτηθεί με τάση από -2,5V έως +2,5V. Ο προενισχυτής πρέπει να ρυθμιστεί έτσι ώστε να μην υπερβαίνει αυτά τα όρια. Χρησιμοποίησα έναν ενισχυτή LM324 ως προενισχυτή μικροφώνου.

Κατάλογος ραδιοστοιχείων

Ονομασία Τύπος Ονομασία Ποσότητα ΣημείωσηΚατάστημαΤο σημειωματάριό μου
Απεικόνιση
MK AVR 8-bit

ATmega32

1 Στο σημειωματάριο
Πυκνωτής22 pF2 Στο σημειωματάριο
Πυκνωτής0,1 μF1 Στο σημειωματάριο
Ηλεκτρολυτικό πυκνωτή100 μF1 Στο σημειωματάριο
Αντίσταση

100 Ohm

1 Στο σημειωματάριο
Αντίσταση trimmer4,7 kOhm1 Στο σημειωματάριο
Αντηχείο χαλαζία16 MHz1 Στο σημειωματάριο
οθόνη LCD16x21 Στο σημειωματάριο
μονάδα ισχύος5 V1 Στο σημειωματάριο
ΕΙΣΑΓΩΓΗ ΗΧΟΥ
U1 Τελεστικος ΕΝΙΣΧΥΤΗΣ

LM324

1 Στο σημειωματάριο
Γ1 Πυκνωτής1 μF1 Στο σημειωματάριο
Γ8 Πυκνωτής0,01 μF1 Στο σημειωματάριο
R1 Αντίσταση

220 kOhm

1 Στο σημειωματάριο
R2, R3 Αντίσταση

10 kOhm

2 Στο σημειωματάριο
R4, R9 Αντίσταση

1 kOhm

2 Στο σημειωματάριο
R5 Αντίσταση

Υπάρχουν πολλοί εξειδικευμένοι επεξεργαστές για επεξεργασία ψηφιακού σήματος (DSP), όπως ο DSP της σειράς Texas Instruments TMS320, ο οποίος περιλαμβάνει τόσο απλούς ακέραιους πυρήνες όσο και τέρατα όπως η υποοικογένεια της οικογένειας C6000 που επεξεργάζεται δεδομένα κινητής υποδιαστολής. Υπάρχει μια ολόκληρη σειρά ADSP από Αναλογικές Συσκευές (η οποία περιλαμβάνει το περισσότερο ή λιγότερο γενικό BlackFin), υπάρχουν επίσης περισσότερα απλές λύσειςαπό το MicroChip - dsPIC.

Ωστόσο, ένα εξειδικευμένο DSP είναι καλό, αλλά είναι πάντα τόσο απαραίτητο; Ναι, με μια τεράστια ροή πληροφοριών είναι απλά αναντικατάστατη, αλλά υπάρχουν και απλούστερες εργασίες επεξεργασίας. Συγκεκριμένα, με ενδιέφερε η εργασία της διπλής μετατροπής - το ηχητικό σήμα περιπλέκεται, λαμβάνοντας έτσι ένα φάσμα, μετά μπορούν να εκτελεστούν οποιεσδήποτε λειτουργίες στο φάσμα και η αντίστροφη μετατροπή μπορεί να πραγματοποιηθεί, λαμβάνοντας έτσι ένα επεξεργασμένο σήμα. Όλα αυτά πρέπει να γίνονται σε πραγματικό χρόνο και να έχουν ποιότητα όχι χαμηλότερη από την ποιότητα του τηλεφώνου.

Δεν είναι το έτος 2000, υπάρχουν λύσεις ενός τσιπ που βασίζονται σε πυρήνες ARM7/Cortex-M3 υψηλής απόδοσης που έχουν πέσει σημαντικά στην τιμή· είναι 32 bit, έχουν εφαρμογή υλικού μιας λειτουργίας πολλαπλασιασμού 32 bit (επιπλέον , σχεδόν μια λειτουργία πολλαπλασιασμού-συσσώρευσης DSP και αποτέλεσμα 64 bit), και το Cortex-M3 περιλαμβάνει επίσης διαίρεση υλικού.

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

Για σχεδόν οποιοδήποτε DSP, η εργασία που περιγράφεται παραπάνω είναι απλή και απλή. Πώς θα συμπεριφερθεί όμως σε αυτό ένας πυρήνας RISC γενικής χρήσης; Αν εξετάσουμε το AVR ή το PIC, τότε είναι απίθανο να είναι αρκετά. Τα 8 bit και η χαμηλή συχνότητα ρολογιού έχουν αποτέλεσμα. Ωστόσο, ο Elm-Chan έχει σχέδια στα οποία διεξάγει ένα FFT στο AVR και σχεδιάζει το φάσμα του σήματος. Ωστόσο, σε αυτή την περίπτωση, σε πραγματικό χρόνο, γίνεται απλώς οπτικοποίηση (με ελάχιστη ακρίβεια επεξεργασίας), και όχι πλήρης επεξεργασία σήματος με αποδεκτή ποιότητα ήχου.

Το LPC2146 επιλέχθηκε ως πειραματικό τσιπ, βασισμένο στον πυρήνα ARM7TDMI-S και με μέγιστη συχνότητα ρολογιού 60 MHz (στην πράξη, δεν λειτουργεί στα 72 ή και στα 84 MHz). Γιατί; Πρώτον, έχω μια πλακέτα εντοπισμού σφαλμάτων για αυτό, και δεύτερον, υπάρχει ένα ADC και ένα DAC επί του σκάφους, δηλ. απαιτείται ελάχιστη εξωτερική επένδυση.

Λίγη θεωρία

Πρώτα απ 'όλα, ήταν ενδιαφέρον να αξιολογήσουμε την απόδοση του FFT (Fast Fourier Transform) σε μικροελεγκτές ARM. Με βάση αυτήν την αξιολόγηση, μπορούμε να συμπεράνουμε εάν έχει αρκετή ταχύτητα για να επεξεργαστεί μια ροή δεδομένων ήχου και το σήμα με ποια συχνότητα δειγματοληψίας και πόσα κανάλια μπορούν να υποβληθούν σε επεξεργασία σε έναν τέτοιο μικροελεγκτή.

Με βάση τον μετασχηματισμό Fourier, μπορείτε να δημιουργήσετε έξυπνα φίλτρα (με πολύ ελκυστικά χαρακτηριστικά). Με ενδιέφεραν πρωτίστως τα προβλήματα αλλαγής του τόνου του σήματος (ανεβάζοντας και χαμηλώνοντας το φάσμα) και «αντανακλώντας» το φάσμα. Το τελευταίο απαιτείται στα ραδιόφωνα SDR για ακρόαση ραδιοφωνικών εκπομπών χαμηλότερης πλευρικής ζώνης LSB.

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

Υλοποίηση λογισμικού

Υπάρχουν πολλές εφαρμογές λογισμικού του FFT, ωστόσο έγραψα τη δική μου. Ο κύριος στόχος που επιδίωξα ήταν η βελτιστοποίηση του κώδικα για μια συγκεκριμένη αρχιτεκτονική. Πρώτον, εστίασα αμέσως στα 32-bit, δεύτερον, απαιτούνταν μόνο ακέραιοι υπολογισμοί και ήταν επιθυμητό να αποφευχθεί η λειτουργία διαίρεσης. Το να βρεις κάτι έτοιμο για να καλύψει αυτές τις απαιτήσεις είναι ήδη προβληματικό.

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

Το πιο σημαντικό είναι η απαίτηση για ακέραιους υπολογισμούς. Κατά τη διαδικασία υλοποίησης, υπήρξε ακόμη και ένα σφάλμα που προκάλεσε υπερχείλιση σε μία από τις μεταβλητές βρόχου 32-bit. Επιπλέον, δεν εμφανίστηκε σε όλα τα δεδομένα των δοκιμών, έτσι προκάλεσε πολύ πονοκέφαλο μέχρι να βρεθεί.

Συγκέντρωσα όλα τα κείμενα πηγής σε ένα αρχείο. Η υλοποίηση δεν είναι τελική, υπάρχουν διπλοί υπολογισμοί (δεν λαμβάνονται υπόψη η συμμετρία φάσματος και φάσης) και απαιτείται βελτιστοποίηση της χρήσης των buffer, καθώς επί του παρόντος χρησιμοποιούνται πάρα πολλοί για υπολογισμούς μνήμη τυχαίας προσπέλασης(σχεδόν 12 χιλιάδες για μετατροπή 1024 πόντων).

Πρώτες δοκιμές

Ρολό τυμπάνου: Δοκιμάζω την ταχύτητα μετατροπής για ένα δείγμα 1024 σημείων, η συχνότητα πυρήνα του επεξεργαστή είναι 60 MHz. Η δοκιμή πραγματοποιήθηκε σε έναν εξομοιωτή, επομένως δεν ισχυρίζεται ότι είναι 100% ακριβής, αλλά αυτό το αποτέλεσμα μπορεί να χρησιμοποιηθεί ως δείκτης (στην προηγούμενη εμπειρία μου, αν και ο εξομοιωτής είπε ψέματα, δεν ήταν πολλά). Δοκιμή της πρώτης έκδοσης του κώδικα, μεταγλωττιστής RealView MDK, επιλογή βελτιστοποίησης O3, λειτουργία δημιουργίας κώδικα ARM.

Αυτό που βλέπουμε λοιπόν:

6 ms για κάθε μετατροπή, για συνολικά λίγο περισσότερο από 12 ms για τη μετατροπή μετ' επιστροφής. Αποδεικνύεται ότι με συχνότητα δειγματοληψίας 44100 Hz (τυπική για ήχο) και δείγματα με ανάλυση έως και 16 bit, οι καθαροί υπολογισμοί θα χρειαστούν ~44*12ms = 528ms. Και αυτό είναι σε μια ενδιάμεση έκδοση του υλικολογισμικού, όταν ορισμένες βελτιστοποιήσεις κώδικα δεν έχουν ακόμη ολοκληρωθεί (σύμφωνα με εκτιμήσεις, ο αλγόριθμος μπορεί να επιταχυνθεί σχεδόν 2 φορές)! Κατά τη γνώμη μου, είναι απλώς ένας εξαιρετικός δείκτης.

Συνολικά, το φορτίο πυρήνα αναμένεται να είναι περίπου 50%, απομένει άλλο 50% για μετατροπές στο φάσμα και γενικά έξοδα κατά την εργασία με ADC, DAC και άλλες μεταφορές δεδομένων. Εάν χαμηλώσετε τη συχνότητα δειγματοληψίας στο επίπεδο «τηλέφωνο» (περίπου 4800-9600Hz), τότε το φορτίο πυρήνα θα είναι ακόμη χαμηλότερο (περίπου 15-30%).

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

Σίδερο

Για την πλατφόρμα δοκιμής, χρησιμοποιήσαμε μια πλακέτα ανάπτυξης Keil MCB2140 με ηχείο. Ένα καλώδιο Mini-Jack συγκολλάται για να συνδεθεί στη γραμμική έξοδο της συσκευής και συναρμολογείται μια απλή αλυσίδα εισόδου. Όπως ήδη αναφέρθηκε, η πλακέτα έχει ήδη ένα ηχείο συνδεδεμένο στην αναλογική έξοδο του μικροελεγκτή και υπάρχουν χειριστήρια (κουμπί και ποτενσιόμετρο).

Εδώ είναι ένα σκίτσο του κυκλώματος εισόδου:


Ο εντοπισμός σφαλμάτων του λογισμικού πραγματοποιήθηκε σε στάδια:

  1. Αποσφαλμάτωση όλων των απαραίτητων περιφερειακών: ADC, DAC, χρονόμετρα, ένδειξη LED.
  2. Δοκιμή με ψηφιοποίηση σήματος: Ψηφιοποιώ τα δεδομένα με την απαιτούμενη ταχύτητα και τα βάζω σε buffer, μετά εξάγω τα δεδομένα από το buffer και παίζω το σήμα. Εκείνοι. απλή μετατόπιση σήματος στο χρόνο, χωρίς μετασχηματισμούς. Σε αυτό το στάδιο δοκιμάζεται ο μηχανισμός εργασίας με 2 buffers, απαραίτητους για περαιτέρω εργασία.
  3. ΠΡΟΣ ΤΗΝ προηγούμενη έκδοσηΠροστίθενται άμεσοι και αντίστροφοι μετασχηματισμοί Fourier. Αυτή η δοκιμή επαληθεύει τελικά τη σωστή λειτουργία του κώδικα FFT, καθώς και τον έλεγχο ότι ο κωδικός ταιριάζει στη διαθέσιμη απόδοση.
  4. Μετά από αυτό, γίνεται ο κύριος σκελετός της εφαρμογής, μπορείτε να προχωρήσετε σε πρακτικές εφαρμογές.

Το πρόβλημα προέκυψε μετά την προσθήκη του FFT στον κωδικό: εμφανίστηκαν εξωγενείς θόρυβοι και σφυρίχτρες στο σήμα. Γενικά, αυτή η συμπεριφορά μου φάνηκε αρκετά περίεργη, γιατί... Χωρίς μετατροπή, το σήμα που περνούσε από την ψηφιακή διαδρομή παρέμεινε αρκετά καθαρό. Ο πρώτος λόγος για αυτό: μετά το αναλογικό κύκλωμα, το πλάτος του σήματος στο ADC δεν ήταν πλήρες (0-3,3V), αλλά μόνο εντός 0,5-2V στη μέγιστη ένταση της συσκευής αναπαραγωγής, ο δεύτερος: αρκετά ισχυρός θόρυβος λόγω ακέραιου αριθμού υπολογισμοί (+-1 μονάδα, η οποία αποδείχθηκε επαρκής για να προκαλέσει ηχητική παρεμβολή).

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

Εφαρμογή 1: αλλαγή του τόνου του σήματος

Η πλακέτα έχει ποτενσιόμετρο ( μεταβλητή αντίσταση), μπορεί να χρησιμοποιηθεί για έλεγχο. Σε αυτήν την περίπτωση, ρυθμίζει το φάσμα του σήματος να μετατοπίζεται πάνω-κάτω, αρκετά ώστε να «μεταμορφώσει» τις αγαπημένες σας συνθέσεις.

Δείτε τι συμβαίνει στον τομέα συχνότητας:


Σε αυτήν την περίπτωση, το αποτέλεσμα μετατροπής περιέχεται σε 2 buffer. Το ένα buffer είναι το πραγματικό μέρος και το άλλο είναι το φανταστικό μέρος. Η φυσική σημασία των αριθμών που λαμβάνονται σε αυτά: το πραγματικό μέρος περιέχει τις τιμές των αρμονικών, το φανταστικό μέρος περιέχει τη μετατόπιση φάσης για αυτές τις αρμονικές. Επιπλέον, όπως μπορείτε να δείτε, το αρχικό σήμα περιγράφεται από N-τιμές και μετά τη μετατροπή λαμβάνονται 2N-τιμές. Ο όγκος των πληροφοριών δεν αλλάζει και η διπλάσια αύξηση του όγκου των πληροφοριών συμβαίνει λόγω του γεγονότος ότι τα δεδομένα buffer έχουν πλεονασμό με τη μορφή διπλασιασμού των τιμών.




Μπλουζα