Hello everyone,
I'm trying to verify the theoretical SNR of a Conventional 3rd-order single-bit CIFF Sigma-Delta ADC with an OSR of 60. The feedforward and gain coefficients are generated using Richard Schreier's Sigma-Delta Toolbox.
However, I'm observing a significant SNR discrepancy:
- Theoretical SNR: ~110 dB
- Sigma-Delta Toolbox predicted peak SNR: ~88 dB
- MATLAB simulation result: ~78 dB
This represents nearly a 30 dB degradation from the theoretical estimate to the practical implementation, and about 10 dB between the Sigma-Delta Toolbox prediction and my MATLAB simulation.
The coefficients are generated using the following Sigma-Delta Toolbox flow:
clc; clear; close all;
% Modulator specifications
order = 3;
OSR = 60;
opt = 1; % Optimized NTF zeros
Hinf = 1.5; % Lee stability criterion for 1-bit
nlev = 2; % 1-bit quantizer
form = 'CIFF'; % Architecture
% 1) Synthesize optimal NTF
ntf = synthesizeNTF(order, OSR, opt, Hinf);
% 2) Realize CIFF structure
[a,g,b,c] = realizeNTF(ntf, form);
% 3) Build ABCD matrix
ABCD = stuffABCD(a,g,b,c,form);
% 4) Scale states for stability
[ABCDs, umax] = scaleABCD(ABCD, nlev);
% 5) Extract scaled coefficients
[a,g,b,c] = mapABCD(ABCDs, form);
% Display coefficients
k1 = c(1);
k2 = c(2);
k3 = c(3);
a1 = a(1);
a2 = a(2);
a3 = a(3);
fprintf('\nIntegrator Gains:\n');
fprintf('k1 = %.16f\n', k1);
fprintf('k2 = %.16f\n', k2);
fprintf('k3 = %.16f\n', k3);
fprintf('\nFeedforward Coefficients:\n');
fprintf('a1 = %.16f\n', a1);
fprintf('a2 = %.16f\n', a2);
fprintf('a3 = %.16f\n', a3);
fprintf('\nStability:\n');
fprintf('Max Stable Input (umax): %.16f\n', umax);
% Predict SNR
[snr, amp] = simulateSNR(ntf, OSR, [], [], nlev);
fprintf('Predicted Peak SNR: %.16f dB\n', max(snr));If anyone has worked on behavioral modeling of CIFF Sigma-Delta modulators or has encountered a similar discrepancy, I'd greatly appreciate your insights.
Thank you!
#SigmaDeltaADC #ADC #MixedSignal #MATLAB #SignalProcessing #DSP #BehavioralModeling #CIFF #Oversampling #SNR #RichardSchreier #EngineeringCommunity
I just manually calculated SNR for 1kHz = 88.09 dB !
code i used is attached. cal_snr.m
just call the function at the end of your original file.
% Measure SNR for 1KHz tone cal_snr(N_samples, Fs, F_signal, ABCDs, nlev, umax, bandwidth, bin_ideal);
few points to remember :
signal_span matters and the bin mapping too.
and use window.
Yes, Chalil, you are correct. You have calculated the SNR using Richard's Sigma-Delta Toolbox itself.
However, if we implement the same modulator using the difference equations, shouldn't we obtain the same SNR result as well?
I've attached the code that I used. TO_Conventional_1Bit_SD_ADC.m
Could you please have a look and let me know if I'm missing something?
please check your reconstruction LPF.
In my current MATLAB implementation, I haven't used an explicit reconstruction LPF.
For the SNR calculation, I'm considering only the in-band spectrum (0-20 kHz), which effectively behaves as an ideal brick-wall LPF during analysis. For the practical ADC implementation, I'll replace this with an actual decimation/reconstruction filter.






