Remez Exchange Algorithmus < Signaltheorie < Ingenieurwiss. < Vorhilfe
|
Status: |
(Frage) überfällig | Datum: | 13:20 Mo 10.09.2012 | Autor: | Flock |
Hallo, Forum!
Ich bin vor kurzem auf den Remez Exchange Algorithmus gestoßen. Und fand in Wikipedia einen Vorschlag, dass man anhand von den FIR-Filtern die Hilberttransformierte berechnen kann.
So weit ich herausgefunden habe, funktioniert dieser Algorithmus grob beschrieben so:
1) Rate die Frequenzen [mm] w_{0}, w_{1}, [/mm] ... , [mm] w_{n}, [/mm] an denen Maxima angenommen werden sollen (darf man diese äquidistant wählen?)
2) Löse das Gleichungssystem, um [mm] \delta [/mm] zu ermitteln und die Koeffizienten [mm] a_{0},...,a_{c}, [/mm] mit denen man das Polynom P(w) angibt. Dazu kann man LR-Algorithmus oder QR-Zerlegung anwenden. Wenn diese Verfahren nicht die gewünschte Genauigkeit liefern, kann man versuchen, das Ganze über Gaußseidel oder Jacobiverfahren zu lösen, dabei kann man den Fehler kontrollieren.
3) Anhand der Koeffizienten [mm] a_{0}, a_{1}, [/mm] ..., [mm] a_{c} [/mm] berechne dann E(w)=|W(w)*(D(w)-P(w))|
Hierzu schonmal eine Frage: W(w) ist eine Gewichtsfunktion, wenn ich es richtig verstanden habe - wie ist diese geschickt für die Anwendung zu wählen?
Und woher kriege ich D(w), was steckt in diesem Term?
4) Lokalisiere die Frequenzen [mm] w1_{0},...,w1_{p}, [/mm] bei welchen die Funktion E(w) das Maximum annimmt und es gilt: [mm] |E(w1_{i})| \ge \delta.
[/mm]
5) Berechne den Konvergenzparameter - Q = [mm] \bruch{max|E(w1_{i})| - min|E(w1_{i})|}{max|E(w1_{i})|}
[/mm]
6) Lösche die überflüssigen potentiellen Extrema wie ein Abweisungskriterium vorschreibt
7) Ist der Konvergenzparameter größer als vorgegeben Konvergenztoleranz, wiederhole die Schritte 2 bis 7, wenn nicht, dann gehe zu 8
8) Berechne P(w) indem du die letzte Menge von Frequenzen benutzt, dann berechne die Impulsantwort h(n) von dem gesuchten Filter. Fertig
[mm] \delta [/mm] berechnet sich anhnad der Summe:
[mm] \delta [/mm] = [mm] \summe_{k=0}^{r} \bruch{\alpha_{k}*D(w_{k})}{\bruch{\summe_{k=0}^{r} (-1)^{k}*\alpha_{k}}{W(w)}}
[/mm]
[mm] \alpha_{k}= \produkt_{i=0}^{r} \bruch{1}{x_{k} - x_{i}} [/mm] , wobei i [mm] \neq [/mm] k
Ich will jetzt diesen Algorithmus dazu benutzen, um die Hilberttransformation umzusetzen. Ich weiß jetzt nicht so genau, wie ich jetzt vorgehen soll, wenn ich den Remez-Algorithmus fertig programmiert habe.
So wie ich mir überlegt habe, passiert hierbei folgendes:
Ich betrachte ein Eingangssignal mit Rausch, das Signal ist diskretisiert vorgegeben. Anhand des Remez -Algorithmus (oder Parks-McClellan Algorithmus, siehe nächsten Absatz) entwickle ich einen optimalen Filter, der bestimmte Frequenzen herausfiltert, d.h bestimmten Rausch beseitigt. Und nun will ich zusätzlich noch, dass dieser Filter auch die Hilberttransformierte liefert (laut Wikipedia kann man die Hilberttransformation anhand der FIR-Filter umsetzen). Die Frage ist - wie? Natürlich kann ich wie bereits in meiner letzten Forendiskussion die Hilberttransformierte bestimmen - aber mich reizt der neue Weg, von der anderen Perspektive, sonst nützt es ja nichts, für das Gleiche den Fünffachen Rechenaufwand zu betreiben oder übersehe ich wichtige Vorteile?
Alternativ gibt es noch den Parks-McClellan Algorithmus für den Filterdesign, der sehr ähnlich zum Remez-Exchange Algorithmus ist. Bei diesem Algorithmus wird im Schritt 2 Lagrange-interpolation eingesetzt, wodurch es an Geschwindigkeit gewinnt, ansonsten sehe ich da keine Unterschiede oder gibt es noch zusätzlich wesentliche Unterschiede und warum wurde ausgerechnet dieser Parks-McClellan Algorithmus so populär?
Vielen Dank im Voraus für das Beantworten der Fragen.
Gruss
Flock
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 15:59 Mi 12.09.2012 | Autor: | Flock |
Hallo, Forum!
ich habe etwas länger im Internet gesurft und bin auf folgende Idee gekommen. Vielleicht hilft es einem oder anderen meine Frage zu beantworten.
Es gibt mehrere Möglichkeiten, Hilberttransformation anhand der FIR Filter umzusetzen:
- FIR-Hilbert, streng linearphasig, kann mit der Matlabfunktion remez oder firpm mit der Einstellung 'hilbert' umgesetzt werden
- näherungsweise linearphasiger IIR-Hilbert
- minimalphasiger IIr-Hilbert, kompakt
Meine Frage war, wie man den Remezalgorithmus modifiziert, so dass man eine Hilberttransformierte als Ergebnis erhält... In Matlab wird es mit remez und der Einstellung hilbert gemacht. Vielleicht kennt sich ja jemand aus und versteht was für ein Gedanke hinter dem Programm steckt. Ich will insbesondere die Theorie dahinter verstehen, wie ich es tun könnte, ohne diese Hilfsfunktion aus Matlab zu benutzen.
Vielen Dank im Voraus.
Gruss
Flock
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 18:13 Mi 19.09.2012 | Autor: | Flock |
Hallo, Forum!
Vielleicht ist meine obige Frage so speziell, dass keiner diese genau beantworten kann (vielleicht nur die Leute, die es mal selber in Matlab programmiert haben).
Es wäre trotzdem schön, eine Antwort auf die erste Frage zu bekommen, wäre allerdings nicht schlimm, wenn es keiner weiß.
Im Moment interessiert mich zusätzlich noch folgender Sachverhalt:
Angenommen, ich hätte eine Transferfunktion (Übertragungsfunktion) eines Tiefpassfilters und eine Eingangsfolge (eines Signals) im Zeitbereich gegeben.
Welche Vorgehensweise wäre kluger für die Anwendung, wenn ich das Signal demodulieren möchte?
1) Ich wende FFT (Fast Fourier Transform), schnelle Fouriertransformation, auf die Eingangsfolge x an, multipliziere das Ergebnis fft(x) mit der Übertragungsfunktion A(x), anschließend wende ich auf das Produkt die inverse FFT an.
Als Ergebnis müsste ich dann tiefpassgefilterte Folge von x im Zeitbereich erhalten, oder?
2) Man bestimme zunächst die Filterkoeffizienten im Zeitbereich mittels Filterdesign (z.B mittels Parks-Mc Clellan oder Remez Algorithmus), die der Übertragungsfunktion entsprechen. Dann bilde man die Summe, wie diese für lineare Filter gegeben ist.
Das Output des Filters müsste dann die tiefpassgefilterte Eingangsfolge sein, oder?
Vielleicht behaupte ich ganz falsche Sachen - sind überhaupt die Ansätze 1) und 2) äquivalent?
Wenn ich das hingekriegt habe, muss ich das Ergebnis mit Cosinus multiplizieren und das Signal wird dann demoduliert. (Es ist eine Art vom Band Pass Filter, die dann entsteht)
Vielen Dank im Voraus
Flock
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 15:01 Sa 22.09.2012 | Autor: | Infinit |
Hallo Flock,
ich habe Deine Fragen mit Interesse gelesen, kenne aber keinen der Algorithmen, so dass ich mich mit einer Antwort zurückgehalten habe. Zu meiner Studienzeit Anfang der 80er gab es keine Simulationsprogramme. Die Signaltheorie war ein sehr theoretisches Gebilde und wenn man mal was simulieren wollte, so ging dies nur mit Hilfe von FORTAN und Rechenzeit an Großrechenanlagen, also eigentlich nur für Studien- oder Diplomarbeiten.
Zu Deinen allgemeinen Fragen kann ich aber etwas beisteuern:
Zu 1) Natürlich kannst Du über den FFT-Bereich gehen, um das Ausgangssignal eines Systems im Frequenzbereich aus der Multiplikation von Frequenztransformierter des Eingangssignals und der Übertragungsfunktion zu bestimmen. Eine Rücktransformation in den Zeitbereich liefert dann die Ausgangsfolge. Wenn Du die Eingangsfolge aus der Abtastung eines kontinuierlichen Eingangssignals gewonnen hast, so denke daran, das Abtasttheorem einzuhalten, um hier keine Unterabtastung durchzufühern, die natürlich das Ausgangssignal verfälschen würde. Arbeitest Du direkt mit Zahlenfolgen, so ist die Abtastung per se natürlich eingehalten.
Zu 2) Hier ist mir nicht klar, in welchem Bereich Du denn die Filterung durchführen willst. Im Frequenzbereich ist dies okay wie von Dir beschrieben, bleibst Du aber im Zeitbereich (damit sind diese Koeffizienten die Koeffizienten einer linearen Differentialgleichung),so entsteht das Ausgangssignal durch Faltung der Eingangsfolge mit der Impulsantwort des Systems.
Hoffentlich sind ein paar Sachen dadurch etwas klarer geworden.
Viele Grüße,
Infinit
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:09 Mo 24.09.2012 | Autor: | Flock |
Vielen Dank, Indefinit!
Jetzt weiß ich, dass ich mit meinen Vermutungen richtig liege. Nun muss ich schauen, wie ich alles implementiere und zum Laufen bringe.
Natürlich wäre ich sehr dankbar, wenn mir jemand etwas
über Remez und McClellan Algorithmen verraten könnte (worauf ich bereits in der ersten Frage hingewiesen habe)
Gruss,
Flock
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:20 Di 25.09.2012 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|