[quote=小比尔/5]你说的非常有道理,这就是为什么我要把表从256样点增加到512样点的原因。
这样做的目的其实只是工程上的一种近似方法,因为stc12c5410只有10k的内存,主程序就有500多字节,把整个表都放进去是不现实的,也是不可能的。目前的程序要占用约50个机器周期,表项太多,程序的复杂度会变高,stc里的直接寻址命令效率不高,担心会影响到采样频率的实现,而且对8位的d/a来说,改善也不大。
以你的数据做个假设吧。如果我要输出0.5hz,那么16.8m个样点是不是就不够了?
即便只存储1/4t的样点,采用一定的算法输出一个周期,那么,16.8m个样点最多也只能保证0.25hz频率的准确性。
因此,为了实现方便,就只能用表的截短形式。于是,截短的表就相当于对原来的正弦进行
了周期性的调相,所以就会出现谐波。
事实上,即便采用16.8m个样点,如果采样频率与输出频率不满足整数比,输出也会有谐波杂散。
另一方面,我的d/a的参考电压是无源器件得到的,输出也是无源的,所以在接测量声卡的时候,声卡的输入阻抗非常低,只有600欧,对d/a的整个线性度产生了非常不好的影响,因此这一部分非线性失真也产生了谐波。
昨天,我有一条汇编语言的位置写“错”了,这条语句的目的是向d/a送输出允许信号,在它之前有判断分支,两个分支的时序似不平衡。修改后,输出允许信号不抖动了,但是输出的杂散却变多了。由此可以看到,对输出的相位进行抖动,有助于减少谐波分量。在电脑上的仿真实验证明,不管用矩形、三角形,还是高斯抖动,都可以消除谐波分量。但是,输出的底噪变大。在锁相环应用中,运用抖动可以减少锁相环失锁、错锁在谐波上的概率,但作为信号源,c/(n+i)指标却下降了。如果能过采样,并通过抖动,把量化噪声集中到接近nyquist频率的位置,输出通过低通滤波器把这些噪声滤除,那么不管是对底噪还是谐波,都有很大改善,可惜,目前我的单片机的运算速度不够,加上理论功底的限制,还做不到这一点。[/quote]
原来你说的抖动是这个。这等效于在时钟上加抖动吧,不必在指令上下功夫了。它会把基波和谐波的能量都在频谱上分布开来。
过取样怎么实现?