Forum: Mikrocontroller und Digitale Elektronik Geräuschanalyse in verrauschter Umgebung


von waubi (Gast)


Lesenswert?

Guten Tag,


ich habe folgendes Problem und weiss nicht genau wie ich anfangen soll 
oder bräuchte ein Tipp wo man sich am besten einlesen kann oder sich 
anschauen sollte.

Das Problem:

Ich habe einen Raum in dem laute Lüftergeräusche zu hören sind. Auch in 
dem Raum stehen Maschinen die Fehlersignaltöne von sich geben. ( Der Ton 
ist immer der gleiche, bloss die Tonfolge ist unterschiedlich, je nach 
Fehler ).
Es gilt jetzt mit einem Laptop, Mikrofon und MATLAB ( würde gerne Matlab 
dafür verwenden ) einen "Algorithmus" zu schreiben, der die Töne in der 
verrauschten Umgebung erkennt und den Fehler identifieren kann.

Ich habe hier Aufnahmen aus dem Raum. Einmal habe ich nur das Rauschen 
aufgenommen und das andere mal das Rauschen mit Fehlerton. Eine Aufnahme 
nur vom Fehlerton (ohne Rauschen) zu erstellen ist leider nicht möglich.

Wenn mir später noch genug Zeit bleibt, dann soll der Algorithmus auch 
bei verändertem Rauschen die Fehlertöne erkennen können. ( Für den Fall, 
dass sich das Rauschen durch z.B. Verwenden von anderen 
Störgeräuschquellen ändert. )

Hat jemand von euch schonmal Erfahrung mit sowas gemacht? kann mir 
jemand einen Tipp geben wo ich anfangen könnte?  Literatur oder so ? 
LMS?


Vielen Dank schonmal im Voraus...

: Verschoben durch Moderator
von Dirk K. (knobikocher)


Lesenswert?

Der Ton ist eine Sinusschwingung? Auch wenn sich der Ton nicht einzeln 
aufnehmen lässt, kann man nicht die Frequenz ermitteln?
Das muss doch irgendwo dokumentiert sein, mit welcher Frequenz der 
Fehlerton ausgegeben wird. Beim Hersteller im 
Datenblatt/Anlagenbeschreibung ect. , notfall dort nachfragen.

Dann würde es recht simpel werden.

von willibald (Gast)


Lesenswert?

Um eine Vorstellung von der Aufgabe zu kriegen:

1. In welchem Frequenzbereich liegen die Signaltöne? Wie sind sie 
kodiert, sprich, gibt es nur eine Tonhöhe (ähnlich wie Morsecode), oder 
gibt es mehrere aufeinanderfolgende oder überlagerte Frequenzen? Und wie 
lang sind die einzelnen Piepstöne zeitlich? Kann auch ein menschlicher 
Hörer den Fehler erkennen (wenn er ein bisschen trainiert)?

2. Die Auswertung muss vermutlich in Echtzeit geschehen, d.h. du liest 
online aus der Soundkarte und musst nach X Millisekunden ein Ergebnis 
liefern, richtig?

3. Wie deutlich sind die Signale wahrnehmbar? Heben sie sich klar aus 
dem Umgebungsgeräusch heraus, oder gehen sie eher darin unter?

4. Kann es passieren, dass mehrere Maschinen gleichzeitig lospiepsen? 
Kann man das irgendwie erkennen? Hat vielleicht jede Maschine ihre 
eigene Tonhöhe?

von waubi (Gast)


Lesenswert?

auf jeden Fall schonmal danke für die schnellen Antworten. Das Forum ist 
wirklich schnell und gut wie ich festgestellt habe.

@Dirk Knoblich:
Ich habe in den Unterlagen des Herstellers nix zu Frequenzen zum Ton 
gefunden, werde aber mal anfragen. Der Ton ist recht primitiv, wie ein 
Mainboard-Piepen im Fehlerfall. Es würde aber nur simple werden, wenn 
sich das Spektrum des Rauschens mit dem des Tons nicht überlappen oder 
wie meinst du?

@willibald:
zu deinen Fragen:
1. Es gibt nur eine Tonhöhe ( wie bei Mainboard-Piepsen im Fehlerfall ). 
Ein einzelnes Piepen ist 1-2 Sekunden lang. Je nach Piepfolge kann dann 
der Fehler erkannt werden. Ein menschlicher Hörer kann den Fehler auf 
jeden Fall erkennen.

2. Ja genau, die Messung sollte Echtzeit geschehen und schnellstmöglich 
eine Antwort liefern. Das ist aber kein Musskriterium.

3. Also als Mensch erkennt man den Fehlerton gut ( nur ein bisschen 
leise). Der Ton geht eigentlich nicht im Rauschen unter.

4. Es gibt 2 Maschinen die den gleichen Fehlerton nutzen und eine andere 
Maschine die eine andere Tonhöhe verwendet. Im schlimmsten Fall kann es 
auch passieren, das beide gleichzeitig lospiepsen. Dann müsste man 
wahrscheinlich aufgrund der Pegel ( die eine Maschine steht weiter weg 
)entscheiden welche Machine gepiept hat ( bei den beiden Maschinen mit 
gleichem Ton ).

Ich habe zwar die Aufnahmen schon, aber konnte sie leider noch nicht 
analysieren und mir z.B. mal das Spektrum des Rauschens anschauen. 
Vielleicht ist es ja ganz einfach und man kann das Rauschen einfach 
filtern. Sollte das der Fall sein, so muss ich auf jeden Fall ein 
Schritt weiter gehen und auch bei Änderung des Rauschens eine 
erfolgreiche Analyse erfolgen. Also man muss dann vielleicht davon 
ausgehen, dass sich die Frequenzen des Fehlertones mit Frequenzen aus 
dem Rauschen überlappen. Aber das Thema stellen wir lieber mal hinten 
ran.

von Dirk K. (knobikocher)


Lesenswert?

waubi schrieb:
> Es würde aber nur simple werden, wenn
> sich das Spektrum des Rauschens mit dem des Tons nicht überlappen oder
> wie meinst du?

Ein Rauschen besteht aus dem gesamten Frequenzspektrum (worst case, in 
reellen akustischem Rauschen durch Maschinen sind nicht alle Frequenzen 
enthalten/nicht stark vorhanden), also ist auch eine Überlappung 
vorhanden.

Hat man die Frequenz des Tonsignals, so sollte dies per steilflankigem 
Bandfilter (mittels MATLAB) vom Rauschen isoliert werden können. Dann 
noch ein Vergleich des mittleren Schallpegels des Rauschen zum Pegel des 
Signals nach dem Bandpass (auch mittels MATLAB) und eine Detektierung 
des Tones sollte möglich sein.

Der Rest ist dann logische Auswertung der Aufeinanderfolge/Länge der 
Töne.

So war mein spontaner Gedankengang.

Die Frequenz des Tones könnte mittels deiner Ausrüstung - Laptop + 
Mikrofon - auch zu bestimmen sein. Notwendig ist nur noch ein Echtzeit 
FFT - Programm, sprich ein PC-Oszilloskope mit FFT.
Das Mikro nahe an den "Tonverursacher" und einfach schauen, welche 
Frequenz da hervorsticht. Wenn der Ton vom Menschen trotz des Rauschens 
wahrnehmbar ist, dann sollte das funktionieren.

von waubi (Gast)


Lesenswert?

@Dirk Knoblich:

Danke für deine schnelle Antwort. Hatte mich vorhin etwas unvorsichtig 
ausgedrückt. Hatte die Lüftergeräusche als Rauschen bezeichnet. Ist ja 
nicht ganz falsch, muss ja kein weißes Rauschen sein. Will damit sagen, 
dass der etwas höherfrequente Fehlerton nicht im Rauschspektrum 
enthalten sein muss.

knobikocher schrieb:
>Die Frequenz des Tones könnte mittels deiner Ausrüstung - Laptop +
>Mikrofon - auch zu bestimmen sein.

Ich kann den Fehlerton nicht ohne Rauschen aufnehmen. Wie oben schon 
geschrieben habe ich nur eine Aufname vom Rauschen und eine Aufnahme vom 
Fehlerton mit Rauschen. Dann ist es schon schwieriger die Frequenz des 
Fehlertones zu bestimmten oder?

knobikocher schrieb:
>Hat man die Frequenz des Tonsignals, so sollte dies per steilflankigem
>Bandfilter (mittels MATLAB) vom Rauschen isoliert werden können. Dann
>noch ein Vergleich des mittleren Schallpegels des Rauschen zum Pegel des
>Signals nach dem Bandpass (auch mittels MATLAB) und eine Detektierung
>des Tones sollte möglich sein.

Mit dem Vergleich des mittleren Pegels des Rauschens, wie meinst du das 
genau? Was genau bewirkt das?
Wäre es damit dann auch möglich bei Änderungen des Rauschens und der 
Pegel den Ton noch zu erkennen?


Entschuldigung für meine lästigen Fragen...

Ich glaub ich werde morgen wenn MatLab endlich mal da ist, ein 
Algorithmus schreiben und das mal so ausprobieren.

von Fabian (Gast)


Lesenswert?

Ich würde es mal mit einem adaptiven Filter versuchen. Klappt natürlich 
nur, wenn das Rauschen kein wirkliches Rauschen ist...

von waubi (Gast)


Lesenswert?

@Fabian:

also mit LMS Algorithmus ( least mean square error ) ?

von Dirk K. (knobikocher)


Lesenswert?

waubi schrieb:
> knobikocher schrieb:
>>Die Frequenz des Tones könnte mittels deiner Ausrüstung - Laptop +
>>Mikrofon - auch zu bestimmen sein.
>
> Ich kann den Fehlerton nicht ohne Rauschen aufnehmen. Wie oben schon
> geschrieben habe ich nur eine Aufname vom Rauschen und eine Aufnahme vom
> Fehlerton mit Rauschen. Dann ist es schon schwieriger die Frequenz des
> Fehlertones zu bestimmten oder?

Wenn du Fehlerton+Rauschen hast und das durch eine FFT jagst und das 
Frequenzspektrum anschaust sollte das vom Prinzip her so aussehen wie in 
dem Bild im folgendem Link:
http://www.mathworks.com/help/techdoc/ref/new_fft2.gif
Das Rauschen ist halt über alle Frequenzen enthalten mit geringer 
Amplitude, aber eine große Amplitude zeigt sich (im Link sind es zwei: 
einmal bei 50Hz und einmal bei 120Hz). Und sowas solltest du dann auch 
festellen können. Der Peak -> die Frequenz des Fehlertones.

Infos zu FFT + MATLAB:
http://www.mathworks.com/help/techdoc/ref/fft.html

Zu dem Rest muss ich grad nochmal nachdenken^^

von willibald (Gast)


Lesenswert?

Also, wenn die Frequenz des Piepstons bekannt ist (oder gemessen werden 
kann), dann würde ich die Aufnahme zuerst schmalbandig filtern, so dass 
nur die frequenzmäßige Nachbarschaft des Piepstons übrigbleibt. Auf das 
gefilterte Signal würde ich dann eine gleitende Effektivwertbestimmung 
loslassen und schauen, ob man die errechneten Werte eindeutig in zwei 
Klassen unterteilen kann: Klasse 1: Lautes Signal, Piepston da, Klasse 
2: Leises Signal, Piepston weg.

Gleitender Effektivwert heißt: Das Zeitsignal in Blöcke teilen (Länge 
der Blöcke: irgendwas zwischen 100 und 1000 ms, experimentieren!) und 
über jeden Block den Effektivwert berechnen (also quadrieren, mitteln, 
Wurzel ziehen).

Im Idealfall fällt dann jeder Block eindeutig in eine der beiden 
Klassen, und du musst nur noch die ohne Pegelwechsel zusammenhängenden 
Blöcke abzählen, um auf den Fehlercode zu kommen.

In der Praxis wird es Übergangsblöcke geben, weil die Blockgrenzen nicht 
mit den Ein- und Ausschalt-Zeitpunkten des Tons zusammenfallen werden. 
Diese Übergangsblöcke musst du dann ignorieren. Und die Blöcke klein 
genug wählen, so dass die Auszählung noch auf eindeutige Ergebnisse 
führt.

Das wäre ein naiver, anschaulicher und mathematisch einfacher Ansatz. 
Komplizierter (mit Spektralanalyse und so) gehts natürlich immer.

von Dirk K. (knobikocher)


Lesenswert?

willibald schrieb:
> Also, wenn die Frequenz des Piepstons bekannt ist (oder gemessen werden
> kann), dann würde ich die Aufnahme zuerst schmalbandig filtern, so dass
> nur die frequenzmäßige Nachbarschaft des Piepstons übrigbleibt. Auf das
> gefilterte Signal würde ich dann eine gleitende Effektivwertbestimmung
> loslassen und schauen, ob man die errechneten Werte eindeutig in zwei
> Klassen unterteilen kann: Klasse 1: Lautes Signal, Piepston da, Klasse
> 2: Leises Signal, Piepston weg.

Vielleicht zur besseren Unterscheidung über einen langen Zeitraum von 
vielleicht 30s den Effektivwert des allgemeinen Rauschens bestimmen und 
zur Unterscheidung heranziehen.

Effektivwert_Rauschen > Effektivwert_nach_Bandpass = kein Ton = 0

Effektivwert_Rauschen < Effektivwert_nach_Bandpass = Ton = 1

von U.R. Schmitt (Gast)


Lesenswert?

Das Rauschen ist doch quasistationär, es ändert sich nicht oder nur 
langsam. das bedeutet, daß das Rauschen transformiert in den 
Frequenzbereich eine konstante Kurve ist.
Das Piepsen ist doch jetzt ein zusätzlicher Ton bzw. eine zusätzliche 
Frequenz.
Wenn du die quasistationären Hintergrundgeräusche im Frequenzbereich zu 
zwei aufenanderfolgenden Zeitpunkten voneinander abziehst, dann sollte 
im Prinzip 0 herauskommen, wenn allerdings ein zusätzlicher Pieps 
seitdem dazugekommen ist bleibt genau der übrig.

von U.R. Schmitt (Gast)


Lesenswert?

Ach so:
Wenn du das mathematisch genauer betrachten willst dann such mal nach 
"Korrelationsalalyse", bzw. nach "statistische Signaltheorie".
Warnung vorweg: ist hartes Brot! Bei uns haben von etwa 450 Studenten 
ca. 5 das Fach vertieft gehört :-).

von Wolfgang Horn (Gast)


Lesenswert?

waubi schrieb:
> Ich habe einen Raum in dem laute Lüftergeräusche zu hören sind. Auch in
> dem Raum stehen Maschinen die Fehlersignaltöne von sich geben. ( Der Ton
> ist immer der gleiche, bloss die Tonfolge ist unterschiedlich, je nach
> Fehler ).
> Es gilt jetzt....der die Töne in der
> verrauschten Umgebung erkennt und den Fehler identifieren kann.

Hi, waubi,

die Funkaufklärung hat dies Thema bis zur Erschöpfung durchgearbeitet. 
Dort übertragen die "Töne" auch noch Datensignale, die man zumindest 
nach dem Typ erkennen will, Ort und Tätigkeit.

Die Fehlerrate wird das große Problem sein. Wer immer für die Erkennung 
der Signaltöne Geld ausgibt, er will auch Zuverlässigkeit.
Deshalb schlage ich vor in Anlehnung an die Wetterfühler, von denen eine 
Station mehrere im Garten haben kann:
1. Nimm einen ganz billigen Laptop, der aber mit wireless nodes 
kommunizieren kann, der dafür mindestens eine USB oder serielle 
Schnittstelle hat.
2. Baue in jedes Gerät, das Du überwachen willst, eine solche node als 
Meßstelle ein. Oder klebe sie in die Nähe des akustischen Signalgebers. 
Ob die nur die Tätigkeit des Signals an sich erkennen muss, die Dauer, 
gar Morsezeichen, die Tonhöhe - die node sollte das tun, bevor der 
Laptop sie abfragt.
3. Lass Deinen Laptop periodisch alle soche messstellen abfragen, ob sie 
ein akustisches Signal erkannt haben, und wenn ja, mit welchen 
Merkmalen.

Gesichtspunkt Versorgung der Messstellen. Lithiumbatterien oder 
Netzteile? Frage des Wartungsaufwandes. Aber da, wo eine Maschine steht, 
da ist eine Netzsteckdose selten weit.

Begründungen:
1. Jede Messstelle ist optimal platziert dort, wo das Signal lauter ist 
als jeder Lüfter.
2. Hohe Zuverlässigkeit.


Cioa
Wolfgang Horn

von willibald (Gast)


Lesenswert?

Wolfgang Horn schrieb:
> Deshalb schlage ich vor in Anlehnung an die Wetterfühler, von denen eine
> Station mehrere im Garten haben kann:

Das ist sicher ein guter Vorschlag, wenn es darum geht, aus einem 
Prototyp ein marktfähiges (und hochpreisiges) Produkt zu machen. Aber 
ich glaube, davon ist waubi noch weit entfernt. Ihm geht es erst mal nur 
um die Idee, die zum Detektor-Algorithmus führt, und da ist ein 
einzelner PC mit Matlab drauf um einiges handlicher als das verteilte 
System, was du vorschlägst.

von Josef (Gast)


Lesenswert?

Im Buch "Praxiseinstieg LabVIEW", ISBN 3772340393 , ist ein Akustisches 
GPS beschrieben (p. 215). Da ist auch gezeigt, wie man mit der 
Soundkarte aufnehmen und das Spektrum ausgeben kann (p. 166).
Damit müsste das Problem zu lösen sein.

Aber lade doch mal eine Wave-Datei hoch, dann kann man genauer 
antworten.

von waubi (Gast)


Lesenswert?

Hallo,

vielen Dank für die schnellen, guten Antworten. Hätte nicht gedacht, 
dass hier so ein toller, problemlösender Betrieb ist.


Leider komme ich im Moment nicht an den Testrechner mit den Aufnahmen 
ran. Wenn dann kann ich ja mal die Aufnahmen hochladen.

@Wolfgang Horn:

das ist natürliche eine gute Idee, würde es aber doch gerne auf meine 
oben beschriebene Weise lösen. Es geht hier auch um den Lerneffekt im 
Umgang mit Spektren, Matlab, einfach Lösung usw.

@Dirk Knoblich:
Zitat von knobikocher:
>Effektivwert_Rauschen > Effektivwert_nach_Bandpass = kein Ton = 0
>Effektivwert_Rauschen < Effektivwert_nach_Bandpass = Ton = 1

den Ansatz werde ich wohl mal verfolgen. Auch den Ansatz von U.R. 
Schmitt mit der Differenz.

Ich werde es die Tage mal ausprobieren und dann weiter berichten. Habe 
leider auf diesem Gebiet noch nix Praktisches gemacht und muss erstmal 
einen Überblick bekommen.

Auf jeden Fall vielen Dank für euere Hilfen...

Gruß Waubi

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.