ntua-cvsp-lab / DSP_LabSupport

Here the students of the 2019-2020 DSP course can submit questions regarding the course to the teaching assistants.
7 stars 3 forks source link

[Lab2] Mέρος 4ο - Εφαρμογή Φίλτρου Wiener - Μιγαδικό Σήμα #66

Open chrisdim opened 4 years ago

chrisdim commented 4 years ago

Καλησπέρα, Θα ήθελα να ρωτήσω κάποια πράγματα αναφορικά με τον τύπο δεδομένων κατά την εφαρμογή του Wiener φίλτρου στο Μέρος 3. Αρχικά, να περιγράψω λίγο τη διαδικασία που ακολούθησα: [1] Απομονώνω ένα τμήμα 400 δειγμάτων ακινησίας και υπολογίζω το Pnoise με τον τύπο που μας δίνεται. [2] Χωρίζω το συνολικό σήμα σε παράθυρα των 400 δειγμάτων και υπολογίζω το Px με τον ίδιο τύπο. [3] Εφαρμόζω για κάθε παράθυρο Pd = Px - Pnoise (Pd = 0 στα αρνητικά) μετά Hwiener = Pd/(Pd+Pnoise). Πολλαπλασιάζω τον DFT του windowed σήματος με το Hwiener και αυτό που βρίσκω - έστω Output - του κάνω np.fft.ifft και μου δίνει τμήμα του σήματος wiener_sig [4] Στο τέλος συνενώνω όλα τα wiener_sig των 400 δειγμάτων σε ένα μεγάλο σήμα

Το πρόβλημα που αντιμετωπίζω είναι το εξής: To σήμα Output έχει μιγαδικές τιμές. Ως αποτέλεσμα όταν κάνω ifft το χρονικό σήμα που παίρνω έχει επίσης μιγαδικές τιμές. Έτσι αυτό που κάνω εν τέλει είναι να πλοτάρω μόνο το πραγματικό μέρος του κάτι το οποίο όμως νομίζω συνεπάγεται ότι χάνεται πληροφορία. Επίσης σε κάποιο τμήμα το σήμα μου λαμβάνει μηδενικές τιμές, οπότε όταν πάω να πλοτάρω τον log-STFT στο συγκεκριμένο σημείο μου βγάζει μια άσπρη λωρίδα και ένα Warning ότι προσπαθώ να υπολογίσω το log0. Το αξιοπερίεργο είναι ότι αυτή η λωρίδα δεν παρατηρείται στο τελυεταίο ερώτημα, κατά το οποίο εφαρμόζω την ίδια διαδικασία, αλλά σε σήματα τις επιλογής μου. Να σημειώσω επίσης ότι σε όλη την άσκηση όπου ζητείται STFT δεν προσδιορίζονται οι παράμετροι, δηλαδή το μήκος παραθύρου και το overlap, και αυθαίρετα επιλέγω window length = 400 samples, overlap = 200 samples. Πώς πρέπει να αντιμετωπίσω το πρόβλημα με τους μιγαδικούς και την άσπρη λωρίδα στον STFT; Ευχαριστώ πολύ, Χρήστος.

cgaroufis commented 4 years ago

Καλησπέρα,

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

Το δεύτερο είναι λογικό να συμβαίνει, δεδομένου ότι σε κάποιες ζώνες συχνοτήτων το βέλτιστο φίλτρο Wiener έχει απόκριση συχνότητας μηδενικού πλάτους. Κατά την οπτικοποίηση, εφόσον χρησιμοποιήσεις τελικά λογαριθμική κλίμακα, μπορείς να προσθέσεις στον STFT μια μικρή θετική σταθερά (τάξης μεγέθους 10^-4 ώστε να μην επηρεάζει το υπόλοιπο διάγραμμα) ώστε να μην εμφανίζεται το πρόβλημα αυτό.

Καλή συνέχεια, Χρήστος