求教大神关于sigma-delta调制器行为仿真遇到的问题
录入:edatop.com 阅读:
求教大神们,我按照Understanding Sigma Delta data convertors书设计了CIFF结构的二阶调制器,得出了a g b c参数,然后用SDtoolbox_Piero Malcovati这个行为仿真工具箱建立了行为仿真模型,在仿真时遇到了些问题:我的带宽是1KHz,过采样率为512,采样电容83fF,运放饱和电压设计的为3V,增益为80dB,GBW=200MHz,SR=20V/us;仿真时当输入幅值比较大时比如2.85V,只有输入信号频率为带宽临界频率1KHz时SNR才有120dB左右,其他频率点SNR都非常低,但当输入信号幅值比较小时,如0.15V,在整个频率带内SNR都比较高,位数也能达到16bits以上;疑问:
1,为何在输入信号幅值比较高时SNR下降如此厉害了,从图7可见,在输入为1V时SNR已经下降的很厉害了?产生这个的原因是结构没设计好?还是行为仿真模型不对?或者是所使用的行为仿真工具中的模型不准?因为在模型里已经设置运放饱和电压为3V了。
2,在仿真中发现同样的电路和参数运行几次得到的结果有差别,有时差别还比较大,产生这个的原因会是行为模型中噪声用随机函数 来模拟产生的缘故吗?
3,按照红皮书确定了电路结构和系数后,接下来要进行行为仿真,行为仿真模型是自己设计,还是利用一些专家开发的现成的工具箱里的模型?比如SDtoolbox_Piero Malcovati和SDT_Simona Brigati行为仿真工具箱。
4,利用MATLAB行为仿真定下各个子模块电路的spec后,接下来应该怎样做了?是否需要在cadence里用verilog-A建模,进行进一步的仿真分析?还是直接进行晶体管级设计?
问题比较多,还望大神不厌其烦帮我解答呀,拜谢了!
行为模型
仿真程序
clear
t0=clock;
% ************************************************************************
% Global variables
% ************************************************************************
bw=1e3;
% Base-band
R=512;
Fs=R*2*bw;
% Oversampling frequency
Ts=1/Fs;
N=2^14;
% Samples number
nper=2;
Fin=nper*Fs/N;
% Input signal frequency (Fin = nper*Fs/N)
%Ampl=2.85;
% Input signal amplitude [V]
Ampl=0.15;
Ntransient=10;
%
%
k=1.38e-23;
% Boltzmann Constant
Temp=300;
% Absolute Temperature in Kelvin
Cs=83e-15;
% 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;
% Op-amp saturation value [V]
sr=20e6;
% Op-amp slew rate [V/s]
GBW=200e6;
% Op-amp GBW [Hz]
noise1=0;
% 1st int. output noise std. dev. [V/sqrt(Hz)]
%delta=8e-9;
% Random Sampling jitter (std. dev.)
delta=0;
NCOMPARATORI=1; % one bit quantizer
match=9e-10; % Realistic value, but not related to any technology (because of non disclosure agreement)
% Modulator coefficients
a1 = 1.9139;
a2 = 5.8782;
b1 = 0.6459;
c1 = 0.6459;
c2 = 0.1244;
g1 = 1.0091e-004;
finrad=Fin*2*pi;
% Input signal frequency in radians
% ************************************************************************
% Open Simulink diagram first
% ************************************************************************
open_system('TwoOrderDesignMdl')
options=simset('InitialState', zeros(1,3), 'RelTol', 1e-3, 'MaxStep', 1/Fs);
sim('TwoOrderDesignMdl', (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
仿真所得结果如下
图1:信号频率125Hz,幅值0.15V
图2:信号频率973Hz,幅值0.15V
图3:信号频率1KHz,幅值0.15V
图4:信号频率125Hz,幅值2.85V
图5:信号频率937Hz,幅值2.85V
图6:信号频率1KHz,幅值2.85V
图7:信号频率125Hz,幅值1V
后面的文字为啥都加横线了?
我不是做delta-sigma的,但看你第一个问题好像已经用管子在搭电路了? 你在系统设计的时候就应该找到你的Maximum Signal Amplitude (MSA),这是重要的系统参数之一,超过这个幅度,你的系统就会不稳定
我也在搞这个呀
我来尝试回答一下
1. 输入太大积分器会饱和造成snr下降, 可以看看understanding的图3.8. 一般测试的时候加的是-6dB的信号
2. ... 看不到图, 无法解释
3. 自己搭用Schreier的toolbox+simulink模型最好
4. MATLAB比较适合计算系数, 在晶体管级设计前最好搭个Verilog-A模型
申明:网友回复良莠不齐,仅供参考。如需专业解答,请学习本站推出的微波射频专业培训课程。