功能已知时的傅里叶变换

时间:2017-08-01 16:01:03

标签: c++ c fft fftw

我有一个傅立叶变换函数f(w),其分析形式我知道。 说

f(w) = Product of j=1 to 1000 (a1_j * exp (i * w * b1_j) + a2_j * exp (i* w* b2_j)+...+a10_j * exp (i* w* b10_j)+ c_j)

其中a,b,c是实数,“i”是sqrt(-1)。 因此,即使a,b,c已知函数必须以数字方式计算,它在分析上并不易处理。

现在我想计算逆变换f(w)以获得原始函数F(x)。

我的问题部分是数学问题,部分与软件有关:

  1. 我可以使用可用的软件程序计算逆变换,但我不确定应该采用何种离散采样方法使f(w)能够忠实地再现F(x)给出一些容差。 F(x)的域可能非常大。那么什么是出路呢?

  2. C / C ++中是否有任何免费提供的软件例程,它们可以作为输入来表示函子f(w)并对给定的“x”执行逆变换。如果存在,它将绕过我的第一个问题(因为我猜它将在内部处理在给定任何函数的情况下用于执行采样/积分的点数)

1 个答案:

答案 0 :(得分:-1)

  

C / C ++中是否有任何可用的软件例程,它们可以作为输入来表示函子f(w)并对给定的“x”执行逆变换。如果存在,它将绕过我的第一个问题(因为我猜它将在内部处理在给定任何函数的情况下用于执行采样/积分的点数)

非常经典的FFT软件,存在于所有系统中,

http://www.fftw.org/

在UBuntu上,你必须安装libfftw3-dev,就是这样

更新

我可以编写离散化代码,但在查看函数定义

之后
f(w) = Product of j=1 to 1000 (a1_j * exp (i * w * b1_j) + a2_j * exp (i* w* 2_j)+...+a10_j * exp (i* w* b10_j)+ c_j)

我反对声明

  

所以尽管a,b,c是已知函数必须以数字方式计算,但它并不是真正易于分析的。

如果您查看您的功能,请仔细展开它,您将得到线性总和

f(w)= Sum k A k * exp(i w B k

记住x域和w域是非常对称的直接和逆傅里叶变换,如果x域中的单谐波将在频域中产生狄拉克的δ-函数,那么w域中的单谐波将产生狄拉克在x域中的δ-函数。

所以F(x)将是

F(x)= Sum k A k *δ(x - B k

以数字方式处理δ非常麻烦,所以我建议你放弃整个离散化业务,专注于如何从你的f计算A k 和B k w)表达。