Forum: Digitale Signalverarbeitung / DSP / Machine Learning Kalman Filter zum "entrauschen" von Audio-Signalen (Arduino Due ADC)?


von (unknown) (Gast)


Lesenswert?

Hallo *,

ich muss gleich vorweg schicken: Ich bin weder Mathematiker, noch 
DSP-Spezialist - nur ein einfacher musikmachender Informatiker.

Ich habe das Problem, dass ich auf einem Arduino Due den ADC fuer das 
digitalisieren von Audiosignalen benutzen moechte. Leider scheine ich 
mir da ziemlich viel Rauschen mit einzufangen. Nach einigem Lesen von 
diversen Artikeln, las ich den Vorschlag zum entrauschen einen 
Kalman-Filter zu bentuzen.

Beispiele dazu findet man einige (sogar eine fertige Arduino-Library), 
aber alle beziehen sich auf die Auswertung von Gyros bei Robotern. Nun 
kommt meine Unkenntnis der hoeheren Mathematik zum tragen:
1.) Kann man den Kalman-Filter ueberhaupt fuer Audio Signale benutzen?
2.) Hat jemand einen Link zu einem Algorithmus oder noch besser: zu 
einer verstaendlichen Erklaerung, damit man selbst den Algorithmus 
erstellen kann?

Alles was ich bisher an Beschreibungen gefunden habe, wuerde mich zu 
einem Mathematikstudium zwingen - was ich meinem Hirn aber nicht antun 
mag ;-)

Danke && Gruss,

Holger

von rava (Gast)


Lesenswert?

Kalmanfilter arbeiten modellbasiert.
Das hast du modellierst sinnvolle Verläufe deines Signals und Rauschn 
getrennt, um dann das Rauschen gezielt "wegzuschätzen".

Ein Modell für den Signalverlauf eines Audiofiles stelle ich mehr sehr 
anspruchsvoll vor ;)


andere Meinungen?

von Bassdrum (Gast)


Lesenswert?

Der Signalpegel ist ausreichend hoch?
Meine Gitarristen stellen ja gern schon an der Gitarre die Lautstärke 
ein und wundern sich, wenn es rauscht und brummt.

von Henrik P. (henrik84)


Lesenswert?

Hi,

Vorneweg: Der Prozessor ist im tiefstmöglichen Standby, während der ADC 
abtastet, oder?

Zum Kalman kann ich Dir empfehlen, nur auf englisch zu suchen, wenn Du 
eine verständlichere Erläuterung brauchst.

Ich glaube aber ehrlich gesagt, dass ein Aufbau mit externem Wandler und 
"rauscharmen" PCB schneller (und vor allem qualitativ besser) zum Ziel 
führt.
Vielleicht findest Du ja auch Arduino-Kompatible Fertigboards mit 
AD-Wandler, die auf Audio ausgelegt sind?

von 123 (Gast)


Lesenswert?

Liebe Leute: Ein Kalmanfilter ist ohne ein vernünftiges Modell VÖLLIG 
SINNFREI! Wie will man Musik sinnvoll modellieren ? Wenn das jemand 
könnte, dann gäbe es schon andere Filter gegen Rauschen. Das ist ein 
fundamentales Problem nicht nur in der Elektrotechnik ! Lest bitte nach 
was genau ein Kalmanfilter ist und wozu er da ist und wie er 
funktioniert.

von 123 (Gast)


Lesenswert?

Henrik P. schrieb:
> Ich glaube aber ehrlich gesagt, dass ein Aufbau mit externem Wandler und
> "rauscharmen" PCB schneller (und vor allem qualitativ besser) zum Ziel
> führt.
> Vielleicht findest Du ja auch Arduino-Kompatible Fertigboards mit
> AD-Wandler, die auf Audio ausgelegt sind?

Was wird hier überhaupt von Arduino geredet? Dafür braucht man (wenn man 
es unbedingt versuchen will) eine Vernünftige DSP mit mehreren FPUs wenn 
man das ganze in Echtzeit machen will. Nicht umsonst gibt es Audio-DSPs 
und solch einen Zirkus. Das erledigt man nicht mit einem Arduino der so 
und so völlig gebremst ist ... Man könnte ja mal ein FPGA Shiel nehmen 
(habe neulich eines auf Kickstarter gesehen) und damit ein bisschen 
Spielen ...

von porter (Gast)


Lesenswert?

Mach mal Angaben wie deine Außenbeschaltung aussieht. Wie du abtastest 
(Auflösung ADC, Rederenz, Samplingrate) und woran du siehst das du viel 
Rauschen hast...

von porter (Gast)


Lesenswert?

Referenz

von df (Gast)


Lesenswert?

Na ja, im Ton-Gewerbe gibt es eine Grundregel: Shit in, Shit out.

Verbessere bessere deine Signalwege um dein Rauschen zu minimieren.

von (unknown) (Gast)


Lesenswert?

Hallo *,

vielen Dank fuer Eure zahlreichen Antworten und Anregungen. Ich verscuhe 
sie mal in diesem Beitrag aufzuarbeiten.

* Warum der Arduino Due und kein DSP?

Ich bin (gegen einige hier im Forum) totaler Neuling und Quereinsteiger 
im Bereich Audioverarbeitung mit uC. Ich kann mit dem Arduino inzwischen 
recht gut umgehen und finde die Umgebung einfach. Klar hat der DSP 
Vorteile gegenueber einem Arduino, aber die hohe Lernkurve (und auch 
Kosten gegenueber dem Arduino) beim Einstieg in DSP-Programmierung 
schrecken mich ab.

Der Due ist mit seinem ARM32 Kern ueberhaupt erst in Lage DSP-aehnliche 
Berechnungen durchzufuehren. Man staunt ja auch, was heutige 
Durchschnittsrechner in Sachen Musikbearbeitung gegenueber den Rechnern 
vor 15 Jahren leisten. Ich glaube dieser Ansatz gilt auch fuer den Due: 
Erschlage ein zeitkritischen Problem mit hoher Rechenleistung.

* Prozessor in standby mode?

Ehrlich gesagt: nein. Ich muesste mal ausprobieren, wie viel man vom Due 
(bzw. seinem ARM32) schlafen legen kann und ob dies auch so gut 
funktioniert, dass man noch gnuegend Rechenzeit fuer die Bearbeitung des 
Signals uebrig hat. Ich vermute, den Prozessor zum schlafen zu bewegen 
kostet CPU cycles...

* Aufbau und Aussenbeschaltung

Den Aufbau und die Aussenbeschaltung kann man ganz gut an dem Projekt 
selbst sehen:

http://www.electrosmash.com/pedalshield#hw
(Um Unklarheiten zu vermeiden: Dies ist nicht mein Projekt - ich bin nur 
Nutzer)

Unter diesem Link gibt es auch Soundbeispiele. Dort hoert man, wenn der 
True-Bypass betaetigt wird, wie es rauscht und surrt. Vermutlich 
CPU-noise.

* Kalman Filter

Jetzt ist mir langsam auch klar, warum man im Internet nichts ueber 
Kalman Filter fuer Audio-Signale findet: weil es scheinbar schlicht 
nicht geht. Danke fuer die Info!

* Allgemein

Mir ist schon klar, dass der Due eigentlich nicht dafuer gedacht ist. 
Das ganze soll ja auch nicht gegen die durchaus auch kostenguenstigen 
kommerziellen Produkte angehen (habe fuer 89 Euro ein Korg Pandora 
gekauft, der so ziemlich alles kann, was man auf Reisen zum Ueben 
braucht). Ich moechte halt etwas ueber Algorithmen fuer die Verformung 
von Audiosignalen lernen und dazu das nehmen, was ich habe: Arduino 
Kenntnisse.

Ich denke ich werde mal ein paar Experimente mit Filtern machen und den 
Schlafmodues ausprobieren. Dabei lerne ich auf jedenfall dazu - ob es 
funktioniert oder nicht.

Danke an alle, die sich mit dem Problem befasst und mir geantwortet 
haben!

Gruss, Holger

von rava (Gast)


Lesenswert?

Holger Wirtz schrieb:
> * Kalman Filter

theoretisch könnte man ja das Rauschen modellieren und die Musik 
rausfiltern. Wenn man das übriggebliebene Rauschen mittels 
Phaseninvertierung auf das Signal gibt, bleibt idealerweise nur noch die 
Musik übrig.

Dazu muss man aber seeeehr viel über das jeweilige Rauschen im konkreten 
Fall wissen und ich glaube ehrlich gesagt nicht, dass es sonderlich gut 
tut.
Ohne Mathe geht da gar nichts; aber spannend wär das mal :)

von EE (Gast)


Lesenswert?

porter schrieb:
> Referenz

Ein Grundverständnis für Systemtheorie und Wissen über Kalmanfilter und 
deren Funktionsweise. Erwartest du nun ein Dokument in dem steht 
"Kalmanfilter sind nicht für Audio geeignet"? Das ist ungefähr so 
sinnvoll wie Straßen zu vereisen um Depresionen zu heilen ...

rava schrieb:
> theoretisch könnte man ja das Rauschen modellieren und die Musik
> rausfiltern.

das dürfte wohl das schwierige sein ... über Rauschen kann man nur 
statistische Aussagen treffen und selbstverständlich zu keinem 
Zeitpunkt irgendwas zu Amplitude und Phasenlage sagen

rava schrieb:
> Wenn man das übriggebliebene Rauschen mittels
> Phaseninvertierung auf das Signal gibt, bleibt idealerweise nur noch die
> Musik übrig.

Naja ich habe zwar den Begriff der Phaseninvertierung noch nie gehört 
denke aber, dass das ein Begriff aus der Musikerszene ist. Ich denke 
damit ist eher eine Invertierung gemeint ist. Besser ausgedrückt müsste 
man das Rauschen vom Gesamtsignal subtrahieren um die reine Musik zu 
bekommen. (Triviallösung). Eine Phasendrehung macht kaum Sinn falls das 
gemeint sein sollte.

Holger Wirtz schrieb:
> * Warum der Arduino Due und kein DSP?
>
> Ich bin (gegen einige hier im Forum) totaler Neuling und Quereinsteiger
> im Bereich Audioverarbeitung mit uC. Ich kann mit dem Arduino inzwischen
> recht gut umgehen und finde die Umgebung einfach. Klar hat der DSP
> Vorteile gegenueber einem Arduino, aber die hohe Lernkurve (und auch
> Kosten gegenueber dem Arduino) beim Einstieg in DSP-Programmierung
> schrecken mich ab.

Das ist irgendwo auch logisch. Mit Arduino holst du dir Einfachheit aber 
eben auf Kosten der Performance. Du kannst nie die Stärken der 
jeweiligen Architektur nutzen.

> Der Due ist mit seinem ARM32 Kern ueberhaupt erst in Lage DSP-aehnliche
> Berechnungen durchzufuehren. Man staunt ja auch, was heutige
> Durchschnittsrechner in Sachen Musikbearbeitung gegenueber den Rechnern
> vor 15 Jahren leisten. Ich glaube dieser Ansatz gilt auch fuer den Due:
> Erschlage ein zeitkritischen Problem mit hoher Rechenleistung.

Das ist natürlich alles Geschwafle. Du hast weder eine Schätzung noch 
Wissen wieviele FLOPS du brauchst aber quasselst mal los. Du hast keine 
Ahnung von Rechenaufwand bei Filtern. Je nach Filter benötigen die von 
kleinen 8-bit Controllern bei 4 MHz bis hin zu mehreren FPGAs parallel. 
Du hast Echtzeitfähigkeit nicht definiert. Du rätst einfach ins Blaue 
ohne auch nur den Hauch einer Ahnung von der Materie. Aber du weißt es 
ja definitiv besser als Leute die schon jahrelang in der Branche 
unterwegs sind ... du bist Anfänger also nimm auch mal Rat an!

von Falk S. (falkschilling)


Lesenswert?

Hi,

ich will auch mal meinen Senf dazugeben.

Für die Diskretisierung von stetigen Größen ist doch der Kalman 
eigentlich der Filter, freilich kann man den für Audio nutzen. Find's 
teilweise erstaunlich, was für Regentänze um den Kalman-Filter gemacht 
werden und welche Götter da erst beschworen werden müssen um das 
verstehen zu dürfen.

Natürlich sollte man für die Verwendung eines Kalmans wissen, welchen 
Anteil der Sensor bei einer Messung am Rauschen hat und was das globale 
Rauschen (Systemrauschen) ist - kann man aber auch einfach einmal 
konstant schätzen, sind ja nur Varianzen und man merkt dann schon, 
wenn's zuviel wird und das Signal zu glatt.

Letztlich ist ja das, was der Kalman macht, ja eigentlich nüscht anderes 
als Rechnen mit zwei Normalverteilungen. Und um zwei Meßwerte zu 
summieren bzw. deren Varianz nach dem Messen zu errechnen - das kann man 
auch gut mit 'nem 8-Bit AVR.

Nachträglich kann man mittels Bitschubsereien und/oder immer noch 
optimieren - da denke ich aber, dass die Samplingrate des ADCs die 
entscheidendere Rolle spielt als das Ausrechnen des Kalman-Updates und 
-Predicts.

Es gab irgendwo im Netz ein 'Motorblog' von Paul Balzer zum Thema, wo 
der eindimensionale KF ziemlich anschaulich erklärt wird - und 'ne 
funktionierende und einfach verständliche Matlab-Implementierung in 1D 
noch dazu.

: Bearbeitet durch User
von Falk S. (falkschilling)


Angehängte Dateien:

Lesenswert?

Hi nochmal!

Ich hatte irgendwie den Eindruck, dass hier im Thread ein wenig konfus 
mit dem Schlagwort 'Kalman' umgegangen wird.

Daher habe ich mal eine kleine Demo in C99 geschrieben, die einen 
eindimensionalen Kalman implementiert (einfach mal Paul Balzerts 
Blog-Eintrag frecherweise nachgebaut).

Zugegeben, ich nutze bei der Berechnung der Kovarianz noch eine Zeile 
'float'-Operationen, was für den Cortex-M3 nicht die Traumlösung an 
Effizienz ist. Da findet ihr aber sicher auch eine Lösung.

Beste Grüße,
Falk Schilling

Edit:
sorry, beim Definieren des Initialzustandes des dynamischen Systems habe 
ich leider Varianz und Erwartungswert vertauscht belegt (Varianz muss 
groß (z.B. 10000) sein und Erwartungswert 0). Im Anhang korrigierte 
Fassung.

: Bearbeitet durch User
von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Das bringt nur leider zum Entrauschen eines Audiosignals nichts, weil es 
keinen Zustand gibt den man schätzen kann.

Ein sinnvollerer Ansatz ist eine Schätzung des Rauschspektrums mit 
Minimum Statistics 
(http://www.ruhr-uni-bochum.de/IKA/forschung/forschungsbereich_martin/speech_audio_processing/eusipco1994_martin.pdf) 
und Wiener Filter oder spektrale Subtraktion zum Entrauschen. Das ist 
aber auch kein Ersatz für eine vernünftige Hardware die das Rauschen von 
vornherein so weit es geht vermeidet.

von Dr. Sommer (Gast)


Lesenswert?

Was ist denn ARM32? Sowas wie "x86-32" - was dann irgendwas zwischen 
80386 und i7 sein kann?

von Falk S. (falkschilling)


Lesenswert?

Andreas Schwarz schrieb:
> Das bringt nur leider zum Entrauschen eines Audiosignals nichts, weil es
> keinen Zustand gibt den man schätzen kann.

Ok, zugegeben: der obige Ansatz ist ein allgemeiner Ansatz zur Schätzung 
von Zuständen von Sensoren. Wählt man die Varianzen richtig, schätzt man 
somit einfach, welchen Wert der Sensor beim nächsten Update vermutlich 
diskretisieren wird.

Die Schätzung auf Spektralebene ist schon eine Abstraktion weiter (somit 
teurer), da vorher noch vom Orts- in den Frequenzbereich transformiert 
werden muss.

Dort bleibt das Prinzip zum Rauscheliminierung ja aber das gleiche, nur 
dass man keine Sensorwerte mehr als Erwartungswert reinpfeift, sondern 
eine Frequenz.

> Ein sinnvollerer Ansatz ist eine Schätzung des Rauschspektrums mit
> Minimum Statistics
> 
(http://www.ruhr-uni-bochum.de/IKA/forschung/forschungsbereich_martin/speech_audio_processing/eusipco1994_martin.pdf)
> und Wiener Filter oder spektrale Subtraktion zum Entrauschen. Das ist
> aber auch kein Ersatz für eine vernünftige Hardware die das Rauschen von
> vornherein so weit es geht vermeidet.

Die Praxis sieht leider oft so aus, dass eine vernünftige Hardware nicht 
immer zur Verfügung steht bzw. auch nicht jedem bekannt ist, wie die 
Techniken überhaupt anzuwenden sind.

Und die zwei kleinen Funktionen mal in sein uC-Projekt reinziehen und 
mal ausprobieren, was sie bewirken, denke ich, sollte doch gehen.

Alleine durch das Ausprobieren und feststellen, warum es anwendbar oder 
nicht anwendbar ist, ist doch schon einiges gewonnen.

Gut - mit dem Cortex-M3 und hinreichend hoher Samplingrate ( > 30kS/s ) 
+ FFT + obigem Kalman + FFT^{-1} und DA-Wandlung - zugegeben, das ist 
ein recht optimistisches Vorhaben...

Man kann aber das Gesamtsystem auch so partitionieren, dass für die 
AD-Wandlung + FFT ein eigener Controller genommen wird, für die 
Schätzung ein Zweiter und für Rücktrafo + Frequenzsynthese ein drittes. 
Ich weiß nicht, wass die DSP-Befehlssatzerweiterung des ARMs an Leistung 
bringen, kann mir aber vorstellen, dass da auch was rauszuholen ist.

Edit:
Ach so, wen's interessiert - IEEE SPS hat zu verschiedenen Themen wie 
Kalman-Filterung, GNURadio's VOLK-Library (!) und ähnliches Zeug ein 
paar Sachen auf http://www.sigview.org zum Angucken bereitgestellt.

: Bearbeitet durch User
von Hans Heinz (Gast)


Lesenswert?

Hat sich mal jemand das Projekt angesehen, das der TO nachgebaut hat?

Das ganze Design ist Mist. Ein hochverstärkender TL072 mit sehr 
hochohmigem Eingang und ziemlich hochohmiger Außenbeschaltung, huckpack 
montiert über einen Microcontroller.
Das muß rauschen und knistern, wahrscheinlich macht das zu flache 
Ausgangsfilter des DAC da noch am wenigsten Probleme.

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.