out = {'fft1' 'fft2'};
for k = 1:2
...
y2 = out(k);
y = test_fftNEW(matData,y2);
...
As you can see I wish to name my outputs as fft1 and fft2...
No!!!! Don't do this. This way there be dragons (as you've learned). See the wiki for why not and alternative ways to accomplish the same thing.
...
??? Error using ==> test_fftNEW Too many input arguments._
Error in ==> Process_all at 9 y = test_fftNEW(matData,y2);
Yep, 'cuz y2 is the cell array. Type
out(1)
at the command line to see what you're actually passing to the function.
Also, the output of the function will be stored in y on both calls, anyway.
ADDENDUM:
I hadn't read the full code; I see now that you're using y2 in the function as a file with save. I had presumed you thought you were naming an output variable instead...you still have the problem of overwriting y in the return if you want the two there but you can fix the call to create the named output files by changing out = {'fft1' 'fft2'}; to
out = {'fft1'; 'fft2'};
to create a 2x1 cell array. Then, when you use it in the function as
y = save(y2,out2);
since it is a cellstring you must dereference it by char or using the curlies as
y = save(char(y2),out2); % or
y = save({y}2,out2);
Note, however, that all you're actually saving at that point is the one peak location, not the actual fft (unless my eyes are bad and I missed something significant)...