【发布时间】:2017-10-16 12:22:31
【问题描述】:
如果我从一个只有实数值的信号开始,执行 fft 和 ifft 会返回准确的信号,没有预期的复杂条目。但是,如果我用零填充 fft 以获得时域中的插值,则反 fft 总是结果是复数。我已经注意执行 fftshift() 然后在两侧填充,以免破坏对称性。以下是显示此行为的示例代码。我是不是看错了,还是零填充后的计算错误有点太多了?我该如何克服这个问题?
代码:
%%%%%%%%%
x=linspace(0,2*pi,200);
y = sin(x)+sin(2*x);
Y = fftshift(fft(y));
n=400;
x1 = linspace(0,2*pi,n);
Y1 = zeros(1,n);
Y1((n-200)/2+1:end-(n-200)/2) = Y;
y2 = ifft(fftshift(2*Y1));
plot(x,y);
hold on;
plot(x1,y2(1:end),'x-');
isreal(y)==isreal(y2)
%%
【问题讨论】:
-
注意:
Y2没有定义,为什么最后和Y2比较,我猜应该是y2? -
为了比较,有一个 FEX 提交,您可以在其中看到它是如何编码的:Frequency-domain-zero-padding
-
我的错,这是一个错字,应该是 y2,但这不是问题
-
@Irreducible,我检查了该页面上的代码。它做完全相同的事情。只是,在返回之前的最后,只考虑真实的部分。但是,忽略虚部,只会改变信号。我说的对吗?
标签: matlab signal-processing fft interpolation ifft