Matlab 如果要找到罪恶(x^2)?

Matlab 如果要找到罪恶(x^2)?,matlab,math,fft,Matlab,Math,Fft,我想使用逆FFT来计算逆傅里叶变换。我发现我可以很容易地用平方可积函数做到这一点,但不能用分布 首先我设置了波数向量k和空间坐标x 清晰; nx=2^10; L=20; dx=L/nx; x=[0:nx-1]'*dx-L/2; k=零(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: %boxcar Ghat=sin(k/2)

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

首先我设置了波数向量k和空间坐标x

清晰;
nx=2^10;
L=20;
dx=L/nx;
x=[0:nx-1]'*dx-L/2;
k=零(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:

%boxcar
Ghat=sin(k/2)。/(k/2);
Ghat(1)=1;
Gi=ifft(Ghat)/dx;
Gi=ifftshift(Gi);
图形图(x,Gi);
%秘书(x)
Ghat=pi*sech(pi*k/2);
Gi=ifft(Ghat)/dx;
Gi=ifftshift(Gi);
图形图(x,Gi,'o');等等
分析=秒(x);
图(x,分析“-”);
这两个看起来都不错

这就是事情停止运转的地方:

%sin(x^2)
Ghat=-sqrt(pi)*sin((k.^2-pi)/4);
Gi=ifft(Ghat)/dx;
Gi=ifftshift(Gi);
分析=sin(x.^2);
图形
图(x,分析“-”);等等
图(x,Gi,'o');
您将注意到,计算出的值与预期的函数完全不同


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

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

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时显示正频率和负频率)您可以看到正弦波的频率是稳定的,而sin(x**2)扫描一系列频率

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


问题不在于分布,因为你在做数值积分,所以你要用单峰或窄三角形、窄盒函数或窄高斯函数模拟一个增量函数,你会得到你想要的结果。如果你有一个函数在远离
零的地方没有变小,那么你应该把它打开。前进vs反向FFT不重要,取决于你用来模拟物理现实的定义。重要的是缩放,这样往返不会改变能量。谢谢!这促使我在谷歌搜索类似“快速振荡函数的FFT”的内容,这导致了一个非常类似的帖子: