After using "FFT" getting NAN. Why?

58 views (last 30 days)
clc
close all
clear all
%%
data = xlsread('freq15.xlsx','Group Name #2');
v= data(:,1);
plot (v);
title('Voltage signal with noise')
xlabel('Samples')
ylabel('Amplitudes')
%%
%plot magnitude specturm of a signal
clc
format long
X_mag=abs((fft(v)))
figure(1)
plot(X_mag)
xlabel('DFT Bins')
ylabel('Magnitude')
%%
Above is a code using FFT in MATLAB. The outcome of the code is NAN+NANi. How to get rid of NAN or what is the reason of this outcome?
  2 Comments
Jan
Jan on 11 Apr 2019
Please use the buttons to format the code. It is a good idea to post a question in the best readable format.
Omit the brute clearing header "clc; close all; clear all". This is a waste of time and cargo-cult-programming. If you want to keep your workspace clean, use functions.
Without knowing, what the contents of v is, there is no chance to understand, why abs((fft(v))) is NaN. So please show us, what your input data are.
Danish Ahmad
Danish Ahmad on 14 Apr 2019
Thank you for your response.
Regards

Sign in to comment.

Accepted Answer

Star Strider
Star Strider on 11 Apr 2019
... what is the reason of this outcome?
You probably either have a NaN in your data, or an empty cell. Both will appear as NaN in the xlsread output.
If that is the situation, your best option is to interpolate using the fillmissing (link) function (R2016b and later releases). The reason is that Fourier transforms require regularly-sampled time-domain signals for them to provide reliable output. Omitting the NaN value disrupts this regularity and results in an inaccurate fft result. Interpolating the NaN values will not provide as accurate a result has having the original value, however it is the only reliable alternative.
  12 Comments
Diego Soto Chávez
Diego Soto Chávez on 2 Sep 2020
Hi Star Strider
know you another option like "fillmissing" but for previosly versiones of matlab? Thanks!!
Star Strider
Star Strider on 2 Sep 2020
Something like this woulld likely work:
t = 1:8
y = rand(size(t))
y([3 5]) = NaN
ti = t;
ti(isnan(y)) = []
y(isnan(y)) = []
ynew = interp1(ti, y, t)
.

Sign in to comment.

More Answers (0)

Categories

Find more on Resizing and Reshaping Matrices in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!