"Why does the frequency index not change even though the frequency is no longer the nominal value "
When you do an fft, the frequency array is predetermined by the properties of the time array. For an N-point fft and array spacings of delt and delf, the golden rule for ffts is
regardless of the properties of the signal. In the following code, delf = 1 so the frequency array represents exact integral frequencies. The example uses a cosine wave with f0 = 10. The total time record is 1 sec and you can see exactly 10 cycles in the time plot. In the frequency plot, fftshift is used to put f = 0 at the center of the plot. There are two peaks exactly at +-10Hz with amplitude 1/2, illustrating that
cos(2*pi*f0*t) = ( exp(i*2*pi*f0*t) + exp(-i*2*pi*f0*t) )/2.
and no frequency content anywhere else.
Now change f0 to 10.2 Hz and run it again. The frequency grid is incapable of exactly representing 10.2 Hz so it gives a reduced peak at 10 Hz, with frequency content spilling over into other frequencies.
N = 1e4;
delt = 1e-4
delf = 1/(N*delt);
t = (0:N-1)*delt;
f = (-N/2:N/2-1)*delf;
f0 = 10;
y = cos(2*pi*t*f0);
plot(t,y); grid on
z = fftshift(fft(y)/N);
plot(f,z,'o-'); grid on