在 木沉:Matlab基础操作:快速傅里叶变换的理解 中,我们说明了 fft
是对下面积分的数值离散
其中函数
但是实际应用过程中,我们需要数值计算一个紧支函数
因为
因此我们面临的问题是
- 函数
是一般周期
- 我们需要求解Fourier变换
,其中
不是整数
周期的处理
我们假定
则
因此函数
是
因此,通过这个变量替换,得到
因此,如果我们通过对
那么通过 fft
得到的就是
对应的模值
对照结果
这正好对应于
的结果(除去一个常数因子)
因此,如果
在使用 fft
时,我们需要对
这就等价于对
我们先来看看这样计算出来的
假如我们对
fft
我们计算出傅里叶变换对应于
的值(差一个常数因子)
总结
这里总结一下计算过程
- 获得函数
的支集
- 对
在
上进行等距采样,个数为
个
- 最后
其中
当然,首先集合
在这个集合取定之后,
实例
考虑
则
我们选取
![08e1177f2b8358fa6b3f395a1dea4786.png](https://i-blog.csdnimg.cn/blog_migrate/865c0aea15368903a172eef6d9e7c108.jpeg)
其中蓝色点是通过 fft
计算得到,红色点是精确值。
g = @(x) exp(-x.^2);
c = -10; d = 10;
N = 30;
x = linspace(c,d,N+1);
x = x(1:end-1);
xx = 2*pi/(d-c)*([0:N/2 -N/2+1:-1]);
xxnew = [xx(N/2+2:end) xx(1:N/2+1)];
gxx = exp(-1i*c*xx)*(d-c)/N.*fft(g(x));
gxxnew = [gxx(N/2+2:end) gxx(1:N/2+1)];
figure;
plot(xxnew,gxxnew,'b-o','MarkerSize',8);
hold on
plot(xxnew,sqrt(pi)*exp(-xxnew.^2/4),'r^');