【发布时间】:2018-10-09 21:03:15
【问题描述】:
我有两个信号 x1 和 x2。我正在尝试直接使用 CONV(x1,X2) 进行一次卷积,一次使用 fft 和 ifft 进行卷积,并比较两种操作的执行时间。
不知道为什么fft的执行时间并不比使用conv快。
n = 0: 2^15 ;
x1(n+1) = (0.25).^n ;
x2(n+1) = 1;
tic
Time_Convolution = conv(x1,x2);
toc
Padding = (length(x1)+ length(x2) - 1)-length(x1) ;
x1_before_fft = [ x1 zeros(1, Padding) ];
x2_before_fft = [ x2 zeros(1, Padding)];
tic
Convolution = ifft(fft( x1_before_fft).*fft(x2_before_fft));
toc
这是输出
经过的时间是 0.010414 秒。 经过的时间是 0.017308 秒。
【问题讨论】:
-
1:使用
timeit来衡量计算时间,tic/toc 在这种情况下并不准确。 2:除了一个元素外,您的数据全为零,这也可能会影响您的计算。 -
接受@CrisLuengo 关于
timeit的观点,0.010 秒比 0.017 秒快很多。 -
为什么
fft的执行时间不会更少?是什么让您认为conv没有优化,可能在内部使用了 FFT? -
@bazza:通过在命令行中复制粘贴运行此代码,您可以看到比这些大得多的时序差异。如果您在新的 MATLAB 会话中运行它,您甚至可能会看到一些简单的函数在加载 M 文件时需要一秒钟。
-
使用 Octave,我看到
conv需要 2.0 秒,fft需要 0.012 秒。我认为@Luis 是对的,您会看到conv的一个非常漂亮的实现。
标签: matlab fft convolution