mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Machbarkeit (mehrere) Realtime Audio Filter


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Max M. (maxmicr)


Bewertung
0 lesenswert
nicht lesenswert
Guten Abend,

ich hab früher recht gerne Lautsprecher gebaut (also Chassis vermessen, 
Gehäuse mit Frequenzweiche simuliert, Holz zuschneiden, fräsen und 
kleben) und hab da bei einem Projekt keine passive Frequenzweiche 
sondern einen miniDSP eingesetzt. Der hat das Analogsignal über 2 
Stereo-Cinchkabel erhalten und  das dann gemäß den Filtern, die man 
komfortabel per PC programmieren konnte, angepasst. So spart man sich 
unter anderem die Frequenzweiche für Hoch- bzw. Tieftöner und man kann 
noch ein wenig Raumoptimierung betreiben.
Das Ding war damals sehr teuer (knapp 100€ das Stück), ich bin 
inzwischen nicht mehr so drinn in der Materie aber hab gehört / gelesen, 
dass es das inzwischen auch günstiger gibt.

Mich hätte es nun einfach mal interessiert, wie viel Rechenleistung man 
braucht, um solche Filter in "Echtzeit" (mir ist klar, dass es eine 
Reaktionsverzögerung geben wird, aber das Audiosignal sollte 
störungsfrei sein) zu berechnen?
Bei einem Stereosignal (d.h. 2 Lautsprecher mit jeweils 1x Tief- und 1x 
Hochtöner) sind das dann 4 Signale, die bearbeitet werden müssen. D.h. 
der µC müsste entweder 4 hochauflösende DACs haben oder man setzt auf 
externe DACs.
Noch dazu 4 schnelle 16-Bit ADCs (bzw. braucht man 16-Bit überhaupt?).

Die Frage kam bestimmt schon öfter vermute ich.

Edit: Hab vor kurzem ein Teardown eines IKEA-Bluetooth-Lautsprechers auf 
YouTube angeschaut und da war ein Prozessor von NXP mit 1GHz Cortex A9 + 
226MHz Cortex M4 verbaut - das erscheint mir nun doch etwas Overkill?

: Bearbeitet durch User
von mid night man (Gast)


Bewertung
-4 lesenswert
nicht lesenswert
Max M. schrieb:

Machen wir es mal stückchenweise:

> das Analogsignal über 2 Stereo-Cinchkabel erhalten
Denkfehler 1: Mit Stereo-Cinchkabeln bekommt man schon ein Klangdefizit. 
Außerdem sind es 2 Analogsignale und zusammen mit dem GND deren 4!

Max M. schrieb:
> aber das Audiosignal sollte störungsfrei sein
Denkfehler 2: Gerade digitale Technik baut Störungen in des Signal ein.

Max M. schrieb:
> sind das dann 4 Signale
Denkfehler 3: Es sind 2 Signale, die bearbeitet werden müssen. 2 Signale 
auf 4 Leitungen = 2 Leitungspaaren. Erst nach der von dir angestrebten 
Trennung sind es 4 Signale = 2 Bässe und 2 Höhen auf insgesamt 4 
Leitungspaaren = 8 Leitungen! Von diesen 8 Leitungen werden bei deiner 
Billiglösung 4 GND sein, nehme ich an.

Max M. schrieb:
> Noch dazu 4 schnelle 16-Bit ADCs
Denkfehler 4: 16 Bit DACs sind bei Weitem nicht ausreichend. Seit 20 
Jahren arbeiten die Audio-Techniker mit 20Bit-DACs oder gar 24 Bit-DACs.

Max M. schrieb:
> IKEA-Bluetooth-Lautsprechers
Denkfehler 5: Was mit solchen Dingern getestet wurde, ist aussagenfrei. 
Wer so eine Qualität anstrebt, kauft lieber für 50,- was Fertiges!

Denkfehler 6: Du hast du ADCs vergessen

Denkfehler 7: Du hast die Verstärker vergessen

von Gretel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Das Ding war damals sehr teuer (knapp 100€ das Stück)

100€ das Stück ist dafür nicht teuer.
Wenn du es dafür noch bekommst: Kaufen.

> ein Prozessor von NXP mit 1GHz Cortex A9 + 226MHz Cortex M4 verbaut

Das ist Schnarpel für die Massen und hat mit "Hochwertig" gleich
gar nichts zu tun.

von Peter (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Grösster Denkfehler ist das du alles in einem Kasten machst.

2 Lautsprecher also 2 * Elektronik (Mono)

Dann hast Du entweder einen ADC oder einen Digitaleingang.
Da wir hier im Lautsprecher sind reichen wahrscheinlich noch 12bit (16 
oder 24 sind aber auch nicht schlecht auch wenn man >16bit nicht mehr 
bemerkt).

Als Prozessor / Filter würde ein Cortex M4 oder M7 reichen.
Dann noch eine Digitalentstufe dahinter (macht der Prozessor über PWM) 
und man ist fertig.

Mehr braucht man innerhalb eines Lautsprechers nicht machen, es sind ja 
alle Eigenarten bekannt.
Sauber ausmessen muss man das dann logischerweise, sonst klingt das nach 
einem Blecheimer.

Ich habe schon Entstufen mit einem kleinen AVR gesehen, nur die würden 
keinen Filter mehr schaffen, darum der M4 mit seiner DSP-Einheit.

Als externe Entstufen muss man sich schon etwas mehr anstrengen, weil 
man hier auf alles gefast sein muss.

P.S. ich arbeite in der High End Branche (Lautsprecher).

von Jürgen S. (engineer) Benutzerseite


Bewertung
1 lesenswert
nicht lesenswert
Ob ein Prozessor reicht, oder nicht, kann man etwa abschätzen:

Wert empfangen + Zwischenspeichern = 2 uC-Operationen x Taps

Wert aus dem Speicher holen + Addieren + Multiplizieren + Aufsummieren = 
4 x Taps/2

Sind: 2 x 1024 + 4 x 1024 / 2 -> ~4000

2 Kanäle x 48 kHz * 4.000 = 500 Mega-Operationen

Kommt nun drauf an, wieviele Taktzyklen der Prozessor jeweils braucht.

Für gestiegene Anforderungen:

8 Kanal x 7 Bänder x 8192 TAPs x 192kHz = 50 Giga OPs

Wären 50 Cortexe oder ein kleines FPGA :D
http://www.96khz.org/htm/precisionaudiofilter.htm

von Max M. (maxmicr)


Bewertung
0 lesenswert
nicht lesenswert
Danke für eure Antworten,

da hab ich mein Vorhaben doch reichlich überschätzt, so weit weg sind 
wir von einem Cortex A9 dann gar nicht mehr.

Peter schrieb:
> Grösster Denkfehler ist das du alles in einem Kasten machst.

Läuft das bei aktiven Lautsprechern nicht auch so? Also einer hat die 
Elektronik + Verstärker drinnen und liefert das dann an den 2. 
Lautsprecher weiter?
Man könnte prinzipiell auch nur die Signalverarbeitung machen und einen 
externen Verstärker verwenden aber dann stelle ich mir die Verkabelung 
unschön vor da ich natürlich alles im Lautsprecher unterbringen möchte.

Vielleicht geht man erstmal von einem einfachen Lautsprecher mit 
Breitbänder aus, da braucht man dann keine Frequenzweiche zum Schutz des 
Hochtöners und man hat nur ein Ausgangssignal pro Lautsprecher.

Peter schrieb:
> Sauber ausmessen muss man das dann logischerweise, sonst klingt das nach
> einem Blecheimer.

Das ist natürlich der wichtigste Part. Das coole an dem miniDSP war, 
dass man den Frequenzgang, den man per USB-Mikrofon aufgenommen hat, so 
gleich mit Filtern tunen konnte bis man einen möglichst glatten Verlauf 
hat.

Peter schrieb:
> Als externe Entstufen muss man sich schon etwas mehr anstrengen, weil
> man hier auf alles gefast sein muss.

Da komme ich nicht ganz mit, wie meinst du das?

Peter schrieb:
> P.S. ich arbeite in der High End Branche (Lautsprecher).

Sehr cool. Ich hab das nur als (ernsthaftes) Hobby betrieben und würde 
jetzt gerne meine Leidenschaft für Microcontroller, Informatik und 
Eektronik mit Lautsprechern vernüpfen.

Peter schrieb:
> Da wir hier im Lautsprecher sind reichen wahrscheinlich noch 12bit

Warum hängt das konkret an den Lautsprechern, dass man hier weniger 
Auflösung braucht? Im Vergleich zu Kopfhörern sind Lautsprecher sicher 
weniger kritisch aber an "CD-Qualität" möchte man doch schon hin.

mid night man schrieb:
> Von diesen 8 Leitungen werden bei deiner
> Billiglösung 4 GND sein, nehme ich an.

Wie funktioniert das bei einer hochwertigen Lösung? Irgendwie muss der 
Stromkreis ja geschlossen werden?


Ein paar weitere Fragen hätte ich noch:

Steigt mit jedem weiteren Filter, den ich z.B. verwende, um den 
Frequenzgang zu linearisieren, der Rechenaufwand d.h. ein Prozessor kann 
nur eine bestimmte Anzahl an Filtern realisieren?


Muss das Eingangssignal, dass per 3.5mm Klinke reinkommt, noch in 
irgendeiner Form verarbeitet werden (z.B. verstärkt weil Spannung zu 
niedrig)?

von Peter (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Alles was ich sagte / sage bezieht sich auf einen direckten Einbau und 
nicht auf ein externes Gerät. Da sind die Anforderungen erheblich höher 
und da würde es ohne FPGA oder Cortex A* sehr schwer.


Das ist dann aber auch etwas was deutlich über dem was der TO wollte.
Rechnerisch hast aber Du recht.

Aber bei einer Frequenzweiche (MONO) mit 2 Ausgängen brauchst Du nicht 
so viel berechnen.
Es sind letztentlich nur 2 Filter.

Stereo sind es dann halt 4 Filter, 2  ADC in und 4  DAC out.
Also nichts was man nicht auf einem M4 hinbekommt und das sogar in einer 
guten Quallität. Wenn man die Qualität noch steigern will nimmt man 
Externe AD/DA Wandler und geht über I²S rein und raus.

von Peter (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Nein, aktive Lautsprecher habe das jeweils in der Box drin.

Extern Entstufen müssen mit allem zurecht kommen was man dran hängt.
Also 2-16 Ohm, unterschiedliche Kabel und weitere unbekannten 
Parametern.

Bei einer Interne Endstufe kennts Du alle Parameter und hast keine 
Überraschungen.

Je mehr Filter --> je mehr Rechenleistung.
Geht nicht anders.

von Udo K. (udok)


Bewertung
0 lesenswert
nicht lesenswert
Jürgen S. schrieb:
> Ob ein Prozessor reicht, oder nicht, kann man etwa abschätzen:
>
> Wert empfangen + Zwischenspeichern = 2 uC-Operationen x Taps
>
> Wert aus dem Speicher holen + Addieren + Multiplizieren + Aufsummieren =
> 4 x Taps/2
>
> Sind: 2 x 1024 + 4 x 1024 / 2 -> ~4000
>
> 2 Kanäle x 48 kHz * 4.000 = 500 Mega-Operationen
>
> Kommt nun drauf an, wieviele Taktzyklen der Prozessor jeweils braucht.
>
> Für gestiegene Anforderungen:
>
> 8 Kanal x 7 Bänder x 8192 TAPs x 192kHz = 50 Giga OPs
>
> Wären 50 Cortexe oder ein kleines FPGA :D
> http://www.96khz.org/htm/precisionaudiofilter.htm

Nur das kein Ingenieur Lautsprecherweichen so umständlich programmiert
(aber das weisst du ja :-) ).

Wozu gibt es IIR Filter?

Da reduziert sich der Aufwand gleich auf Daumen x Pi
1 Mega Multiplikationen pro Sekunde,
und dafür reicht ein Cortex M3 locker.

von Hört sich gut an (Gast)


Bewertung
0 lesenswert
nicht lesenswert
teensy boards

von Peter (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Da habe ich noch ein paar Fragen übersehen.

Das mit den 12 Bit geht nur weil man alles inntern in der Hand hat und 
kein Mensch das nachmessen kann. Der Bass müsste sogar noch mit 8Bit 
sauber genug arbeiten. Der Hochtöner sollte mindestens 12bit haben 16 
wäre Logischerweise besser.

Das Eingangssignal muss noch aufbereitet werden (EingangsImpedanz), ein 
OP mit entsprechender Beschaltung reicht da.

von Hört sich gut an (Gast)


Bewertung
0 lesenswert
nicht lesenswert
>Der Bass müsste sogar noch mit 8Bit
>sauber genug arbeiten.

He? Du brauchst mehr Dynamik um sauberer lautere Signale abzubilden!
Du kannst beim Bass höchstens mit der Samplerate runtergehen.

von Hört sich gut an (Gast)


Bewertung
0 lesenswert
nicht lesenswert
sauber

von Jürgen S. (engineer) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Udo K. schrieb:
> Nur das kein Ingenieur Lautsprecherweichen so umständlich programmiert
> (aber das weisst du ja :-) ).
>
> Wozu gibt es IIR Filter?

Schon richtig, aber ich wollte ihm eine worst case Abschätzung liefern.

Wobei es natürlich Fälle gibt, wo FIR-Filter nötig sind. IIR werden ja 
oft exakt wegen der begrenzten Rechenkapazitäten verwendet.


Peter schrieb:
> Der Bass müsste sogar noch mit 8Bit
> sauber genug arbeiten. Der Hochtöner sollte mindestens 12bit haben 16
> wäre Logischerweise besser.

Warum sollte der Bass mit weniger Auflösung klarkommen? Bei Bässen 
liegen hohe Amplituden vor und obendrein ist der größtmögliche Anteil 
eventueller Harmonischer im Hörbaren.

von Hört sich gut an (Gast)


Bewertung
0 lesenswert
nicht lesenswert
>Warum sollte der Bass mit weniger Auflösung klarkommen?

Für ihn ist Auflösung = Samplerate....

von Peter (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Wir reden hier über ein System was aus dem Bass und einer Entstufe 
besteht.
Der Bass muss vor und zurück bewegt werden.
Das ganze ist ein träges System das es recht leicht verzeiht das man ein 
paar bit weniger hat. Wichtig ist das man zum Zeitpunkt X auf Position Y 
ist mit der Membran.

Man könnte sogar wenn die Eingangsdaten es nicht hergeben interpolieren 
bei der Ausgabe.
Wir reden hier ja nur über 16-400/1000Hz für den Bass.

8 Bit Input wäre definitiv das unterste Limit was man machen könnte.
12 Bit wären logischweise besser, besonnders bei leisen Tönen fehlt 
einem irgentwann die Ton Informationen.

ABER man wird wohl selten 2 AD Wandler nehmen, macht halt keinen Sinn.
Einen 16Bit Wandler am I²S dran mit 48/96KHz und man hat eine gute 
Signal Basis.

Der Hochtöner braucht sowieso definitiv mehr Daten und auch eine höhere 
Abtastung wie der Bass.

von Peter (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Ihr dürft hier nicht eine Entstufe mit einem Lautsprecher vergleichen.

Bei einer Entstufe wären 8 Bit Amplitude tötlich, das will sich keiner 
anhören / schon gar nicht messen, egal wie hoch die Samplerate ist.

Ein Lautsprecher (Bass) ist da deutlich einfacher gestrickt.

von Hört sich gut an (Gast)


Bewertung
0 lesenswert
nicht lesenswert
>Wir reden hier über ein System was aus dem Bass und einer Entstufe
>besteht.
>Der Bass muss vor und zurück bewegt werden.
>Das ganze ist ein träges System das es recht leicht verzeiht das man ein
>paar bit weniger hat. Wichtig ist das man zum Zeitpunkt X auf Position Y
>ist mit der Membran.

Oh weia

von Hört sich gut an (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Ihr dürft hier nicht eine Entstufe mit einem Lautsprecher vergleichen.

Endstufe nicht Entstufe. Ach scheiße sind ja Ferien...

von Peter (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Nix "Oh weia"  Mess es durch und du wirds es sehen!
Laut ist kein Problem, besonders wenn Du noch die Samplerate intern 
verdoppelts und interpoloerst.

Aber wir reden hier über Machbarkeit und nicht über etwas was man macht.

von Hört sich gut an (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Du laberst müll...

von Andre (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Welche Quellen sollen diesen Lautsprecher bespielen?
Wenn da sowieso nur der PC dran hängt, lass den doch die Filter rechnen. 
Damit sparst du dir eine komplette analoge Zwischenstufe die sehr 
verlustanfällig ist.

von Thomas F. (tf1973)


Bewertung
0 lesenswert
nicht lesenswert
Wenn Cortex M, dann kann man sich Audio Weaver anschauen. Da gibt es bei 
Verwendung von STM32 eine freie Lizenz.

https://www.st.com/en/development-tools/st-audioweaver.html

Mit oben genannten FIR Filtern ist das schon nett (und ich arbeite da 
auch beruflich mit...), aber im Bassbereich - no way. Mit IIR ist das 
Ganze easy, das schüttelt ein STM32 aus dem Ärmel.


Thomas


PS: Was ist für deine Zwecke falsch an einem Einsteiger-DSP wie z.B. 
ADAU1701? ADC und DAC bereits an Board, 2in/4out und grafische 
Programmierung mittels SIGMA-Studio?
Da gibt es auch kleine und günstige Boards für:

http://store.sure-electronics.com/product/AA-AP23122

von Audiomann (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Peter schrieb:
> Ihr dürft hier nicht eine Entstufe mit einem Lautsprecher vergleichen.
> Bei einer Entstufe wären 8 Bit Amplitude tötlich, das will sich keiner
> anhören / schon gar nicht messen, egal wie hoch die Samplerate ist.

Dir sind 1-Bit-Endstufen ein Begriff? Wie hoch ist da die Samplerate, 
dass das funktioniert?

von ARM (Gast)


Bewertung
2 lesenswert
nicht lesenswert
Ich habe mal einen Audio-DSP mit einem STM32F407 realisiert, damals mit 
44.1 kHz und 16 Bit Samplingtiefe.. Extern waren zwei SGTL5000 
angebunden.
Also in Summe 4* in und 4* out.

Der STM32 hatte damals genug power um (ohne Witz) an die 40 biquads in 
echtzeit durchzurechnen (in fixed-point; unter zuhilfenahme der ARM 
CMSIS DSP Library).

Das sollte mehr als ausreichen um 4 Ausgängskanäle sinnvoll zu bedienen.

von Rolf S. (audiorolf)


Bewertung
0 lesenswert
nicht lesenswert
Peter schrieb:
> Der Bass muss vor und zurück bewegt werden.
> Das ganze ist ein träges System das es recht leicht verzeiht das man ein
> paar bit weniger hat.
Wenn ich so einen Zinober lese, kriege ich die Motten. Kein Wunder ist 
die Audiowelt vollgestopft mit Esotherik, wenn jeder Ungebildete daher 
schreibt.

Thomas F. schrieb:
> it oben genannten FIR Filtern ist das schon nett (und ich arbeite da
> auch beruflich mit...)
FIR-Filter sind aber problematisch bei Audio. Besonders breitband-Filter 
mit großer Tiefe bei einsitig hochfrequenter Bespieleung.

von Peter (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Esotherik ????
Also doch die Kabel durch Kristalle legen und Kupferbenutzen das bei 
Vollmond gewonnen wurde.
Ich wusste es wir haben damals was grundlegend falsch gemacht!


Ich habe mal in den alten Unterlagen nachgesehen.
Und habe tatsächlich Fehler in meinen Aussagen (nach Jahren kann das mal 
passieren):

1. Es war ein Subwoofer bis 120Hz

2. Die Signale wurden Digital eingelesen (16 / 44,1 --> CD) aufbereitet 
und dann Variabel in der Bit-Anzahl runter gedreht. Wobei wir damals bei 
9Bit gelandet waren und nicht 8.

3. Es war also kein AD Wandler sondern ein digital aufbereitet Signal. 
Mit entsprechenden Filtern könnte man das Analog vielleicht auch 
hinbehommen, ist aber Zeitverschwendung.

4. Die Ausgangsstufe hatte am Ende 8bit.

5. Es wurden mehr Testsignal gemessen und nur wenig Musik.

Gebaut wurde das so logischerweise nie, das wäre ja totaler Blödsinn. Es 
war ein Test was man minimal so braucht und mehr sollte es auch nie 
sein.


Heute könnte man auch 1 Bit Wandler (DSD) nehmen, aber am Ende sollten 
einfach genug Daten vorliegen. Die kann, wie selber schon geschreiben, 
heute ein Cortex M4 gut verarbeiten auch wenn 40 biquads nicht unbedingt 
nötig sind, aber interressant das das der M4 noch geschafft hat.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.