Forum: Digitale Signalverarbeitung / DSP / Machine Learning Minimal- und Maximal-Funktion mathematisch erfassen


von Stefan Z. (wooschder)


Lesenswert?

Hallo,

ich baue gerade eine Schaltung mit digitalen Filtern auf. Dabei muss ich 
den Minimal bzw. Maximal-Wert des aktuellen Samples von allen Filtern 
bestimmen. Bis jetzt hab ich Simulation in Simulink durchgeführt. Kann 
ich das auch mathematisch bestimmen?

Gruß
Stefan

von Ras F. (rasfunk)


Lesenswert?

> Bis jetzt hab ich Simulation in Simulink durchgeführt.
> Kann ich das auch mathematisch bestimmen?

Unmöglich! Matlab verwendet reine Intuition um auf die Ergebnisse zu 
kommen...

Scherz beiseite, ich habe das Problem noch nicht ganz verstanden. Wovon 
brauchst Du die Maximal/Minimal-Werte? Geht es um die richtigen 
Skalierungsfaktoren, damit die Filter nicht überlaufen?

von Wooschder (Gast)


Lesenswert?

Hi!

Beispiel: Ich habe zwei digitale Filter.

Zum ersten Abtastzeitpunkt (t=0) hat der erste Filter den Ausgangswert 
5, der zweite den Wert 4. Als Ergebnis für diesen Takt möchte 5 
erhalten.

Zum zweiten Abtastzeitpunkt (t=1) hat der erste Filter den Ausgangswert 
3, der zweite den Wert 6. Als Ergebnis für diesen Takt möchte 6 
erhalten.

Das ganze habe ich erfolgreich simuliert. Dabei habe ich einen 
Maximumblock mit sovielen Eingängen wie Anzahl der Filter benutzt. In 
diesem Beispiel wären es 2 Stück.

Die Ergebnisse der Simulation habe ich zwar, allerdings kann ich ja nur 
einer begrenzte Anzahl an Filtern simulieren. Ich möchte das ganze jetzt 
mathematisch erfassen und dann mit (falls das geht) unendlich vielen 
Filtern rechnen.

Was mir dabei fehlt, ist eine mathematische Funktion, die mir zu jedem 
Zeitpunkt das Maximum aus vielen verschiedenen anderen 
Funktionen(Filterausgängen) ausgibt.

Gruß
Stefan

von Wooschder (Gast)


Lesenswert?

Hi!

ich habe gerade etwas gefunden:

max(a,b) = (a + b + |a-b|) / 2


Gruß
Stefan

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

"max" ist eine mathematische Funktion, wenn du sie definierst. Welchen 
Sinn es haben soll das in Form von Grundrechenarten und Betrag 
auszudrücken verstehe ich nicht.

von Anon N. (fuechslein)


Lesenswert?

Min und Max sind nichtlinear Funktionen. Die Theorie die du suchst nennt 
sich "Non-Linear signal processing". Da gibt es ganze Buecher darueber 
die auch sehr interessant und lesenswert sind. Ich hab selber das Buch 
von Arce gelesen. Allerdings hoffe ich dass du sehr gute Mathematische 
Grundlagen auf dem Gebiet Statistik und Warsch. hast ansonsten wirds 
hart.

In deinem konkreten fall suchst du "FMH: FIR-Median Hybrid".
Das ganze wurde 1987 von Nieminen und Neuvo veroeffentlich:

http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1168870&isnumber=26344

Max/Min sind ein spezial Fall von Weighted medians.

Es gibt nicht viel einfache Literatur darueber. Und erst recht keine Uni 
Kurse.

HTH

von Mark B. (markbrandis)


Lesenswert?

Entweder versteh ich das Problem nicht richtig, oder die Lösung ist 
wirklich einfach und lautet in C etwa so:

1
#define ANZ 2 /* hier passenden Wert definieren */
2
#define MIN 0 /* hier ebenfalls */
3
4
int current, i;
5
current = MIN;
6
7
for (i=0; i<ANZ; i++)
8
{
9
  if (filterausgang[i] > current)
10
    current = filterausgang[i];
11
}

Dieser Code müsste dann pro Abtastung einmal laufen. In der Variablen 
current steht dann das aktuelle Maximum. Oder wenn das nicht gemeint 
ist, was genau dann? :-)

von Michael (Gast)


Lesenswert?

Ich weiß auch nicht so ganz genau, wodrauf Du konkret hinaus willst. 
Wenn Dir die mathematische Bescheibung im Vordergrund steht, vielleicht 
auch von vielen Filterausgängen, d.h. vielen Argumenten der 
max-Funktion, und Du mit Methoden der Analysis dadran gehen willst, ist 
vielleicht die folgende Näherung für Dich wichtig:

max(x_1,...,x_N) = log(e^x_1+...+e^x_N)

Das Gleichheitszeichen ist hier natürlich ein "ungefähr gleich". Der 
Vorteil dieser Näherung ist, dass Du nach den x_i ableiten kannst. e^x_i 
steht hier für exp(x_i). Für eine Implementierung im Mikrocontroller ist 
das aber eher nichts, da würde das C-Beispiel oben mehr Sinn machen (und 
auch exakte Werte liefern). Die Näherung bietet sich nur an, wenn man 
eine Ableitung bestimmen will (z.B. für Aussagen zur Performance oder um 
einen schnelleren, suboptimalen Algorithmus herzuleiten).

von Wooschder (Gast)


Lesenswert?

Hallo,

@Anon Nymous: Das scheint ganz gut zu sein, allerdings auch sehr 
mathematisch. Wie würde es Klitschko sagen: "Schwere Kost!"

@Mark Brandis: Mit der Simulation und C Code habe ich keine 
Schwierigkeiten. Das Problem bei der Simulation bzw. C-Code ist, dass 
ich immer nur eine begrenzte Anzahl an größer-kleiner-Vergleichen machen 
kann. Ich möchte das ganze mathematisch mit unendlich vielen Vergleichen 
ausrechnen. Und dann kann ich schauen, mit wievielen Vergleichen ich ein 
akzeptables Ergebnis bekomme.

@Michael: Das sieht sehr gut aus. Ich werde morgen damit rechnen und 
dann Rückmeldung geben.

Gruß
Stefan

von Mark B. (markbrandis)


Lesenswert?

Wooschder schrieb:

> @Mark Brandis: Mit der Simulation und C Code habe ich keine
> Schwierigkeiten. Das Problem bei der Simulation bzw. C-Code ist, dass
> ich immer nur eine begrenzte Anzahl an größer-kleiner-Vergleichen machen
> kann. Ich möchte das ganze mathematisch mit unendlich vielen Vergleichen
> ausrechnen. Und dann kann ich schauen, mit wievielen Vergleichen ich ein
> akzeptables Ergebnis bekomme.

Ach so. Ich hatte mich wohl zu sehr an den Satz "ich baue gerade eine 
Schaltung mit digitalen Filtern auf" gehalten ;-)

von Wooschder (Gast)


Lesenswert?

Hallo,

@Michael: Ich habe das gerade durchgerechnet. Ist wirklich nur ungefähr 
;-) Habs mal mit log(10^N1 + 10^N2 + ... + 10^Nn) durchgerechnet. Da 
wird das Ergebnis noch ein bißchen genauer.

Gruß
Stefan

von Michael (Gast)


Lesenswert?

Ah, ja: mit log(x) hab ich den natürlichen Logarithmus gemeint, gemäß 
der Namenskonvention im englischen Sprachraum (hier meint man ja eher 
den zur Basis 10, wenn man log(x) sagt) - bei den Amis wäre log10(x) der 
Logarithmus zur Basis 10. Oder aber Du machst das alles mit der Basis 
10, so wie bei Dir.

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.