FIR-Filter - Seite 14

 
ssd >> :

Sabluk, sei ein Freund und gib mir diesen "adaptiven Filter" für meine Experimente.


Was werden Sie also mit diesem Filter tun? Es ist Ihnen egal, woran er sich anpasst, warum oder wie?

 
begemot61 >> :

Was werden Sie also mit diesem Filter tun? Interessiert es Sie nicht, woran er sich anpasst, warum und wie?

------------------------------------------------------------------------------------------------------

Kurz gesagt, idealerweise sollte der Filter-Indikator nach meinen Vorstellungen unabhängig sein

das Spektrum der ihm zugeführten historischen Daten analysieren und dynamisch anpassen/einstellen

Filtereigenschaften in Abhängigkeit von der spektralen Zusammensetzung des Eingangssignals.


Mitanderen Worten, dies sind die "Gewichtungsfaktoren" in der Formel des linearen Digitalfilters


Y[i] = B[0] X[i] + B[1] X[i-1] + .... - A[1] Y[i-1] - A[2] Y[i-2] - ....

Dabei ist X die Eingangszeitreihe, Y ist die Ausgangszeitreihe, A und B sind Sätze von Gewichten.


muss sich an das Spektrum des Eingangssignals anpassen/einstellen.


 
sab1uk >>:
begemot61 подскажи как можно по простому конвертировать твой фильтр с определенными параметрами в импульсную характеристику и записать ее в файл или в массив из глобальных переменных?

Diese Koeffizienten sind im globalen Array double NormCoef[] gespeichert und werden von Normalization() berücksichtigt.Normalization() verwendet die Funktionen FilterOrder(), Io(double x). Sie brauchen die Funktionen PriceSelect(), FilterResponse(int index_of_bar) nicht. Welche globalen Variablen Sie verlassen, sehen Sie selbst. Ich zähle Normalization() einmal, während der Initialisierung. Bei einem adaptiven Filter sollte Normalization() innerhalb vonstart()stehen . In diesem Fall würde ich darüber nachdenken, wie man das Ganze beschleunigen kann. Nun, ich würde zum Beispiel die Rechengenauigkeit der Bessel-Funktion Io(double x) um eine Stelle verringern. T.e double besselAccuracy=0.00001

 
begemot61 >> :

Diese Koeffizienten sind im globalen Array double NormCoef[] gespeichert und werden von Normalization() berücksichtigt.Normalization() verwendet die Funktionen FilterOrder(), Io(double x). Sie brauchen die Funktionen PriceSelect(), FilterResponse(int index_of_bar) nicht. Welche globalen Variablen Sie verlassen, sehen Sie selbst. Ich zähle Normalization() einmal, während der Initialisierung. Bei einem adaptiven Filter sollte Normalization() innerhalb vonstart()stehen . In diesem Fall würde ich darüber nachdenken, wie man das Ganze beschleunigen kann. Nun, ich würde zum Beispiel die Rechengenauigkeit der Bessel-Funktion Io(double x) um eine Stelle verringern. T.e double besselAccuracy=0.00001

Danke, ich muss mir nur noch die FIR schnappen und sie in meinem Entwurf verwenden.

mit anderen Worten: Verwendung des initialisierenden Teils des Filters als Generator

 

Es hat sich eine Frage ergeben:

Sollten die Filterwerte in den verschiedenen Zeitrahmen übereinstimmen, wenn die Filterparameter entsprechend geändert werden? (z. B. H1 Parameter = H4 Parameter * 4 )

 
neoclassic >> :

Es hat sich eine Frage ergeben:

Sollten die Filterwerte in den verschiedenen Zeitrahmen übereinstimmen, wenn die Filterparameter entsprechend geändert werden? (z. B. H1 Parameter = H4 Parameter * 4 )

Der Filter selbst zeigt nichts an. Er verarbeitet die Daten, die ihm als Input zugeführt werden. Wenn die Daten unterschiedlich sind, ist auch das Ergebnis der Verarbeitung unterschiedlich. Obwohl der Verarbeitungsalgorithmus derselbe ist

 

Hippo, macht es Sinn, den Parameter PassBandRipple zu variieren?

warum genau ist sie auf 30 eingestellt?

 
sab1uk >> :

Hippo, macht es Sinn, den Parameter PassBandRipple zu variieren?

warum genau 30 Stück?

Der Punkt ist, dass der Filter mit der Kaiser-Implementierung der Fensterfunktion die ungünstigste von 2 Bedingungen auswählt - Pulsation im Durchlassbereich und Unterdrückung im Verzögerungsbereich. Da sie nicht beide Bedingungen gleichzeitig erfüllen kann, erweist sich eine der Anforderungen als besser als die eigentliche Anforderung. Realistisch betrachtet entspricht eine Unterdrückung von 20 dB einer Restwelligkeit von +/-0,83 dB und eine Unterdrückung von 40 dB einer Restwelligkeit von +/-0,086 dB. Für meine Zwecke sind das recht kleine Werte. Deshalb stelle ich die Welligkeit in der Bandbreite einfach bewusst größer als jeden möglichen Wert ein und schenke ihr keine Beachtung. Die Schätzung ist zwar im Code enthalten und kann bei Bedarf verwendet werden.

 

sab1uk, habe ich das Prinzip des Bandpassfilters richtig verstanden?

und eine weitere Frage: Ist es möglich, die Einschränkungen der Filterreihenfolge im GCM (2500) zu umgehen?

 
der BandPass ist die Differenz zwischen den beiden LPFs (LowPass), ähnlich wie der MACD aus der Differenz der Mashups abgeleitet wird
wenn Sie einen Filter mit einer Ordnung von 2500+ oder einer Cutoff-Periode von 300+ benötigen, verwenden Sie den Behemoth-Filter
aber sein Filter ist nicht für alle Fälle geeignet...
versucht, 1000 dB Dämpfung oder 0,000000000000001 dB Abschwächung zu erreichen, aber nicht die gleiche scharfe Resonanz im AFC wie die Oszillatorfilter