我使用Matlab解决傅立叶空间中的微分方程。但是,我遇到了一个问题:在区分我的真实信号后,我得到了复杂的答案(这是不正确的)。
考虑一个在x
上进行差异化的示例(在傅立叶空间中乘以ik
):
a=rand(6,1).';
fr=fftshift(-3:1:2);
ifft(1i*fr.*fft(a))
输出很复杂。我弄清楚它为什么会发生:我们的频谱是-3,-2,-1,0,1,2
。因此,没有最高频率的对(我们有-3,但不要有3)。我想知道如何解决它。
如果我们考虑一下,从最高频率开始技术上的非零贡献。如果频率-3上的傅立叶振幅是c0
,那意味着,实际上我们在频率-3和3上有振幅c0/2
,因此在分化之后我们得到:
(c0/2)*i*(-k)*exp(-ikx)+(c0/2)*i*(k)*exp(ikx)=kc0*sin(kx)
我很好奇,如何实现正确的差异化。我的问题是2D,所以我使用fft2和ifft2。但问题起源不一。
由于
答案 0 :(得分:2)
您需要考虑三件事:
1-exp(-1j*2*pi/N*fr)
,其中N
是信号周期,fr = 0:N-1
是频率样本。这源于DFT的时移属性(参见例如here)。a(1)-a(N)
,第二个将为a(2)-a(1)
等。所以,代码应该是:
a = rand(6,1).';
N = numel(a);
fr = 0:N-1;
a_diff_fr = ifft((1-exp(-1j*2*pi/N*fr)).*fft(a));
检查:
>> a_diff_fr % imag part should be small
a_diff_fr =
Columns 1 through 5
-0.5490 - 0.0000i 0.3169 - 0.0000i -0.5662 + 0.0000i 0.6851 + 0.0000i -0.5155 - 0.0000i
Column 6
0.6287 + 0.0000i
>> real(a_diff_fr) % real part only
ans =
-0.5490 0.3169 -0.5662 0.6851 -0.5155 0.6287
>> a([1 2:N])-a([N 1:N-1]) % circular differentiation
ans =
-0.5490 0.3169 -0.5662 0.6851 -0.5155 0.6287
答案 1 :(得分:1)
我认为你在那里错过了2 pi。这是一个使用x = 2 cos(2*pi*t)
Tp = 10; % sample length
deltaTime = Tp / 200; % time step
time = 0:deltaTime:Tp; % time
x = 2*cos(2*pi*time); % function
plot(time, x)
fMax = 1/deltaTime/2; % maximum frequency
fMin = 1/Tp; % lowest observable frequency
xfft = fft(x) ./ (length(time)/ 2); % fft scaled to original amplitude, in case you want to plot it.
freq = -1*fMax:fMin:fMax; % frequencies of the fft
xd_fft = xfft .* fftshift(freq) * 1i*2*pi; % note the extra 2 pi in here.
xd = ifft(xd_fft, 'symmetric') * (length(xd_fft)/ 2); % reverse the scaling and take the ifft.
xd2 = -4*pi*sin(2*pi*time);
plot(time, xd2, '.')
我这样做的等式是:
x(t)= Xe ^(iwt)和
x'(t)= iwXe ^(iwt)
回想一下w = 2 * pi * f。
如果我知道如何使用希腊符号我会的。但我认为你得到我所说的。
答案 2 :(得分:0)
路易斯·门多建议正确解决我的问题。我还想出了如何修复我的方法:思考是,高频上正弦波分量始终为零,只有余弦谐波可见:
signal=sin(2.*(linspace(0,2*pi*(1-1/4),4)));
q=fftshift(fft(signal))./4
这里q为零。但如果用cos(2x)信号做的话:
signal=cos(2.*(linspace(0,2*pi*(1-1/4),4)));
q=fftshift(fft(signal))./4
这里q(1)= 1。因此,在我的方法中,我必须在乘以ik
之后将最高次谐波的虚部设置为0,只要正弦谐波是不可见的。正如马特建议的那样,人们可以简单地使用对称的对称' ifft例程中的选项