目录
前述
对ADC采样后的结果进行fft时需要满足采样信号、输入信号、采样点数和被采样周期个数之间的相干采样关系。
也就是Fin/Fs=M/N,M是完整的输入信号周期的个数,N是完整的采样信号周期的个数。
代码
Data_in = load('data.txt');
for i = 1:length(Data_in)
x(i,1)=Data_in(i,1);
end
%x(:,1) = str2num(Data_in(:,1));
N = length(x);
Fs=8e8;%sample frequency
M=5;%number of signal period
xdft = fft(x);
xdft = xdft(2:N/2+1);
psdx = (1/(Fs*N)) * abs(xdft).^2;
psdx(1:end-1) = 2*psdx(1:end-1);
freq = Fs/N:Fs/N:Fs/2;
plot(freq,10*log10(psdx));
grid off
title('Power Spectrum Density')
xlabel('Frequency (Hz)')
ylabel('Power/Frequency (dB/Hz)')
Ps = psdx(M);
psdx(M) = 0;
Pm = max(psdx);
n=2:9;
fharmonics=(rem(n*M,N)<N/2).*rem(n*M,N) + (rem(n*M,N)>N/2).*(N-rem(n*M,N));
Pd = sum(psdx(fharmonics));
Pn = sum(psdx(1:N/2)) - Pd;
THD= 10*log10(Pd/Ps);
SNR= 10*log10(Ps/Pn);
SNDR = 10*log10(Ps/(Pn+Pd));
ENOB = (SNDR - 1.76)/6.02;
SFDR = 10*log10(Ps/Pm);
texts = sprintf('ENOB=%4.2f bits\nSNR=%4.2f dB\nSNDR=%4.2f dB\nTHD=%4.2f dB\nSFDR=%4.2f dB',ENOB,SNR,SNDR,THD,SFDR);
text=(texts)