Hilfe bei Fourier

 
Ich habe versucht, die "Library of FFT Fast Fourier Transform Functions" ("Bibliothek der FFT-Fast-Fourier-Transformationsfunktionen") zu verwenden, aber ich kann nicht herausfinden, wie man diese Funktionen verwendet, denn aus irgendeinem Grund haben sie alle die gleichen Beschreibungen. Wie kann man zum Beispiel die Werte der letzten 8 Takte schließen, um ihr Spektrum zu erhalten, und dann die ersten 4 Frequenzen (wie ein Tiefpassfilter) weglassen, um das Signal wieder zu erhalten?
 
Ich bezweifle, dass es überhaupt möglich ist, aus 8 Takten 4 Frequenzen herauszuholen, und das ist auch nicht alles, was übrig bleibt.
 
Die Umwandlung (FFT) von 8 diskreten Signalwerten ergibt 8 Frequenzen, wobei 4 niedrigere Frequenzen übrig bleiben, so dass wir den NF-Filter der aktuellen Kursschwankungen erhalten.
 
Sie schickten mir eine Fourier-Annäherung, falls Sie daran interessiert sind, sie könnte nützlich sein.

#property library
//--------------------------------------------------------------------------------
double b = 0.7;
double c1,c2,c3,c4,b2,b3;
double e1,e2,e3,e4,e5,e6,n,w1,w2,t3f; 
int ft3;
b2=b*b; b3=b2*b; c1=-b3; c2=(3*(b2+b3)); c3=-3*(2*b2+b+b3); c4=(1+3*b+b3+3*b2);
//==============================================
double af_T3( int i,int pt3, double ct3) {
//---------------------------
if (ft3==0) {n=pt3; if (n<1) n=1; n=1+0.5*(n-1); w1=2/(n+1); w2=1-w1; ft3=1;}
//------------------------
e1=w1*ct3+w2*e1; 
e2=w1*e1+w2*e2; 
e3=w1*e2+w2*e3; 
e4=w1*e3+w2*e4; 
e5=w1*e4+w2*e5; 
e6=w1*e5+w2*e6;
t3f=c1*e6+c2*e5+c3*e4+c4*e3;
return(t3f); }


#property  copyright "ANG3110@latchess.com"
//----------------------------------------
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
//-------------------------------
#import "af_T3.ex4"
int   af_T3( int i,int pt3, double ct3);
//-------------------------------
extern int hrf = 2;
extern int hrT3 = 6;
extern int days = 1;
//-----------------------------------------
double ak[],bk[],fx[],w,ak0,ss,sc,sk,dfx[];
double pi=3.1415926535897932384626433832795;
int T,sm,k;
double t3[],ct3,dc[];
int pt3;
//==========================================
int init() {
    IndicatorBuffers(5);
    SetIndexStyle(0,DRAW_LINE); 
    SetIndexBuffer(0,fx);
    SetIndexBuffer(1,t3);
    SetIndexBuffer(2,ak);
    SetIndexBuffer(3,bk);
    SetIndexBuffer(4,dc);
//--------------------------
pt3=hrT3*60/Period();
T=days*1440/Period(); 
w=2*pi/T;     
k=T/(hrf*60/Period());
return(0); }
//***************************************************
int start() {
//-----------------
int n,i,cbi;
//------------------
cbi=Bars-IndicatorCounted()-2;
for(i=cbi; i>=0; i--) {
//---------------------
ct3=Close[i];
t3[i]=af_T3(i,pt3,ct3);
dc[i]=Close[i]-t3[i];
}
//-------------------------- 
ak0=0.0;
for (n=0; n<=k; n++) { sc=0.0; ss=0.0;  
for (i=0; i<=T-1; i++) {
if (n==0) ak0+=dc[i]; 
if (n!=0) {sc=sc+dc[i]*MathCos(n*i*w); ss=ss+dc[i]*MathSin(n*i*w);} }
ak[n]=sc*2/T; bk[n]=ss*2/T; }
ak0=ak0/T; 
//--------------------------
for (i=0; i<=T-1; i++) { sk=0.0;
for (n=1; n<=k; n++) {
sk=sk+ak[n]*MathCos(n*i*w)+bk[n]*MathSin(n*i*w);}
fx[i]=ak0+sk+t3[i];  
} 
//---------------------------
 return(0); }
//****************************************************

Vielleicht können Sie mir auch sagen, warum das Wetter in Afrika angezeigt wird, wenn der erste Code statt in der Bibliothek direkt in einen Indikator eingefügt wird.




 
lsv писал (а):
Die Umwandlung (FFT) von 8 diskreten Signalwerten ergibt 8 Frequenzen, wobei 4 niedrigere Frequenzen übrigbleiben, so dass wir den NF-Filter der aktuellen Kursschwingung erhalten.

Um eine Periode zu bestimmen, sind mindestens 2 Takte erforderlich, so dass die Frequenzen 4, 2 und 1 ermittelt werden.
 
Ich habe das Gefühl, dass ich der Einzige aus der Radioabteilung bin. 1 bar ist eine Frequenz, ein konstanter Wert, f(x)=k0. 2 Balken sind 2 Frequenzen, f(x)=k0+k1*Sin(a1*x+b1), usw.
 
Buchhalter, das Wetter in Afrika wird durch die Variable ft3 gebildet, sie ist nicht definiert, so dass man unterschiedliche Werte erhält.
 
lsv писал (а):
Buchhalter, das Wetter in Afrika wird durch die Variable ft3 gebildet, sie ist nicht definiert, so dass man unterschiedliche Werte erhält.

Danke... Mal sehen, ob wir es herausfinden können...
 

Hier ist ein Beispiel (Indikator), an dem ich Fourier studiert habe...
Schauen Sie in den Code - es ist nicht schwer.
Standardmäßig wird das Spektrum einer periodischen Funktion ausgegeben...
Sie können jeden beliebigen Indikator senden. Was Sie danach mit dem Spektrum machen, bleibt Ihrer Fantasie überlassen.
Ich möchte nun Muster aus den erhaltenen Spektrogrammen sammeln und alles zur Erkennung in ein neuronales Netz "schieben".

Hochladen der Datei

Dateien:
 
lsv:
Ich habe das Gefühl, dass ich der Einzige aus der Radioabteilung bin. 1 bar ist eine Frequenz, ein konstanter Wert, f(x)=k0. 2 Balken sind 2 Frequenzen, f(x)=k0+k1*Sin(a1*x+b1), usw.
Soweit ich mich erinnere, ergeben 8 Balken in der FFT 8 Frequenzen,
aber die Hälfte von ihnen ist symmetrisch zur anderen Hälfte (um Pi verschoben, wie es scheint)
Es bleiben also 4.

Es kann gar nicht anders sein.
Eine Frequenz (Sinusoid) enthält 3 Parameter - G(t) = A*Sin(w*t+p)
Die Frequenzen (w) sind festgelegt, so dass 2 Parameter übrig bleiben - Amplitude (A) und Phase (p).

Bei jeder Transformation von K unabhängigen Variablen (Balkenwerten)
kann man höchstens K unabhängige Parameter erhalten.
D.h. aus 8 Takten können maximal 4 Frequenzen gewonnen werden (2 Parameter pro Takt)
 
klot, Ihre Datei ist aus irgendeinem Grund nicht verfügbar. Ursprünglich wollte ich Fourier verwenden, um den Trend zu extrahieren, d.h. als FFT-Filter, aber ich erinnerte mich daran, dass Fourier davon ausgeht, dass sich der analysierte Abschnitt wiederholt, d.h. wenn es Balken mit den Preisen 10,11, 13, 12 gibt, dann geht Fourier davon aus, dass ihnen Balken 10,11, 13, 12, 10,11, 13, 12 folgen. Und das verdirbt die ganze Idee.
Grund der Beschwerde: