Forum: Digitale Signalverarbeitung / DSP / Machine Learning µC-getriebene Frequenzweiche für Digitalverstärker


von Kai G. (runtimeterror)


Lesenswert?

Hi zusammen!

Ich hatte vor kurzem folgende Idee zum Bau eines Digitalverstärkers:

1. hochweriger A/D-Wandler nimmt das Originalsignal an (Digitaleingang 
später natürlich auch) und wandelt es direkt in einen digitalen 
Datenstrom um (gibt von Analog Devices einen Audio-Stereo-A/D-Wandler 
mit 24-bit @ 96 kHz - such ich euch auf Wunsch nochmal raus)

2. Der digitale Datenstrom wird von einem (oder mehreren) 
Mikrocontrollern oder DSPs in verschiedene Frequenzbänder unterteilt (3 
- 5)

3. optional: Das Signal wird verzögert und/oder phasengedreht

4. Der digitale Datenstrom wird beispielsweise über Cat.5-Kabel bis 
unmittelbar zu den Boxen geleitet (Bitte nachher nicht an solchen 
Kleinigkeiten festhalten - Glasfaser geht natürlich auch ;) )

5. Die digitalen Signale werden mit eigens für den jeweiligen 
Frequenzbereich optimierten Verstärkern (Tiefe Töne: hohe Leistung, hohe 
Auflösung der Elongation, geringe zeitliche Auflösung; Hohe Töne: 
geringe Leistung, hohe zeitliche Auflösung) unmittelbar vor der Membran 
D/A-gewandelt und verstärkt.

Im Ergebnis hätte ich da gerne einen Verstärker/Endstufe mit unfassbar 
hohem Signal-Rausch-Abstand, den ich per USB kalibrieren kann (Phasen, 
Laufzeiten, etc.)

Ich wollte das Thema einfach mal mit euch durchdiskutieren. Vielleicht 
hat der ein oder andere schon Erfahrung damit. Vielleicht ist das ganze 
auch aufgrund der Signallaufzeiten zum Scheitern verurteilt - wobei 
Musik ohne Film dann immer noch gehen würde.

Ich denke zunächst ist der Algorithmus für die Frequenzweiche das 
Interessanteste.

Später vielleicht der Aufbau und die Optimierung der Endstufen.

Bin mal gespannt ;)

von Gast123 (Gast)


Lesenswert?

Für sowas würde ich aufgrund der benötigten Anzahl an Schnittstellen 
vielleicht einen FPGA empfehlen. Zum berechnen der Filter kann man ja 
einen Softcore einsetzen. Ansonsten gibt es hier im Forum/Wiki auch ein 
Projekt.

von Kai G. (runtimeterror)


Lesenswert?

Danke für die Einschätzung. Hatte jetzt vorerst eine 32-bit MCU von 
Atmel im Auge - die sind für mich im Moment noch greifbarer als FPGAs.

Bei FPGAs weiß ich noch nicht, wie ich mit den paar Logik-Elementen 
auskommen soll... habe das Gefühl, ich habe davon eine etwas falsche 
Vorstellung. So viele Schnittstellen werden's wohl auch nicht... das 
meiste sind serielle Datenströme.

Mit DSPs kenne ich mir ehrlich gesagt (noch) gar nicht aus.

Um welches Projekt im Forum/Wiki handelt es sich?

Folgende Threads zum Thema Frequenzweiche habe ich gefunden:

Der Beitrag hier
Beitrag "Aktive Filter (Frequenzweiche)"
hat mich schonmal zu
http://en.wikipedia.org/wiki/Butterworth_filter
geführt... muss mir da noch erarbeiten, wie sich das alles digital 
berechnen lässt - find's bis jetzt noch nicht offensichtlich.

Beitrag "digitale Frequenzweiche mit Atmega 8535"
beschäftigt sich mit einem einfachen Spectrum-Analyzer - ist ja nicht 
wirklich schwer und reicht für meine Zwecke leider nicht.

Beitrag "DSP für Aktivlautsprecher?"
Klingt auf jeden Fall interessant und hat mich zu
http://focus.ti.com/docs/prod/folders/print/tas3103a.html
geführt. Der hat allerdings "nur" drei Ausgänge und ich wollte mich halt 
selbst mal an dem Problem versuchen und nicht allzu viele Teile von der 
Stange zu holen. Ansonsten gefällt der! Preis ist auch fair.

Hier wird was Ähnliches versucht, wie ich vor habe... allerdings analog
Beitrag "Frequenzselektiver AMP im NF-Bereich"

Das Projekt hier klang auch sehr vielversprechend... scheint sich aber 
nichts mehr zu tun und die Ausgänge der Schaltung wären auch wieder 
analog gewesen:
Beitrag "TAS3xxx - Digitaler Audio Prozessor"

Die 54 anderen Threads zu den Themen fand ich nicht wirklich passend.

Mein erster Ansatz basiert auf einer einfachen Fourier-Analyse (96 
Bänder) und anschließender Resynthese zu 5 Frequenzgruppen. Muss mal 
schauen, ob die Rechnung aufgeht und ob ich einen geeigneten Träger für 
den Algorithmus finde. Im Moment schaue ich noch, ob ich die 
Latenzzeiten im unteren Frequenzbereich kleiner kriege, sieht aber gut 
aus.

Werd mich jetzt noch was ziellos in die Berechnung von Filtern 
einarbeiten. Ist wahrscheinlich ganz einfach, aber mir fehlt noch ein 
wenig die Orientierung.

von Gast123 (Gast)


Lesenswert?

Naja, du brauchst ja im Endeffekt für jeden Kanal (bzw. Stereokanal) 
eine serielle Schnittstelle. Per Software kommst du da vermutlich 
schnell an die Grenze der Rechenleistung und ein normaler uC hat 
vermutlich nicht genügend Hardwareschnittstellen.

Mit einem FPGA kannst du quasi beliebig viele serielle Schnittstellen an 
deinen Softcore hängen. Mit dem richtigen FPGA hast du auch massig 
Platz. Ich vermute du denkst da eher an einen CPLD wenn du "ein paar 
Gatter" schreibst. Das kann man nicht vergleichen.

Wieso willst du das mit FFT machen, wieso kein einfaches digitales 
Filter (FIR, IIR und was es da alles gibt)?

von Kai G. (runtimeterror)


Lesenswert?

Habe die Filter noch nicht ganz verstanden... muss mich wie oben 
geschrieben noch tiefer in die Materie einarbeiten. Alle Artikel, die 
ich hier rumliegen habe beschreiben nur die Eigenschaften der FIR- und 
IIR-Filter und nicht, wie sie berechnet werden.

Ich weiß, dass ich iegendwelche Koeffizienten brauche... wo ich die 
herbekomme, und ws ich damit nachher mache weiß ich noch nicht genau. 
Lerne halt noch ;)

Warum Fourier? Damit kenne ich mich im Moment noch am Besten aus und mit 
irgendwas muss ich ja mal anfangen ;)

Der dickste Cyclone hat 5300 logic cells. Bei reiner 32-bit Arithmetik 
komme ich auf 5300 / 32 = 165 32-Operationen, die ich darauf ausführen 
kann - das wäre was dünn. Wie gesagt, ich kann mir das nicht vorstellen, 
dass das alles sein soll. Die Anzahl der verfügbaren Gatter ist in 
meinen Augen uninteressant, oder habe ich da was verwechselt?

CPLDs fallen klar raus.

von Gast123 (Gast)


Lesenswert?

Da hast du was falsch verstanden. Ich kenn jetzt den Cyclone nicht, aber 
ein mittlerer FPGA von Xilinx hat 500k Zellen. Dazu noch etwas RAM und 
sonstige Hardwarebausteine (Multiplizierer etc). Selbst ein kleinerer 
FPGA hat bei der Implementierung von einem Microblaze (einem 32-Bit 
RISC) mit ein bisschen Peripherie noch die Hälfte seines Platzes übrig.

Zur Filterberechnung gibt es massig Programme. Software wie Matlab (oder 
die freien "Klone") können mit Sicherheit auch sowas und geben teilweise 
gleich den passenden C-Code aus.

von Kai G. (runtimeterror)


Lesenswert?

Die Spartan3-FPGAs von Xilinx haben 50K bis 5M sog. "System Gates"... 
ich denke, die meinst du mit Zellen. Wie viele davon brauch ich denn 
beispielsweise für einen 32-Bit-Volladdierer? (jetzt ohne große 
Optimierung)

Ich würde jetzt unwissend wie ich bin 32 sog. "Equivalent Logic Cells" 
aneinanderkabeln. Jede davon addiert mir mittels LUT Bit A + Bit B + 
Carry und liefert mir die Summe und das neue Carry. Ein FPGA mit 1M 
System Gates hat gerade mal 17280 logic cells - würde für 540 
32-Bit-Additionen reichen :/
Wo ist mein Verständnisfehler?

Die Filtergeschichte habe ich denke ich verstanden... berechnen werde 
ich das erstmal zu Fuß um sicherzugehen, dass ich auf dem richtigen Weg 
bin. Fühle mich in der komplexen Zahlenebene noch nicht ganz zu Hause... 
aber es wird.

Danke soweit für die Infos!

von Kai G. (runtimeterror)


Lesenswert?

Habe ein ziemlich geniales Dokument zu dem Thema gefunden:
http://deposit.ddb.de/cgi-bin/dokserv?idn=970716729&dok_var=d1&dok_ext=pdf&filename=970716729.pdf

Das beschreibt sehr gut den Aufbau rauscharmer Komponenten wie 
A/D-Umsetzer, D/A-Umsetzer, Filter, etc.

so... bin dann mal weiterlesen...

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Kai Giebeler wrote:
> Ich würde jetzt unwissend wie ich bin 32 sog. "Equivalent Logic Cells"
> aneinanderkabeln. Jede davon addiert mir mittels LUT Bit A + Bit B +
> Carry und liefert mir die Summe und das neue Carry. Ein FPGA mit 1M
> System Gates hat gerade mal 17280 logic cells - würde für 540
> 32-Bit-Additionen reichen :/
> Wo ist mein Verständnisfehler?

Man führt natürlich nicht alle Rechenoperationen parallel durch, sondern 
nacheinander. Der Filter kann z.B. mit 50 MHz laufen und pro Sample > 
1000 Multiplikationen/Additionen durchführen.

Schau dir mal dieses Projekt an:
Audio-DSP mit Spartan 3-FPGA

von Kai G. (runtimeterror)


Lesenswert?

Habe das Projekt schon länger im Blick... allerdings werden hier nicht 
mehr die mir fehlenden Grundlagen erörtert, sprich: FPGA, VHDL und 
Filteralgorithmen :(

Was ich bräuchte wäre ein Tutorial "Algorithms to equalize a time 
discrete series of audio samples"... am Besten mit Quellcode

Was ich mir bis jetzt in diesem Zusammenhang erarbeitet und weitgehend 
verstanden habe:
- Laplace-Transformation (habe Verständnisschwierigkeiten bei der 
Rücktransformation)
- Fourier-Transformation (gut, die kenne ich schon was länger ;) )
- Impulsantwort
- Faltung

Was ich noch nicht verstanden habe:
- Biquads - was ist das? Wie setze ich die ein?
- Filterkoeffizienten - wo kommen die her (jetzt mal von Matlab 
abgesehen)? Wo setze ich die wie ein?

Mit meinem jetzigen Kennstnisstand würde ich einfach einen Impuls mit 
Fourier oder Laplace in die Frequenzdomäne transformieren, das Ergebnis 
phasenverschieben und die Amplituden anpassen, das Ergebnis wieder in 
die Zeitdomäne rücktransformieren und das eingehende Signal damit 
falten.

Ich habe aber bei Laplace wie gesagt Probleme mit der diskreten 
Rücktransformation und Fourier kriege ich nur bei periodischen Signalen 
sinnvoll angewandt... was mein eingehender Impuls nunmal nicht ist. 
Außerdem ist die Faltung extrem rechenintensiv.

hoffentlich kann jemand was mit meinem geistigen Gewirr was anfangen ;)

Ich les mich dann mal weiter durch's Internet... hoffentlich sind bald 
die Bücher da...

von Jorge (Gast)


Lesenswert?

Habe etwas ähnliches schon "im Auge".
Am PC bereits nutzbar wenn man foobar hat (mp3 Player und mehr.

Ich habe damit digitale Raumkorrektur gemacht (versucht):
[http://drc-fir.sourceforge.net/]
Der Erfolg ist so naja.

Es wird einfach mit der Impulsantwort FIR gefiltert, Koeffizienten 
bekommt man z.B. aus der FFT.

Jetzt kommt der Haken: Je länger die Zeitverzögerung ist desto höher ist 
der Rechenaufwand. Ein leistungsfähiger PC oder Workstation, also 
schneller als ein DSP, stösst damit schnell an seine Grenzen.

Kannst ja mal ausprobieren ob es was für dich ist. Ansonsten liefert 
Behringer ein digitales Lautsprechermanagementsystem für appel and egg. 
Alles was du brauchst...

ULTRADRIVE PRO DCX2496 www.behringer.com (www.thomann.de für 248EUR)

von Kai G. (runtimeterror)


Lesenswert?

Danke für den Projekthinweis... les mich da gleich mal durch.

Das mit der überlangen Impulsantwort ist mir auch aufgefallen. Ich 
wollte mit der Impulsantwort höchstens Phase und Amplitude verändern. 
Die Laufzeitkorrekturen soll je ein nachgeschalteter Rinpuffer für jeden 
Lautsprecher übernehmen - das verkürzt die Impulsdauer enorm.

Die Fertigsysteme interessieren mich im Moment noch nicht - bin noch 
optimistisch genug, das selbst (und mit eurer Hilfe natürlich ;) ) 
hinzubekommen.

> Der Erfolg ist so naja.
Woran liegt's? Bzw. inwiewern? Nur das Problem mit der Rechenleistung, 
oder ist die Qualität nicht zufriedenstellend?

so, hole jetzt erstmal Brötchen...

von Jorge (Gast)


Lesenswert?

>Die Fertigsysteme interessieren mich im Moment noch nicht - bin noch
>optimistisch genug, das selbst (und mit eurer Hilfe natürlich ;) )
>hinzubekommen.

Ich zumindest werde da wohl keine Hilfe sein, da es mir im Moment noch 
zuviele unbekannte Variablen gibt. Die Fertigsysteme interessieren mich 
auch nicht, sie können auch kein FIR. Das drumherum also Bauteile für 
A/D ist bei Behringer aber absolut brauchbar und auch rauszukriegen evtl 
sogar nutzbar.

Als Breitbandfan mit FE103E (1,9g Membranmasse) möchte ich die 
Gruppenlaufzeit optimieren. Auch 2g Membranmasse sind natürlich viel zu 
schwer obwohl der FE103E schon ein richtiger Hammer ist. Man will mir 
einreden das man das nicht hört. Also was ein DSL-Modem aus dem Takt 
bringt das hört ein Mensch gar nicht... Das möchte ich mit 20g Membranen 
machen schließlich kommt auch noch Sonofil und ein BR-Rohr dazu.

(vergessen: http://www.hometheatershack.com/roomeq/ auch mit AVR32 etwas 
dabei)

>> Der Erfolg ist so naja.
>Woran liegt's? Bzw. inwiewern? Nur das Problem mit der Rechenleistung,
>oder ist die Qualität nicht zufriedenstellend?

Ich verwende eine m-audio Delta2496, die für mich relativ konkurrenzlos 
dasteht alternativ habe ich Crystal Sound DA Chips. Ich denke dass es 
mit der Rechengenauigkeit zusammenhängt, d.h. es müssen mehr als nur 
floats her, das wurde auch anderswo schon bemängelt.

Den Delay via Verzögerungsschaltung zu machen krankt genau an dem für 
das Ohr sehr kritischen Grundtonbereich, also entweder machst du die 
Entzerrung über FIR oder es lohnt sich gar nicht:

http://www.fairaudio.de/lexikon-g.html#Gruppen-Laufzeit

Im Hintergrund steht der Präzedenzeffekt um den geht es hier.

von Jorge (Gast)


Lesenswert?

Die Arbeit von Swen Müller habe ich übrigens schon lange. Für einen 
akademischen Grad ist sie allemal gut und auch amüsant. Es ist ein 
klassisches Beispiel dafür wie man zu Null gleich Null kommt. Am Ende 
werden Leute mit halboffenem Mund zu Hörsessions befragt, naja.

Für den Fall, dass einem die Sache "am Herzen" liegt muss man 
Zwischenlösungen  und Optimierungen und Kompromisse machen. Ich denke 
schon dass da noch einiges drin ist.

von Kai G. (runtimeterror)


Lesenswert?

Finde die Arbeit auch recht amüsant - schön viele Stilblüten drin ;)

Hat mir aber dennoch eine ganze Ecke weitergeholfen, was das Verständnis 
für die Materie angeht und sind einige gute Ideen drin.

Klar gibt's am Ende einen Kompromiss an Qualität, Echtzeittauglichkeit, 
Aufwand und Kosten - meine Priorität liegt im Moment noch ganz klar bei 
der Qualität... zumindest bis ich die Kosten kenne ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.