Vorstellung AIDA DSP Projekt

+A -A
Autor
Beitrag
IPv6
Stammgast
#1 erstellt: 30. Jan 2018, 19:08
Nachdem der Sure-DSP Thread doch schon eine gewisse Länge hat ist davon auszugehen, dass es inzwischen einige Anwender gibt, die Produkte mit Signalprozessoren von Analog Devices nutzen (ADAU1701).
Diese Produkte sind von Haus aus ja schon ziemlich genial und können schon sehr viel, stoßen aber vor allem bei externen Steuerungsmöglichkeiten schnell an ihre Grenzen. Mit diesem Projekt ist es möglich, den DSP im Livebetrieb umfangreich zu beeinflussen.
Im Hauptthread zum Sure-DSP wurde das AIDA-DSP Projekt bereits einmal kurz erwähnt, scheint aber im Getümmel untergegangen zu sein. Nachdem ich die Geschichte erfolgreich am laufen haben und mir zutraue, ein paar grundlegende Fragen beantworten zu können, möchte ich das Projekt hier nochmal Vorstellen.

Zunächst:
Das Projekt stammt nicht von mir.
Zu finden es es auf Github, wobei ich die Dokumentation noch etwas unübersichtlich finde, was den Einstieg nicht gerade einfach macht.

Was ist das?
Es handelt sich bei dem Projekt hauptsächlich um eine Bibliothek für die Arduino-Umgebung.
Außerdem ist aus dem Projekt ein Shield für den Arduino Mega und Due entstanden, auf dem ein ADAU1701 arbeitet, quasi die plug&play Lösung. Das Shield bringt bereits, wie das Interface-Board für den Sure-DSP auch, Klinkeanschlüsse für In- und Outputs mit.

Was kann das?
Letztendlich geht es darum, eine große Auswahl an Funktionsblöcken im SigmaStudio im Livebetrieb mit externen Steuerungsmöglichkeiten zu beeinflussen. Man ist dabei nicht wie mit den vorhandenen GPIO Pins vom DSP an die Blöcke gebunden, die einen Steuerungseingang haben. Auch erfolgt die Berechnung der neuen Koeffizienten für die Filter und anderen Funktionen im Livebetrieb auf dem Arduino. Für variable Filter und Equalizer ist man also nicht mehr auf die Lookup Filter, die auf Basis von einer begrenzten Anzahl an vorher berechneten und abgespeicherten Werten funktionieren, angewiesen.
Eine Übersicht mit den Blöcken, die unterstützt werden, findet sich auf der ersten Github-Seite.

Was braucht es dazu?
- Einen Arduino (Nano, Uno, Mega, Due und viele mehr sind kompatibel)
- Einen kompatiblen DSP (ADAU1701, ADAU144x), also zum Beispiel das AIDA-DSP Shield, passende Boards aus dem FreeDSP Projekt, das Sure/Wondom DSP Board und auch die gängigen Verstärkerboard mit eingebautem ADAU1701 DSP.

Wie funktioniert es?
Ein Signalprozessor (meistens ein ADAU1701) bearbeitet wie gewohnt ein Audiosignal nach einem Programm, was man wie sonst auch im SigmaStudio erstellt hat. Parallel dazu läuft ein Arduino, der zum einen Steuersignale auswertet (Potentiometer, Schalter, Taster, Drehencoder,...) und zum anderen mit dem DSP kommuniziert. So kann der Arduino im Livebetrieb z.B. abhängig von einem Potentiometer einen Block im SigmaStudio verändern, indem Parameter für den Signalprozessor vom Arduino neu berechnet und auf den DSP übertragen werden.
Im Prinzip passiert nichts Anderes, wie wenn man im SigmaStudio im Livebetrieb programmiert. Auch dort kann man eine Frequenz eines Filters ändern und hört die Änderung in Echtzeit. Nichts anderes macht der Arduino.
Im Hintergrund arbeitet eine ziemlich mächtige Bibliothek, sodass man sich als Anwender keine Gedanken um das eigentliche Berechnen und Übertragen von Parametern machen muss. Wer schon ein bisschen mit Arduinos rumgespielt hat wird in kürzester Zeit auch einen DSP extern steuern können.
Auf der Github-Seite gibt es einige Beispielprojekte zum runterladen, die sowohl das SigmaStudio-File als auch den zugehörigen Arduino-Sketch enthalten. Daraus lässt sich herleiten, wie die einzelnen Funktionen aufgerufen werden, eine Übersicht über die Funktionen der Bibliothek und deren verwendung scheint es bisher nicht zu geben. Von den Beispielsketchen darf man sich nicht abschrecken lassen, ein Großteil des dort enthaltenen Codes ist dazu da, um Statusinformationen im seriellen Monitor der Arduino-Umgebung (für Debug-Zwecke) auszugeben und für die eigentliche Funktion nicht notwendig.

Beispiel parametrischer EQ:
Ein Subwooferverstärker mit DSP soll einen parametrischen EQ bekommen. Mit Lookup-Filtern ist das alleine mit dem DSP und dessen GPIO Eingängen nicht möglich, da sich abhängig von drei Potentiometern Güte, Frequenz und Boost ändern lassen sollen. Bei Lookup-Filtern ist es effizient nur möglich, einen Parameter zu ändern.
An den Arduino werden also drei Potis angeschlossen. Der Arduino liest die aktuelle Potistellungen ein, berechnet daraus die Filterkoeffizienten für die aktuelle Einstellung und überträgt diese auf den Signalprozessor. Dies geschieht völlig unterbrechnungsfrei und ohne irgendwelche Störgeräusche.
So ist es auch möglich, einen grafischen EQ mit 15 Bändern zu erstellen, im SigmaStudio braucht es dazu bloß 15 EQ Blöcke, gesteuert werden diese über den Arduino, mit dem es kein Problem ist, 15 Potiwerte einzulesen.

Beispiel aktive Frequenzweiche:
Mit den Hausmitteln des ADAU1701 ist es zwar möglich, eine variable Frequenzweiche zu erstellen, allerdings ist die Bedienung per Poti relativ unpräzise. Mit diesem Projekt wäre es mit etwas Aufwand möglich, per Display und Knöpfen/Drehencoder eine Frequenzweiche ähnlich den Speakermanagnement-Systemen wie t.racks DS2/4 und Behringer DCX2496 zu realisieren.
Per Display und Taster/Drehencoder kann man sich durch Menüs klicken, in denen dann die Parameter der verschiedenen Einstellungen (Highpass, Lowpass, EQs, Limiter,..) verändert werden können. Für solche Menüs gibt es bereits fertige, umfangreiche Bibliotheken für den Arduino. Auf Basis dieser Einstellungen werden alle nötigen Koeffiziente für den DSP berechnet und übertragen. So ließen sich die Einstellungen ganz exakt (aufs Hz genau, Anhebung/Absenkung von Pegel auf Wunsch auch mit drei Nachkommastellen usw.) vornehmen. Und auch in mehreren Presets speichern.

Dieses Projekt sorgt also dafür, dass die zeitkritischen Prozesse alle auf dem DSP bleiben und wie gewohnt ablaufen und sich das grundsätzliche Programm ganz einfach mit Blöcken zusammenklicken lässt.
Aber man bekommt die Möglichkeit, die ganzen Steuerungsgeschichten mit beliebiger Freiheit als Code zu programmieren ohne, dass man auf die nicht ganz so umfangreichen Steuerungsblöcke im SigmaStudio beschränkt ist. Grenzen gibt es hier nur sehr wenige, an einem Arduino Mega könnten ohne weitere Maßnahmen 16 Potis und über 50 Schalter/Taster/LEDs angeschlossen werden. Reichen 16 Potis nicht aus kann man relativ simpel einen Multiplexer anschließen um weitere Potis einzulesen.
Auch wenn man hier auf einmal Code schreiben muss ist das relativ harmlos, da die Arduino-Umgebung sehr einsteigerfreundlich ist. Ich habe selber erst vor wenigen Monaten das erste mal einen Arduino angefasst und konnte da nur auf ein bisschen Grundlagen in C-Programmierung zurückgreifen. Mit der Arduino-Umgebung bekommt man eben relativ schnell etwas lauffähiges zusammen, was dann für genug Motivation für die nächsten Schritte sorgt.

Ich bin da wie gesagt selber noch relativ am Anfang und habe nun die Geschichte mit einem FreeDSP und einem Arduino Nano sowie einem Arduino Due zum laufen bekommen (das erste eigene Projekt, ein parametrischer EQ auf dem Steckbrett).

Ich hoffe, dass das Projekt auf diesem Wege ein wenig verbreitet wird. Es kamen im Sure-Thread ja durchaus hin und wieder Anfragen zu komplexeren Steuerungsaufgaben des DSP oder zu Möglichkeiten, mehr als 4 Potis anzuschließen.
Das Projekt hat definitiv enormes Potential!

Gerade für die Sure-DSP Besitzer dürfte das sehr interessant sein, es ist nur ein Arduino notwendig, den es aus dem fernen Osten schon für deutlich unter 10 € gibt. Ein Nano mit 328 Prozessor reicht für die ersten Versuche aus, diesen gibt es ab 2 €.
Ymf
Stammgast
#2 erstellt: 31. Jan 2018, 00:52
Klingt extrem interessant.
Ich habe das schon richtig verstanden, dass der Arduino quasi den Programmspeicher des DSPs ersetzt? Somit läuft des DSP immer im Programmiermodus, nur dass der Befehlsgeber nicht der PC, sondern der Arduino ist?
An die Herangehensweise habe ich schon gedacht und die wurde auch schon diskutiert, aber nicht konkret. Mir fehlt ehrlich gesagt bisher auch einfach der Bedarf eines dermaßen flexiblen DSPs.
IPv6
Stammgast
#3 erstellt: 31. Jan 2018, 01:59
Ja, die Vorgehensweise wurde schon von einigen Leuten vorgeschlagen, aber ein "nimm doch einen Mikrocontroller und lies damit Potis aus und übertrag die Werte ins DSP" ist verdammt abschreckend, weil ich zum Beispiel keine Ahnung hätte, wie ich da rangehen soll. Viele Andere offenbar auch nicht, zumindest hat niemand eine entsprechende Lösung vorgestellt. Wenn man sich die AIDA Bibliothek mal anschaut merkt man recht schnell, dass die Koeffizientenberechnung und vor allem das Übertragen der Daten doch gar nicht so einfach ist, da kommen schon ein paar tausend Zeilen Code zusammen.
Glücklicherweise hat sich ein Entwickler die Arbeit gemacht und das Projekt open source zur Verfügung gestellt, sodass der Bastler nur noch den spaßigen Teil machen braucht.

Was genau meinst du mit Programmspeicher?
Der Arduino ersetzt zunächst mal den externen EEPROM auf der Platine. Das DSP läuft mit dem Arduino nicht mehr im selfboot-Modus, also holt sich sein Programm und seine Parameter beim Neustart nicht selber aus dem EEPROM sondern der Arduino bootet den DSP, schreibt ihm also beim Start die benötigen Programm- und Parameterdaten an die entsprechenden Speicherstellen. Also grundsätzlich kann der DSP im Selfbootmodus weiterlaufen (ich habe den Selfboot-Pin bei mir auch nicht dauerhaft auf GND gelegt), nur sobald der Arduino Strom bekommt wird das Programm, was der Arduino gespeichert hat, in den DSP geladen. Eben das, was passiert, wenn man im SigmaStudio auf "Link Compile Download" klickt, da wird auch das aktuell laufende Programm einfach mit dem neuen aus SigmaStudio überschrieben.
Der Arduino speichert hierzu die Daten, die normalerweise im externen EEPROM auf der DSP-Platine sind in seinem eigenen Speicher.

Es gibt bei dem DSP keinen wirklichen Programmiermodus. Wenn du auf "Link Compile Download" klickst wird das aktuelle Programm kompiliert und in den DSP geschrieben, also wird der DSP quasi mit dem aktuellen Programm neu gebootet. Ab dann läuft der DSP ganz normal weiter, man kann auch die Verbindung vom Programmer zum DSP trennen und es wird nichts passieren. Das ist auch der "Leerlaufzustand" beim Betrieb mit dem Arduino.
SigmaStudio weiß nun, an welchen Speicherstellen welche Koeffizienten stehen. Veränderst du einen Wert werden die Koeffizienten neu berechnet und in den DSP geschrieben. Das ist dann bloß ein einziger Schreibvorgang, bei dem nur die entsprechenden Werte, die sich verändert haben, neu geschrieben werden. Also nicht das ganze Programm. Mit dem Arduino passiert das gleiche: letztendlich prüft man mit einer Funktion, ob sich der Wert eines Potis verändert hat, dazu kommt in der Bibliothek die "isInRange"-Funktion mit. Ändert sich der Potiwert lässt du den Arduino die entsprechenden Koeffizienten neu berechnen und in den DSP schreiben. Der DSP bearbeitet das Audiosignal ab diesem Zeitpunkt mit den neuen Parametern.

Vom Ablauf ist es somit das gleiche, wie wenn man bei jedem Start seinem Geräts einmal auf "Link Compile Download" klickt statt das der DSP sich selber bootet. Und bei Bedarf werden im Livebetrieb nochmal einzelne Parameter abgeändert, wie wenn man im SigmaStudio im "Liveprogrammiermodus" (den es so ja nicht gibt) in irgendeinem Block andere Werte eintippt.
Kay*
Inventar
#4 erstellt: 31. Jan 2018, 05:38

Mir fehlt ehrlich gesagt bisher auch einfach der Bedarf eines dermaßen flexiblen DSPs.

...
weil die nötige Messtechnik ohnehin nur auf dem PC läuft?

Irgendein mathematisch korrekt definiertes Filter sieht in der Welt der Akustik meist alles andere als sinnvoll aus.
anders formuliert,
eine einstellbare Frequenzweiche/para. EQ/usw. ist ohne Messtechnik völlig sinnfrei
(und da kann ich dem DSP auch gleich über diesen PC mitteilen, was er zumachen hat )
Ymf
Stammgast
#5 erstellt: 31. Jan 2018, 10:17
Nein, weil mein Einsatzgebiet bisher das Auto ist, wo ich sowieso immer an der gleichen Stelle sitze und die gleiche Korrektur brauche.

@ IPv6:
Dass es von der ersten Überlegung bis zum fertigen Vorhaben ein langer Weg ist und viel Mühe kostet, ist keine Frage. Da ziehe ich ganz klar den Hut.
Danke für die ausführliche Erklärung zur Funktionsweise. So hatte ich das auch verstanden, nur wohl etwas schlecht erklärt.
IPv6
Stammgast
#6 erstellt: 31. Jan 2018, 11:29
Naja, für Anwendungen mit "einmal einstellen, nie wieder anfassen" ist das natürlich nicht gemacht, das ist klar.

Aber eine mobile Box mit einem Sure-Verstärker mit DSP...
Ein AUX Input, ein digitaler Bluetooth-Eingang, 2-Band EQ und Gain pro Kanal mit einem Arduino Nano für 2 €.

Es gibt ja einige Leute, die die Potis von ihren Sure-Boards runtergelötet und durch externe Potis ersetzt haben, weil sie irgendwas damit anstellen wollten. Der Bedarf scheint also durchaus da zu sein.

Oder ein VU-Meter in einem beliebigen Projekt, mit dem ADAU1701 direkt 10 LEDs ansteuern ist quasi unmöglich, mit einem Arduino kein Problem.

Der Entwickler ist wohl gerade dabei, ein ADAU1701 zusammen mit einem Arduino-kompatiblen Mikrocontroller auf ein Board zu packen, was in ein Gitarreneffektpedal passt - digitaler, frei programmierbarer Gitarreneffekt, die Beispiele bei Github zeigen, dass schon ein "Tubescreamer", ein Tremolo und andere Effekte realisiert wurden.
yentz
Ist häufiger hier
#7 erstellt: 08. Jul 2019, 10:27
moin,
ich habe mir die ganzen infos vom aida dsp project mal runtergeladen und angeguckt. leider habe ich recht wenig bzw. keine ahnung vom programmieren. ich denke mit etwas fleiß sollte ich es hinbekommen durch die beispiele rückschlüsse auf die verwendung ziehen zu können (oder muss man tatsächlich nur ein sigma studio projekt als xml file exportieren, mit dem javatool modifizieren und den code in arduino ide einfügen um diiesen dann compilieren und zum arduino schicken zu können?)
in der library wird ja das eigene dsp board initialisiert. muss das angeändert werden, da ja ein anderes board mit gleichem chip benutzt wird bzw. sind weitere modifikationen notwendig um das ganze auf dem sure / wondom board zum laufen zu bekommen?
echtzeitsteuerung ALLER parameter mit mehr als nur 4 potis bzw noch besser display und klick encoder wäre phänomenal und würde unglaublich viele möglichkeiten eröffnen das teil im kontext einer studioumgebung nutzen zu können.
Gruß,
Jens
Suche:
Das könnte Dich auch interessieren:
KHV-DIY Projekt/Vorstellung
Hobbyelektronik am 15.08.2017  –  Letzte Antwort am 31.03.2018  –  13 Beiträge
Baubericht PreAmp mit DSP
schnber am 20.03.2015  –  Letzte Antwort am 28.04.2015  –  26 Beiträge
projekt
acnos am 04.04.2004  –  Letzte Antwort am 04.04.2004  –  2 Beiträge
DSP
Velocity am 28.09.2021  –  Letzte Antwort am 31.10.2021  –  13 Beiträge
Verstärker mit mini DSP
nolie am 06.01.2015  –  Letzte Antwort am 06.01.2015  –  8 Beiträge
Der Sure DSP Thread
bierman am 12.08.2016  –  Letzte Antwort am 27.03.2024  –  2559 Beiträge
Shure DSP - Basic Probleme
Tiegerkrebs am 27.03.2020  –  Letzte Antwort am 01.04.2020  –  19 Beiträge
Surround Projekt
wemp am 14.01.2004  –  Letzte Antwort am 14.01.2004  –  4 Beiträge
Projekt Microphonverstärker
gatschi am 04.03.2005  –  Letzte Antwort am 04.03.2005  –  3 Beiträge
Projekt: TDA7294
FireAmp am 15.10.2012  –  Letzte Antwort am 06.11.2012  –  15 Beiträge

Anzeige

Aktuelle Aktion

Partner Widget schließen

  • beyerdynamic Logo
  • DALI Logo
  • SAMSUNG Logo
  • TCL Logo

Forumsstatistik Widget schließen

  • Registrierte Mitglieder925.721 ( Heute: 9 )
  • Neuestes Mitgliedelibyss
  • Gesamtzahl an Themen1.551.068
  • Gesamtzahl an Beiträgen21.537.333

Top Hersteller in Elektronik Widget schließen