首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IFFT找到sin(x^2)?

IFFT找到sin(x^2)?
EN

Stack Overflow用户
提问于 2020-01-05 22:39:08
回答 1查看 76关注 0票数 2

我想使用逆FFT来计算逆傅立叶变换。我发现我可以很容易地用平方可积函数来做,但不能用分布来做。

首先我建立一个波数矢量k和一个空间坐标x,

代码语言:javascript
复制
clear;

nx = 2^10;
L = 20;
dx = L/nx;
x = [0:nx-1]' * dx - L/2;

k = zeros(nx,1);
k(1:nx/2+1) = 2*[0:nx/2]/nx;
k(nx:-1:nx/2+2) = -k(2:nx/2);
k = k*pi/dx ;

接下来,我将验证两个示例是否一切正常:单元boxcar函数和sech:

代码语言:javascript
复制
% boxcar

Ghat = sin( k/2 )  ./ (k/2);
Ghat(1) = 1;
Gi = ifft(Ghat) / dx ;
Gi = ifftshift(Gi);
figure; plot(x,Gi);

% sech( x )

Ghat = pi*sech( pi*k /2 );
Gi = ifft(Ghat) / dx ;
Gi = ifftshift(Gi);
figure; plot(x,Gi,'o'); hold on;
analytical = sech(x);
plot(x,analytical,'-');

这两个看起来都很好。

这就是事情停止工作的地方:

代码语言:javascript
复制
% sin(x^2)

Ghat = -sqrt(pi)*sin( (k.^2-pi)/4 );
Gi = ifft(Ghat) / dx ;
Gi = ifftshift(Gi);
analytical = sin(x.^2);
figure;
plot(x,analytical,'-'); hold on;
plot(x,Gi,'o');

您会注意到,计算值看起来与预期的函数完全不同。

我不知道为什么这不管用。我在Wikipedia上唯一注意到的是sin(x^2)是一个分布,因此不是平方可积的。这是我的问题的根源吗?有解决方案吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-07 04:44:39

我将给出一个python的例子,应该很容易翻译成Matlab。

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as p
%matplotlib inline

dt=0.01
time = np.arange(0,10,dt) # 10 secs, sampled at 10 ms, so nyquist is 100 Hz
f=3 # hz
dat= np.sin(2*np.pi* f*time)

p.figure(figsize=(10,5))
p.subplot(221)
p.plot(time,dat)
p.subplot(222)
freqs = np.fft.fftfreq(len(time),d=dt)
#print(freqs)
spec=np.fft.fft(dat)
p.plot( freqs,np.abs(spec)  );


f=0.5
dat2= np.sin(2*np.pi* f*time**2)
p.subplot(223)
p.plot(time,dat2)
p.subplot(224)
p.plot( freqs,np.abs(np.fft.fft(dat2))  );

左边是正弦和带平方变元的正弦的时间行为(有效地,你有一个线性频率变化,一个upchirp。你可以把一个x想象成时间,另一个结合到你的频率中,它现在随着时间线性上升。在频谱中(显示正负频率,因为FFT被定义为复FT),您可以看到正弦波的频率是稳定的,而正弦(x**2)扫描的频率范围。

描绘事物总是有帮助的。对于sin(x**2),如果参数上升太快,很容易违反奈奎斯特定理,导致时间-domain (左)中的欠采样和频域(右)的混叠。这没有显示,只需尝试使用更高的基频。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59600945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档