Hallo Besucher, der Thread wurde 2,4k mal aufgerufen und enthält 7 Antworten

letzter Beitrag von enigma am

SID Waveform/Filter Analyse

  • Hi,


    in einigen Beiträgen hier im Forum wurde mal wieder das Thema SID und FPGA-Nachbau
    angesprochen. Der Digitalteil ist ja einigermassen einfach nachzubauen, das Filterteil
    bzw. das analoge Backend dagegen ist sehr anspruchvoll und auch kaum dokumentiert.
    Also habe ich mich Heute Morgen mal drangesetzt und per FPGA-Ansteuerung eines
    SID-Chips (habe leider keinen C64 mehr) den Filterteil ein wenig per DSO zu untersuchen.


    Zuerst habe ich dazu die 4 Waveforms aufgezeichnet (Rect, Triangle, Saw, Noise),
    dazu noch die ADSR-Kurve (Attack: linear, Delay: linear, Release: exp.).
    Der nächste Schritt war dann je mit Rect und Saw (wegen der interessanten FFT-Form)
    möglichst viele Filterparameter zu erfassen (Filterfrequenz, Lowpass, Bandpass, Highpass,
    Resonator). Je Parameter dann durch eine FFT und je Parametersatz ein Flächengraph
    als Bild abgespeichert (L/R: Frequenz, gross nach klein, Tiefe: Parameter, Höhe: Wert).
    Dazu noch Kombinationen aller Low/Band/Highpass-Filter.


    Die Dateianhänge enthalten den Sourcecode, Bilder und BIN-Daten. (Sourcecode sollte
    mit der SID-Pdf relativ einfach zu verstehen sein, Test lassen sich per GOSUB aufrufen.)


    Da ich die Berechnungen per Demosoftware gemacht habe, war es leider nicht möglich,
    die RAW-Daten in einfachere Form zu bringen. Je Kurve wird ein Datensatz von 4110
    Bytes erzeugt, ab Addr=50 beginnt die Kurve (4058 Bytes), je Wert ein Byte. Bei den
    Parametersätzen werden 16 oder 32 Kurven/Datensätze in eine Datei gepackt, d.h.
    jede Kurve beginnt ab Addr=FileNo*4110+50.


    Viel Spass bein Stöbern. Wer noch spezielle Wünsche hat kann sich melden, bis Morgen
    ist die Schaltung noch aufgebaut.

  • .. und die Resonator-Files..

  • .. und Bilder der FFTs..

  • ..und weitere Bilder.

  • Hab den Morgen genutzt, um noch ein paar Kurven aufzuzeichnen.
    - Rechteck, 3 Stimmen
    - Rechteck, 2 Stimmen
    - Rechteck, 2 Stimmen, Syncronisiert
    - Dreieck, 2 Stimmen
    - Sägezahn, 2 Stimmen
    - Rechteck und Dreieck
    - Rechteck und Sägezahn


    Dazu noch die FFTs von Rechteck und Sägezahn als Bilder.


    Im ersten Beitrag habe ich noch die Specs vergessen.


    Was noch fehlt ist die Kombination von Filterfrequenz und
    Resonator (Oben habe ich zwar ein paar Kombinationen
    angehängt, die aber für ausführlichere Analyse nicht ausreichen).
    Das würde ein sehr grosses 3D-Datenvolumen generieren.

  • Dazu noch die FFTs von Rechteck und Sägezahn als Bilder.

    Spätestens hier solltest du evtl. darauf achten, ob die Aufnahmen von einem C64 mit 8701-Taktchip oder mit diskret aufgebauter PLL stammen. Der 8701 erzeugt kein sauberes Rechteck, das gibt IIRC in der FFT ein paar zusätzliche Seitenbänder.

  • Spätestens hier solltest du evtl. darauf achten, ob die Aufnahmen von einem C64 mit 8701-Taktchip oder mit diskret aufgebauter PLL stammen. Der 8701 erzeugt kein sauberes Rechteck, das gibt IIRC in der FFT ein paar zusätzliche Seitenbänder.

    Der Takt wird per synceoner Logik generiert, die wiederrum per Quarz (50ppm, keine
    FPGA-interne PLL), der 1MHz-Clockausgang ist Output-registered, d.h. vlt. 100-200ppm.
    Davon ab, mein DSO ist auch nicht das Beste (Welec W2022a, siehe mikrocontroller.com
    für ausgibigste Docs), der interne Quarz hat 50ppm, die interne Logik per PLL getaktet,
    d.h. 200-300ppm, das kann einem schon Angst machen. Schau Dir aber mal die FFT
    der Rechteck- bzw. Sägezahnkurve an, die sieht schon sehr sauber aus, Nebenbänder
    sind so gut wie überhauptnicht zu erkennen.


    Was ich aber vergessen habe: alle SID-Register löschen und dann eine Aufzeichnung inkl.
    FFT zu machen. .. Erledigt: Das Rauschen ist etwa 1/80tel zu einer Kurve mit Vol=15.


    Ausserdem noch vergessen: eine Sync-Signal für's DSO, um eine Kurvenschar je Parameter
    phasengleich aufzuzeichnen. Für eine FFT ist das aber egal, ausserdem kann man das eh
    nicht mit einem C64 so ohne weiteres machen.

  • Inwieweit ist denn in deine Analyse das bereits vorhandene Wissen vom SID Reverse Engineering eingeflossen?
    Insbesondere z.B. http://oms.wmhost.com/misc/6581_filter_desc.gif
    und das Ersatzschaltbild: http://oms.wmhost.com/misc/6581_filter_output_alt.txt


    Wieviel SIDs hast Du mittlerweile aufgenommen?
    Die Streuung ist bekannterweise recht hoch: https://bel.fi/alankila/c64-sw/fc-curves/curves.png


    Inwiefern wird deine Umsetzung in den FPGA auf den vorhandenen Algorithmen basieren, die den resonanten Filter approximieren?
    (z.B. https://bel.fi/alankila/c64-sw/index-cpp.html)


    Hast Du Eigenschaften wie den 'kinked DAC' und die floatenden niederwertigsten Bits der Oscillatoren umgesetzt?