使用`conv`或`fft`在Matlab中求解卷积

时间:2016-06-24 10:13:02

标签: matlab fft ifft

这是my other SO post关于执行多次卷积的后续问题,例如

enter image description here

其中的函数在我的代码中定义。

我需要根据计算中的时间步数N重新调整卷积结果。

N = 1000;
t = linspace(-10,10,N);

x = t.*exp(-t.^2);
y = exp(-4*t.^2).*cos(t);
z = (t-2)/((t-2).^2+3^2);
w = exp(-3*t.^2).*exp(2i*t);

% convolution
u = conv(conv(conv(x,y)/N,z)/N,w)/N;

% Fourier transform
L_x=fft(x)/N;
L_y=fft(y)/N;
L_z=fft(z)/N;
L_w=fft(w)/N;

L_u=L_x.*L_y.*L_z.*L_w; %convolution on frequency domain

v=ifft(L_u)*N; 

figure(1)
ax1 = subplot(2,1,1);
ax2 = subplot(2,1,2);

plot(ax1,1:length(u),real(u))
title(ax1,'conv')
hold off

plot(ax2,t,real(v))
title(ax2,'fft')
xlabel(ax2,'t')
  • 如何正确缩放卷积? (N.B.如果我改为N=1e5时间步,则y值会减少。)

  • 如何确保conv输出跨越与fft输出相同的时间区域?以下卷积的实部图:

enter image description here

0 个答案:

没有答案