MATLAB Answers

How to difine the frequency range with the function 'nufft'?

9 views (last 30 days)
xinsheng cheng
xinsheng cheng on 22 Jun 2021
Answered: xinsheng cheng on 26 Jun 2021
The example is
t = [0:300 500.5:700.5];
S = 2*sin(0.1*pi*t) + sin(0.02*pi*t);
X = S + rand(size(t));
Y = nufft(X,t);
n = length(t);
f = (0:n-1)/n;
plot(f,abs(Y))
The frequency range here is [0,1],
My question is, for a noun-uniform (unknown) signal, How to calculate the frequency range? It is still 'f = (0:n-1)/n'?

Answers (2)

Bjorn Gustavsson
Bjorn Gustavsson on 22 Jun 2021
To understand what you get out of a non-uniform Fourier-transform I find it educational to calculate the dftmtx and then purge the columns that you don't have data-samples from. In your case with 2 periods with 1 and 2 Hz sampling this would be rather simple:
t_full = 0:700.5;
t = [0:300 500.5:700.5];
t_full = 0:.5:700.5;
M_FFT0 = dftmtx(numel(t_full));
M_FFT = M_FFT0;
[~,~,idxMissing] = setxor(t,t_full);
M_FFT(:,idxMissing) = [];
S0 = 2*sin(0.1*pi*t_full) + sin(0.02*pi*t_full);
S = 2*sin(0.1*pi*t) + sin(0.02*pi*t);
fS = M_FFT*S(:);
fS0 = M_FFT0*S0(:);
plot(fftshift(abs(fS0)))
hold on
plot(fftshift(abs(fS)))
This should allow you to play with the theoretical frequency-resolution of the nufft, for different sample gaps.
HTH
  1 Comment
xinsheng cheng
xinsheng cheng on 23 Jun 2021
Thanks for your comments.
The frequency-resolution t is the same as t_full in your case ? Is that you want to express?
However, I still don't understand it well. What does it mean?
I want to know how the frequency range is obtained? In your case, is the horizontal axis the number of samples? How to convert it to the frequency?
Thanks for your suggestions again.

Sign in to comment.


xinsheng cheng
xinsheng cheng on 26 Jun 2021
Finnaly, I used the matlab function 'blomp' to get the PSD spectrum.

Tags

Products


Release

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by