Thanks kaz
now I captured my 16 bit output by signal tap (the files of captured data and text file crated by signal tap were attached)
and also I found MATLAB code that plots the FFT spectrum of a desired test tone and will computes SNR, SINAD, THD and SFDR.
Matlab codes are as bellow: (also the pdf file contain the codes were attached)
does any body know how can I introduce my captured data file to Matlab code to plot fft for me?
%The following program code plots the FFT spectrum of a desired test tone. Test tone based on coherent sampling
criteria, and
%computes SNR, SINAD, THD and SFDR.
%Copyright Au/Hofner, Maxim Integrated Products, 120 San Gabriel Drive, Sunnyvale, CA94086
%This program is believed to be accurate and reliable. This program may get altered without prior notification.;
disp('HP16500C LA 100/110 State Card');
filename=input('Enter file name or press RETURN to accept data from LA via GPIB/HPIB ) : ');
if isempty(filename)
filename = 'listing';
end
fid=fopen(filename,'r');
numpt=input('Number of Points in FFT? ');
fclk=input('Sampling Frequency (MHz)? ');
numbit=input('ADC Resolution? ');
%Discard first 13 lines of the LA listing (LA header), as they don't contain valid data.
for i=1:13,
fgetl(fid);
end
[v1,count]=fscanf(fid,'%f',[2,numpt]);
fclose(fid);
v1=v1';
code=v1(:,2);
%Warning: ADC output may be clipping - reduce input amplitude
if (max(code)==2numbit-1) | (min(code)==0)
disp('WARNING: ADC OUTPUT MAYBE CLIPPING - CHECK INPUT AMPLITUDE!');
end
figure;
plot([1:numpt],code);
title('TIME DOMAIN')
xlabel('SAMPLES');
ylabel('DIGITAL OUTPUT CODE');
Dout=code-(2^numbit-1)/2; %Re-center the digitized sinusoidal input
Doutw=Dout;
Dout_spect=fft(Doutw);
Dout_dB=20×log10(abs(Dout_spect));
figure;
maxdB=max(Dout_dB(1:numpt/2));
plot([0:numpt/2-1].×fclk/numpt,Dout_dB(1:numpt/2)-maxdB );
grid on;
title('FFT PLOT');
xlabel('ANALOG INPUT FREQUENCY (MHz)');
ylabel('AMPLITUDE (dB ) ' );
a1=axis; axis([a1(1) a1(2) -100 a1(4)]);
fin=find(Dout_dB(1:numpt/2)==maxdB ) ; %Find the signal bin (DC represents bin=1)
span=max(round(numpt/200),5); %Determine span of input frequency on each side
spanh=2; %Search span for harmonic distortion components on each side
spectP=(abs(Dout_spect)).×
(abs(Dout_spect)); %Determine power level
Pdc=sum(spectP(1:span)); %Determine DC offset power level
Ps=sum(spectP(fin-span:fin+span)); %Determine signal power level
Fh=[]; %Vector storing frequency and power components of signal and
harmonics
Ph=[]; %HD1=signal, HD2=2nd harmonic, HD3=3rd harmonic, etc.
%Find the harmonic frequencies/power within the FFT plot
for har_num=1:10
tone=rem((har_num × (fin-1)+1)/numpt,1); %Note: tones > fSAMPLE are aliased back
if tone>0.5
tone=1-tone;
end
Fh=[Fh tone];
%For this method to work properly, make sure that the folded back high order harmonics do not overlap with DC and
signal
%components or lower order harmonics.
har_peak=max(spectP(round(tone×numpt)-spanh:round(tone×numpt)+spanh));
har_bin=find(spectP(round(tone×numpt)-spanh:round(tone×numpt)+spanh)==har_peak);
har_bin=har_bin+round(tone×numpt)-spanh-1; Ph=[Ph sum(spectP(har_bin-1:har_bin+1))];
end
Pd=sum(Ph(2:5)); %Total distortion power level
Pn=sum(spectP(1:numpt/2))-Pdc-Ps-Pd; %Extract noise power level
format;
A=(max(code)-min(code))/2numbit %Analog input amplitude in mV
AdB=20×log10(A) %Analog input amplitude in dB
SNR=10×log10(Ps/Pn) %SNR in dB
SNR=10×log10(Ps/Pn) %SINAD in dB
SINAD=10×log10(Ps/(Pn+Pd))
disp('THD - HD2 through HD5');
THD=10×log10(Pd/Ph(1)) %THD in dB
SFDR=10×log10(Ph(1)/max(Ph(2:10))) %SFDR in dB
disp('SIGNAL AND HARMONIC POWER (dB ) ' );
HD=10×log10(Ph(1:10)/Ph(1))
hold on;
plot(Fh(2)×fclk,0,'mo',Fh(3)×fclk,0,'cx',Fh(4)×fclk,0,'r+',Fh(5)×fclk,0,'g×',Fh(6)×fclk,0,'bs',Fh(7)×fclk,0,'bd',Fh(8)×fclk,0,'kv',
Fh(9)×fclk,0,'y^');
legend('SIGNAL','HD2','HD3','HD4','HD5','HD6','HD7','HD8','HD9');
hold off;
any guidance is really appropriated I dont know how to get fft plot ?