傅立叶的帮助 - 页 2

 
振幅和相位是一个复数,1条也是一个数字,其中虚部=0。因此,8个小节就是8个频率。我们来问问klot 对此有何看法?
 
有东西没有发送文件
我再试试。
附加的文件:
 
总之,这样就好了 :)

//+------------------------------------------------------------------+
//|                                            #_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 писал (а):
振幅和相位是一个复数,1条也是一个数字,其中虚部=0。因此,8个小节就是8个频率。我们来问问klot 的看法。

我是用复数做的。
//---将频谱图输出到屏幕上
for( i=0; i<=N-1; i++)
{
// 一个复数的模块
SpecktrBuffer[i]=MathSqrt(aa[i*2]*aa[i*2]+aa[i*2+1]*aa[i*2+1]);
}
//---
 
lsv:
振幅和相位是一个复数,1条也是一个数字,其中虚部=0。因此,8个小节就是8个频率。让我们问问klot 他怎么看?
你最好问我 :)
我已经处理这个问题好几年了 :)
我的网站上甚至有一堆关于TF的页面
http://www.may.nnov.ru/mak/DSP/Contents.shtml

或者谷歌一下。
例如,这里是第一个链接。
http://alglib.sources.ru/fft/realfft.php

页尾。

如果我们将这幅图与FFT复数函数 的类似图进行比较,我们会发现频率f-1f-N/2+1 在某处消失了,只有频率f0 fN/2 的实数部分留下来,取代了复数频率f0 的位置 其原因是傅里叶变换的对称性:对于实数函数h(t)来说,H(-f)=H *(f)是真的。

因此,频率f-1f-N/2+1 不再携带任何新的信息,因为它们是由其对称双胞胎的复数共轭得到的,而频率f0 fN/2虚数 部分等于零。

===========================================================
一个复数包含2个独立成分。
一个虚部等于零的复数包含1个独立分量。

如果输入的是一系列的复数,我们就会得到K个频率。
如果输入的是一些实数,那么就保留一半的频率。
 
我的推理更简单:有一个定理,但我不记得证明这个定理的人的名字了:将模拟信号转换为数字信号,需要两倍于存储频率的样本数。在我们的案例中,有8个样本,所以它们可以存储不超过4个周期的频率信息。
 
科特尔尼科夫定理。
 

从讨论的情况来看,这个傅立叶是很有意思的东西,但遗憾的是,我不明白它是怎么一回事。
谁能简明扼要地解释一下它是什么,以及如何用它做一个EA?

 
Ronen:

从讨论来看,这个傅里叶是很有趣的东西,但不幸的是,我不明白我们在这里谈论的是什么,
,谁能简要地解释一下它是什么以及如何用它做一个EA?


我可以做一些不准确的东西....重点是,任何周期性 函数都可以表示为不同频率的正弦波分量之和,即可以扩展为傅里叶级数。傅里叶级数是频率加倍的正弦和余弦分量的总和(谐波)。通过一些傅里叶变换的数学处理,数据序列可以呈现为均匀 变化的频率正弦波的总和,对于每个分量,我们可以得到振幅,简单地说就是信号的频率响应(频率为1赫兹、2、3等的正弦波的振幅)。然后通过操纵每个频率分量,就可以对信号进行过滤,等等。这没问题,但有一点,函数必须是周期性的,即使它不是周期性的,这些围布也意味着它是周期性的。虽然谁知道...也许这有一些好处。
 
Integer писал (а):
问题是,任何周期性 函数都可以表示为......。

好吧,如果不是太难的话--对傻瓜的水平来说,再多一点。

也许我错了,但在我看来,小型TFs相当适合这种条件。我现在观察它,通过全局变量传递来自M1(prevBars!=Bars)的值,并在M15和H1上以1分钟的间隔读取它们,我看到--它是否可能强烈影响主要TF的一个条形内的进入点。也许是为了好玩,也可能是--"在每个小时的条形图里,都坐着10便士的利润:)。或15便士的损失:(。" 如果正弦/余弦真的会说谎--对于日内来说,这将是一个真正的附加值。在我看来。