matlab fft函数说明_Matlab利用fft计算Fourier变换

在 木沉:Matlab基础操作:快速傅里叶变换的理解 中,我们说明了 fft 是对下面积分的数值离散

其中函数

是一个
周期的函数。并且如果我们的采样点个数为
的话,
的取值范围为

但是实际应用过程中,我们需要数值计算一个紧支函数

的Fourier变换

因为

紧支,我们可以将积分区域限定到它的支集上,因此也可以将
视为一个周期函数。

因此我们面临的问题是

  • 函数
    是一般周期
  • 我们需要求解Fourier变换
    ,其中
    不是整数

周期的处理

我们假定

的支集为
,我们定义

因此函数

上周期边界的函数。

因此,通过这个变量替换,得到

因此,如果我们通过对

采样,选取

那么通过 fft 得到的就是

对应的模值

对照结果

这正好对应于

的结果(除去一个常数因子)

因此,如果

比较大的话,这样我们近似得到
在多点的值,我们使用插值来近似我们想要的点的值。

的采样

在使用 fft 时,我们需要对

上等距采样,利用

这就等价于对

上等距采样。

的范围

我们先来看看这样计算出来的

的范围是多大。

假如我们对

上等距采样了
个点, 通过
fft 我们计算出傅里叶变换对应于

的值(差一个常数因子)

总结

这里总结一下计算过程

  • 获得函数
    的支集
  • 上进行等距采样,个数为
  • 最后

其中

当然,首先集合

要取得适当得大,保证基本涵盖了
的支集。

在这个集合取定之后,

的步长也确定了,令
增加可以增加计算的频谱范围。

实例

考虑

我们选取

的支集近似为
,选取
,结果如下图

08e1177f2b8358fa6b3f395a1dea4786.png

其中蓝色点是通过 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^');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值