本帖最后由 cp214 于 2019-3-12 16:03 编辑
clear all;clc
Fsample=10e6;
Nin=31;
Nsample=128;
Tsample=1/Fsample;
Tin=Tsample*Nsample/Nin;
Fin=1/Tin;
Nfft=Nsample*1;%FFT 点数,Nfft与Nsample有区别
t=(0:Nsample-1)*Tsample;
Vsample=0.5+0.5*cos(2*pi*Fin*(0:Nsample-1)*Tsample);
freq=(0:Nfft-1)/Nfft*Fsample;%频域横坐标
Vquantizer=arrayfun(@function_quantizer,Vsample); %%%%%%%采样过后的sin信号输入到量化器
Vsample_fft=abs(fft(Vsample,Nfft)*2/Nsample);
Vquantizer_fft=abs(fft(Vquantizer,Nfft)*2/Nsample);
array_freq_clip=freq(1:Nfft/1);
Vsample_fft_clip=Vsample_fft(1:Nfft/1);
Vquantizer_fft_clip=Vquantizer_fft(1:Nfft/1);
figure(1);
plot(array_freq_clip,Vsample_fft_clip);
title('vin fft');
xlabel('f(Hz)');
ylabel('vin fft');
figure(2);
plot(array_freq_clip,Vquantizer_fft_clip);
title('vout fft');
xlabel('f(Hz)');
ylabel('vout fft');
figure(3);
plot(array_freq_clip,20*log10(Vsample_fft_clip));
title('vin fft log');
xlabel('f(Hz)');
ylabel('vin fft log');
figure(4);
plot(array_freq_clip,20*log10(Vquantizer_fft_clip));
title('vout fft log');
xlabel('f(Hz)');
ylabel('vout fft log');
figure(5);
stairs(t,Vsample);
title('vin time domain');
xlabel('t(s)');
ylabel('vin');
[vout_fft_sort,vout_fft_index]=sort(Vquantizer_fft_clip);
vout_fft_value1=vout_fft_sort(Nfft/2);
vout_fft_index1=vout_fft_index(Nfft/2);
vout_fft_freq1=(vout_fft_index1-1)*Fsample/Nfft;
vout_fft_value2=vout_fft_sort(Nfft/2-1);
vout_fft_index2=vout_fft_index(Nfft/2-1);
vout_fft_freq2=(vout_fft_index2-1)*Fsample/Nfft;
vout_fft_value3=vout_fft_sort(Nfft/2-2);
vout_fft_index3=vout_fft_index(Nfft/2-2);
vout_fft_freq3=(vout_fft_index3-1)*Fsample/Nfft;
[vin_fft_sort,vin_fft_index]=sort(Vsample_fft_clip);
vin_fft_value1=vin_fft_sort(Nfft/2);
vin_fft_index1=vin_fft_index(Nfft/2);
vin_fft_freq1=(vin_fft_index1-1)*Fsample/Nfft;
vin_fft_value2=vin_fft_sort(Nfft/2-1);
vin_fft_index2=vin_fft_index(Nfft/2-1);
vin_fft_freq2=(vin_fft_index2-1)*Fsample/Nfft;
vin_fft_value3=vin_fft_sort(Nfft/2-2);
vin_fft_index3=vin_fft_index(Nfft/2-2);
vin_fft_freq3=(vin_fft_index3-1)*Fsample/Nfft;
SNR=20*log10(vout_fft_value2/vout_fft_value3);
ENOB=(SNR-1.76)/6.02; |