How does nufft function work in matlab?
22 次查看(过去 30 天)
显示 更早的评论
I am trying to understand how to use nufft function. For this, I started by comparing the results of the fft and nufft transforms of a Gaussian to see if they yield the same result. I find that for a spacing in t space that is not unity, they yield different results. The exmple in MATLAB for nufft also has unit spacing between the t coordinates. Does nufft function not work for non-unit spacing? This would be a problem for me since the next step is to get the fourier transform of a gaussian with different spacings in the t space, i.e, dt varies for each element.
Thank you.
tmax = 12;
n = 2^11;
tau = 1; % Width of the gaussian pulse
dt = 2*tmax/n;
t = (-tmax:dt:tmax-dt);
fmax = 1/(2*dt);
df = 2*fmax/n;
f = -fmax:df:fmax-df;
Pulse = exp(-(t/tau).^2);
%Pulse = sin(t/tau);
fftPulse = ifftshift(fft(Pulse));
subplot(2,1,1)
plot(t,Pulse)
subplot(2,1,2)
plot(f,abs(fftPulse)); hold on;
nufftPulse = ifftshift(nufft(Pulse,t));
plot(f,abs(nufftPulse))
4 个评论
回答(1 个)
Paul
2024-6-29
tmax = 12;
n = 2^11;
tau = 1; % Width of the gaussian pulse
dt = 2*tmax/n;
t = (-tmax:dt:tmax-dt);
fmax = 1/(2*dt);
df = 2*fmax/n;
f = -fmax:df:fmax-df;
Pulse = exp(-(t/tau).^2);
%fftPulse = ifftshift(fft(Pulse));
fftPulse = fftshift(fft(ifftshift(Pulse)));
nufftPulse = nufft(Pulse,t,f);
figure
subplot(2,1,1)
% plot the phase of the transform instead of the original signal
%plot(t,Pulse)
plot(f,angle(fftPulse),f,angle(nufftPulse));
subplot(2,1,2)
plot(f,abs(fftPulse)); hold on;
plot(f,abs(nufftPulse))
The hair on the angle plot is just numerical noise that results from taking the angle of complex number that has very small magnitude. At low frquencies where the magnitude isn't small we see that the angle is essentially zero as would be expected.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Fourier Analysis and Filtering 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!