论坛风格切换切换到宽版
  • 18211阅读
  • 212回复

方波的采样定理和DDS的问题 [复制链接]

上一主题 下一主题
离线bd1es
发帖
2096
只看该作者 140楼 发表于: 2008-08-07
补充两个,改变增量为8321*65536+3333,加窗后发现与上图的不同,证明那是信号自身的能量,与fft分析方法无关。
本主题包含附件,请 登录 后查看, 或者 注册 成为会员
离线一异
发帖
868
只看该作者 141楼 发表于: 2008-08-07
谢谢bd1es!
刚才我才突然反应过来,是我糊涂了。
按照我前面的分析,对于16bit的字长,波表的长度起码需要2^16*4也就是256k才够,否则有一些采样可能的取值是不会出现的,因此64k大小的波表出现误差是必然的。
我前面还说过:为了减小由于不相位增量的斜率不是整数(4/π)可能导致的误差,在256k的基础上适当增加,比如2倍、4倍、8倍,可能输出质量是有帮助的。但我认为继续增加意义不会太大。

而对于16bitdds,64k波表已经包含了它所有可能的相位值,虽然没有包括波表所有的可能的取值(如果仔细看64k波表,会发现在零附近波表是不连续的,有一些数字不会出现),但波表中没有得值是永远用不到的,所以不会导致误差。

如果bd1es有兴趣不妨继续研究一下。
离线bd1es
发帖
2096
只看该作者 142楼 发表于: 2008-08-07
没错。dds的3个参量之间还是有关系的,所以综合考虑会对实践有指导意义,而数字话的东西有时会让人头晕,所以经常仿真仿真是有好处的,:)。
离线alchemier
发帖
69
只看该作者 143楼 发表于: 2008-08-07
可能我在这里的观点有些变化,是因为我也是最近才对dds感兴趣,因此通过小比尔/5的那个“做了个minidds,但是杂散大得吓死人了”那个帖子进入学习的,这几天我确信已经基本掌握了dds的原理,这点可以通过我贴的dds输出波形图,以及随图所附的结论没人提出异议看出来。当然这要感谢各位大侠的帮助!
我最后这几贴的意思是想对小比尔在28楼贴出的波形和mainstreet在35楼贴出的波形做出解释,因为小比尔自己也说“杂散大得吓死人了”,而mainstreet对自己画出的fft理论值波形却说“谐波比我预想的低得多,是不是有什么错?”。一个是实际结果,一个是理论结果,二位作者显然都是高手,不会犯低级错误,而结果却与预想的相差甚多,这是为什么呢?
离线alchemier
发帖
69
只看该作者 144楼 发表于: 2008-08-07
我仔细看了mainstreet的matlab程序,发现他是直接把dds生成的样点作为fft的输入序列的,这个序列是从sin函数得出来的,因此对于fft(实际上是dft)的输入端来看,输入的当然就是一个正弦波形,所以无论后面如何变化,其谐波总是很低的。如果我们按照实际的非同步采样方式,即对于未滤波的dds输出,每周期采集比dds输出更多的样点,举例来说,比如dds输出为512点/周期,而fft每周期设定采集1024点,这时输入dds的就是一个大体上像正弦波形的阶梯波了,这样再做fft输出的波形其谐波分量就肯定会上升,与常识认为应该达到的量级接近。这个可以通过修改一下mainstreet的matlab程序验证一下。
至于小比尔的那个波形谐波分量大,正是因为输出没有加滤波器,并且声卡的a/d采集输入样点并没有与dds的输出样点同步的缘故,这个结果与上述mainstreet的fft理论分析按照我说的方法调整后的结果应该是相近的,至于声卡上的滤波器,其频带肯定高于20khz,并不会对这里的1khz信号及其低次谐波产生影响。
离线bd1es
发帖
2096
只看该作者 145楼 发表于: 2008-08-07
'
可能我在这里的观点有些变化,是因为我也是最近才对dds感兴趣,因此通过小比尔/5的那个“做了个minidds,但是杂散大得吓死人了”那个帖子进入学习的,这几天我确信已经基本掌握了dds的原理,这点可以通过我贴的dds输出波形图,以及随图所附的结论没人提出异议看出来。
我最后这几贴的意思是想对小比尔在28楼贴出的波形和mainstreet在35楼贴出的波形做出解释,因为小比尔自己也说“杂散大得吓死人了”,而mainstreet对自己画出的fft理论值波形却说“谐波比我预想的低得多,是不是有什么错?”。一个是实际结果,一个是理论结果,二位作者显然都是高手,不会犯低级错误,而结果却与预想的相差甚多,这是为什么呢?
'

其中有一个就是有错的。

小比尔/5的试验结果没问题,他的dds已经很好了。前面也大致猜测了他实验中出现谐波的可能性,最大的嫌疑是声卡有问题,其次是dac芯片质量问题,最后的可能是他的波表算错了。但除去这些不考虑,但就这个8位输出的dds来说,能得到-50dbc的信噪比就已经接近理想了,没必要再努力下去。

mainstreet的程序中功率计算有错误,他后来也改了,所以把他的频谱图纵向压缩一半就对了。这样看二者并无大的区别。
离线alchemier
发帖
69
只看该作者 146楼 发表于: 2008-08-07
这里是从理论上来分析,我也没说小比尔/5的试验结果有问题。
能不能把mainstreet的程序按我说的修改一下看看结果?我这里没有matlab?
离线bd1es
发帖
2096
只看该作者 147楼 发表于: 2008-08-07
'
我仔细看了mainstreet的matlab程序,发现他是直接把dds生成的样点作为fft的输入序列的,这个序列是从sin函数得出来的,因此对于fft(实际上是dft)的输入端来看,输入的当然就是一个正弦波形,所以无论后面如何变化,其谐波总是很低的。如果我们按照实际的非同步采样方式,即对于未滤波的dds输出,每周期采集比dds输出更多的样点,举例来说,比如dds输出为512点/周期,而fft每周期设定采集1024点,这时输入dds的就是一个大体上像正弦波形的阶梯波了,这样再做fft输出的波形其谐波分量就肯定会上升,与常识认为应该达到的量级接近。这个可以通过修改一下mainstreet的matlab程序验证一下。
至于小比尔的那个波形谐波分量大,正是因为输出没有加滤波器,并且声卡的a/d采集输入样点并没有与dds的输出样点同步的缘故,这个结果与上述mainstreet的fft理论分析按照我说的方法调整后的结果应该是相近的,至于声卡上的滤波器,其频带肯定高于20khz,并不会对这里的1khz信号及其低次谐波产生影响。
'

不是这样的,mainstreet的分析方法没错误,唯一的问题是他的表达式多乘了一个2。其他的与我们的程序等效。这里最简捷的程序是小比尔/5的scilab程序,有兴趣的朋友不妨拿来试试,也可以仿真3个参量。

您的所谓样点同步是不存在的,前面说过,声卡采到的是经还原的平滑正弦波,因此没有样点同步说。即便不是,也不存在您说的问题。采样是采不出谐波失真的,那另有原因。俺不能说了,已经车轱辘话了,
离线alchemier
发帖
69
只看该作者 148楼 发表于: 2008-08-07
照你这么说,阶梯波与正弦波对于fft来说其谐波失真是一样的喽?那么这fft还有什么波形分析的意义?
离线一异
发帖
868
只看该作者 149楼 发表于: 2008-08-07
'
我仔细看了mainstreet的matlab程序,发现他是直接把dds生成的样点作为fft的输入序列的,这个序列是从sin函数得出来的,因此对于fft(实际上是dft)的输入端来看,输入的当然就是一个正弦波形,所以无论后面如何变化,其谐波总是很低的。如果我们按照实际的非同步采样方式,即对于未滤波的dds输出,每周期采集比dds输出更多的样点,举例来说,比如dds输出为512点/周期,而fft每周期设定采集1024点,这时输入dds的就是一个大体上像正弦波形的阶梯波了,这样再做fft输出的波形其谐波分量就肯定会上升,与常识认为应该达到的量级接近。这个可以通过修改一下mainstreet的matlab程序验证一下。
至于小比尔的那个波形谐波分量大,正是因为输出没有加滤波器,并且声卡的a/d采集输入样点并没有与dds的输出样点同步的缘故,这个结果与上述mainstreet的fft理论分析按照我说的方法调整后的结果应该是相近的,至于声卡上的滤波器,其频带肯定高于20khz,并不会对这里的1khz信号及其低次谐波产生影响。
'

这儿有一个认知错误,dds实际上属于pcm,在理论上pcm系统处理的不是阶梯波,而是一个一个离散的脉冲信号,这些脉冲信号有一个特定的幅度,但脉冲宽度为零。
fft处理的也是pcm信号,是一系列离散脉冲,不是阶梯波。
离线bd1es
发帖
2096
只看该作者 150楼 发表于: 2008-08-07
一异说的对。采样采到的是信号在某瞬间的值,是高度特定的“冲击脉冲”,不能当阶梯波看。数字域的分析是针对这一系列脉冲的,就是我们说的“序列”。不能把序列想象成“波”,否则真的会导致误解,就像昨天说的样点多就会质量好那样。

为什么很多人会把序列想象成阶梯波,大概跟dac的工作原理有关。大部分dac会把这一系列脉冲转换成“阶梯波”,但这已经出了数字域了,而且是中间结果,最终还要通过反混叠装置来滤波,还原成原来的信号。采样是它的逆过程。

所以我们谈论中间结果并没有太大的意义。如果可以讨论这个阶梯波,我们也会发现它是含有原信号的复合信号,它有原信号的无穷多边带。这些信号需要经低通滤波器来干掉。但无论如何,在奈奎斯特带宽内它只有原信号,绝对不会出现您所说的谐波。
离线alchemier
发帖
69
只看该作者 151楼 发表于: 2008-08-15
[quote=一异]这儿有一个认知错误,dds实际上属于pcm,在理论上pcm系统处理的不是阶梯波,而是一个一个离散的脉冲信号,这些脉冲信号有一个特定的幅度,但脉冲宽度为零。
fft处理的也是pcm信号,是一系列离散脉冲,不是阶梯波。[/quote]

看来还是没明白我的意思,我是说的如下采样区别,这两种方式的谐波肯定是不一样的,第一种方式看不出来的谐波,第二种方式就能看出来了:
本主题包含附件,请 登录 后查看, 或者 注册 成为会员
离线小比尔/5
发帖
2582
只看该作者 152楼 发表于: 2008-08-15
'
看来还是没明白我的意思,我是说的如下采样区别,这两种方式的谐波肯定是不一样的,第一种方式看不出来的谐波,第二种方式就能看出来了:
'

孔阑失真~
小台阶可以看成一个门函数,频谱是sinc函数,所以经低通的信号的高频成分被抑制失真,但是不会产生谐波吧……

还有,如果你愿意的话,也可以对未经低通的信号进行频谱分析,那就是除了基带,还有一些类似的频谱,周期性重复反折。
所以,可以用低采样频率重现较高频率信号,不一定要小于nyquist频率。
这个在《信号与系统》里面有介绍的。
离线一异
发帖
868
只看该作者 153楼 发表于: 2008-08-16
'
看来还是没明白我的意思,我是说的如下采样区别,这两种方式的谐波肯定是不一样的,第一种方式看不出来的谐波,第二种方式就能看出来了:
'

不知道为什么我打不开你的图,所以我只能按照一般的原理回答你:
以奈奎斯特理论为基础的数字信号处理系统有一个基本假设:在进行采样之前信号首先通过一个理想滤波器;而在信号还原的时候,信号必须通过一个理想滤波器滤波之后再输出。
如果不考虑这个理想滤波器的存在,你说说的问题的确是存在的。但事实上因为这个滤波器的存在,所有高于奈奎斯特频率(采样频率的一半)的频谱成分统统不存在了。
你前面说的阶梯波的问题,如果忽略编码误差,那么:你对这些任何频率的输出正弦波对应的阶梯波或者脉冲序列进行分析,你会发现它们的谐波失真的频率成分都高于奈奎斯特频率。所以,如果这些信号通过前面所说的理想滤波器之后,谐波失真将不复存在。而阶梯波和脉冲序列之间的差异是:阶梯波的高频正弦波将相对于低频正弦波出现幅度衰减,而脉冲序列不存在这个问题;不过脉冲序列也有一个问题,或者要求脉冲幅度必须为无穷大,或者输出电压为零(因为它的宽度为零)。
离线bd1es
发帖
2096
只看该作者 154楼 发表于: 2008-08-16
'
看来还是没明白我的意思,我是说的如下采样区别,这两种方式的谐波肯定是不一样的,第一种方式看不出来的谐波,第二种方式就能看出来了:
'

,这帖子咋又挖出来了。

我有点儿明白您的意思了。您是说如果改变了抽样率会不会出现谐波。请允许我多罗嗦两句。

假设原序列是x(n)={1,4,7,10,13,16,19},采样率=1赫兹。那么奈奎斯特带宽是0-0.5赫兹了就。

1、不改变抽样率:自然没有谐波,因为没地方滋生谐波,序列中间的缝隙为零,我们不可能在序列中间再插入任何的“点”了。假设我们使用“台阶”那种dac,那么经变换后序列变成了连续时间信号,这时候不是时间离散的了,也不能用上面那个x(n)表示了,就是说出现了额外的信息。但是可以证明,这种额外的信息并非表现为谐波,而是表现为奈奎斯特带宽外的一系列边带信号。但是在带宽内,也就是0-0.5hz内是没有“额外”信号出现的。这种证明采样定理的方法较复杂,我记不住,咱们还是翻翻书看吧。那么如果使用pwm那种dac呢?结果是类似的,虽然没有出现台阶。

2、dac只完成了数模变换的一半工作。因为离散变连续后,这里出现了不该有的边带,所以需要用0-0.5hz的滤波器滤掉那些不该有的边带,这样才完成信号的还原。大多数人通称这个过程为“数模变换”,我们继承这种说法,但应记住这里还有一个反混叠滤波器的存在。谢天谢地奈奎斯特证明了在0-0.5hz内没有“额外”信号,否则数字信号就无法还原了。

3、提高抽样率:就是说人为加长序列,并提高采样率。这里假设采样率提高到3hz,序列变成x'(n)={1,1,1,4,4,4,7,7,7,10,10,10,13,13,13,16,16,16,19,19,19}。于是出事了,原本在奈奎斯特带宽外的一些“额外”边带进入带内了。准确说就是在0.5-1.5hz内的边带出现在奈奎斯特带宽内了,这叫出现“混叠”。实际上这相当于原信号在原抽样率下误用0-1.5hz的低通滤波器。它们所造就的结果是一样的。但这仍然不是谐波,因为它们与原信号不是倍频关系。

4、再说提高抽样率:看看上面那个加长的序列是否很古怪?因为在提高抽样率的同时我们只想当然的复制了中间值,可是我们忘了对它进行滤波。实际上在提高抽样率后需要对x'(n)进行0-0.5hz的数字低通滤波,使得它在数字域内不出现额外边带,这样才能在提高抽样率的同时保证原信号不失真。也可以通过正确的插值算法获得这种加长序列,结果是一样的。注意cd唱机在还原时通常会提高抽样率,因为在数字域内的滤波比模拟滤波容易得多,这样就降低了模拟滤波器的制作难度,确保了音乐信号的高保真还原。可惜对dds不适用,因为我们总希望dds工作于尽可能高的时钟下,已经不可能做过采样还原了。或者我们认为dds输出的是已经尽最大可能过采样的正弦信号。

先说到这吧,不知对否,该上班了,
离线alchemier
发帖
69
只看该作者 155楼 发表于: 2008-08-17
看来你们已经习惯了上来就在频域内想问题,我只是想说明为什么小比尔那个未经滤波器,直接da输出的波形经过fft后谐波分量会与matlab理论值相差那么大,注意我一直强调的是未经滤波,这样直接da输出的就是那个台阶波,所以会出现谐波分量大的情况,而mainstreet那个程序是把标准正弦波的序列输给fft,就如我贴的图中上面那个情况,所以fft算出来就基本没有什么谐波分量。那么如果在那个序列中间插入中间采样点,模拟真实的未经滤波的da输出(图中下面那种情况),fft算出来的谐波分量就会加大到和实际测量的值相近的地步,这样。
至于什么输入输出滤波器的问题应该与我们讨论的这种情况无关。
离线alchemier
发帖
69
只看该作者 156楼 发表于: 2008-08-17
为了更明白的表达,我还是贴图吧,这两天在看奥运的间隙,抽空写了个fft程序,与matlab函数验证过没问题,呵呵。
下面是两种采样方式的频谱比较,这个是将dds输出样点直接作为fft采样点(1对1方式,也就是我说的同步方式)的频谱图:
本主题包含附件,请 登录 后查看, 或者 注册 成为会员
离线alchemier
发帖
69
只看该作者 157楼 发表于: 2008-08-17
这个是在dds输出中加入了中间采样点,模拟da直接输出的波形和频谱图(就是实际应用中频谱仪的输入方式,也就是我说的非同步方式):
本主题包含附件,请 登录 后查看, 或者 注册 成为会员
离线小比尔/5
发帖
2582
只看该作者 158楼 发表于: 2008-08-17
'
看来你们已经习惯了上来就在频域内想问题,我只是想说明为什么小比尔那个未经滤波器,直接da输出的波形经过fft后谐波分量会与matlab理论值相差那么大,注意我一直强调的是未经滤波,这样直接da输出的就是那个台阶波,所以会出现谐波分量大的情况,而mainstreet那个程序是把标准正弦波的序列输给fft,就如我贴的图中上面那个情况,所以fft算出来就基本没有什么谐波分量。那么如果在那个序列中间插入中间采样点,模拟真实的未经滤波的da输出(图中下面那种情况),fft算出来的谐波分量就会加大到和实际测量的值相近的地步,这样。
至于什么输入输出滤波器的问题应该与我们讨论的这种情况无关。
'

滤波器是从1/2采样频率开始截止,有可能因为滤波不彻底,使带外信号反折到带内。
离线bd1es
发帖
2096
只看该作者 159楼 发表于: 2008-08-18
真是怪了,我还是没找到谐波,只找到混叠信号:那些“边带”。从图上看它们与原信号不成倍数关系。

也许有些声卡的输入端后面没有防混叠滤波器?且不说这样的声卡不合格,就说有这样的声卡吧。那用这种声卡也采不出谐波啊,只是信号乱了,混叠了便罢。难道不加滤波器会整成非线性采样不成?

或者说即使用频谱仪对“阶梯波”采样分析,也只能看到混叠,而看不到谐波啊,除非原信号中就有谐波,否则频谱仪岂不没用了。
本主题包含附件,请 登录 后查看, 或者 注册 成为会员