I am trying to find the phase and frequency of a single tone having a small Doppler (10 Hz). I have the following code. The integration time for the operation (the length of the time vector) is defined in the code. It works if the integration time is a correct multiple otherwise not. Why is this failing?
Here is the code:
clearvars; close all; clc; Fc = 10.005e3; Fd = 10; % random doppler Fc2 = Fc+Fd; phi = deg2rad(37.8); disp(['True Freq: ',num2str(Fc2),' Phi: ',num2str(rad2deg(phi))]); Fs = 1e6; % Max. Sampling Freq allowed Ts = 1/Fs; % Sampling interval T_intg = 1.2347e-3; % Max. Integration time allowed t = 0:Ts:T_intg; % Time Vector s = exp(1j*(t*2*pi*Fc2+phi)); % Signal Vector Fs = 1/Ts; % Sampling Frequency Fn = Fs/2; % Nyquist Frequency L = length(s); fts = fft(s, L)/L; % Normalised Fourier Transform Fv = linspace(0, 1, fix(L/2)+1)*Fn; % Frequency Vector Iv = 1:length(Fv); % Index Vector amp_fts = abs(fts(Iv))*2; % Spectrum Amplitude phs_fts = angle(fts(Iv)); % Spectrum Phase [val, index] = max(amp_fts); % locating the peak in the spectrum rad2deg(angle(fts(index))) % this gives 104 instead of 37 degrees