How to use SDtoolbox for 24 bits ADC (second order delta sigma)
47 views (last 30 days)
Show older comments
I prepare to design 24 bit ADC(use second order delta sigma, CIFB topology ), i use SDtoolbox, but it wrong.
Can everyone help me?
Code:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/164308/image.png)
requirement: 24 bits, GBW:200MHz, Fs: 16,384Mhz
% 2nd Order Low-Pass Sigma-Delta Modulator Model % by S. Brigati, A. Fornasari, P. Malcovati % The modulator structure is simulated using Simulink (sd2mod.mdl). % 1. Plots the Power Spectral Density of the bit-stream % 2. Calculates the SNR % 3. Calculates histograms at the integrator outputs
clear
t0=clock;
% **********************************************************************
% Global variables
% **********************************************************************
bw=8e3; % Base-band
R=1024;
Fs=R*2*bw; % Oversampling frequency
Ts=1/Fs;
N=2^14; % Samples number
nper=187;
Fin=nper*Fs/N; % Input signal frequency (Fin = nper*Fs/N)
Ampl=1-pi/256; % Input signal amplitude [V]
Ntransient=0;
% % k=1.38e-23; % Boltzmann Constant
Temp=300; % Absolute Temperature in Kelvin
Cs=5e-13; % Integrating Capacitance of the first integrator
alfa=(1e4-1)/1e4; % A=Op-amp finite gain (alfa=(A-1)/A -> ideal op-amp alfa=1)
Amax=3.3; % Op-amp saturation value [V]
sr=20e6; % Op-amp slew rate [V/s]
GBW=200e6; % Op-amp GBW [Hz]
noise1=1e-5; % 1st int. output noise std. dev. [V/sqrt(Hz)]
delta=4e-6; % Random Sampling jitter (std. dev.) [s]
NCOMPARATORI=2; % Four bit quantizer
match=9e-10; % Realistic value, but not related to any technology (because of non disclosure agreement)
% Modulator coefficients
a1 = 0.25; b1 =0.75;
a2 = 0.25; b2 = 0.75; b3 =1;
c1 = 1; c2 = 1;
g1 = 0;
finrad=Fin*2*pi; % Input signal frequency in radians
s0=sprintf('** Simulation Parameters ');
s1=sprintf(' Fs(Hz)=%1.0f',Fs);
s2=sprintf(' Ts(s)=%1.6e',Ts);
s3=sprintf(' Fin(Hz)=%1.4f',Fin);
s4=sprintf(' BW(Hz)=%1.0f',bw);
s5=sprintf(' OSR=%1.0f',R);
s6=sprintf(' Npoints=%1.0f',N);
s7=sprintf(' tsim(sec)=%1.3f',N/Fs);
s8=sprintf(' Nperiods=%1.3f',N*Fin/Fs);
disp(s0)
disp(s1)
disp(s2)
disp(s3)
disp(s4)
disp(s5)
disp(s6)
disp(s7)
disp(s8)
% **********************************************************************
% Open Simulink diagram first
% *************************************************************** *****
open_system('untitled')
options=simset('InitialState', zeros(1,3), 'RelTol', 1e-3, 'MaxStep', 1/Fs);
sim('untitled', (N+Ntransient)/Fs, options); % Starts Simulink simulation
% **********************************************************************
% Calculates SNR and PSD of the bit-stream and of the signal
% **********************************************************************
w=hann_pv(N);
f=Fin/Fs; % Normalized signal frequency
fB=N*(bw/Fs); % Base-band frequency bins
yy1=zeros(1,N);
yy1=yout(2+Ntransient:1+N+Ntransient)';
ptot=zeros(1,N);
[snr,ptot]=calcSNR(yy1(1:N),f,1,fB,w,N);
Rbit=(snr-1.76)/6.02 % Equivalent resolution in bits
% % **********************************************************************
% % Output Grafico
% % **********************************************************************
% figure(1);
% clf;
% plot(linspace(0,Fs/2,N/2), ptot(1:N/2), 'r');
% grid on;
% title('PSD of a 2nd-Order Sigma-Delta Modulator')
% xlabel('Frequency [Hz]')
% ylabel('PSD [dB]')
% axis([0 Fs/2 -200 0]);
% figure(2);
% clf;
% semilogx(linspace(0,Fs/2,N/2), ptot(1:N/2), 'r');
% grid on;
% title('PSD of a 2nd-Order Sigma-Delta Modulator')
% xlabel('Frequency [Hz]')
% ylabel('PSD [dB]')
% axis([0 Fs/2 -200 0]); % figure(3);
clf;
plot(linspace(0,Fs/2,N/2), ptot(1:N/2), 'r');
hold on; title('PSD of a 2nd-Order Sigma-Delta Modulator (detail)')
xlabel('Frequency [Hz]')
ylabel('PSD [dB]') axis([0 2*(Fs/R) -200 0]); grid on; hold off; text_handle = text(floor(Fs/R),-40, sprintf('SNR = %4.1fdB @ OSR=%d\n',snr,R));
text_handle = text(floor(Fs/R),-60, sprintf('ENOB = %2.2f bits @ OSR=%d\n',Rbit,R));
s1=sprintf(' SNR(dB)=%1.3f',snr);
s2=sprintf(' Simulation time =%1.3f min',etime(clock,t0)/60);
disp(s1) disp(s2)
% ********************************************************************** % Histograms of the integrator outputs % **********************************************************************
% figure(4)
% nbins=200;
% [bin1,xx1]=histo(y1, nbins); % [bin2,xx2]=histo(y2, nbins); % clf;
% subplot(1,2,1), plot(xx1, bin1)
% grid on;
% title('First Integrator Output')
% xlabel('Voltage [V]')
% ylabel('Occurrences')
% subplot(1,2,2), plot(xx2, bin2)
% grid on;
% title('Second Integrator Output')
% xlabel('Voltage [V]')
% ylabel('Occurrences')
0 Comments
Answers (1)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!