Ajuda com Fourier

 
Tentei usar a 'Biblioteca de Funções de Transformação de Fourier Rápida FFT' ('Biblioteca de Funções de Transformação de Fourier Rápida FFT'), mas não consigo descobrir como usar essas funções, por alguma razão todas elas têm as mesmas descrições. Ajude, por favor! Como, por exemplo, ter valores próximos de 8 últimas barras para obter seu espectro, depois deixar as 4 primeiras freqüências (como filtro de baixa passagem) e obter sinal de volta?
 
Duvido que seja mesmo possível obter 4 freqüências em 8 barras, não que seja tudo o que resta.
 
A conversão (FFT) de 8 valores de sinal discretos dará 8 freqüências, deixando 4 freqüências mais baixas, obtemos o filtro LF das flutuações do curso atual.
 
Eles me enviaram uma aproximação de Fourier, se você estiver interessado, ela pode vir a 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); }
//****************************************************

Talvez você também possa me dizer porque, se ao invés da biblioteca, o primeiro código é inserido diretamente em um indicador, ele mostra o tempo na África.




 
lsv писал (а):
A conversão (FFT) de 8 valores de sinal discretos dará 8 frequências, deixando 4 frequências mais baixas, obtemos o filtro LF da oscilação do curso atual.

É necessário um mínimo de 2 barras para determinar 1 período. As freqüências 4, 2 e 1 são assim determinadas.
 
É como se eu fosse o único do departamento de rádio. 1 barra é uma freqüência, um valor constante, f(x)=k0. 2 barras são 2 freqüências, f(x)=k0+k1*Sin(a1*x+b1), etc.
 
Bookkeeper, o clima na África é formado por causa da variável ft3, não é definido, então você obtém valores diferentes.
 
lsv писал (а):
Bookkeeper, o clima na África é formado por causa da variável ft3, não é definido, então você obtém valores diferentes.

Obrigado... vamos ver se conseguimos descobrir...
 

Aqui está um exemplo (indicador) no qual estudei Fourier...
Veja o código ali - não é difícil.
Por padrão, o espectro de uma função periódica é emitido...
Você pode enviar qualquer indicador que desejar. O que fazer com o espectro depois é sua imaginação.
Agora quero coletar padrões dos espectros obtidos e "enfiar" tudo isso em uma rede neural para reconhecimento.

Carregou o arquivo

Arquivos anexados:
 
lsv:
É como se eu fosse o único do departamento de rádio. 1 barra é uma freqüência, um valor constante, f(x)=k0. 2 barras são 2 freqüências, f(x)=k0+k1*Sin(a1*x+b1), etc.
Até onde me lembro, 8 barras em FFT produzem 8 freqüências,
mas metade delas são simétricas à outra metade (deslocadas por pi, ao que parece)
Então isso realmente deixa 4.

Não pode ser de outra forma.
Uma freqüência (sinusoidal) contém 3 parâmetros - G(t) = A*Sin(w*t+p)
As freqüências (w) são fixas, o que deixa 2 parâmetros - amplitude (A) e fase (p).

Em qualquer transformação de variáveis independentes de K (valores de barra)
é possível obter no máximo parâmetros independentes K.
Ou seja, a partir de 8 barras é possível obter um máximo de 4 freqüências (2 parâmetros por barra)
 
klot, seu arquivo não está disponível por algum motivo. Inicialmente eu queria usar Fourier para extrair a tendência, ou seja, como um filtro FFT, mas lembrei que Fourier assume que a seção analisada se repete. Ou seja, se houver barras com preços 10,11, 13, 12, então Fourier assume que elas serão seguidas por barras 10,11, 13, 12, 10,11, 13, 12. E isto estraga toda a idéia.
Razão: