i got negative value for sfdr and snr=61.4315 which are not the desired answer.i don't know which part that must be fixed to get the value of sfdr=70.9 and snr=60.7
1 次查看(过去 30 天)
显示 更早的评论
-mainfile-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Example 4.11 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Pipeline Converter % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clear all;
%-------------------------------------------------------------------------%
% DAC Static parameters %
%-------------------------------------------------------------------------%
%-------------------------------- Stage 1 --------------------------------%
V_DAC_L1=-0.5;
V_DAC_H1=0.5;
GAIN1=2.0;
VthL1=-0.25+eps;
VthH1=0.25+eps;
%-------------------------------- Stage 2 --------------------------------%
V_DAC_L2=-0.5;
V_DAC_H2=0.5;
GAIN2=2.0;
VthL2=-0.25+eps;
VthH2=0.25+eps;
%------------------------------- Stages 3-9 ------------------------------%
V_DAC_L3=-0.5;
V_DAC_H3=0.5;
GAIN3=2.0;
VthL3=-0.25+eps;
VthH3=0.25+eps;
Vth10=0;
%-------------------------------------------------------------------------%
% Dynamic parameters %
%-------------------------------------------------------------------------%
%-------------------------------- S&H Block-------------------------------%
srH=250e6;
f_TH=600e6;
betaH=1;
tauH=1/(2*pi*betaH*f_TH);
gainH=1;
%-------------------------------- Stage 1 --------------------------------%
sr1=10000e8;
f_T1=6000e6;
beta1=1/2;
tau1=1/(2*pi*beta1*f_T1);
gain1=1;
%-------------------------------- Stage 2 --------------------------------%
sr2=20000e8;
f_T2=6000e6;
beta2=1/2;
tau2=1/(2*pi*beta2*f_T2);
gain2=1;
%------------------------------- Stages 3-9 ------------------------------%
sr=25000e8;
f_T=6000e6;
beta=1/2;
tau=1/(2*pi*beta*f_T);
gain=1;
%-------------------------------------------------------------------------%
% Simulation parameters %
%-------------------------------------------------------------------------%
Ts=1e-8;
Tmax=Ts/2;
Vfs=2;
N=2^12;
Ntransient=20;
Tstop=Ts*(N+Ntransient);
nper=73;
Fs=1/Ts;
Fin=nper*Fs/N; % Input signal frequency (Fin = nper*Fs/N)
f=Fin/Fs; % Normalized signal frequency
bw=Fs/2;
Amp_dB=-0; % Amplitude in dB
Ampl=10^(Amp_dB/20)*Vfs/2; % Input signal amplitude
finrad=Fin*2*pi;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Launch Simulation %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
options=simset('InitialStep', 1, 'RelTol', 1e-3, 'MaxStep', 1,...
'Fixedstep', 1);
sim('Ex4_11',Tstop, options); %Starts Simulink simulation
%-------------------------------------------------------------------------%
% Graphic Outputs %
%-------------------------------------------------------------------------%
w=hann(N);
f=Fin/Fs; % Normalized signal frequency
fB=N*(bw/Fs); % Base-band frequency bins
yfft=y(1+Ntransient:N+Ntransient);
[snr,ptot]=calcSNR(yfft',f,fB,w',N);
ptot=ptot-max(ptot); % Normalize total spectrum
figure(1);
clf;
plot(linspace(0,5E-9*Fs,N/2), ptot(1:N/2), 'r');
grid on;
title('PSD of the Output')
xlabel('Frequency [Hz]')
ylabel('PSD [dB]')
axis([0 5E-9*Fs -140 0]);
sfdr=max(ptot(nper+4:N/2))
snr
-subfile calcSNR-
function [snrdB,ptotdB,psigdB,pnoisedB] = calcSNR(vout,f,fB,w,N,Vref)
% SNR calculation in the time domain (P. Malcovati, S. Brigati)
% vout: Sigma-Delta bit-stream taken at the modulator output
% f: Normalized signal frequency (fs -> 1)
% fB: Base-band frequency bins
% w: windowing vector
% N: samples number
% Vref: feedback reference voltage
%
% snrdB: SNR in dB
% ptotdB: Bit-stream power spectral density (vector)
% psigdB: Extracted signal power spectral density (vector)
% pnoisedB: Noise power spectral density (vector)
%
Vref=1|-1
fB=ceil(fB);
signal=(N/sum(w))*sinusx(vout(1:N).*w,f,N); % Extracts sinusoidal signal
noise=vout(1:N)-signal; % Extracts noise components
stot=((abs(fft((vout(1:N).*w)'))).^2); % Bit-stream PSD
ssignal=(abs(fft((signal(1:N).*w)'))).^2; % Signal PSD
snoise=(abs(fft((noise(1:N).*w)'))).^2; % Noise PSD
pwsignal=sum(ssignal(1:fB)); % Signal power
pwnoise=sum(snoise(1:fB)); % Noise power
snr=pwsignal/pwnoise;
snrdB=dbp(snr);
norm=sum(stot)/Vref^2; % PSD normalization
if nargout > 1
ptot=stot/norm;
ptotdB=dbp(ptot);
end
if nargout > 2
psig=ssignal/norm;
psigdB=dbp(psig);
end
if nargout > 3
pnoise=snoise/norm;
pnoisedB=dbp(pnoise);
end
-subfile dbp-
function y=dbp(x)
% dbp(x) = 10*log10(x): the dB equivalent of the power x
%y = -Inf*ones(size(x));
%nonzero = x~=0;
%y(nonzero) = 10*log10(abs(x(nonzero)));
y = 10*log10(abs(x(:)))';
it is very pleasure if someone can help me with this kind of problems.thanking you in advance.
1 个评论
回答(1 个)
Wayne King
2013-3-24
If you have R2013a with the Signal Processing Toolbox, there is a new function for spurious free dynamic range
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Parametric Spectral Estimation 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!