Schwellwert automatisch berechnen

OP #4196401
Lesenswert?

Hallo zusammen,
ich habe ein Digitalsignal, das aus einzelnen Pulsen besteht, das ich 
analog abtaste. Der Unterschied zwischen Low-Pegel und ein High-Pegel 
ist immer mit ausreichend Abstand erkennbar, allerdings ist der 
Absolutwert im vornherein unklar und ändert sich zeitlich auch mitunter 
(allerdings sehr langsam) aufgrund eines Temperatureffekts. Das Signal 
ist auch nicht besonders sauber, es ist also im weitesten Sinne noch 
eine Entprellung notwendig. Allerdings sind die Impulse sehr langsam 
(min. 0.2 Sekunden lang, so daß dieser Teil nicht weiter schwer ist). Am 
Ende soll eine zuverlässige Impulszählung stehen.

Davor steht eine zuverlässige Methode, zwischen High- und Low-Werten zu 
klassieren. Am Anfang darf es ruhig einige Fehlbeurteilungen geben, aber 
nach ca. 10 Impulsen sollte die Unterscheidung zuverlässig sein.

Mein erste Gedanke wäre es gewesen, einen Schwellwert zu definieren, 
indem ich das Eingangssignal mit einem Tiefpaß  extrem niedriger 
Grenzfrequenz filtere. In diesem Anwendungsfall ist das allerdings nicht 
sinnvoll, da bei einem Impulssignal der so berechnete Schwellwert sehr 
dicht am Low-Pegel wäre.

Mein zweiter Gedanke wäre es gewesen, den Signalpegel in 16 Klassen 
aufzuteilen, jeden gemessenen Pegel zu zählen und den Mittelpunkt der 
zwei Klassen mit den größten Häufungen als Schwellwert zu betrachten. 
Dabei müßten natürlich "alte" Werte vergessen werden, ähnlich wie beim 
gleitenden Mittelwertfilter.

Und mein dritter Gedanke war: Das Ganze müßte doch eigentlich ein 
Standardproblem sein, für das es Standardlösungen  gibt.

Kennt jemand die Standardlösung für eine solche Problemklasse 
(Rückgewinnung eines Digitalsignals aus einer analogen Abtastung) und 
kann mir Stichwörter, Rezepte oder Formeln nennen?

Viele Grüße
W.T
Gast #4196425
Lesenswert?

Auch wenn's wieder unerwünscht ist:
Die intelligenter Vorgehensweise ist die, gleich dafür zu sorgen, dass 
das Signal sauber ist!
Woher kommt denn dein analoges "Digital-"signal / was produziert so 
einen Schrott?
Hier sollte man ansetzen...
OP #4196431
Lesenswert?

Peter D. schrieb:
> Dein Fehler ist, nur einen Schwellwert zu nehmen.

Das stimmt. Bei der Beschreibung meiner Problemstellung habe ich die 
Breite der Hysterese ausgelassen.

Ob die Darstellung "Schwellwert + Hysteresebreite" oder "Unterer + 
oberer Schwellwert" sinnvoller ist, lasse ich mal offen - vielleicht 
ergibt sich das noch im Laufe der Diskussion.

Zentral ist für mich erst einmal die Frage, ob es hier überhaupt 
sinnvoll ist, das Rad mal wieder neu zu erfinden oder ob es nicht einen 
fertigen "Meier-Müller-Wang-Hopper-Algorithmus" gibt, den es nur noch zu 
finden und zu implementieren gilt.
Gast #4196439
Lesenswert?

Da bestimmt man den maximalen Wert des Signals und den minimalen Wert 
des Signals.
Daraus bildet man einen Mittelwert = Schwellwert

Dieser Wert wird dann mit dem vorherigen Schwellwert verrechnet, z.B.

(neuer)Schwellwert = 0.9*(alter)Schwellwert + 0.1*Mittelwert
OP #4196444
Lesenswert?

Alexxx schrieb:
> [...]
> Woher kommt denn dein analoges "Digital-"signal / was produziert so
> einen Schrott?

Der Umschalter an einem Scheibenwischermotor an einem 50m langen 
ungeschirmten Kabel, der direkt unter einer großen Kurzwellenantenne 
angebracht ist.

> Die intelligenter Vorgehensweise ist die, gleich dafür zu sorgen, dass
> das Signal sauber ist!

Im Verhältnis zu ein paar Zeilen Quelltext in einem µC, der sich 
ansonsten zu Tode langweilt, ist das eher ein unverhältnismäßiger 
Schaltungsaufwand. Die Schutzbeschaltung ist so schon aufwendig genug. 
Für Signale im mehrere-hundert-Millisekundenbereich ist eine digitale 
Aufbereitung deutlich weniger aufwendig.

> Auch wenn's wieder unerwünscht ist:

Deswegen: Ja, leider paßt das hier nicht.
OP #4196445
Lesenswert?

Georg schrieb:
> Wieso hast du nicht in Erwägung gezogen, Minimum und Maximum zu
> bestimmen und die Mitte dazwischen als Schwellwert zu nehmen? Zu
> kompliziert?

Zu ungenau. Minimum und Maximum werden mit Sicherheit Leitungsstörungen 
sein. Damit gibt es keinen Grund anzunehmen, daß der Mittelwert irgendwo 
zwischen den beiden Pegeln des Nutzsignals liegt.
Gast #4196471
Lesenswert?

Dein Problem sollte sich, so die Ursache nicht beseitigt werden kann, 
mit Filtern verschiedener Zeitkonstante, lösen lassen.

Ein Filter, in dem das Grundsignal, z.B. gleichgerichtet und über einen 
schwach belasteten Kondensator, als Basisreferenz, dem Eingangssignal 
folgen soll.
Ein zweiter Filter, sozusagen ein Quicky, der an die Pulse angepasst 
ist, mit natürlich kürzerer Zeitkonstante.
Die Differenz sollte die "Nutzimpulse" hervortreten lassen.

Am besten wird aber die Ursachenbekämpfung sein.
Gast #4196558
Lesenswert?

In Software:

Gleitende Mittelwerte über wenige Samples und vielen Samples 
gegeneinander vergleichen. => Software-Bandpass.
Evtl. noch ein Threshold/Hysterese drauf.

In Hardware:
Bandpass Filter drauf. Evtl Schmidt Trigger folgen lassen
Gast #4196613
Lesenswert?

Walter T. schrieb:
> Nanu, ist meine Problemstellung ernsthaft so exotisch, daß es keine
> Standardlösung gibt?

Du willst sie nur nicht zur Kenntnis nehmen.

Walter T. schrieb:
> Zu ungenau. Minimum und Maximum werden mit Sicherheit Leitungsstörungen
> sein.

Störungen herausfiltern musst du in jedem Fall, egal welchen 
Rechenalgorithmus du anschliessend anwendest.

Es ist offensichtlich hoffnungslos, dir irgendetwas zu raten. Hier gibt 
es genug Leute, für die dein Problem keines ist, aber du willst ja nicht 
hören. Sinnlos sich weiter zu beteiligen. Troll?

Georg
Gast #4196640
Lesenswert?

Du nimmst zwei Tiefpässe (RC-Glieder), einen
mit einer ganz langen Zeitkonstante und
einen mit einer kürzeren Zeitkonstante.
Mit den Ausgängen dieser beiden Tiefpässe
gehst du dann auf einen Differentialverstärker,
den man mit Operationsverstärker bauen kann.
Der liefert dir dann deinen Zählimpuls.
OP #4196860
Lesenswert?

Georg schrieb:
> Du willst sie nur nicht zur Kenntnis nehmen.

Die einzige Lösung für die Fragestellung, die ich hier bislang gelesen 
habe ist die, digitale Tiefpaßfilter zu implementieren - wobei noch 
offen bleibt, ob das die Standardlösung ist. Ausprobieren werde ich es 
auf jeden Fall.

Georg schrieb:
> Störungen herausfiltern musst du in jedem Fall, egal welchen
> Rechenalgorithmus du anschliessend anwendest.

Wieso "anschließend"? Ich suche einen Algorithmus, der mir die Störungen 
ausfiltert.

Georg schrieb:
> Hier gibt
> es genug Leute, für die dein Problem keines ist,

Das stimmt. Für viele Anwendungen ist es sinnvoller, eine analoge 
Filterung vorzuschalten. Für diesen Fall sieht das allerdings anders 
aus. Hardware- und Softwareaufwand sind für gewöhnlich gegeneinander 
austauschbar. Und bei Signalen mit großer Zeitkonstante betreibe ich den 
Aufwand eben lieber im Digitalen.
#4196928
Lesenswert?

Walter T. schrieb:
> Das stimmt. Für viele Anwendungen ist es sinnvoller, eine analoge
> Filterung vorzuschalten. Für diesen Fall sieht das allerdings anders
> aus. Hardware- und Softwareaufwand sind für gewöhnlich gegeneinander
> austauschbar. Und bei Signalen mit großer Zeitkonstante betreibe ich den
> Aufwand eben lieber im Digitalen.

In Deinem Fall ist es sinnvoll beides zu tun:
Ein Analogfilter (Tiefpass) für den hochfrequenten Teil, denn dann 
kannst Du den Spannungsverlauf mit einer vernünftigen (d.h. entsprechend 
niedrigen) Abtastrate mit dem A/D-Wandler abtasten, ohne dass da noch 
große Ausreißer (Spikes) dabei sind.
Dann kommt die Ermittlung des niedrigen und des hohen Pegels. Daraus 
ergibt sich die Schwelle in der Mitte dazwischen.

Gruß Dietrich
OP #4196953
Lesenswert?

Dietrich L. schrieb:
> Dann kommt die Ermittlung des niedrigen und des hohen Pegels.

Womit wir wieder beim Anfang wären - denn das war meine ursprüngliche 
Frage.

Der niedrige und der hohe Pegel sind die Analogwerte, die mit 
(gleitender) maximaler Häufigkeit auftreten. Womit ich erst einmal die 
Analogwerte in einer großen Tabelle klassieren müßte. Oder wie 
identifiziert man diese Werte üblicherweise?
#4196983
Lesenswert?

Walter T. schrieb:
> Womit ich erst einmal die
> Analogwerte in einer großen Tabelle klassieren müßte.

Wenn das "HF"-Filter gut genug ist, reicht es doch aus, wenn man den 
niedrigsten und den höchsten Wert aus der Tabelle nimmt. Die Tabelle ist 
organisiert als FIFO und so lang, dass alle Abtastwerte einer Periode 
hineinpassen.

Ob es eine bessere Methode gibt als bei jedem neuen Wert die ganze 
Tabelle zu durchsuchen (Zeitproblem?), kann ich Dir nicht sagen. Und das 
geht natürlich auch nicht, wenn die Impulse längere Zeit fehlen können 
(FIFO-Länge).

Und da siehst Du auch: zu Deiner eigentlichen Frage "Gibt es da eine 
Standardlösung" kann ich Dir leider nichts sagen ;-(

Gruß Dietrich
Gast #4197116
Lesenswert?

Vorschlag in Hardware: Spitzenwertdetektor mit anschließendem Hochpass 
zur Abtrennung des Gleichanteils. 1 OPV, 1 Diode, 2 R, 2 C. Quasi 
Amplitudendemodulation. Kommt mir zumindest sofort in den Kopf, wenn ich 
dein angehangenes Bild sehe.
#4197343
Lesenswert?

Walter T. schrieb:
> Das stimmt. Für viele Anwendungen ist es sinnvoller, eine analoge
> Filterung vorzuschalten. Für diesen Fall sieht das allerdings anders
> aus. Hardware- und Softwareaufwand sind für gewöhnlich gegeneinander
> austauschbar. Und bei Signalen mit großer Zeitkonstante betreibe ich den
> Aufwand eben lieber im Digitalen.

Ich habe den Eindruck, daß Du da etwas falsche Vorstellungen hast und 
gewisses Grundlagenwissen fehlt. Mit Filterei in Software kannst Du kein 
vorgeschaltetes Hardware-Filter ersetzen! Bevor Du nämlich irgend etwas 
sinnvolles per Software-Filterei aus einem verrauschten Signal berechnen 
kannst, musst Du dafür sorgen, daß bei der AD-Wandlung das 
"Nyquist-Shannon-Abtasttheorem" nicht verletzt wird, d.h. im Klartext, 
Du musst das Signal erstmal durch ein Tiefpassfilter (in Hardware!) 
schicken, das keine Frequenzen oberhalb der halben Abtastfrequenz des 
AD-Wandlers durchlässt.
Dieses Filter kannst Du nicht durch "digitale" Filterung NACH der 
AD-Wandlung ersetzen!
OP #4197378
Lesenswert?

Thomas E. schrieb:
> Dieses Filter kannst Du nicht durch "digitale" Filterung NACH der
> AD-Wandlung ersetzen!

Schau Dir mal die Zeitskala des Nutzsignals an. Wir reden hier von zig 
Millisekunden. Das hat überhaupt nichts mit dem Anti-Aliasing-Filter vor 
der Abtastung zu tun, das natürlich ebenfalls existiert, aber eher für 
eine Grenzfrequenz von ein paar KHz ausgelegt ist.

Dietrich L. schrieb:
> Wenn das "HF"-Filter gut genug ist, reicht es doch aus, wenn man den
> niedrigsten und den höchsten Wert aus der Tabelle nimmt.

Paul schrieb:
> Spitzenwertdetektor mit anschließendem Hochpass
> zur Abtrennung des Gleichanteils.

Ich nehme an, wenn ich das selbst entwickeln muß, wird es auf genau das 
hinauslaufen: digitales Tiefpaß-Filter mit nachgeschalteten zwei 
Spitzenwert-Detektoren für Low- und High-Pegel. Das sollte ja nicht 
allzu schwierig sein. Im Prinzip sollte es ausreichen, die DGLs einer 
realen Schaltung zu diskretisieren. Da es nur einen integrierenden und 
keinen differenzierenden Anteil gibt, sind da ja wenig Überraschungen zu 
erwarten.

Danke für die Diskussion!
W.T.
Gast #4197402
Lesenswert?

Walter T. schrieb:
> Nanu, ist meine Problemstellung ernsthaft so exotisch, daß es keine
> Standardlösung gibt?

So sauber wie Signal und Störungen im Frequenzbereich getrennt sind, 
sehe ich überhaupt kein Problem. Der Rauschabstand reicht doch fast so 
schon für eine Erkennung aus.

Sehen die Pulse immer so aus? Lade doch mal ein typisches Signal als 
Zeitserie hoch. Mit dem Bild kann doch kein Mensch rechnen.
#4197411
Lesenswert?

Walter T. schrieb:
> das natürlich ebenfalls existiert, aber eher für
> eine Grenzfrequenz von ein paar KHz ausgelegt ist.

Wenn aber Dein Nutzsignal im Frequenzbereich < 10 Hz angesiedelt ist, 
warum legst Du den Tiefpass dann auf die hundertfache Frequenz aus? Mit 
einem auf die Frequenz des Nutzsignals angepassten Tiefpass sähe das 
Eingangssignal schon viel besser aus...
OP #4197431
Lesenswert?

Walter T. schrieb:
> Im Prinzip sollte es ausreichen, die DGLs einer
> realen Schaltung zu diskretisieren. Da es nur einen integrierenden und
> keinen differenzierenden Anteil gibt, sind da ja wenig Überraschungen zu
> erwarten.

Und unter der Dusche ist es mir eingefallen. Ein diskreter 
Spitzenwertdetektor mit linearem Abfall sieht ja einfach so aus:
1
p: Abfallparameter
2
u_p: oberer Spitzenwert
3
u_m: unterer Spitzenwert
4

5
u_p(n+1) = max(ad_in(n+1),u_p(n)-p);
6
wenn (u_p(n+1)<u_min) u_p(n+1) = u_min;
7

8
u_m(n+1) = min(ad_in(n+1),u_m(n)+p);
9
wenn (u_m(n+1)>u_max) u_m(n+1) = u_max;

Für einen exponnentiellen Abfall dann eben so:
1
p: Abfallparameter (0<p<1)
2
u_p: oberer Spitzenwert
3
u_m: unterer Spitzenwert
4

5
u_p(n+1) = max(ad_in(n+1),u_p(n)*p);
6

7
u_m(n+1) = min(ad_in(n+1),(u_max-u_m(n))*p);

Da langweilt sich der µC immer noch zu Tode.

Thomas E. schrieb:
> Wenn aber Dein Nutzsignal im Frequenzbereich < 10 Hz angesiedelt ist,
> warum legst Du den Tiefpass dann auf die hundertfache Frequenz aus? Mit
> einem auf die Frequenz des Nutzsignals angepassten Tiefpass sähe das
> Eingangssignal schon viel besser aus...

Will ich die Quellimpedanz für den A/D-Wandler niedrig halten und nehme 
ein R-C-Glied mit 1kOhm, brauche ich ca. 15µF. OK, die gibt es noch in 
vernünftiger Bauform und mit halbwegs definierten Werten - aber das 
recht temperatur- und altersabhängig. Für 10kHz sieht das alles viel 
gemütlicher aus.

Wolfgang schrieb:
> Sehen die Pulse immer so aus? Lade doch mal ein typisches Signal als
> Zeitserie hoch. Mit dem Bild kann doch kein Mensch rechnen.

Ich habe keine realen Meßwerte, sondern nur das Bild auf dem Oszilloskop 
mit GnuPlot nachempfunden.

Wolfgang schrieb:
> So sauber wie Signal und Störungen im Frequenzbereich getrennt sind,
> sehe ich überhaupt kein Problem. Der Rauschabstand reicht doch fast so
> schon für eine Erkennung aus.

In real ist der Signal-Rauschabstand sogar noch ein Stück besser. Ein 
Problem sollte das also in keinem Fall machen. Ich war nur nach der 
Suche nach dem passenden Algorithmus.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren