Fourier hakkında yardım - sayfa 2

 
Genlik ve faz BİR karmaşık sayıdır, 1 bar aynı zamanda sanal kısmın = 0 olduğu 1 sayıdır. Bu nedenle, 8 bar - 8 frekans. Klot'a bu konuda ne düşündüğünü soralım mı?
 
Dosya olmayan bir şey gönderilmedi
tekrar deneyeceğim
Dosyalar:
 
Aslında böylesi daha iyi :)

 //+------------------------------------------------------------------+
//|                                            #_i_SpecktrAnalis.mq4 |
//|                                          Copyright © 2006, klot. |
//|                                                     klot@mail.ru |
//+------------------------------------------------------------------+
#property copyright " Copyright © 2006, klot. "
#property link      " klot@mail.ru "
//---
#include < stdlib.mqh >
#define pi 3.14159265358979323846
//---
#import " #_lib_FFT.ex4 "
void realfastfouriertransform ( double & a [] , int tnn , bool inversefft ) ;
#import
//---
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- buffers
double SpecktrBuffer [] ;
//---
extern double n = 8 ; // Задает размер массива - степень двойки
extern double f = 1.0 ; // Частота периодической функции
extern double ff = 0 ; // Фаза периодической функции
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init ()
  {
//---- indicators
SetIndexStyle ( 0 , DRAW_HISTOGRAM ) ;
SetIndexBuffer ( 0 , SpecktrBuffer ) ;
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit ()
  {
//----
   
//----
   return ( 0 ) ;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start ()
  {
   int tnn1 = MathPow ( 2 , n ) ; // По ограничению функции- размер массива длжен быть степенью двойки
   double aa [] ;
   int N = ArrayResize ( aa , tnn1 ) ;
   SetIndexDrawBegin ( 0 , Bars - N ) ;
   SetIndexDrawBegin ( 1 , Bars - N ) ;
   //ArrayResize(aa,tnn1+1); //Для косинус-преобразования
   //---
   // Исследование спектра разных функций
   double sig ;
   for ( int i = 0 ; i <= N - 1 ; i ++ )
   {
      sig = MathCos ( f * i / ( 2.0 * pi ) + ff * pi ) ; // Обыкновенная периодическая функция - к рынку не имееет отношения
      //sig=Close[i];
      //sig=iRSI(NULL,0,14,PRICE_CLOSE,i+1);
      aa [ i ] = sig ;
      
   }
   //InSigNormalize(aa); //Нормализация значений 
   // Прямое преобразование Фурье - после выпонения функции в массиве aa[] - спектрограмма
   realfastfouriertransform ( aa , tnn1 , false ) ; 
   InSigNormalize ( aa ) ; //Нормализация значений 
   
   //--- Вывод спектрограммы на экран
   for ( i = 0 ; i <= N - 1 ; i ++ )
   {
      // Модуль комплексного числа
      SpecktrBuffer [ i ] = MathSqrt ( aa [ i * 2 ] * aa [ i * 2 ] + aa [ i * 2 + 1 ] * aa [ i * 2 + 1 ]) ; 
   }
   //---
   /*
   //realfastfouriertransform(aa, tnn1, true);
   for( i=0; i<=N; i++)
   {
      SpecktrBuffer[i]=aa[i];
   }*/
 
   //----
   return ( 0 ) ;
  }
  
//+------------------------------------------------------------------+
 
//--------------------------------------------------------------------+
void InSigNormalize ( double & aa [])
{
   double sum_sqrt ;
   int element_count = ArraySize ( aa ) ;
   sum_sqrt = 0 ;
   for ( int i = 0 ; i <= element_count - 1 ; i ++ )
   {
      sum_sqrt += MathPow ( aa [ i ] , 2 ) ;
   }
   sum_sqrt = MathSqrt ( sum_sqrt ) ;
   
   if ( sum_sqrt != 0 )
   {
      for ( i = 0 ; i <= element_count - 1 ; i ++ )
      {
         aa [ i ] = aa [ i ] / sum_sqrt ;
      }
   }
   return ;
}
//---------------------------------------------------------------------+
 
lsv писал (а):
Genlik ve faz BİR karmaşık sayıdır, 1 bar aynı zamanda sanal kısmın = 0 olduğu 1 sayıdır. Bu nedenle, 8 bar - 8 frekans. Klot'a bu konuda ne düşündüğünü soralım mı?

Karmaşık sayılarla şunu yaptım:
//--- Spektrogramın ekranda görüntülenmesi
for( i=0; i<=N-1; i++)
{
// Karmaşık sayı modülü
SpecktrBuffer[i]=MathSqrt(aa[i*2]*aa[i*2]+aa[i*2+1]*aa[i*2+1]);
}
//---
 
lsv :
Genlik ve faz BİR karmaşık sayıdır, 1 bar aynı zamanda sanal kısmın = 0 olduğu 1 sayıdır. Bu nedenle, 8 bar - 8 frekans. Klot'a bu konuda ne düşündüğünü soralım mı?
bana sorsan iyi olur :)
Birkaç yıldır böyle yapıyorum :)
sitemde bile dijital filtreyle ilgili bir sürü sayfa var
http://www.may.nnov.ru/mak/DSP/Contents.shtml

Ya da google'da aratın..
İşte ilk bağlantı
http://alglib.sources.ru/fft/realfft.php

sayfanın sonu:

Bu resmi FFT için benzer karmaşık fonksiyonla karşılaştırırsak, f -1'den f -N / 2 + 1'e kadar olan frekansların bir yerde kaybolduğunu ve sadece f 0 ve f N frekanslarının gerçek kısımlarının kaybolduğunu fark edeceğiz. / 2 karmaşık frekansın önceki yerini işgal etti f 0 . Bunun nedeni Fourier dönüşümünün simetri özellikleridir: gerçek bir h(t) fonksiyonu için H(-f) = H * (f) olduğu doğrudur.

Böylece f -1'den f -N/2+1'e kadar olan frekanslar artık yeni bilgi taşımamaktadır, çünkü simetrik ikizlerinin karmaşık eşleniği ile elde edilir ve f 0 ve f N/2 frekansları sıfır sanal kısımlara sahiptir.

================================================= ========
Bir karmaşık sayı 2 bağımsız bileşen içerir,
sanal kısmı sıfıra eşit olan bir karmaşık sayı, 1 bağımsız bileşen içerir.

Girdi bir dizi karmaşık sayıysa, o zaman K frekanslarını alırız,
girdi bir dizi gerçek sayıysa, frekansların yarısı kalır.
 
Daha basit bir mantık yürütüyorum: Böyle bir teorem var ama ispatlayanın adını hatırlamıyorum: bir analog sinyali dijitale dönüştürmek, belirli bir frekansı kaydetmek, saklanan frekansın iki katı kadar örnek alır. . Bizim durumumuzda 8 örnek vardır, bu nedenle frekans bilgilerini 4 periyottan fazla tutamazlar.
 
Kotelnikov Teoremi.
 

Tartışmaya bakılırsa, bu Fourier ilginç bir şey ama ne yazık ki bunun neyle ilgili olduğunu anlamıyorum.
Birisi kısaca ne olduğunu ve danışmanların nasıl çıkarılacağını açıklayabilir mi?

 
Ronen :

Tartışmaya bakılırsa, bu Fourier ilginç bir şey ama ne yazık ki bunun neyle ilgili olduğunu anlamıyorum.
Birisi kısaca ne olduğunu ve danışmanların nasıl çıkarılacağını açıklayabilir mi?


Bazı yanlışlıklar kabul edebilirim .... Sonuç olarak, herhangi bir periyodik fonksiyon, farklı frekansların sinüzoidal bileşenlerinin bir toplamı olarak temsil edilebilir, yani. Fourier serisinde genişletin. Fourier serisi, iki katına çıkma frekansının (harmonik) sinüzoidler ve kosinüs dalgalarının toplamıdır. Fourier dönüşümlerini kullanan bazı matematiksel manipülasyonlar yoluyla, bir veri serisi, tek tip olarak değişen bir frekansın sinüzoidlerinin bir toplamı olarak temsil edilebilir ve her bileşen için bir genlik elde etmek için, basitçe söylemek gerekirse, sinyalin frekans tepkisini elde etmek için (sinüzoidlerin genliği ile sinüzoidlerin genliği). 1 Hz, 2, 3, vb. bir frekans). Ardından, her bir frekans bileşenini manipüle ederek sinyali filtrelemek vb. mümkündür. vb. Her şey yolunda, ama bir şey var - fonksiyon periyodik olmalı, periyodik olmasa bile, o zaman bu dönüşümler onun periyodik olduğunu ima eder. Kim bilir... belki bir faydası vardır.
 
Integer писал (а):
Sonuç olarak, herhangi bir periyodik fonksiyon şu şekilde temsil edilebilir: ...

O zaman, zor değilse de - çaydanlık seviyesi için biraz daha fazla:

Belki yanılıyorum, ama bana öyle geliyor ki küçük TF'ler bu duruma yeterince uyuyor. Şu anda M1'den değerleri prevBars!=Bars ile global değişkenler olarak geçirip 1 dakikalık aralıklarla M15 ve H1'e okuyarak gözlemliyorum, bunun barın içindeki giriş noktasını büyük ölçüde etkileyip etkilemediğini görüyorum. eski TF Belki eğlenmek için, ya da belki - "Her saatlik çubuğun içinde 10p kar var :). Veya 15p geyik :(." Sinüs / kosinüs gerçekten düşerse, gün içi için gerçek bir eklenti olacak. Bana öyle geliyor.
Neden: