MATLAB: Cubic spline interpolation in interp1 doesn’t remove NaN

interpolationMATLABnantime series

I have functional near-infrared spectroscopy timeseries data which sometimes contain NaNs and/or infinite values in some channels.
Baed on literature, spline interpolation seems to be the method of choice to replace these.
I use interp1 as follows:
Y.hbo(isnan(Y.hbo)) = interp1(find(~isnan(Y.hbo)), Y.hbo(~isnan(Y.hbo)), find(isnan(Y.hbo)), 'spline');
Y ist the structure containing the different hemoglobine signals, with rows indicating sample points and columns containing channels'data. (I attached the mat file.)
NaNs are replaced, e.g., with method 'nearest', 'linear', or 'pchip'. Only 'spline' doesn't replace any NaN.
Any idea what is going wrong?

Best Answer

Y.hbo is 3781 by 24. You are using logical indexing on it, which is going to give you a column vector result in which all of the columns are mixed together. You then ask to do interpolation on all of that at the same time. This is not going to give you the kinds of answers that you want. Consider that if you have a NaN first thing in a column, you would be interpolating from a different column.
You should be interpolating channel by channel. And because NaN could occur at edges, you should specify extrapolation.