上周,把射频微电子中的数字调制部分给过了一遍,给自己扫了一下盲。
昨天,在更完公 众号后,就开始忙仿真。说实话,在动手之前,我是信心满满。
心里是这样打算的,仿真验证分三步走:
纯射频层面,纯射频概念的验证,这是目前课程中已经完成的部分
纯射频层面,数字调制的验证,这是昨天打算做的工作。
以第2点的结果作为参考,进行数字层面,数字调制的仿真。
(2)
在ADS里面,有关于星座图和EVM计算的公式。分别是constellation(),const_evm(),evm()。
仿真模版,是基于ADS以前版本上的designguide(目前新版本已经删掉)。
虽然模版是旧的,但是里面的函数都是有效的。而且感觉这些函数,对射频人员很友好。
他们的输入信号,都是从射频链路中节点处读取的电压数据。不用DF控件,也不用考虑联合仿真。一样的射频电路,把对应节点的数据添加进去,就可以。
(3)
在模板上,是RF_Freq>LO_Freq,所以,在选择Vfund_out的时候,选择的是{-1,1}。
刚开始,我也只是把RF_Freq和LO_Freq按照我链路的实际值,代入了进去。虽然RF_Freq是小于LO_Freq的,我也没有改mix{-1,1}这个部分,心里想着,虽然是负值,但是咱们射频上,一般也不太讲究,先试试看再说。
仿了一下,EVM结果不错。
然后又回到原理图,想着还是把mix{-1,1}改成mix{1,-1}吧。然后结果一出来,懵了,EVM的值直接飞了。
(4)
我的第一反应,是看这些函数的help文件。不过瞄了几眼,没能看出啥子道道来。不过,在const_evm()的help文件中,有这样一段话。
于是,我就把这个工程文件打开,把它上面的计算EVM的dds文件拷到我现在的工程文件夹下。
看了一下dds上面的公式,它计算EVM的时候,大概分了下面几个步骤:
基于理想输入信号,计算出理想的星座图
基于链路输出信号,计算出输出的星座图
计算出两个星座图之间的幅度差别
计算出两个星座图之间的相位差别
对输出的星座图,进行幅度和相位校正,计算出校正后的星座图
基于理想星座图和校正后星座图,计算出EVM。
模版给的信息量挺大,看完后,收获也颇丰。然而,算出来的EVM还是很差。
(5)
没办法,然后我在help文件上面,还看到了这样一条信息。
于是,我又去相应的文件夹下,去看这个ael文件。
这个ael文件里,包括了constellation()等函数的内部计算方法。
我凭着本科的那些java功底,和我还算可以的英文水平,勉勉强强地读出个意思。
constellation()里面有几个if else,不过我们只用其中的一个if,然后用到的主函数大概是这个。
没看出来,为啥会引起这个EVM的大变化。
然后又看了一下const_evm()下面的内容,感觉流程和上面dds模版中的差不多。
(6)
昨天晚上搞到8点多,也没搞出个所以然来。今天早上再坐到电脑前,把envelope的stop从小慢慢加。
发现,当mix选择的是{-1,1}时,也就是IF=-LO_Freq+RF_Freq时,Vfund_in和Vfund_out出来的星座图的变化趋势是一样的,
但是原理图上其他啥也不改,只是将mix{-1,1}改为{1,-1},即中频为LO_Freq-RF_Freq。出来的星座图,发现变化趋势都是相反的,当仿真的符号数增加的时候,IN是逆时针变化,OUT是顺时针变化。
(7)
所以,这是镜像了?
从频谱上看,频率高低不同的话,确实频谱是镜像的。
是因为这个原因么?
当EVM不好的时候,我把VFund_out取了一下共轭,结果确实是变好了。
不过我不是很确定啊!
(8)
这礼拜要是还不能按时讲课,我真的要去趟雍和宫了!