Fresnel-like diffraction using linear convolution
5 次查看(过去 30 天)
显示 更早的评论
Hi guys,
I'm trying to calculate the convolution of a Gaussian function and a parabolic wavefront (like in Fresnel diffraction):
x=linspace(-30,30,100);
w=0.5;
k=1;
A=exp(-x.^2/w^2);
B=exp(-ii*k*x.^2);
C=conv(A,B);
plot(abs(C))
My question is, does the above code calculate the linear convolution (and not the circular convolution)?
The reason I ask is that I seems that C is composed of a number of peaks depending on the value of k. I wasn't expecting that, but then again my intuition is often defeated by such problems.
Cheers, David
0 个评论
回答(1 个)
Matz Johansson Bergström
2014-7-5
Hello, perhaps this answer is late, but it might help someone else.
I have tried your code and I don't know much about Fresnel diffraction, but I can only see one peak. You never provided a value for ii, but it doesn't seem to matter in my case.
Instead, to answer what I do know about, conv is producing a linear convolution. To convince yourself you can check the definition or use FFT with zero padding.
So,
n=5;
a = rand(1,n);
tmp1 = conv(a,a); %Matlab conv
tmp2 = ifft(fft([a, 0*a]).*fft([a, 0*a])); %FFT with zero padding = linear convolution
and the results are that tmp1(1:n) and tmp2(1:n) are identical. So, conv is thus convolving linearly, just like for a zero padded FFT.
3 个评论
Star Strider
2014-7-5
Instead of your own ‘ii’ variable, use 1i. That is the preferred MATLAB designation for the imaginary operator.
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!