为了更熟练地掌握DSP Builder的设计技能。决定找几个相关的例子来做一下。今天,其实是昨天就把模型搭建好了,只是一直不出波形。先来看一下,我参照书上搭建的模型。
DDS的原理,我就不在这儿费话了。根据书上的提示,这个模型几分钟就搭建好了。当然这个只是DDS的一部分,由于开发板上没有D/A转换芯片,此实验只能实现NCO部分,在simulink里仿真。可是就这么一个简单的实验,我照着书做都做了两天才做出来。对软件不熟悉是很大的一原因吧。
首先是仿真后,没有在虚拟示波器上见波形。偶然间把仿真时间调整为100后(原来是5),见到波形了。原来是仿真时间不匹配。害得我调了这么久。
波形成功弄出来了。可是这个波形离我想要的正弦波相差甚远。
我又看了下,原理图,可能影响波形的参数主要有三个。(相位字设为0)一是频率字,频率字值越大,频率越高。相同的时间刻度上,可以显示的波形个数越多。为了清楚的看到波形,需要协同调整频率字和仿真时间。如果频率字一定,只能调整仿真时间。第二个参数是调幅字。调幅字按说只会影响波形的幅值,不会影响到波形的形状。但LUT输出与调幅字做了乘法运算。如果乘积超过乘法器的位数,则会溢出。输出波形就会变形。结果如下图。当产生溢出时,乘法器输出傎产生跳变,波形也就会产生跳变。
另外一个参数就是LUT的MATLAB ARRAY。1023*sin([0:2*pi/(2^10):2*pi])+1024,其中,10是LUT的深度。1023是其幅值,加上1024是为了保证输出为非负。其幅值过大,与前面的幅度字相乘后,就会产生溢出。LUT深度为6时,其波形如下:
由此看来,LUT的深度会影响输出波形的精度。
另一个影响输出波形精度的因素是D/A的精度,下面两图分别是D/A精度为16位和10位时的输出波形。它们的差别很明显。
参考书籍:《EDA技术与VHDL》潘松,清华大学出版社
用户436773 2013-8-2 12:09
飞言走笔 2013-8-1 21:46