热度 2| |
打杂了一段时间,根据项目需求做一个哪里需要哪里搬的打杂砖。
①
关于上次稳定性和零极点的问题,有了一点初步的理解,先记一下,不一定对,以后再来迭代知识点。
我们系统是一个比较精巧的双环路,刚开始被多零极点唬住了,但实质上,从稳定性的角度考虑,我们关注的还是主零点和主极点的位置。
因为原点处有两个极点,再经过零点和主极点之后,相位裕度只会小于45°,有不稳定的风险。
高频处的极点,关注的或许是它对噪声的抑制能力?
②
打的第二个杂是完善环路里多模分频器和固定分频比分频器的建模。
MMDIV的结构是吞咽分频器,输入差分正交四路时钟,利用不同相位时钟的边沿触发,prescaler可以实现0.25步径的分频,顺便学习了一些P、S counter,以及它们计数到指定位后,如何反馈复位信号,控制prescaler的MC置0或1。还蛮有趣的。
为了验证时序功能,自学了modelsim。用verilog三脚猫的功夫,摸索出一套module和testbench代码,改改激励缝缝补补,足够应付DFF和逻辑门电路了。值得注意的就是触发器输出Q在module和testbench里类型是不一样的,还有begin end是顺序,fork join是并行。
用DFF建模六分频时,发现它时而二分频、时而六分频,想破脑袋也想不出为什么,就反馈给前辈。
前辈太厉害了,通过一段半电平输入(不定态),复现了分频错误的现象,还提示我考虑六个DFF的连接方式。
被点醒了,分析时序时想偷懒,就用modelsim仿真。最后发现竟然是和它复位后的初始时钟有关,上升沿或下降沿先到决定了是二分频还是六分频。真邪门啊 这上哪说理去。
把六个DFF的连接方式调整了一下,就没事了。
前辈说实际电路的复位状态做的比较好,不会出现我们建模遇到的问题,于是这个杂就打到这里。
③
第三个杂是VCO噪声建模。
紧急补习c语言和matlab。再进行一个cppsim的下载,里面的VCO噪声建模挺好的,既有白噪声又有闪烁噪声。
白噪声用的是随机高斯噪声:
闪烁噪声在高斯噪声的基础上,分别经过九个滤波器,传输函数的增益逐次减小,带宽逐次增大,例如:
filt(分子,分母,输入),s是拉普拉斯变化的算子?,Ts是采样周期。
如果转角频率很小,就忽略flicker,只考虑白噪声。否则,总噪声是rand1和filt1-9之和。
好奇为什么可以这样用九个滤波器叠加构成闪烁噪声,所以用matlab进行了一个复现。
很困难,cppsim的思路是时域产生高斯噪声,而filt的传输函数是s域的。困难的点在于本人的matlab水平,还不如刚入门的modelsim!QAQ
先在频域构建闪烁噪声模型,还比较简单,因为可以定义白噪声频谱为常数1,filt不用当函数处理,直接点乘就行。
这段代码是跟前辈学来的,bode、reshape、semilogx都是第一次见,要学的东西还多着呢!
filt1 = gain1/(1+s/wp1);
[mag1,~,~] = bode(filt1,2*pi*frange);
psd1 = whitenoise.*(mag1(1,1,:).^2);
psdout1 = reshape(psd1,[1,length(psd1)]);
semilogx(frange(1,:),10*log10(psdout1));
照猫画虎在时域构建,就比较困难了,思路是randn生成高斯噪声,通过lsim函数进行时域和s域的转换,sys分别是传输函数分子和分母的系数,输出的y也是时域波形。
plot的结果很奇怪,前辈乐观地分析说不一定错了,可能是我们量级设的不对。
cppsim代码只是提供了一个噪声整形的轮廓gnoise,最终的噪声量级是根据我们自己定义的频偏噪声大小决定的noise_var。我觉得前辈说的对!
关于噪声建模,还有很长的路要走,姑且告一段落。来新活了,以后再说。
④
感觉每天都学的很慢,一整天没有工作进展的时候就会愧疚。有愧疚,但不多,实习而已。幸好遇到了一个宽容的好前辈!
希望大数据永远不要把我的摸鱼日记推送给前辈和其他同事。拜托!