I guessed that the longer one samples, the most exact result with fft. And so it seems to do with frequency, but not at all with amplitude. The amplitude decreases the longer the time sampled. Did I do something wrong ? Is this reasonable? Thanks to any help
% T=[.01 .02 .1 .2 1];
% T=[1:10]
T=[1 5 10];n=10; % maximal number of harmonic
freq = 5;Fs = 150e4; % Sampling frequency (frecuencia de muestreo)
nfft = 1e7; % Length of FFT % number of fft bins
ticfor m=1:length(T) t = 0:1/Fs:T(m); % Time vector of 1 second
x = cos(2*pi*t*freq); % sine wave of f Hz.
x = x-mean(x);% restamos de la fcn 'x' su DC offset
figure(1); subplot(length(T),1,m); plot(t,x,'.'); % Take fft, padding with zeros so that length(X) is equal to nfft
X = fft(x,nfft); % FFT is symmetric, throw away second half
X = X(1:nfft/2); % Scaling is done here using the number of samples: length(x)/2
X=X/(length(x)/2); % Take the magnitude of fft of x
mx = abs(X); % Frequency vector
f_fft = (0:nfft/2-1)*Fs/nfft; f_Axis=f_fft(1:nfft/2); % picos de amplitud
pks= findpeaks(mx(1:nfft/2)); n=min(n,length(pks)); pks_sort=sort(pks,'descend');% vector de picos
for k = 1:n locs=find(mx(1:nfft/2)==pks_sort(k)); f(k)=f_Axis(locs); end % bar plot freq y magnitude
figure uds='Amp'; pks_sort=pks_sort(:); % to make it column array for text of bar plot
f=f(:); % to make it column array for text of bar plot subplot(1,2,1) bar(pks_sort(1:n),'r'); ylabel({sprintf('Amplitude (%s)'... ,uds)},'fontweight','bold','fontsize',16); text(1:n,pks_sort(1:n),num2str(pks_sort(1:n),'%.2f'),... 'HorizontalAlignment','center',... 'VerticalAlignment','bottom') subplot(1,2,2) bar(f(1:n),'b'); ylabel('Frequency (Hz)','fontweight','bold','fontsize',16); text(1:n,f(1:n),num2str(f(1:n),'%.2f'),... 'HorizontalAlignment','center',... 'VerticalAlignment','bottom') bar3d_pks_sort(m,:)=pks_sort(1:n); bar3d_f(m,:)=f(:); endfigure;col(1,:)=[0 0 1]; col(2,:)=[0 .5 0];plot(bar3d_pks_sort(:,1),'-+','Color',col(1,:),'Linewidth',2);h1 = gca;h2 = axes('Position',get(h1,'Position'));plot(bar3d_f(:,1),'-o','Color',col(2,:),'Linewidth',2);set(h1,'YColor',col(1,:))set(h2,'YAxisLocation','right','Color','none','XTickLabel',[],'YColor',col(2,:))set(h2,'YAxisLocation','right','Color','none','XTickLabel',[])
Best Answer