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

11 次查看（过去 30 天）
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'?
##### 1 个评论显示 -1更早的评论隐藏 -1更早的评论
NGR MNFD 2022-7-4
hi dear xinsheng

### 回答（4 个）

Bjorn Gustavsson 2021-6-22
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 个评论显示 -1更早的评论隐藏 -1更早的评论
xinsheng cheng 2021-6-23
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?

xinsheng cheng 2021-6-26
Finnaly, I used the matlab function 'blomp' to get the PSD spectrum.
##### 0 个评论显示 -2更早的评论隐藏 -2更早的评论

may miao 2022-2-17
You can read the following code and compare the fft and nufft results.
close all
clear
fs=1000;
ts=2;
N=fs*ts;
%fft for uniform data
t=(0:N-1)/fs;
x2= 2*sin(2*200*pi*t) + sin(2*117*pi*t);
Y2 = fft(x2);
figure
plot((0:N-1)/ts,abs(Y2)/N*2);
%nufft
n=([0:100 110:150 185:197 220:500 512:558 570:700 705:735 752:800 802:879 885:N]);
x= 2*sin(2*200*pi*n/fs) + sin(2*117*pi*n/fs);
Y = nufft(x,n,(0:N-1)/N);
hold on;plot((0:N-1)/ts,abs(Y)/N*2)
##### 0 个评论显示 -2更早的评论隐藏 -2更早的评论

NGR MNFD 2022-7-5
hi dear xinsheng

### 类别

Help CenterFile Exchange 中查找有关 Dates and Time 的更多信息

R2021a

### Community Treasure Hunt

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

Start Hunting!

Translated by