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
> 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?
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
Hi! ich habe gerade etwas gefunden: max(a,b) = (a + b + |a-b|) / 2 Gruß Stefan
"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.
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
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? :-)
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).
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
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 ;-)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.