马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 HGL 于 2021-7-7 13:50 编辑
我用sigma delta toolbox仿真一阶的sd 调制器,它初始设置是64倍OSR,得出的SNR是对的,我把OSR改成128,频率减半,仿真出来只增加了4dB的SNR,这是为什么呢?
更新一下,这是我自己写的,写出来也不对,只有在它设置的频点上才是对的。
OSR = 64; % Oversampling ratio used to define singal band
Fs = fb*2*OSR; % Sampling frequency, in Hz
dc = 0; % dc input value
sinfreq = 21*OSR/8192*Fs/OSR; % in Hz. NOTE IT SHOULD REALLY HIT A PSD BIN!
sinamp = 1/sqrt(2);
N_fft = 8192;
span = 2;
Data_start = 1000;
fbin = round(N_fft*sinfreq/Fs);
%----------------------------------------------
vout = mod_out(Data_start ata_start+N_fft-1);
%voutw=vout.*blackman(Num_samples)';
voutw = vout.*hanning(N_fft);
FFTdata1 = fft(voutw,N_fft); %FFT
%---------------------------------------------
FFTdata = FFTdata1.*conj(FFTdata1);
FFTdata(1:2) = 0; % dc
MAX = max(FFTdata);
FFTdata = FFTdata/MAX;
PYY = 10*log10(FFTdata);
%--------------------------------------
F_fft = Fs/2*linspace(0,1,N_fft/2+1);
semilogx(F_fft,PYY(1:N_fft/2+1));
% plot(F_fft,PYY(1:N_fft/2+1));
grid on;
%---------------------------------------------------
%Start SNDR
SNDRdata = FFTdata;
sig_bin = fbin + (-span:span);
inband_bin = 1 N_fft/(2*OSR)+1);
noise_bin = setdiff(inband_bin, sig_bin);
%cal SNDR
% Sig = sum(SNDRdata(M+1-span:M+1+span));
% SNDRdata(M+1-span:M+1+span) = 0;
% NoiseT = sum(SNDRdata(2:N_fft/2+1));
SNDR = 10*log10(sum(SNDRdata(sig_bin))/sum(SNDRdata(noise_bin)));
% end SINAD
%-Start SFDR
% MaxA = max(SNDRdata(2:N_fft/2+1));
% SFDR = 10*log10(Sig/MaxA);
ENOB = (SNDR-1.76)/6.02;
|