Ogłoszenie

Collapse
No announcement yet.

USB Audio - forumowe "Amanero"

Collapse
Ten temat jest przyklejony.
X
X
 
  • Filtr
  • Czas
  • Pokaż
Clear All
new posts

    Na pierwszej stronie wszystko zamieściłem, tj. linki zawsze do najnowszego firmware w tym wątku oraz jak się wgrywa firmware. Zobacz sobie na pierwszy post :)

    Na Windows 7 będzie działał w UAC 2.0 pod warunkiem, że zainstalujesz firmware z PID of C-Media, ponieważ oni mają sterownik w Windows Update, który jest wymagany w przypadku systemów poniżej Windows 10. Wyjście I2S jest standardowe, więc tak, podłączasz bezpośrednio do DAC'a.

    Skomentuj




      Projekt addonu zakończony, teraz czekam na nową rewizję PCB i można polutować :) Przy takim układzie (TQFP-144) i gęstym upakowaniu PCB jest 4-warstwowe. Rezystory są wielkości 0603.

      W praktyce do głównego USB Audio dodaje poniższe funkcje:

      - Obsługa próbkowania na poziomie 705,6 kHz oraz 768 kHz. Nie ma tu żadnej decymacji sygnału do 352,8 kHz lub 384 kHz. Na wyjściu jest tyle ile na wejściu w komputerze i bit-perfect playback przy ASIO.
      - Wykrywanie DSD (DoP, np. w foobar) i wypuszczenie go na osobne wyjścia (DSDR + DSDL + DSDCK). Obsługa DSD64, DSD128 oraz DSD256. Przy odtwarzaniu DSD pin DSDOE ma stan logiczny 1 i zaświeca się dioda DSD. Przy DSD128 i wyżej można śmiało pominąć DAC'a i zrobić sobie prosty filtr RC wypuszczając sygnał analogowy prosto na przedwzmacniacz lub wzmacniacz.
      - Wyjście SD pozwala na podłączenie jakiegokolwiek przetwornika w trybie NOS. Na zworkach ustawiamy długość słowa (od 16 bitów np. dla TDA1541 aż do 24 bitów dla np. PCM1704).
      - Możliwość przestawienia BCLK na 32x Fs zamiast standardowego 64x Fs. Pozwala to "wykręcić" przetworniki takie jak PCM56 do 768 kHz bądź TDA1541 do 384 kHz.
      - Wyjście I2S z ramką 32x Fs bądź 64x Fs.
      - Wyjście LJ (Left justified) z ramką 32x Fs bądź 64x Fs.
      - Wyjście SPDIF generowane prosto z odbieranego strumienia od USB Audio. Nie używa on wbudowanego trasmitera w CM6631A, który i tak jest wątpliwej jakości według dokumentów.
      - Każde wyjście dla PCM posiada inwersję danych, tj. są one odwrócone aby można było sobie podłączyć przetworniki w konfiguracji różnicowej.
      - MCLK dla każdego próbkowania do 384 kHz wynosi 128x Fs. Przy 705,6 kHz oraz 768 kHz wynosi 64x Fs i wyjście SPDIF jest wyłączane.

      Skomentuj


        Zamieszczone przez .3lite Zobacz posta
        - Wykrywanie DSD (DoP, np. w foobar) i wypuszczenie go na osobne wyjścia (DSDR + DSDL + DSDCK). Obsługa DSD64, DSD128 oraz DSD256. Przy odtwarzaniu DSD pin DSDOE ma stan logiczny 1 i zaświeca się dioda DSD. Przy DSD128 i wyżej można śmiało pominąć DAC'a i zrobić sobie prosty filtr RC wypuszczając sygnał analogowy prosto na przedwzmacniacz lub wzmacniacz.
        Na to pominięcie DACa jestem chętny, hata z RPi podobno nie da się uruchomić osobno i trochę mi to szyki popsuło z tym co wymyśliłem.

        Skomentuj


          Tak, ale to tylko z DSD bo zapis DSD jest tak zrobiony, że można zrobić konwersję bez DAC'a. PCM to inny format i on wymaga dedykowanego przetwornika.

          Skomentuj


            Zamieszczone przez siewcu Zobacz posta
            Na to pominięcie DACa jestem chętny, hata z RPi podobno nie da się uruchomić osobno i trochę mi to szyki popsuło z tym co wymyśliłem.
            Nie na temat...
            No to trzeba polutować nowego DACa:



            Myślę, że przez weekend sprawdzę czy gra.

            Skomentuj


              Chapeau bas! :) Ciśnie mi się pytanie: jakimi wtyczkami i których playerach można by w real time konwertować LPCM na DSD128 aby dalej przesyłać ten strumień DoPem do konwertera?

              Skomentuj


                Zamieszczone przez .3lite Zobacz posta


                Projekt addonu zakończony, teraz czekam na nową rewizję PCB i można polutować :) Przy takim układzie (TQFP-144) i gęstym upakowaniu PCB jest 4-warstwowe. Rezystory są wielkości 0603.

                W praktyce do głównego USB Audio dodaje poniższe funkcje:

                - Obsługa próbkowania na poziomie 705,6 kHz oraz 768 kHz. Nie ma tu żadnej decymacji sygnału do 352,8 kHz lub 384 kHz. Na wyjściu jest tyle ile na wejściu w komputerze i bit-perfect playback przy ASIO.
                - Wykrywanie DSD (DoP, np. w foobar) i wypuszczenie go na osobne wyjścia (DSDR + DSDL + DSDCK). Obsługa DSD64, DSD128 oraz DSD256. Przy odtwarzaniu DSD pin DSDOE ma stan logiczny 1 i zaświeca się dioda DSD. Przy DSD128 i wyżej można śmiało pominąć DAC'a i zrobić sobie prosty filtr RC wypuszczając sygnał analogowy prosto na przedwzmacniacz lub wzmacniacz.
                - Wyjście SD pozwala na podłączenie jakiegokolwiek przetwornika w trybie NOS. Na zworkach ustawiamy długość słowa (od 16 bitów np. dla TDA1541 aż do 24 bitów dla np. PCM1704).
                - Możliwość przestawienia BCLK na 32x Fs zamiast standardowego 64x Fs. Pozwala to "wykręcić" przetworniki takie jak PCM56 do 768 kHz bądź TDA1541 do 384 kHz.
                - Wyjście I2S z ramką 32x Fs bądź 64x Fs.
                - Wyjście LJ (Left justified) z ramką 32x Fs bądź 64x Fs.
                - Wyjście SPDIF generowane prosto z odbieranego strumienia od USB Audio. Nie używa on wbudowanego trasmitera w CM6631A, który i tak jest wątpliwej jakości według dokumentów.
                - Każde wyjście dla PCM posiada inwersję danych, tj. są one odwrócone aby można było sobie podłączyć przetworniki w konfiguracji różnicowej.
                - MCLK dla każdego próbkowania do 384 kHz wynosi 128x Fs. Przy 705,6 kHz oraz 768 kHz wynosi 64x Fs i wyjście SPDIF jest wyłączane.
                Wygląda to znakomicie. Jeżeli będzie taka możliwość poproszę o taką kartę. Pozdrawiam

                Skomentuj


                  Spoko, przyjdzie nowa rewizja to polutuję i poprawię opis dla FPGA z powodu faktu, że kilka pinów się zmieniło, ponieważ jak zwykle człowiek potrafi zapomnieć o banalnych rzeczach:



                  Przy nowej rewizji muszę też przetestować wszystko na nowo, ponieważ nigdy nic nie wiadomo

                  Pobór prądu całej płytki z addonem przy odtwarzaniu DSD256 (pobiera więcej niż PCM 768 kHz):



                  Przy okazji - jak ktoś nie chce tracić zegarów to można je wylutować z bazowej płytki i wlutować na tą płytkę. Główny układ i tak ich nie będzie używał w slave-mode.

                  - - - - - aktualizacja - - - - -

                  Zamieszczone przez Piotrzurawski Zobacz posta
                  Chapeau bas! :) Ciśnie mi się pytanie: jakimi wtyczkami i których playerach można by w real time konwertować LPCM na DSD128 aby dalej przesyłać ten strumień DoPem do konwertera?
                  Foobar powinien być w stanie to zrobić. Nie testowałem.

                  Skomentuj


                    Testowanie generowanego SPDIF ze strumienia I2S było trochę na żywca:



                    Co nie zmienia faktu, że wszystko działa W sumie stworzyłem opis dla generowania SPDIF, ale go nie testowałem aż do dzisiaj. Opis sprzętowy stworzyłem na bazie opisu protokołu z internetu:

                    http://www.hardwarebook.info/S/PDIF

                    Może komuś kiedyś się przyda.

                    Dzisiaj też doszły nowe płytki, więc można lutować:



                    Jako ciekawostkę dodam, że ten addon może być masterem dla ASRC jakim jest AK4137 (obsługuje Fsi/Fso do 768 kHz). Na wejściowych pinach można mu rozkazać z jaką częstotliwością ma pracować (od 44,1 kHz do 768 kHz). Przy BCLK na poziomie 32x Fs spokojnie można cisnąć 384 kHz z TDA1541(A) oraz 768 kHz z PCM56 i podobnych. Może jak kiedyś będę miał ochotę to coś z tym zrobię

                    Dodatkowo przy DSD można by zrobić prosty analogowym DAC z filtrem typu moving-average na rejestrach przesuwnych. Syf wysoko-częstotliwościowy byłby znacząco zredukowany.

                    Skomentuj






                      No i sobie śmiga

                      Tak mnie trochę naszło, że może by tu stworzyć nowy DAC na jednym AD1865 do PCM oraz dodatkowym filtrem typu moving-average bezpośrednio dla DSD. Tym razem przyjmowanie sygnału od 44,1 kHz do 768 kHz oraz sama interpolacja dla PCM do 768 kHz bądź 705,6 kHz na AK4137. DAC sam mógłby przełączać strumień między DSD a PCM

                      Skomentuj


                        Zamieszczone przez .3lite Zobacz posta
                        Tak mnie trochę naszło, że może by tu stworzyć nowy DAC na jednym AD1865 do PCM oraz dodatkowym filtrem typu moving-average bezpośrednio dla DSD. Tym razem przyjmowanie sygnału od 44,1 kHz do 768 kHz oraz sama interpolacja dla PCM do 768 kHz bądź 705,6 kHz na AK4137. DAC sam mógłby przełączać strumień między DSD a PCM
                        Absolutnie popieram i piszę się na dwa egz!!

                        Skomentuj


                          DSD już po testach. Śmiga :) Miałem mały błąd w opisie FPGA i szumiał, ponieważ gubiłem jeden bit, ale już naprawione:



                          DSD + PHASE = DSD256

                          Foobar konwertował mi PCM na DSD128 lub DSD256 i tak sobie testowałem.

                          No i bardzo zaawansowany filtr LP dla DSD, polutowany na szybkości:



                          Po filtrze bezpośrednio do wzmacniacza.

                          Skomentuj


                            I jak wrażenia słuchwe?

                            Skomentuj


                              Gra w porządku, ale to prosty filtr z elementów, które miałem pod ręką i na jakąś sensowną oceną poczekam do czasu jak zaprojektuję analogowy filtr typu moving-average dla DSD.

                              Skomentuj


                                Zamieszczone przez .3lite Zobacz posta
                                Nic takiego nie stwierdziłem, ponieważ nie sprawdzałem. Ty zmierz i porównaj wszystkie możliwe pomiary (THD, IMD, J-Test, itd.), potem daj nam znać co wyjdzie, ponieważ mnie też ciekawi Przynajmniej dodasz jakieś merytoryczne treści do całej dyskusji.
                                Przyznam , że nie będę miał czasu na pomiary przez najbliższy rok :)
                                Natomiast Ty piszesz o porównaniach których nie robisz
                                Do tego negujesz to co dla Ciebie niewygodne

                                Skomentuj


                                  Taka ciekawostka, ponieważ dzisiaj znowu się zapomniałem z pewnym problemem... Dane PCM w formie 32-bitowej są zapisane jako 1 bit znaku (plus lub minus) oraz 31 bitów samej liczby. Zakres ten wynosi od -2^31 do 2^31 - 1. W celu zobrazowania pewnego problemu weźmy próbkę 8-bitową z bitem znaku, której zakres wynosi od -2^7 do 2^7 - 1 (od -128 do 127). Matematyczne działanie odwrócenia liczby to (~LICZBA) + 1 bądź ~(LICZBA - 1) gdzie "~" oznacza negację wszystkich bitów, tj. przykładowo 8-bitowa liczba -127 to 10000001, negacja tych bitów to 01111110 co daje nam liczbę 126, więc dodatkowo do 01111110 musimy dodać 00000001 (1) gdzie końcowy wynik to 01111111 = 127. W każdym wypadku od razu widać, że zakres możliwej wartości liczby ujemnej bądź dodatniej, która zostanie zapisana na 2^n bitach nie jest symetryczny i może się zdarzyć się graniczna wartość (w tym wypadku -128 dla 8 bitowej liczby), której nie możemy odwrócić w celu wygenerowania inwersji liczby (+128 wychodzi poza zakres 8-bitowej liczby). Próba inwersji takiej liczby kończy się taką samą liczbą, tj. operacja ~(-128) + 1 daje nam... znowu -128 W teorii nie powinny się zdarzyć takie piosenki, które mają graniczną ujemną wartość i w mojej kolekcji nie ma prawie żadnych, tj. oprócz pewnego albumu Michaela Jacksona, który ładnie klipuje na granicach:



                                  Dioda czerwona miga w momencie osiągnięcia maksymalnej ujemnej liczby, której nie da się odwrócić w celu wygenerowania inwersji liczby. W wypadku 32-bitowej liczby jest to wartość "10000000000000000000000000000000", czyli -2^31, jedyna możliwa wartość na jaką to można odwrócić to 2^31 - 1, czyli z offsetem o 1 LSB

                                  Może komuś się przyda taka ciekawostka.

                                  Skomentuj


                                    A nie dało by się tego oprogramować aby dla "-128" wynik był +127 ? Teraz jeśli w strumieniu mamy -125, -128, -126 to otrzymujemy: 125, -128, 126 czyli potężne jeb... po stronie analogowej, co jest bardzo niezdrowe zwłaszcza gdy końcówka jest o mocy spawarki :)
                                    Last edited by Piotrzurawski; 27.06.2018, 21:34.

                                    Skomentuj


                                      Zgadza się, dokładnie tak zrobiłem Na filmiku akurat już po poprawce gdzie już wprowadziłem ograniczenie -128 do +127 aby nie powtórzył się taki problem z charczeniem przy maksymalnie ujemnej próbce na inwersji danych (bo tak to się ukazywało).

                                      Przy okazji - po SPDIF można też przesyłać DSD64 oraz DSD128 w formie DoP. 24 bity dostępne w protokole SPDIF akurat spełniają wymóg tego protokołu (8 bitów na marker + 16 bitów na dane).

                                      Skomentuj


                                        Debugowanie softu ... teraz wyobraźmy sobie że procek steruje ogrzewaniem albo reaktorem chemicznym takim którym mierzy 20metrów wysokości... albo hamulcem w aucie lub dźwigiem
                                        Last edited by Piotrzurawski; 27.06.2018, 21:40.

                                        Skomentuj


                                          Konwerter AC3 albo DSP 5.1 albo 7.1 byście zrobili lepszy był by pożytek

                                          Skomentuj

                                          Czaruję...
                                          X