Raspberry PI I2S DAC

To RPi με κάποιο από τα DACίδια που κουμπώνουν απευθείας πάνω του έχει πολύ καλό VfM και παίζει τουλάχιστον καλά, αλλά καλό είναι να έχετε κατά νου ότι σαν ποιότητα ήχου δεν μπορεί να πιάσει το απόλυτο για τουλάχιστον έναν λόγο: Δεν έχει σωστό ρολόι.

Τι εννοώ; Το σήμα I2S που δίνει το RPi παράγεται απευθείας από τον επεξεργαστή (SoC της Broadcom), ο οποίος έχει ρολόι στα 19.2MHz. Το κακό είναι ότι τα "κλασικά" 44.1KHz που χρειαζόμαστε δεν είναι ακέραιο πολλαπλάσιο του 19.2MHz. Οπότε για να το πω απλά το σήμα που "βγαίνει" έχει εναλλάξ τις παρακάτω συχνότητες:

19200000/435=44,138Hz
19200000/436=44,037Hz

Ποτέ ακριβώς 44.1KHz..

Τώρα, θα μου πείτε, αυτό ακούγεται; Δεν ξέρω, ίσως. Πάντως η έξοδος I2S bit perfect με την αυστηρή έννοια του όρου δεν είναι.

Το πρόβλημα λύνεται όταν συνδέουμε το RPi με το DAC μέσω κάρτας USB->I2S. Εκεί όλα καλά, γιατί δεν μπλέκουν με το audio stream τα ρολόγια του RPi. Μεταφέρονται απλά δεδομένα.
 
μα,
αν μπορούσε να πιάσει το απόλυτο, τότε με 30 ευρώ δεν θα μιλούσαμε απλά για πολύ καλό vfm αλλά για εξαιρετική περίπτωση ...
για το αν ακούγεται αυτό το 0,086% απόκλισης στα 44,1 δεν ξέρω αλλά όπως και να έχει παίζει πάρα πολύ καλά .........
 
Last edited:
μα,
αν μπορούσε να πιάσει το απόλυτο, τότε με 30 ευρώ δεν θα μιλούσαμε απλά για πολύ καλό vfm αλλά για εξαιρετική περίπτωση ...
για το αν ακούγεται αυτό το 0,086% απόκλισης στα 44,1 δεν ξέρω αλλά όπως και να έχει παίζει πάρα πολύ καλά .........


Δε νομίζω ότι είναι θέμα κόστους, νομίζω ότι είναι απλά λόγω επιλογής ρολογιού. Αν έχω καταλάβει σωστά αυτή η μικρή απώλεια είναι στο 16/44.1. Σε 24/96 και 24/192 θα είναι bit perfect.
 
Απάντηση: Re: Raspberry PI I2S DAC

Δε νομίζω ότι είναι θέμα κόστους, νομίζω ότι είναι απλά λόγω επιλογής ρολογιού. Αν έχω καταλάβει σωστά αυτή η μικρή απώλεια είναι στο 16/44.1. Σε 24/96 και 24/192 θα είναι bit perfect.

Στα πολλαπλάσια του 44.1 είναι και τα 352.8 του DSD όμως...
Δεν δημιουργεί πρόβλημα εκεί;
 
Δε νομίζω ότι είναι θέμα κόστους, νομίζω ότι είναι απλά λόγω επιλογής ρολογιού. Αν έχω καταλάβει σωστά αυτή η μικρή απώλεια είναι στο 16/44.1. Σε 24/96 και 24/192 θα είναι bit perfect.


Όντως, το πρόβλημα υπάρχει στα 44.1 και προφανώς και στα 88.2. Τα 48, 96, 192 είναι ΟΚ.
 
Re: Απάντηση: Re: Raspberry PI I2S DAC

Στα πολλαπλάσια του 44.1 είναι και τα 352.8 του DSD όμως...
Δεν δημιουργεί πρόβλημα εκεί;

Τα 352.8 που έχεις στο μυαλό σου είναι για το DXD, όχι το DSD.. Το DXD είναι PCM.

To DSD streaming δεν υποστηρίζεται ούτως ή άλλως μέσω I2S λόγω μη ύπαρξης drivers.
 
Re: Απάντηση: Re: Raspberry PI I2S DAC

Στα πολλαπλάσια του 44.1 είναι και τα 352.8 του DSD όμως...
Δεν δημιουργεί πρόβλημα εκεί;

Νομίζω ότι εκ των πραγμάτων υπάρχει ταβάνι στα 192. Δλδ και να ήταν bit perfect δεν μπορεί να τα παίξει με i2s. (και με USB δλδ που δοκίμασα DXD κλπ χτες ήμουν φουλ σε pops και clicks, αλλά αυτό λογικά είναι κακός συνδυασμός με το dac, εφόσον το βουβάλι παίζει)
 
Η διαφορά στο ρολοι που περιγράφει ο Δημητρης δεν ειναι και μικρή πάντως. Ενδέχεται το jitter να ειναι κατι παραπανω απο ακουστό. Η δυνατότητα βεβαια να παίξεις με το ρολοι του ντακ μεσω usb>i2s παρακάμπτοντας το μη απόλυτα συμβατο ρολόι ειναι σιγουρη λυση.
 
Το BCM2835 ειναι αμιγής multimedia προσέσορας με σαφή προσανατολισμό στο audio video ,

έχει μηχανισμό ασυνχρονης λειτουργίας ( frame timing generator ) που του επιτρέπει εξωτερικο χρονισμό με ρολόγια απο 17 μεχρι 22 χιλιάδες ,

The PCM interface runs asynchronously at the PCM_CLK rate and automatically transfers transmit and receive data across to the internal APB clock domain

Η συχνότητα που βγαίνει στην έξοδο ειναι αυτη ακριβώς που λέει το pcm 44.1 96.0 etc etc ,,


όπως επίσης έχει μηχανισμό fifo , και κάτι που αναφέρει ώς " MASH noise-shaping is incorporated to push the fractional divider jitter out of the audio band if required ¨ για το jitter

τεχνικά δεν έχει να ζηλέψει και πολλά απο τα USB ΤΟ I2S ,,


Καθως δε δεν παρέχει έξοδο masterclock , οπότε ο επαναχρονισμός μετά είναι απαραίτητος !
 
Απάντηση: Re: Απάντηση: Re: Raspberry PI I2S DAC

Τα 352.8 που έχεις στο μυαλό σου είναι για το DXD, όχι το DSD.. Το DXD είναι PCM.

To DSD streaming δεν υποστηρίζεται ούτως ή άλλως μέσω I2S λόγω μη ύπαρξης drivers.

DXD,έχεις δίκιο.
Με ένα μυαλό...:grandpa:
 
Το BCM2835 ειναι αμιγής multimedia προσέσορας με σαφή προσανατολισμό στο audio video ,

έχει μηχανισμό ασυνχρονης λειτουργίας ( frame timing generator ) που του επιτρέπει εξωτερικο χρονισμό με ρολόγια απο 17 μεχρι 22 χιλιάδες ,

The PCM interface runs asynchronously at the PCM_CLK rate and automatically transfers transmit and receive data across to the internal APB clock domain

Η συχνότητα που βγαίνει στην έξοδο ειναι αυτη ακριβώς που λέει το pcm 44.1 96.0 etc etc ,,

Σωστά όλα αυτά, αλλά όταν μιλάμε για I2S έχουμε να κάνουμε με τα GPIO pins, για τα οποία ισχύουν αυτά που είχα γράψει νωρίτερα.

Βλέπε σχετικό datasheet ( http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf ), σελ. 105.

Όσο noise shaping και να κάνει κανείς, τη στιγμή που το clock δεν είναι αυτό που πρέπει να είναι, θεωρητικά υπάρχει πρόβλημα. Στην πράξη, είπαμε.. καλά παίζει.. ;)
 
Δεν ειναι έτσι , για τον απλό λόγο ότι η συχνότητα που βλέπεται στα ρολόι απέξω δεν έχει να κάνει άμεσα με την συχνότητα του pcm και τις υποδιερέσεις , θεωριτικά δεν μπορώ να στο αναλύσω αλλο , πρακτικά απλά εάν του βάλεις ρολόι στα 20 ας πούμε .. 44.1 θα πάρεις ,, εάν βάλεις 18 .. 44.1 θα πάρεις πάλι ,,

στο wm8804 με 12 μηζ ρολόι πάιρνεις απαντες συχνότητες , σε ότι fs θέλεις ,

υπάρχει PLL που σηκώνει θεμελίωδη μεχρι το θεό .. και μετά με dividers γινονται πολλά και διάφορα


και δεν μιλάει για pcm η 105 ..

--- Αυτόματη συγχώνευση μηνύματος ---

Η κιαμαλά με το pdf , είναι ότι δεν αναφέρει το x πόσο FS φτιάχνει τα rate και κάτω απο ποιές συνθήκες ,, για να βγάλεις το ζουμί πχ στa sabre θέλεις 256 για μέγιστο antialiasing ,

--- Αυτόματη συγχώνευση μηνύματος ---

Στα πρακτικά τώρα , το διαολάκι ακούει τις κάλτσες του ωσ αναφορά την μεταφορά του i2s , αυτό μάλλον είναι η έλειψη ενσωματομένου μπάφερ εξόδου , σε αντίθεση με το κορυφαίο ας πουμε της κατηγορίας και το αγαπημένο της asus cm6631a , που σηκώνει τα μάλα σε χοντράδες με την εξοδο του , αυτό λοιπον με μια κακή εφαρμογή της σύνδεσης φέρνει απογοητευση , και όταν καταφέρεις και το τερματίσεις όμοορφα και σωστά ,, έρχεται χαμόγελο φαρδύ ...
 
Last edited:
Δεν ειναι έτσι , για τον απλό λόγο ότι η συχνότητα που βλέπεται στα ρολόι απέξω δεν έχει να κάνει άμεσα με την συχνότητα του pcm και τις υποδιερέσεις , θεωριτικά δεν μπορώ να στο αναλύσω αλλο , πρακτικά απλά εάν του βάλεις ρολόι στα 20 ας πούμε .. 44.1 θα πάρεις ,, εάν βάλεις 18 .. 44.1 θα πάρεις πάλι ,,

Μα, το datasheet λέει ξεκάθαρα πως κάνει generate το clock και λέει μάλιστα ότι η πραγματική συχνότητα που παίρνεις στην έξοδο εναλλάσσεται μεταξύ δυο τιμών. Αυτό γράφουν και στο diyaudio.com και γίνεται ολόκληρη ιστορία με τη δημιουργία ειδικής πλακέτας που να δίνει σωστά clock στο BBB που έχει το ίδιο ουσιαστικά πρόβλημα.

Αν τελικά όλοι μας έχουμε καταλάβει λάθος.. τι να πω..

στο wm8804 με 12 μηζ ρολόι πάιρνεις απαντες συχνότητες , σε ότι fs θέλεις ,

υπάρχει PLL που σηκώνει θεμελίωδη μεχρι το θεό .. και μετά με dividers γινονται πολλά και διάφορα

Το wm8804 όντως έχει PLL το οποίο δέχεται και μη-ακέραιους ως dividers, οπότε κάνει generate ότι συχνότητα γουστάρει/ουμε. Το RPi δεν φαίνεται να δουλεύει έτσι.

και δεν μιλάει για pcm η 105 ..

Δεν είπα ότι μιλάει για PCM. Είπα ότι μιλάει γενικά για τα GPIO pins, τα οποία δίνουν το I2S.
 
Ενα λάθος είναι όλλη η ζωή ,, σιγά ,,

για ένα λάθος παραπάνω που κάνεται δεν τρέχει τίποτα ,,


να πέις στα παλουκάρια λεπόν ,, ότι χωρίς θεμελιώδη , και μηχανισμο υποδιέρεσης αυτής ΔΕΝ παράγονται οι 44.1 μαζί με τις 48 και όλες τις άλλες μαζί με ένα παρανομαστή στα 19 ..

για να μην κουράζεσαι το rpi b+ τρέχει αυτην την στιγμή με crysteκ στα 22 κάτι .. και με λίγο μαγεριό στον κωδικά ..


πώς ?


ψάχτε ..
 
Ενα λάθος είναι όλλη η ζωή ,, σιγά ,,

για ένα λάθος παραπάνω που κάνεται δεν τρέχει τίποτα ,,


να πέις στα παλουκάρια λεπόν ,, ότι χωρίς θεμελιώδη , και μηχανισμο υποδιέρεσης αυτής ΔΕΝ παράγονται οι 44.1 μαζί με τις 48 και όλες τις άλλες μαζί με ένα παρανομαστή στα 19 ..

Βρε θα με τρελάνεις; Εγώ δεν σου λέω τόση ώρα ότι δεν παράγονται σωστά τα 44.1 και τα 88.2 από το ένα ρολόι που έχει το RPi? :D

Οι πλακέτες που σχεδιάζονται έχουν πάνω 2 ρολόγια ώστε με αυτά να κάνουν clock το I2S του BBB (και όχι προφανώς όλο το BBB), αναλόγως το SR του αρχείου που σκοπεύουν να παίζουν.


για να μην κουράζεσαι το rpi b+ τρέχει αυτην την στιγμή με crysteκ στα 22 κάτι .. και με λίγο μαγεριό στον κωδικά ..


πώς ?


ψάχτε ..

Αν απλά αλλάξεις το ρολόι σε κάτι κοντά στα 22KHz δεν κάνεις τίποτα. Πρέπει να κάνεις το RPi να το καταλάβει ώστε να αλλάξει πολλές εσωτερικές λειτουργίες του, πράγμα που αμφιβάλλω αν μπορεί να γίνει με "μεγεριό στον κώδικα". Αν ήταν τόσο απλό όλο και κάποιος θα το είχε κάνει και δεν θα γραφόντουσαν χιλιάδες μηνύματα στο diyaudio.com τους τελευταίους μήνες.