\@writefile{lof}{\contentsline{figure}{\numberline{1}{\ignorespaces Το frame στο πεδίο του χρόνου πριν τροφοδοτηθεί σε συναρτήσεις\relax}}{4}{figure.caption.2}}
\@writefile{lof}{\contentsline{figure}{\numberline{1}{\ignorespaces Το frame στο πεδίο του χρόνου πριν τροφοδοτηθεί σε συναρτήσεις\relax}}{4}{figure.caption.2}}
\@writefile{lof}{\contentsline{figure}{\numberline{2}{\ignorespaces Μετάβαση στο πεδίο της συχνότητας με την συνάρτηση filterbank, συντελεστές MDCT \relax}}{4}{figure.caption.3}}
\@writefile{lof}{\contentsline{figure}{\numberline{2}{\ignorespaces Μετάβαση στο πεδίο της συχνότητας με την συνάρτηση filterbank, συντελεστές MDCT \relax}}{4}{figure.caption.3}}
\@writefile{lof}{\contentsline{figure}{\numberline{3}{\ignorespaces Η επιστροφή στο πεδίου του χρόνου μέσω της συνάρτησης iFilterbank\relax}}{4}{figure.caption.4}}
\@writefile{lof}{\contentsline{figure}{\numberline{3}{\ignorespaces Η επιστροφή στο πεδίου του χρόνου μέσω της συνάρτησης iFilterbank\relax}}{4}{figure.caption.4}}
\@writefile{lof}{\contentsline{figure}{\numberline{4}{\ignorespaces Κοινό διάγραμμα αρχικού σήματος με το σήμα εξόδου της iFilterbank\relax}}{5}{figure.caption.5}}
\@writefile{lof}{\contentsline{figure}{\numberline{4}{\ignorespaces Κοινό διάγραμμα αρχικού σήματος με το σήμα εξόδου της iFilterbank\relax}}{4}{figure.caption.5}}
\@writefile{lof}{\contentsline{figure}{\numberline{5}{\ignorespaces Κοινό διάγραμμα αρχικού σήματος με το σήμα εξόδου της iAACoder2\relax}}{6}{figure.caption.6}}
\@writefile{lof}{\contentsline{figure}{\numberline{5}{\ignorespaces Κοινό διάγραμμα αρχικού σήματος με το σήμα εξόδου της iAACoder2\relax}}{6}{figure.caption.6}}
\newlabel{ref:2}{{5}{6}{Κοινό διάγραμμα αρχικού σήματος με το σήμα εξόδου της iAACoder2\relax}{figure.caption.6}{}}
\newlabel{ref:2}{{5}{6}{Κοινό διάγραμμα αρχικού σήματος με το σήμα εξόδου της iAACoder2\relax}{figure.caption.6}{}}
\@writefile{lof}{\contentsline{figure}{\numberline{6}{\ignorespaces Κατώφλι ακουστότητας για το αριστερό κανάλι του 2ου frame\relax}}{7}{figure.caption.7}}
\@writefile{lof}{\contentsline{figure}{\numberline{6}{\ignorespaces Κατώφλι ακουστότητας για το αριστερό κανάλι του 2ου frame\relax}}{7}{figure.caption.7}}
\newlabel{ref:6}{{6}{7}{Κατώφλι ακουστότητας για το αριστερό κανάλι του 2ου frame\relax}{figure.caption.7}{}}
\newlabel{ref:6}{{6}{7}{Κατώφλι ακουστότητας για το αριστερό κανάλι του 2ου frame\relax}{figure.caption.7}{}}
\@writefile{lof}{\contentsline{figure}{\numberline{7}{\ignorespaces Signal to Mask Ratio για το αριστερό κανάλι του 2ου frame\relax}}{7}{figure.caption.8}}
\newlabel{ref:10}{{7}{7}{Signal to Mask Ratio για το αριστερό κανάλι του 2ου frame\relax}{figure.caption.8}{}}
\title{Συστήματα Πολυμέσων και Εικονική Πραγματικότητα\\
\title{Συστήματα Πολυμέσων και Εικονική Πραγματικότητα\\
Εργασία 2018-2019}
Εργασία 2018-2019}
\author{Χριστίνα Θεοδωρίδου - 8055\\
\author{Χριστίνα Θεοδωρίδου - 8055\\
Aποστόλης Φανάκης- αεμ}
Aποστόλης Φανάκης- 8261}
\date{\today}
\date{\today}
\pagestyle{fancy}
\pagestyle{fancy}
@ -46,7 +46,7 @@
\newpage
\newpage
\section{Εισαγωγή}
\section{Εισαγωγή}
Στην εργασία αυτή παρουσιάζεται μια απλοποιημένη εκδοχή του κωδικοποιητή και αποκωδικοποιητή AAC. Στην παρούσα αναφορά, περιγράφεται ο τρόπος υλοποίησης των βαθμίδων στο MATLAB και ο τρόπος χρήσης των συναρτήσεων από τις οποίες αποτελούνται, μαζί με κάποια ενδεικτικά αποτελέσματα.
Στην εργασία αυτή παρουσιάζεται μια απλοποιημένη εκδοχή του κωδικοποιητή και αποκωδικοποιητή AAC. Στην παρούσα αναφορά, περιγράφεται ο τρόπος υλοποίησης των βαθμίδων στο MATLAB και ο τρόπος χρήσης των συναρτήσεων από τις οποίες αποτελούνται, μαζί με κάποια ενδεικτικά αποτελέσματα. Το αρχείο που χρησιμοποιήθηκε για τα πειράματα είναι το δοσμένο 'LicorDeCalandraca.wav', το οποίο είναι δειγματοληπτημένο στα 48KHz και έχει 2 κανάλια. Τέλος, κατά την εκτέλεση των προγραμμάτων χρησιμοποιούνται οι συναρτήσεις mdct4 και imdct4 οι οποίες έχουν ληφθεί από προτεινόμενη ιστοσελίδα. \footnote{http://www.ee.columbia.edu/\~marios/mdct/mdct\_giraffe.html}
\section{1o Επίπεδο}
\section{1o Επίπεδο}
@ -56,26 +56,29 @@
Η πρώτη συνάρτηση που υλοποιήθηκε αφορά την βαθμίδα Sequence Segmentation Control, και σκοπός της είναι να καθορίσει τον τύπο ενός frame. Το πρώτο όρισμά της είναι ένας πίνακας 2048x2 , που περιέχει 2 κανάλια ήχου στο χρόνο, του frame του οποίου τον τύπο θέλουμε να διαπιστώσουμε. Αντίστοιχα, το δεύτερο όρισμα περιέχει τα κανάλια του του αμέσως επόμενου frame ενώ το τρίτο, αφορά τον τύπο του αμέσως προηγούμενου frame, ο οποίος μπορεί να πάρει 1 από τις αλφαριθμητικές τιμές "OLS" (ONLY\_LONG\_SEQUENCE), "LSS" (LONG\_START\_SEQUENCE), "ESH" (EIGHT\_SHORT\_SEQUENCE) και "LPS" (LONG\_STOP\_SEQUENCE) , ανάλογα το περιεχόμενο του.
Η πρώτη συνάρτηση που υλοποιήθηκε αφορά την βαθμίδα Sequence Segmentation Control, και σκοπός της είναι να καθορίσει τον τύπο ενός frame. Το πρώτο όρισμά της είναι ένας πίνακας 2048x2 , που περιέχει 2 κανάλια ήχου στο χρόνο, του frame του οποίου τον τύπο θέλουμε να διαπιστώσουμε. Αντίστοιχα, το δεύτερο όρισμα περιέχει τα κανάλια του του αμέσως επόμενου frame ενώ το τρίτο, αφορά τον τύπο του αμέσως προηγούμενου frame, ο οποίος μπορεί να πάρει 1 από τις αλφαριθμητικές τιμές "OLS" (ONLY\_LONG\_SEQUENCE), "LSS" (LONG\_START\_SEQUENCE), "ESH" (EIGHT\_SHORT\_SEQUENCE) και "LPS" (LONG\_STOP\_SEQUENCE) , ανάλογα το περιεχόμενο του.
Για να αποφανθούμε για τον τύπο του frame, εξετάζεται το αμέσως επόμενο frame, δηλαδή το frame $i+1$. Τα βήματα που ακολουθούνται είναι τα εξής:
\begin{enumerate}
Tα frame τα οποία είναι στατικά χαρακτηρίζονται ως 'OLS' ενώ τα frames με διακυμάνσεις ως 'ESH'. Τα μεταβατικά παράθυρα μεταξύ αυτών των κύριων κατηγοριών είναι τα 'LSS' και 'LPS'. Ο τρόπος με τον οποίον γίνεται η κατηγοριοποίηση περιγράφεται αναλυτικά στο πρότυπο του AAC. Γενικά, με τα βήματα που ακολουθούνται εξάγεται αρχικά ένα συμπέρασμα για κάθε κανάλι ξεχωριστά και έπειτα με μια συνδυαστική λογική που επίσης περιγράφεται στο πρότυπο, γίνεται ο συνδυασμός των αποφάσεων για να προκύψει ο τελικός τύπος του παραθύρου.
\item Τα δείγματά του, παιρνούν από το υψιπερατό φίλτρο
$ H(z)=\frac{0.7548-0.7548z^{-1}}{1-0.5095z^{-1}}$, με την βοήθεια της συνάρτησης filter.
% εξετάζεται το αμέσως επόμενο frame, δηλαδή το frame $i+1$. Τα βήματα που ακολουθούνται είναι τα εξής:
\item Για κάθε μία από τις 8 υποπεριοχές του (subframes), υπολογίζεται η ενέργειά τους $s_{l}^{2}$, $(l =0,..,7)$ , δηλαδή το άθροισμα των τετραγώνων των δειγμάτων τους, και αποθηκεύεται στο energyEstimations.
%\begin{enumerate}
\item Υπολογίζονται τα attack values $ds_{l}^{2}=\frac{s_{l}^{2}}{(1/l)\cdot\Sigma_{k=0}^{l-1} s_{k}^{2}}$ και αποθηκεύονται στο energyRatios.
%\item Τα δείγματά του, παιρνούν από το υψιπερατό φίλτρο
\item Το frame $i+1$ θα είναι "ESH" εάν ισχύουν ταυτόχρονα:
%$ H(z)=\frac{0.7548-0.7548z^{-1}}{1-0.5095z^{-1}}$, με την βοήθεια της συνάρτησης filter.
\begin{itemize}
%\item Για κάθε μία από τις 8 υποπεριοχές του (subframes), υπολογίζεται η ενέργειά τους $s_{l}^{2}$, $(l =0,..,7)$ , δηλαδή το άθροισμα των τετραγώνων των δειγμάτων τους, και αποθηκεύεται στο energyEstimations.
\item$s_{l}^{2} > 10^{-3}$
%\item Υπολογίζονται τα attack values $ds_{l}^{2}=\frac{s_{l}^{2}}{(1/l)\cdot\Sigma_{k=0}^{l-1} s_{k}^{2}}$ και αποθηκεύονται στο energyRatios.
\item$ds_{l}^{2} > 10$
%\item Το frame $i+1$ θα είναι "ESH" εάν ισχύουν ταυτόχρονα:
\end{itemize}
%\begin{itemize}
\end{enumerate}
%\item$s_{l}^{2} > 10^{-3}$
%\item$ds_{l}^{2} > 10$
Ανάλογα με την ισχύ ή όχι των παραπάνω συνθηκών και δεδομένου του τύπου του προηγούμενου frame, είναι δυνατή η απόφαση του τύπου του frame i, με τη λογική που παρουσιάζεται στο πρότυπο και την εκφώνηση της εργασίας. Για αυτό τον λόγο, στη συνέχεια, συγκρίνονται οι τύποι του επόμενου και του προηγούμενου frame και λαμβάνεται η απόφαση για τον τύπου του κάθε καναλιού. Για την απόφαση του τύπου ολόκληρου του frame, είναι απαραίτητος ο συνδυασμός των αποφάσεων των τύπων των δύο καναλιών σύμφωνα και πάλι με δοθείσα λογική.
%\end{itemize}
%\end{enumerate}
% Ανάλογα με την ισχύ ή όχι των παραπάνω συνθηκών και δεδομένου του τύπου του προηγούμενου frame, είναι δυνατή η απόφαση του τύπου του frame i, με τη λογική που παρουσιάζεται στο πρότυπο και την εκφώνηση της εργασίας. Για αυτό τον λόγο, στη συνέχεια, συγκρίνονται οι τύποι του επόμενου και του προηγούμενου frame και λαμβάνεται η απόφαση για τον τύπου του κάθε καναλιού. Για την απόφαση του τύπου ολόκληρου του frame, είναι απαραίτητος ο συνδυασμός των αποφάσεων των τύπων των δύο καναλιών σύμφωνα και πάλι με δοθείσα λογική.
Η συνάρτηση αυτή αφορά την βαθμίδα filterbank και έχει ως ορίσματα ένα frame ήχου 2048x2, τον τύπο του καθώς και τον τύπο παραθύρου που θα χρησιμοποηθεί. Η δε έξοδός του, είναι η αναπαράσταση του ίδιου του frame στο πεδίο της συχνότητας, σε όρους MDCT. Στην περίπτωση που το frame είναι τύπου "ESH", η συνάρτηση θα επιστρέφει 8 υποπίνακες 128x2 με τους συντελεστές του MDCT, έναν για κάθε subframe ενώ σε άλλη περίπτωση, θα επιστρέφει έναν πίνακα 1024x2.
Η συνάρτηση αυτή αφορά την βαθμίδα filterbank και έχει ως ορίσματα ένα frame ήχου 2048x2, τον τύπο του καθώς και τον τύπο παραθύρου που θα χρησιμοποηθεί. Η δε έξοδός του, είναι η αναπαράσταση του ίδιου του frame στο πεδίο της συχνότητας, σε όρους MDCT. Στην περίπτωση που το frame είναι τύπου "ESH", η συνάρτηση θα επιστρέφει 8 υποπίνακες 128x2 με τους συντελεστές του MDCT, έναν για κάθε subframe ενώ σε άλλη περίπτωση, θα επιστρέφει έναν πίνακα 1024x2.
Για να γίνει η μετάβαση αυτή ακολουθείται η διαδικασία που περιγράφεται στο πρότυπο. Αρχικά, στην υλοποιημένη συνάρτηση, δημιουργούνται οι τύποι των παραθύρων "KBD"και "SIN" που θα χρησιμοποιηθούν αργότερα, σε εκδοχές short και long για subframes και frames μήκους 256 και 2048 αντίστοιχα. Στη συνέχεια, σύμφωνα με το frameType και winType που δίνονται, εφαρμόζεται στο frameT το κατάλληλο παράθυρο, με τον τρόπο που υποδεικνύεται στην εκφώνηση και καλείται η συνάρτηση mdct4 \footnote{http://www.ee.columbia.edu/\~marios/mdct/mdct\_giraffe.html}έτσι ώστε να ληφθούν οι συντελεστές MDCT.
Για να γίνει η μετάβαση αυτή ακολουθείται η διαδικασία που περιγράφεται στο πρότυπο. Αρχικά, στην υλοποιημένη συνάρτηση, δημιουργούνται οι τύποι των παραθύρων "KBD"και "SIN" που θα χρησιμοποιηθούν αργότερα, σε εκδοχές short και long για subframes και frames μήκους 256 και 2048 αντίστοιχα. Στη συνέχεια, σύμφωνα με το frameType και winType που δίνονται, εφαρμόζεται στο frameT το κατάλληλο παράθυρο, με τον τρόπο που υποδεικνύεται στην εκφώνηση και καλείται η συνάρτηση mdct4 έτσι ώστε να ληφθούν οι συντελεστές MDCT.
Στην περίπτωση που ο τύπος του frame είναι "ESH", πρώτα το χωρίζουμε σε 8 subframes και έπειτα εφαρμόζουμε την παραθυροποίηση και τον mdct.
Στην περίπτωση που ο τύπος του frame είναι "ESH", πρώτα το χωρίζουμε σε 8 subframes και έπειτα εφαρμόζουμε την παραθυροποίηση και τον mdct.
@ -107,7 +110,7 @@
Στην συνάρτηση αυτή, επιδεικνύεται η λειτουργία του κωδικοποιητή και του αποκωδικοποιητή και επιστρέφεται ο σηματοθορυβικός λόγος των εξόδων τους. Δέχεται ως ορίσματα το path του αρχείου που επιθυμούμε να κωδικοποιήσουμε και το όνομα που θα του δοθεί μετά την αποκωδικοποίηση. Για την εύρεση του σηματοθορυβικού λόγου χρησιμοποιείται η συνάρτηση του MATLAB snr.
Στην συνάρτηση αυτή, επιδεικνύεται η λειτουργία του κωδικοποιητή και του αποκωδικοποιητή και επιστρέφεται ο σηματοθορυβικός λόγος των εξόδων τους. Δέχεται ως ορίσματα το path του αρχείου που επιθυμούμε να κωδικοποιήσουμε και το όνομα που θα του δοθεί μετά την αποκωδικοποίηση. Για την εύρεση του σηματοθορυβικού λόγου χρησιμοποιείται η συνάρτηση του MATLAB snr.
Παρακάτω φαίνεται η λειτουργία των παραπάνω συναρτήσεων στο 2ο frame του δείγματος ήχου "LicorDeCalandraca.wav" που δίνεται. Ο λόγος του SNR είναι 301.6522 dB.
Παρακάτω φαίνεται η λειτουργία των παραπάνω συναρτήσεων στο 2ο frame του κομματιού. Ο λόγος του SNR είναι 301.6522 dB.
\begin{figure}[H]
\begin{figure}[H]
@ -198,8 +201,10 @@ H συνάρτηση αυτή επιδεικνύει την κωδικοποίη
Υλοποιεί την βαθμίδα του ψυχοακουστικού μοντέλου για ένα κανάλι. Δέχεται ως είσοδο το frame στο πεδίο του χρόνου, τον τύπο του και τα 2 προηγούμενα του frames στο ίδιο κανάλι. Σαν έξοδο επιστρέφει τον λόγο σήματος προς μάσκα (Signal to Mask Ratio - SMR).
Υλοποιεί την βαθμίδα του ψυχοακουστικού μοντέλου για ένα κανάλι. Δέχεται ως είσοδο το frame στο πεδίο του χρόνου, τον τύπο του και τα 2 προηγούμενα του frames στο ίδιο κανάλι. Σαν έξοδο επιστρέφει τον λόγο σήματος προς μάσκα (Signal to Mask Ratio - SMR).
Ακολουθώντας την διαδικασία που περιγράφεται στο πρότυπο, βρίσκουμε το κατώφλι ακουστότητας που φαίνεται στο \ref{ref:9} ενώ στο \ref{ref:10} φαίνεται το SMR.
Πρώτα αρχικοποιήσαμε τους πίνακες TNS από το πρότυπο και στη συνέχεια υπολογίσαμε όλα τα πιθανά αποτελέσματα της spreading \textit{function} και το παράθυρο Hann, τόσο για long όσο και για short frames. Στη συνέχεια, πολλαπλασιάστηκε το κατάλληλο παράθυρο στο frame i, i-1, i-2 και υπολογίστηκε ο FFT , το πλάτος και η φάση για κάθε ένα από αυτά τα frames. Έπειτα, γίνεται πρόβλεψη για το πλάτος και την φάση του frame, όπως υποδεικνύεται στην εκφώνηση και υπολογίζεται η προβλεψιμότητα του. Υπολογίζοντας την ενέργεια και τη βεβαρυμένη προβλεψιμότητα για κάθε μπάντα μπορούμε να τις συνδυάσουμε με την spreading \textit{function} και να κανονικοποιήσουμε το αποτέλεσμα ώστε να εξάγουμε από αυτό τον δείκτη τονικότητας. Βρίσκουμε το SNR, το μετατρέπουμε σε λόγο ενέργειας, όπως υποδεικνύεται, και υπολογίζουμε το κατώφλι ενέργειας. Τέλος, υπολογίζουμε το επίπεδο θορύβου σε κάθε μπάντα και το SMR.
%Πρώτα αρχικοποιήσαμε τους πίνακες TNS από το πρότυπο και στη συνέχεια υπολογίσαμε όλα τα πιθανά αποτελέσματα της spreading function και το παράθυρο Hann, τόσο για long όσο και για short frames. Στη συνέχεια, πολλαπλασιάστηκε το κατάλληλο παράθυρο στο frame i, i-1, i-2 και υπολογίστηκε ο FFT , το πλάτος και η φάση για κάθε ένα από αυτά τα frames. Έπειτα, γίνεται πρόβλεψη για το πλάτος και την φάση του frame, όπως υποδεικνύεται στην εκφώνηση και υπολογίζεται η προβλεψιμότητα του. Υπολογίζοντας την ενέργεια και τη βεβαρυμένη προβλεψιμότητα για κάθε μπάντα μπορούμε να τις συνδυάσουμε με την spreading function και να κανονικοποιήσουμε το αποτέλεσμα ώστε να εξάγουμε από αυτό τον δείκτη τονικότητας. Βρίσκουμε το SNR, το μετατρέπουμε σε λόγο ενέργειας, όπως υποδεικνύεται, και υπολογίζουμε το κατώφλι ενέργειας. Τέλος, υπολογίζουμε το επίπεδο θορύβου σε κάθε μπάντα και το SMR.
\begin{figure}[H]
\begin{figure}[H]
\centering
\centering
@ -209,12 +214,22 @@ H συνάρτηση αυτή επιδεικνύει την κωδικοποίη
Υπολογίζει εσωτερικά το κατώφλι ακουστότητας T(b) και υλοποιεί τη βαθμίδα του κβαντιστή για κάθε κανάλι. Δέχεται ως εισόδους το frame στο πεδίο της συχνότητας σε όρους συντελεστών MDCT, τον τύπο του και το υπολογισμένο SMR. Σαν έξοδο επιστρέφει τον πίνακα s που περιέχει τα σύμβολα κβάντισης των συντελεστών ΜDCT του frame, τον πίνακα sfc με τις τιμές των Scalefactor για κάθε Scalefactor band και το G που είναι το global gain του frame.
Υπολογίζει εσωτερικά το κατώφλι ακουστότητας T(b) και υλοποιεί τη βαθμίδα του κβαντιστή για κάθε κανάλι. Δέχεται ως εισόδους το frame στο πεδίο της συχνότητας σε όρους συντελεστών MDCT, τον τύπο του και το υπολογισμένο SMR. Σαν έξοδο επιστρέφει τον πίνακα s που περιέχει τα σύμβολα κβάντισης των συντελεστών ΜDCT του frame, τον πίνακα sfc με τις τιμές των Scalefactor για κάθε Scalefactor band και το G που είναι το global gain του frame.
Βρίσκουμε αρχικά το κατώφλι ακουστότητας και έπειτα ακολουθώντας τα βήματα που υποδεικνύονται, αρχικά υπολογίζεται μια τιμή του συντελεστή Scalefactor Gain και υπολογίζεται το σφάλμα. Στη συνέχεια αυξάνεται σταδιακά ο συντελεστής και υπολογίζεται και πάλι το σφάλμα μέχρι να φτάσουμε το κατώφλι ακουστότητας.
%Βρίσκουμε αρχικά το κατώφλι ακουστότητας και έπειτα ακολουθώντας τα βήματα που υποδεικνύονται, αρχικά υπολογίζεται μια τιμή του συντελεστή Scalefactor Gain και υπολογίζεται το σφάλμα. Στη συνέχεια αυξάνεται σταδιακά ο συντελεστής και υπολογίζεται και πάλι το σφάλμα μέχρι να φτάσουμε το κατώφλι ακουστότητας.
Η συνάρτηση παίρνει ως είσοδο τους συντελεστές MDCT που φαίνονται στο \ref{ref:3}
Η συνάρτηση παίρνει ως είσοδο τους συντελεστές MDCT που φαίνονται στο \ref{ref:3}
\begin{figure}[H]
\begin{figure}[H]
@ -266,13 +281,10 @@ H συνάρτηση αυτή επιδεικνύει την κωδικοποίη
Υλοποιεί έναν κωδικοποιητή ο οποίος δέχεται σαν είσοδο το path του αρχείου το οποίο πρόκειται να κωδικοποιηθεί και το path του .mat αρχείου που πρόκειται να εγγραφεί μετά την κωδικοποίηση. Ως έξοδο, επιστρέφει ένα struct το οποίο περιέχει για κάθε frame, όπως και πριν τον τύπο του και το παράθυρο που χρησιμοποιήθηκε,ενώ για κάθε κανάλι επιστρέφει τους κβαντισμένους συντελεστές TNS, τα κατώφλια ακουστότητας λόγω του ψυχοακουστικού μοντέλου, τα κβαντισμένα global gains, τους κωδικοποιημένους με Huffman κβαντισμένους συντελεστές MDCT και scalefactors και το Huffman codebook.
Υλοποιεί έναν κωδικοποιητή ο οποίος δέχεται σαν είσοδο το path του αρχείου το οποίο πρόκειται να κωδικοποιηθεί και το path του .mat αρχείου που πρόκειται να εγγραφεί μετά την κωδικοποίηση. Ως έξοδο, επιστρέφει ένα struct με διάσταση k x 1, όπου k, ο αριθμός των frames του αρχείου, το οποίο περιέχει για κάθε frame, όπως και πριν τον τύπο του και το παράθυρο που χρησιμοποιήθηκε,ενώ για κάθε κανάλι επιστρέφει τους κβαντισμένους συντελεστές TNS, τα κατώφλια ακουστότητας λόγω του ψυχοακουστικού μοντέλου, τα κβαντισμένα global gains, τους κωδικοποιημένους με Huffman κβαντισμένους συντελεστές MDCT και scalefactors και το Huffman codebook.
Φορτώνει αρχικά τους πίνακες TNS, διαβάζει το αρχείο προς κωδικοποίηση και αφού το χωρίσει σε frames χρησιμοποεί στη συνέχεια τις συναρτήσεις SSC, filterbank, TNS, psycho, AACquantizer και encodeHuff για να το κωδικοποίησει. Τα αποτελέσματα φαίνονται παρακάτω:
Φορτώνει αρχικά τους πίνακες TNS, διαβάζει το αρχείο προς κωδικοποίηση και αφού το χωρίσει σε frames χρησιμοποεί στη συνέχεια τις συναρτήσεις SSC, filterbank, TNS, psycho, AACquantizer και encodeHuff για να το κωδικοποίησει. Τα αποτελέσματα φαίνονται παρακάτω:
<< ΓΡΑΦΗΜΑ >>
\subsection{\textit{function} x = iAACoder3(AACSeq3, fNameOut)}
\subsection{\textit{function} x = iAACoder3(AACSeq3, fNameOut)}
Υλοποιεί τον αντίστοιχο αποκωδικοποιητή. Δέχεται ως εισόδους, το struct που προκύπτει από τον κωδικοποιητή AACoder3 και το όνομα μαζί με το path που πρόκειται να πάρει το αποκωδικοποιημένο αρχείο ενώ ως έξοδο επιστρέφει έναν πίνακα με το αποκωδικοποιημένο σήμα. Για την υλοποίηση του χρησιμοποιούνται οι συναρτήσεις decodeHuff, iAACquantizer, iTNS και iFilterbank.
Υλοποιεί τον αντίστοιχο αποκωδικοποιητή. Δέχεται ως εισόδους, το struct που προκύπτει από τον κωδικοποιητή AACoder3 και το όνομα μαζί με το path που πρόκειται να πάρει το αποκωδικοποιημένο αρχείο ενώ ως έξοδο επιστρέφει έναν πίνακα με το αποκωδικοποιημένο σήμα. Για την υλοποίηση του χρησιμοποιούνται οι συναρτήσεις decodeHuff, iAACquantizer, iTNS και iFilterbank.
@ -289,7 +301,7 @@ H συνάρτηση αυτή επιδεικνύει την κωδικοποίη