Ayuda con Fourier

 
Intenté usar la 'Biblioteca de Funciones de Transformada Rápida de Fourier' ('Library of FFT Fast Fourier Transform Functions'), pero no puedo averiguar cómo usar estas funciones, por alguna razón todas tienen las mismas descripciones. Ayuda, por favor! ¿Cómo, por ejemplo, tener los valores de Close de las 8 últimas barras para obtener su espectro, y luego dejar las 4 primeras frecuencias (como el filtro de paso bajo) y recuperar la señal?
 
Dudo que sea posible sacar 4 frecuencias de 8 barras, no es que sea lo único que queda.
 
La conversión (FFT) de 8 valores discretos de la señal dará 8 frecuencias, dejando 4 frecuencias inferiores, obtenemos el filtro LF de las fluctuaciones del curso actual.
 
Me enviaron una aproximación de Fourier, si te interesa, puede ser útil.

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

Tal vez también puedas decirme por qué, si en lugar de la biblioteca, el primer código se inserta directamente en un indicador, muestra el tiempo en África.




 
lsv писал (а):
La conversión (FFT) de 8 valores discretos de la señal dará 8 frecuencias, dejando 4 frecuencias inferiores, obtenemos un filtro LF de la oscilación del curso actual.

Se requiere un mínimo de 2 compases para determinar 1 periodo, con lo que se determinan las frecuencias 4, 2 y 1.
 
Parece que soy el único del departamento de radio. 1 bar es una frecuencia, un valor constante, f(x)=k0. 2 barras son 2 frecuencias, f(x)=k0+k1*Sin(a1*x+b1), etc.
 
Tenedor de libros, el tiempo en África se forma debido a la variable ft3, no está definido, por lo que se obtienen diferentes valores.
 
lsv писал (а):
Tenedor de libros, el tiempo en África se forma debido a la variable ft3, no está definido, por lo que se obtienen diferentes valores.

Gracias... a ver si lo resolvemos...
 

Aquí hay un ejemplo (indicador) en el que estudié Fourier...
Mira en el código allí - no es difícil.
Por defecto, el espectro de una función periódica se emite...
Puede enviar el indicador que desee. Lo que se haga después con el espectro es tu imaginación.
Ahora quiero recoger patrones de los espectrogramas obtenidos y "meterlos" todos en una red neuronal para su reconocimiento.

Cargado el archivo

Archivos adjuntos:
 
lsv:
Parece que soy el único del departamento de radio. 1 bar es una frecuencia, un valor constante, f(x)=k0. 2 barras son 2 frecuencias, f(x)=k0+k1*Sin(a1*x+b1), etc.
Por lo que recuerdo, 8 barras en la FFT producen 8 frecuencias,
pero la mitad de ellos son simétricos a la otra mitad (desplazados por pi parece)
Así que realmente quedan 4.

No puede ser de otra manera.
Una frecuencia (sinusoide) contiene 3 parámetros - G(t) = A*Sin(w*t+p)
Las frecuencias (w) son fijas, lo que deja dos parámetros: la amplitud (A) y la fase (p).

En cualquier transformación a partir de K variables independientes (valores de barra)
se pueden obtener como máximo K parámetros independientes.
Es decir, a partir de 8 compases se pueden obtener un máximo de 4 frecuencias (2 parámetros por compás)
 
klot, su archivo no está disponible por alguna razón. Inicialmente quería utilizar Fourier para extraer la tendencia, es decir, como un filtro FFT, pero recordé que Fourier asume que la sección analizada se repite. Es decir, si hay barras con precios 10,11, 13, 12, entonces Fourier asume que serán seguidas por barras 10,11, 13, 12, 10,11, 13, 12. Y esto estropea toda la idea.