Amplitude of the fft is less than what is expected This is my MATLAB code
Amp = 0.3;
freqHz = 1000;
fsHz = 160000;
dt = 1/fsHz;
t = 0:dt:2000*dt;
sine = Amp * sin(2*pi*freqHz*t);
t = 0:2000
subplot(2,2,1)
plot(t,sine)

y1 = sine;
Fs = 160000;                   % samples per second
N = length(y1);            % samples
dF = Fs/N;                 % hertz per sample
f = -Fs/2:dF:Fs/2-dF + (dF/2)*mod(N,2);      % hertz
Y1_fft = fftshift(fft(y1))/N;
subplot(2,2,2)
plot(f , (abs(Y1_fft)) - min((abs(Y1_fft))));
legend(num2str(i))
shg;


and this is the result:

The amplitude of my sin is 0.3 so I expect to get the FFT signal with the amplitude of 0.15 at 1Khz while I get 0.096 as the amplitude. My goal is to extract the amplitude of a tone among different frequencies.
The amplitude peak is hidden between FFT result bins for frequencies that are not exactly integer periodic in the FFT's length.  But you can interpolate to find the results for those frequencies.  Try windowed Sinc interpolation of the real and imaginary components, then compute the magnitude of the complex result.  If you don't know the exact frequency, you can use successive approximation to find an interpolated magnitude peak between FFT result bins.