AVR synth

Dieses Thema im Forum "Lötkunst" wurde erstellt von comboy, 1. September 2008.

  1. comboy

    comboy Tach

    huhu...

    ich bastel in letzter zeit an nem kleinen AVR digitalsynthesizer...
    ein bischen info und soundbeispiele gibts hier... ist aber alles noch in arbeit...

    gruß,
    comboy
     
  2. haesslich

    haesslich Tach

    ah. ein ganz ähnliches filter benutze ich in einem softwareprojekt auch. :)
    hast du das r2r netzwerk ordentlich gematcht bekommen? r2r wandler sind ja SEHR empfindlich gegenüber streuungen der widerstände.
     
  3. comboy

    comboy Tach

    naja - geht so...
    also der sinus sieht schon aus wie ein sinus...
    die LSBs sind halt kritisch... wenn man ein signal nur auf den untersten bits ausgibt wird es schon ungleichmässiger von den abstufungen.

    aber da ich generell eh eher auf was lofi mässiges abziehl und ich keine lust mehr hatte ordentliche wandler zu suchen hab ich halt maln r2r gemacht.

    klanglich bin ich bisher ganz zufrieden
     
  4. haesslich

    haesslich Tach

    wie hast du denn die oszillatoren programmiert?
     
  5. comboy

    comboy Tach

    da hab ich mich an das alte casio PD verfahren gehalten.
    ich hab nen wavetable indem ein invertierter cosinus liegt
    und der wird halt variabel ausgelesen
    man kann dann den cosinus stufenlos zu sägezahn oder Pulswelle verziehen...
    so funktioniert dann auch das anti aliasing auf dem kleinen chip, weil für mehrere wavetables und oversampling reicht einfach die CPU power nicht aus

    bei wikipedia stehts ganz gut erklärt[/url]
     
  6. haesslich

    haesslich Tach

    ah. da hab ich bei meiner oszillatorimplementierung nicht dran gedacht, damals :) (hab straight forward funktionen implementiert, allerdings in hochsprache auf nem dsp).

    und das läuft alles auf einem atmega644? schick :)
     
  7. comboy

    comboy Tach

    naja, auf ner richtigen CPU würd ich auch nen anderen ansatz wählen, aber bei den popligen 20Mhz vom Atmega muss man halt knausern.

    gäbe auch wesentlich bessere filtermodelle ;-)

    aber ja, ich bin selbst überrascht was alles auf so ner kleinen gurke läuft. man beachte das der output 16Bit bei 39kHz ist...

    was hast du denn entwickelt? und auf was für einem DSP?
     
  8. haesslich

    haesslich Tach

    nen polyphonen subtraktiven, auf einem adsp-21369. alles sehr einfach gehalten ;-)
    durchaus verbesserungswürdig. leider nicht open source, ist ein uniprojekt gewesen.

    edit: mit besseren filtermodellen hatte ich übrigens meine probleme mit der rechengenauigkeit :-/
     
  9. comboy

    comboy Tach

    hmmm aber der adsp-21369 ist doch 32-bit float?
    das ist doch die gleiche genauigkeit wie man sie auch bei nativen lösungen hat? wo gabs denn da probleme?
     
  10. haesslich

    haesslich Tach

    32bit float ist nicht SO viel - in meinem matlab modell lief das filter nämlich problemlos. nur läuft matlab auch mit deutlich höherer rechengenauigkeit ;-)
    das problem liegt, denke ich, in der filterstruktur. (ich habe es nicht näher analysiert):
    ich hab mich anfangs recht genau an das stilson&smith paper gehalten (http://citeseer.ist.psu.edu/article/stilson96analyzing.html).
    quick&dirty kommt dort eine filterstruktur raus, die sich einfach in direktform II implementieren lässt. aber mit steigender zahl der pole (und das ist halt n 4 pol filter...) wird die bei sehr kleinen koeffizienten halt deutlich ungenau - auch in 32bit float.
    und blöderweise lässt sich der geschlossene ausdruck der übertragungsfunktion des filters nicht so einfach in eine andere form bringen, so dass man eine bessere implementierung hätte machen können.
    ich schätze, die "großen firmen" (und dutzende hobbyprogrammierer...) halten sich halt nicht zu genau an dieses stilson&smith paper ;-)
    von filterdesign habe ich nicht SO viel ahnung, und ich hatte keine zeit mehr, was anderes zu probieren. also hab ich ein anderes filter genommen.
    das filter, was du implementiert hast, ist ja (ebenso wie das, was ich letztlich genommen habe) "nur" ein 2pol filter, und ist somit eh unproblematischer.

    ein alternative wäre gewesen, deutlich die blockgröße zu reduzieren (ich führe fast alle berechnungen auf blöcken von 256 samples durch - die berechnung der filterkoeffizienten ist aber samplegenau), und dann meinetwegen alle 32 oder 64 samples das filter zu berechnen, indem ich die koeffizienten in die (in der analog devices adsp-C-bibliothek) IIR-funktion eingebe. denn diese ist in einer effizienten filterstruktur implementiert.
    dann hätte ich aber die samplegenaue berechnung der koeffizienten verspielt, deswegen zum "ausgleich" das verkleinern der blockgröße. dann hätte ich mich mit einigen details des dsps herumschlagen müssen (speicherverwaltung etc.) und zusätzlich noch etwas überlegen zur glättung der blockübergänge (die filterkoeffizienten könnten sich dann ja sprunghaft ändern) etc.
    also doch lieber ein "einfacheres" filter ;-)
     
  11. comboy

    comboy Tach

    sooo - nochn bischen rumoptimiert, und tatsächlich noch platz für einen sample kanal auf dem soundchip gefunden. jetzt muss ich nur noch den Sampletransfer über USB fertig machen (auf nen externen 4MBit flash), dann sollte der soundchip fast fertig sein. Von PC->Controllchip klappt schon und lässt freudig ein paar leuchtidioten flackern

    also gehts jetzt dann an frontplatte und sequencer...
    ich hab mal mein design ein bischen auf vordermann gebracht und brauche meinungen. ist jetzt nur ne skizze...
    [​IMG]
    sequencer teil unten ist mir erstmal egal, da hab ich noch nicht wirklich ausgiebig drüber nachgedacht. Weiß auch nicht ob ich wirklich RGB LEDs brauch, obwohls schon flashig wär! auch die hässliche polizei farbkombination wird sich noch ändern ;-)

    mir gehts jetzt eher um die vorhandenen potis und knöpfe. fehlt noch was?
    von der anordnung her grob in ordnung?
    was könnt noch in das loch rechts unten?

    das konzept sieht in etwa so aus:
    soll ja primär auf chipmusik ausgelegt sein, also so ne art hardware tracker programm ;-) man hat 3 synth parts (2x sine/saw/PWM, 1x FM Paar), die jeweils unabhängig voneinander spielen, einen noise part (für drums und fx) und einen sample part. alle parts lassen sich dann unten über die sequencerspuren programmieren.

    man kann den jeweils aktiven part zum editieren über die knöpfe unten wählen.

    der HARMONIC regler stellt bei den saw/rec OSCs die obertonanzahl und beim fm OSC den mod-amount ein.

    einen resonanten tiefpass gibt es, durch den man beliebige kanäle schicken kann.

    noise und sample haben nur nen Decay EG.

    die 3 synth parts haben jeweils einen LFO und 2 ADSR EGs. der erste ist fest auf die lautstärke verdrahtet, den zweiten kann man dann auf die angegebenen ziele leiten.

    hab ich was vergessen?

    ach ja - nen schmissigen namen brauch ich für die kiste noch. AVR Groovebox ist doof!
     
  12. comboy

    comboy Tach

    ja da hast du wohl recht. Ich glaub generell war die faustregel bei digitalen filtern: nie mehr als 2 Pole direkt in eine stufe integrieren, weil es dann eben zu instabilen filtern wegen ungenauigkeit kommen kann. dann den 4 Pol lieber in zwei 2-Pole transformieren... aber beim filterdesign muss ich auch noch vieeeeeel lernen.
     
  13. comboy

    comboy Tach

    nachdem ich viel zu viel zeit ergebnislos nach einem schönen gehäuse gesucht hab und mir die schaeffer frontplatten zu teuer sind, hab ich das geld jetzt lieber in neues werkzeug investiert und bau mir das alughäuse selbst:

    [​IMG]

    und hier schon die ersten beiden sequencer buttons
    [​IMG]

    sieht gleich viel edler aus als so klobige holzkästen :D
     
  14. comboy

    comboy Tach

Diese Seite empfehlen