Hi, I'm working with a large data set of voxel information from MRI scans of multiple subjects, and as part of the analysis I use FFT. Prior to this, the data already goes through some modifications, removing specific values deemed too low (insignificant data) and replacing it with NaN values. After checking the results I realized there is an issue with FFT and NaN values. Is there some solution or workaround that someone perhaps knows that might help resolve this issue?

 Réponse acceptée

Star Strider
Star Strider le 25 Juil 2020

2 votes

If you have R2016b or later, the fillmissing function is an option.

8 commentaires

noam edelshtein
noam edelshtein le 26 Juil 2020
Unfortunately unless I decide to replace nan with 0's or a different constant, it wont help. The nan replaced a prior existing value that was deemed insignificant, which I needed to ignore for the analysis, so replacing it or interpolating would not serve the purpose.
What I'd hoped for is something similar to nanmean, which allows the function to work without taking into consideration the nan values.
Star Strider
Star Strider le 26 Juil 2020
Noiithing similar to nanmean is appropriate for the fft function, since it destroys the required regularity of the sampling points and data (with regularly-sampled data and constant sampling frequency).
It may be possible to eliminate the NaN values and still get the Fourier transform using the nufft function (R2020a and later). I have no experience with it (I have not yet used it) so my ability to help you with it is limited. It would be necessary to eliminate the corresponding points from both the signal vector and time (or other independent variable) vector.
Another option is to eliminate the NaN values and then use the resample function to resample them to a new time vector, then use fft. (This effectively interpolates, so that may not be an option for you.)
.
noam edelshtein
noam edelshtein le 27 Juil 2020
Thats what I thought, but hoped to maybe be wrong. I'll look into the nufft function, it may help.
Thank you for the help, in this thread and many other answers you've given in other threads that have helped me!
Star Strider
Star Strider le 27 Juil 2020
As always, my pleasure (here, and for the others as well)!
Jon
Jon le 8 Fév 2022
Excellent I just ran into similar issue with NaN's. Using nufft worked perfectly for my problem. Thanks so much for making me aware of this new function, and pointing out how it could be applied in the case of having bad (NaN) data points.
Star Strider
Star Strider le 8 Fév 2022
@Jon Thank you!
My pleasure!
A Vote would be appreciated!
Jon
Jon le 9 Fév 2022
Done, thanks for the reminder, I had forgotten about the upvoting feature.
Star Strider
Star Strider le 9 Fév 2022
Thank you!

Connectez-vous pour commenter.

Plus de réponses (1)

Sugar Daddy
Sugar Daddy le 25 Juil 2020

0 votes

what if you remove NaNs from dataset
Suppose
X = [1 2 3 NaN 3 2 1];
X(isnan(X)) = []
X =
1 2 3 3 2 1

2 commentaires

noam edelshtein
noam edelshtein le 25 Juil 2020
That would cause a change in dimensions of the matrix, and there is more analysis to come after this stage, so I would need to know precisely where the nan values were to reinsert them in the right places following the fft analysis.
I considered replacing with 0 but I think that will cause some form of change in the results of the analysis.
Maya Eyal
Maya Eyal le 22 Fév 2021
I think this solution is not good, since it destroys the pattern in the data, and the whole reason we use the fft is to find the pattern.
I'm not an expert, just another one with the same NaN problem.
Unfortunatly, I use matlab 2019 so I don't have nufft function.
I'm not sure that interpulating the missing data will give me the pattern I want to find, but it seems I have no choice.

Connectez-vous pour commenter.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by