Aide avec Fourier

 
J'ai essayé d'utiliser 'Library of FFT Fast Fourier Transform Functions' ('Library of FFT Fast Fourier Transform Functions'), mais je n'arrive pas à comprendre comment utiliser ces fonctions, pour une raison quelconque, elles ont toutes la même description. Comment, par exemple, avoir les valeurs Close des 8 dernières mesures pour obtenir leur spectre, puis laisser les 4 premières fréquences (comme un filtre passe-bas) et récupérer le signal ?
 
Je doute qu'il soit même possible d'obtenir 4 fréquences sur 8 barres, non pas que l'on puisse seulement les conserver.
 
La conversion (FFT) de 8 valeurs discrètes du signal donnera 8 fréquences, laissant 4 fréquences inférieures, nous obtenons le filtre BF des fluctuations du cours actuel.
 
Ils m'ont envoyé une approximation de Fourier, si ça t'intéresse, ça pourrait t'être utile.

#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); }
//****************************************************

Peut-être pouvez-vous également me dire pourquoi, si au lieu de la bibliothèque, le premier code est inséré directement dans un indicateur, il affiche le temps en Afrique.




 
lsv писал (а):
La conversion (FFT) de 8 valeurs discrètes du signal donnera 8 fréquences, laissant 4 fréquences inférieures, nous obtenons un filtre BF de l'oscillation du cours actuel.

Un minimum de 2 mesures est nécessaire pour déterminer 1 période. Les fréquences 4, 2 et 1 sont ainsi déterminées.
 
J'ai l'impression d'être la seule personne du département radio. 1 bar est une fréquence, une valeur constante, f(x)=k0. 2 barres correspondent à 2 fréquences, f(x)=k0+k1*Sin(a1*x+b1), etc.
 
Comptable, le temps en Afrique est formé à cause de la variable ft3, elle n'est pas définie, donc vous obtenez des valeurs différentes.
 
lsv писал (а):
Comptable, le temps en Afrique est formé à cause de la variable ft3, elle n'est pas définie, donc vous obtenez des valeurs différentes.

Merci... Voyons voir si nous pouvons trouver une solution...
 

Voici un exemple (indicateur) sur lequel j'ai étudié Fourier...
Regardez dans le code là - ce n'est pas difficile.
Par défaut, le spectre d'une fonction périodique est sorti...
Vous pouvez envoyer l'indicateur que vous voulez. Ce que vous ferez ensuite du spectre relève de votre imagination.
Je veux maintenant collecter des modèles à partir des spectrogrammes obtenus et "pousser" le tout dans un réseau neuronal pour la reconnaissance.

J'ai téléchargé le fichier

Dossiers :
 
lsv:
J'ai l'impression d'être la seule personne du département radio. 1 bar est une fréquence, une valeur constante, f(x)=k0. 2 barres correspondent à 2 fréquences, f(x)=k0+k1*Sin(a1*x+b1), etc.
Autant que je me souvienne, 8 barres en FFT produisent 8 fréquences,
mais la moitié d'entre elles sont symétriques à l'autre moitié (décalées de pi semble-t-il)
Il en reste donc 4.

Il ne peut en être autrement.
Une fréquence (sinusoïde) contient 3 paramètres - G(t) = A*Sin(w*t+p)
Les fréquences (w) sont fixes, ce qui laisse 2 paramètres - l'amplitude (A) et la phase (p).

Dans toute transformation à partir de K variables indépendantes (valeurs des barres)
on peut obtenir au maximum K paramètres indépendants.
C'est-à-dire qu'à partir de 8 barres, on peut obtenir un maximum de 4 fréquences (2 paramètres par barre).
 
klot, votre fichier n'est pas disponible pour une raison quelconque. Je voulais initialement utiliser Fourier pour extraire la tendance, c'est-à-dire comme un filtre FFT, mais je me suis souvenu que Fourier suppose que la section analysée se répète. C'est-à-dire que s'il y a des barres avec des prix 10,11, 13, 12, alors Fourier suppose qu'elles seront suivies par des barres 10,11, 13, 12, 10,11, 13, 12. Et cela gâche toute l'idée.