论坛CDM12之非官方升频插件(附AP测试和电路详解)
为我的CDM12做了块小板玩升频这故事要从装了论坛的CDM12讲起。按照惯例,装完机总要拿到公司用AP测测。不测不知道,一测吓一跳。按装机
说明装起来的机器,音频带内的指标尚可,带外的信噪比相当的:Q
原图采用的是PCM1974 datasheet中的fc=162KHz的LPF。这个LPF作为192KHz的DAC测试还可以,对于采样频率为
44.1KHz的CD而言,它显然不能有效地滤除带外的频谱映像成分和噪音。于是我就多次仿真、试验试图改进LPF
(具体情节另文贴出),最后在保证带内幅频响应和群时延平坦到一定程度的时候,宽带(500KHz)噪音仍然在
330uV左右。我还是有点不甘心,因为我测的几台像点样的厂机(价位在1000到2000美元之间)宽带噪音都在100uV以下。
反复读了又读PCM1798和PCM1794的Datasheet,结合其他一些关于delta-sigma DAC的资料,我觉得升频应该是
解决宽带信噪比的有效方法。
上面这两张图虽然来自于两个不同的芯片,但是除了采样率不同以外,其他的测试条件基本一样。我的PCM1798
在44.1KHz下的噪声频谱与前面一幅图很类似,当采样频率上去以后,噪声频谱应该与后面一幅图类似,一马平川:P
我一向对异步升频持保留态度。尽管芯片厂家都说自己的SRC滤除jitter的效果多么好,等效LPF的拐点频率多么低,
我可是亲自测到输入时钟的jitter对多频信号造成了怎样的恶劣影响(百灵歌著名的SRC2496是也)。做过数字设计的
TX都知道,两个完全异步的时钟放到一起,什么情况都可能发生。所以我这次坚持要做同步升频,也就是把SRC
只作为2倍的过取样数字滤波器使用。
但是论坛的CDM12升频并不是那么好加的。原因是主时钟采用的是384fs的频率(16.9344MHz),本来就有些特别,
升频之后采样频率加倍,时钟就成了192fs。这两个倍率现在都不是很流行,更糟糕的是位时钟BCLK是采样频率的
48倍,而不是常用的64倍。想偷懒重用输入端的BCLKI作为输出端的BCLKO是不成了。
我看了TI、ADI和Cirrus Logic几家公司的SRC产品,只有Cirrus Logic的CS8421可以接受384fs的主时钟并支持192fs的
输出,但是只能工作在被动方式下。这就意味着必须外加一些逻辑生成88.2KHz所需的两个时钟信号(BCLKO和LRCKO)。
他们与主时钟MCLK的关系是:
fBCLKO = 1/4 * fMCLK
fLRCKO = 1/48 * fBCLKO = 1/192 fMCLK
这额外的逻辑就需要一个2位计数器负责除4,和一个6位计数器负责除48。
用逻辑电路搭固然可以,但是机内空间有限,还是用可编程逻辑电路来实现灵活些,没准还可以增加一些新功能呢。:)
用GAL固然可以,可是3.3V的少见,编程又要拔来拔去,太麻烦。恰好我在ebay上买到一些便宜的CPLD,Altera的
EPM3032ATC44,32个逻辑单元,3.3V输入兼容5V电平,体积又小又可以在线编程,就是它了!
(我可没想到最终会把32个逻辑单元一个不剩全用掉!):lol 说到额外功能,最先想到的就是……对了,万一我不喜欢SRC的表现怎么办?总得有方便的办法跳过去不用吧!
这第一个功能就是跳过SRC,保持原有采样率和数据的功能。姑且叫它Bypass。:lol
这第二个功能,我叫它6dB Headroom,意思是6分贝余量。我最初想用这个功能的目的是减小DAC输出的失真
电压(而不是失真率)。下图是PCM1798的THD+N曲线。从曲线上我们可以看到,THD+N在-6dBFS左右达到
最低点,然后保持基本不变,此时THD成为THD+N的主导成分。将输入数据除2,可以使整个曲线右移6dB,
DAC在0dB附近达到最小失真电压,代价是牺牲了信噪比。事实证明这是个很土的做法。早先写的代码于是闲置不用。
后来一个偶然的机会,我用一个0dBFS的方波信号测量DAC的输出,发现方波信号带宽受限后产生的类似衰减震荡
的波形有被削顶的情况出现(图中下面R1的波形),而我在一台厂机上测得的信号却是没有被削顶的,接近“数学上完美“
的波形(类似图中上面2的波形)。这厂机得了Stereophile的A类推荐,我想人家这么做是有一定道理的,尽管削顶的
恐怕也有削顶的道理,起码从视觉上更接近真正的方波。;P
从数学上的解释就是在进行低通滤波计算时会产生大于输入数据有效位数的值,这些值要么被饱和(削顶)到输入
数据有效位数能表示的最大最小值,要么在计算过程中使用更多的有效位数,输出的时候再成比例地缩小。要想
重现“数学上完美“的数字滤波结果,DAC本身要能输出大于0dBFS的信号。PCM1798显然不能输出大于0dBFS的信号,
我就反其道而行,把输入信号在数字域先衰减6dB然后再送进去,用DAC的1/2输出范围重现数字滤波器输出“过冲”的
部分。
通俗的说,原来的电路用了24bit DAC中的高16bit,现在我用它的高17bit。由于PCM1798的性能远好于17bit,结果
是失真及信噪比并没有明显劣化。从图上可以看出,在输入信号被衰减6dB的同时,底噪和谐波失真也相应的降低了6dB,
结果是失真度及信噪比基本不变。从数字角度讲,把一个2的补码衰减6dB就是除二,也就是右移一位并补足符号位。
我想这个功能的得失会引起争议,所以就作为一个选项。喜欢的就留着,不喜欢的就跳过去好了。这个功能又用掉了
几个逻辑单元。有些同学觉得CD机标准输出2Vrms太高,又不愿意在模拟域加衰减,这个功能可能正合意。 这第三个功能本是可有可无的,源自我对CDM12 I2S信号的观察。我发现在CD播放的时候,如果把16bit
数据的MSB作为bit 1的话,bit 18总是为1。这就相当于在16bit信号上加了一个相当于1/4最小量的直流成分。
这个bit18存在的原因我不清楚,也许是为了使有些DAC内部的数字零检测功能失效?
由于我用的CS8421是24bit输入,24bit输出,我不想这个bit18在里面捣乱(无他,就是有这个洁癖);P
于是我就加了个功能,在数到第18个bit的时候把这个多余的1拿掉。这样一来,送进SRC的就是纯16位
的音频数据了(与CD盘上实际记录的数据相同)。我把这个功能叫做clear LSB。
下图中通道1(下方波形)显示的是CPLD的输入信号,可以看到每个数据后面都多了个1(周期性的窄脉冲),
而通道2(上方波形)是经过CPLD过滤的输出信号,0就是0, 1就是1, -1就是-1,不再有任何多余的东西。
CPLD的输出可以送到SRC,也可以跳过SRC直接送到PCM1798。示波器是用LRCK外触发的,所以触发点T
显示在LSB左边一位。
这最后一个功能有违我设计同步升频的本意。不过既然要拿出来给大家参考,功能总要做的完全些才好玩。
这就是异步升频功能。板上有一个兼容1/2寸正方形和5mm x 7mm两种晶振的位置,用户可以自行安装晶振
玩异步升频,44.1KHz到48KHz系列当然也可以。缺点是CS8421要使用主动模式,而转换主动被动模式需要
改动一个电阻。
这四个功能用一个4位的DIP开关控制。除了第一项Bypass比最后一项异步升频优先以外(既然跳过了升频功能
就无所谓是同步升频还是异步了),4项功能的控制是互相独立的。举个例子说,即使跳过SRC,仍然可以使用
6分贝余量和bit18清零两项功能。
说得差不多了,上图。
AP测试的结果还可以
数字静音的底噪明显降低,达到设计的初衷:升频之后,由于噪声水平下降,信噪比和动态范围都提高了。然而升频还是有一点代价的,就是PCM1798在升频之后的失真度稍高一点:
由于是16位系统的缘故,增加的失真在THD+N的读数上并没有什么区别。不用SRC时是0.0021x%,用了以后是0.0022x%(测量带宽22KHz)
我发现了一个有趣的现象,就是这PCM1798也有不小的离散性。随套件带来的那片PCM1978右声道失真小得惊人:
但它的左声道就流于一般,差不多到了datasheet上的最大值,直流精度和增益也差。我后来换上的这片就平衡很多。所以这高精度的DAC
是可遇而不可求的。也许有人会做一款双单声道的DAC,不用差分模式,而是用挑选出来的芯片,左声道好的用在左声道,右声道好的用在
右声道。我想有的厂家可能已经在这么做了。有点像以前R2R DAC分等级的故事。
最后加一张升频插件服役中的照片:
看不懂,但觉得很牛很强悍~~~:lol 有意思,带内带外。楼主如果测试下NOS 1543,不用测耳朵听不到的带外,就测带内,情况会如何?估计要跳楼了,呵呵。
LPF滚降(rolloff)频率推得高,坏处是也许高频噪音滤波效果差了点,但相位失真却小了,反之。
过去曾经测试过马兰士CD16和飞利浦LHH800,有意思的是,马兰士CD16的LPF滚降频率比飞利浦的要低,波形漂亮(日本的作风,指标高于一切),而飞利浦800的20Khz高频波形就差一点(能明显看出毛刺来),但声音却完全不同。
如果是我,既然是前面已经OS,后面模拟LPF干脆只用一阶滤波,NOS 1543 44K都敢不怎么滤波直接输出,8倍或者16倍OS后又有什么理由不敢呢?
数字滤波实际上是很好的办法,但却经常遭到鄙视,没什么好抱怨的,DIY就是要讲究另类。
支持楼主技术实践! :asdsd LS知道自己再说什么吗?
1541,43,45,1308最高应该是96k的采样(最大fBck是6.4M)
就是说他是上不了192的~
有些问题应该注意,不知道LZ注意到没有~~~~~~~
我不能明说~~~~~~~不然要挨一些GUNS或者JSS炮轰~ 谢谢楼上二位支持。 不错的帖子,有时间慢慢研究。 原帖由 定音鼓 于 2009-4-16 15:06 发表 http://bbs.hifidiy.net/images/common/back.gif
有意思,带内带外。楼主如果测试下NOS 1543,不用测耳朵听不到的带外,就测带内,情况会如何?估计要跳楼了,呵呵。
LPF滚降(rolloff)频率推得高,坏处是也许高频噪音滤波效果差了点,但相位失真却小了,反之。 ...
这个观点跟我的 类似,我一直觉得那么点高频噪音的影响远比相位来得小,两者不能取舍的时候,我宁愿要保证群延时特性跟相位,喇叭其实已经是一个很好的低通滤波器。 原帖由 卡西利亚斯 于 2009-4-16 15:20 发表 http://bbs.hifidiy.net/images/common/back.gif
:asdsd LS知道自己再说什么吗?
1541,43,45,1308最高应该是96k的采样(最大fBck是6.4M)
就是说他是上不了192的~
有些问题应该注意,不知道LZ注意到没有~~~~~~~
我不能明说~~~~~~~不然要挨一些GUNS或 ...
1541如果一般使用,最多是48KHz 的取样。1543更是了。 楼主,对于异步升频,我一直使用,效果我老实说还没发觉太大的差别。虽然我知道肯定挨你砖。但这可是实情呀。
回复 #12 aeon 的帖子
我现在使用的LPF达到20KHz处幅频响应-0.5dB, 群时延误差(相对于线性相位)小于千分之五,同时8fs=352KHz处衰减47dB左右。还需要进一步改进。不过升频以后LPF的设计容易多了。 原帖由 aeon 于 2009-4-17 07:14 发表 http://bbs.hifidiy.net/images/common/back.gif楼主,对于异步升频,我一直使用,效果我老实说还没发觉太大的差别。虽然我知道肯定挨你砖。但这可是实情呀。
岂敢岂敢:L
我对异步升频并没有全盘否定,否则就不会费力气加这个选项了。有机会试试各种玩法还是挺有意思的。 不错嘛,正在捣腾这玩意,一放狗,就回来了;P;P学习学习:0wa 看起来比官方Datasheet差一大截啊。继续努力。 不断探索的精神要顶:victory: 很好的技术帖子,
可惜AP不是人人都用得起啊:Q