造一台软DAC
5932
99
[71 楼] laurel_lei
[老坛泡菜]
09-9-7 22:43
原文由 sc37 发表 所谓132DB是指在官方的DEMO板上测的指标,官方DEMO用的是有源IV,也就是用运放做的,IV用的是NE5534,差分转单端用的是LT1028,很有意思的搭配,SNR在这个电路上测的。 不是用无源IV,无源IV因为D/A内部保护电路的限制,输出电平太低。 [2009-09-07 23:01 补充如下] 对于电阻上的噪声,在给定条件下你可以计算一下,比如带宽20KHZ,电阻100欧,温度20度,波兹曼常数应该是1.38x10^-23。 我记得算热噪声只要知道这几项就可以了。 |
[70 楼] sc37
[泡菜]
09-9-7 22:34
DAC一般是电流输出的,加个电阻把电流转换成电压,电阻噪声相当可观。即使做出来132 dB的信噪比又有什么意义?
|
[69 楼] laurel_lei
[老坛泡菜]
09-9-7 22:24
原文由 sc37 发表 简单按120=20log10(Us/Un)算,正好是1uV,虽然比较难,但不一定做不到,目前SNR达到120dB或更高的D/A已经有好几款了,我用的PCM1794在MONO方式下,手册给的SNR是132dB,当时是最高的! 但实际RMAA之类的SNR应该是做FFT,并且对0-pi内每个频点噪声功率求和,作为总的噪声功率,信号用单点的信号功率。 |
[68 楼] sc37
[泡菜]
09-9-7 22:04
原文由 laurel_lei 发表 |
[67 楼] laurel_lei
[老坛泡菜]
09-9-7 19:58
为了DIY这个sDAC,添购了不少东西,这个AKG242HD耳机就是其中之一
此外,还DIY了一个山寨版的莱曼耳放,耳放机箱和PCB从淘宝上买的。 ![]() |
[66 楼] laurel_lei
[老坛泡菜]
09-9-7 19:53
感谢朋友们一起讨论,关注我的帖子,接下来我会不定期的再贴sDAC的设计原理和设计细节。
|
[65 楼] laurel_lei
[老坛泡菜]
09-9-7 19:49
原文由 sc37 发表 理论上可行,但实际操作上这个足够大的存储器要非常的大。另外还有受不了的延时。 |
[64 楼] laurel_lei
[老坛泡菜]
09-9-7 19:48
原文由 sc37 发表 关键问题不是可信不可信的问题,问题是如何测试,用什么仪器测试,测试环境是什么样的。117dB是PC音响爱好者在家用环境下对声卡的自环测试,软件是RMAA,D/A输出通过环回到A/D上,得到环路的信噪比,应该说这个指标还是很高的,假设测试的时候采样率为192KHZ,则信噪比可以表征在96KHZ带宽下的信噪比。 dB本来就是一个相比的结果,所以如果我都用RMAA,则对不同声卡自环的测试结果是有参考价值的。因为即使绝对精度不是很准,但是相对精度是准的。 |
[63 楼] laurel_lei
[老坛泡菜]
09-9-7 19:43
原文由 sc37 发表 运放的噪声用每HZ的噪声功率密度表示,信噪比都是在一定带宽条件下测试,数字系统的信噪比是在频率范围0-2pi范围内,都是有范围的。 |
[62 楼] laurel_lei
[老坛泡菜]
09-9-7 19:41
原文由 sc37 发表 JITTER的定义就是10HZ以上的变化 |
[61 楼] imareal
[泡菜]
09-9-7 13:05
原文由 sc37 发表 此法不可用于实时播放。如果Frd > Fwr,存储器空,音乐中断。如果Frd < Fwr,存储器满,无法读入,丢失音乐片段。 |
[60 楼] sc37
[泡菜]
09-9-7 06:49
原文由 laurel_lei 发表 |
[59 楼] sc37
[泡菜]
09-9-7 06:48
原文由 laurel_lei 发表 |
[58 楼] sc37
[泡菜]
09-9-7 06:45
原文由 laurel_lei 发表 |
[57 楼] sc37
[泡菜]
09-9-7 06:43
原文由 laurel_lei 发表 |
[56 楼] imareal
[泡菜]
09-9-7 00:53
原文由 laurel_lei 发表 你可能没有注意我说的Fs转换的工作原理,第二个时钟不是直接去采样第一个时钟域的数据,是从buffer中从容取出,计算时间上相应的值,作为第二个时钟域的数据,有几个时钟的延迟,没有建立/保持时间的问题。即使你在fpga中实现这种算法,也不难,只是现成的芯片很成熟了。 我说的不是FPGA的时序违规的情况,是太多的逻辑电路同时动作,尤其是FF,引起电源,地线的窜扰,也会影响模拟部分,EDA软件也无能为力。 [imareal 编辑于 2009-09-07 01:00] |
[55 楼] laurel_lei
[老坛泡菜]
09-9-6 22:34
原文由 triplex 发表 Cubic我不太了解,好像是图像处理中用的。不排除用在音频中也是可行的。 sDAC中也没有用线性插值,线性插值似乎在单片机中和控制上用的多些。 sDAC中插值用的是滤波器。 插值也是个比较好玩的东西,因为不同内插下方法下声音是略有区别的。 |
[54 楼] triplex
[资深泡菜]
09-9-6 22:21
原文由 laurel_lei 发表 如果不用线性插值,用别的方式插值效果如何? 比如用Cubic插值。 |
[53 楼] laurel_lei
[老坛泡菜]
09-9-6 20:49
原文由 sc37 发表 嘿嘿,你的想法不错,看看还能弄出什么花样来,用软件实现起来比硬件要方便的多。 sDAC在做硬件调试的时候,实现的第一个功能就是一个信号发生器。。。因为那个时候输入部分还没开始调试。只写了D/A一部分代码。 以后的以后,她才变成了一个DAC。。。 |
[52 楼] laurel_lei
[老坛泡菜]
09-9-6 20:42
原文由 imareal 发表 我也不是专业搞audio的,因此DAC上有我在的行业的一些烙印,没办法,每个领域都有自己的惯常思维习惯。 线性插值可以提高镜像频率的,但是用不同的插值方法,镜像频率的功率是不同的,举个最简单的例子,根据采样率理论,当我输出的信号是由脉冲构成时,带内的功率和带外每个镜像具有同样的功率,而实际上D/A是带保持的功能的,因此带外的功率按Sa函数的规律衰减,如果我用高的运算精度的FIR滤波器,则带外衰减可以超过100dB以上,这个很容易做到。 FPGA的设计中,对于代码风格有很严格的要求,为的就是使得FPGA不会出现一些不应该有的时序违规的情况,在FPGA的综合和布线后,还需要做STA(静态时序分析),通过这些仿真的手段来保证建立/保持时间满足设计要求,这些都是很成熟的东西。如果STA有负的slack,则系统会出现不稳定情况,在FPGA的逻辑设计中,这些slack必须修掉,这样系统不会有任何不稳定的情况。这是通过EDA软件来保证的。 异步数据则是FPGA中一个比较灾难性的问题,必须同步后才可用,否则就会出现建立/保持时间不满足引起的亚稳态,因为你用第二个时钟去采样第一个时钟域的数据的时候,是无法保证建立/保持时间的,由此带来一些比较麻烦的问题,一般这个异步是比较忌讳的东西。 sDAC为何时钟电路比较复杂?原因很简单,就是为了将本地时钟和输入时钟同步,避免这些亚稳态带来的问题。 [laurel_lei 编辑于 2009-09-06 20:44] |
[51 楼] laurel_lei
[老坛泡菜]
09-9-6 20:29
原文由 sc37 发表 假设在频域上噪声的带宽无限宽,则信噪比会无限低。所以信噪比一定是指在一定频带内的信噪比。 |
[50 楼] laurel_lei
[老坛泡菜]
09-9-6 20:28
原文由 sc37 发表 一般10HZ以下的时钟变化作为时钟漂移,时钟漂移的后果带来的是音调的变化,但实际上由于漂移非常小,最多才几十个PPM,因此耳朵听不出来,(盒式磁带的带速变化可以达到3%以上,耳朵可以听到音调变化) 10HZ以上作为JITTER,分确定性和非确定性两种,这里要降低的是非确定性的JITTER,因此用一个非常窄带宽的锁相环+FIFO可以保证在远端的相位噪声完全由本地时钟自身的性能决定。选择一个JITTER较低的本地时钟很重要。发烧友往往对晶振是几个PPM的指标比较关心,但实际上PPM和JITTER没有直接关系。 [laurel_lei 编辑于 2009-09-06 20:30] |
[49 楼] imareal
[泡菜]
09-9-6 15:25
原文由 laurel_lei 发表 我现在用玩家的眼光来看你的设计了,虽不是玩家,但也想看玩家玩。看样子我们是同行,但audio不是我的主业,很多东西我不太懂。我说的80DB不是结论,是经验之谈。 我总觉得即使是最简单的线性插值,也可以推高镜像频率。 另外一个FPGA中多个48bit的乘法器一起动做做一件事,按我的经验,简直是灾难,使得整个系统不稳定,甚至产生误差,频率低可能没事,高了就一团糟,取决于fpga本身的性能。从这个角度说,还是简单点好。 “对于异步采样率转换,实现上存在两个异频异相的时钟域,问题出在第一个时钟域向第二个时钟域传输数据的时候,会引起亚稳态等严重的问题,这个对于要求高的音频(普通语音传输可以容忍数据错误,但HIFI不可容忍)这个是完全不可接受的。如果我用FPGA去做异步采样率转换,那问题就更复杂。” 我不太明白第一个时钟域向第二个时钟域传输数据的时候,为什么会引起亚稳态等严重的问题。我所知道的这种芯片的原理是再取样,两个时钟域之间没有数据的直接传输。相当于第一个时钟域的数值送到D/A, 再送到A/D, 用第二个时钟再取样,没有数据错误的顾虑。当然不是真正的D/A, A/D, 没有模拟环节,全部数字化,第一个时钟域的数值送到buffer,再用第二个时钟重新计算与其相应的数值。这中间要用硬件插值滤波,有一套算法。就是为HIFI设计的,其转换精度绝对不比插值运算低(根本就是插值)。所以我认为与其用DDS去提取多种格式输入信号的时钟,不如只取它们的值,不管它们载体,使其适应自己的载体(载体指时钟频率说的)。 我真的不信发烧友能听出差别,一般仪器都测不出差别。从实际效果和硬件资源的占用,都很不错。如果是我,一定会这样搞。 当然想换个玩法,另当别论,DDS也很好玩。 [imareal 编辑于 2009-09-06 15:35] |
[48 楼] sc37
[泡菜]
09-9-6 14:50
通用硬件平台?很有意思啊?可以给那些发烧友产生一些斜坡信号练耳朵。
|
[47 楼] sc37
[泡菜]
09-9-6 14:36
原文由 laurel_lei 发表 如果没有加权,一个50欧电阻在音频带宽里的热噪声都有可能使117dB成为不可能。 |
[46 楼] sc37
[泡菜]
09-9-6 14:27
原文由 laurel_lei 发表 |
[45 楼] laurel_lei
[老坛泡菜]
09-9-6 14:01
imareal你说的:不过最好的设计,是最简单的设计,应该是每个设计师的座右铭。只是不适用于玩家。玩家玩的是趣味,兴奋的是探索。
这个很赞同,sDAC的最早的想法,就是想做一台和普通的DAC不同的东西,同时作为一个通用的硬件平台,可以实现其他硬件方式下不容易实现的一些功能。 [laurel_lei 编辑于 2009-09-06 14:02] |
[44 楼] laurel_lei
[老坛泡菜]
09-9-6 13:48
原文由 imareal 发表 看的出老兄应该是电子行业里做的。 你说的“引起问题不是与取样相干的频率,而是不相干的”没错,只是没听懂我的意思或者我没说清楚,在信噪比的计算中,因为真正的信噪比算起来比较麻烦,所以有时候用信噪谐波比SINAD来代替SNR,计算起来比较方便点,因为信号功率只计算一个点频,实际SINAD会比SNR略低,也就是说相关的谐波和不相关的噪声均作为噪声处理。 80dB的要求对多层板来说确实不高,这个板子是4层,如果要进一步提高,可以用6层,信号走内层。以前我做过高速数据采集的项目(多通道高速A/D采样),实测的SINAD可以推翻你的结论,当然,那个成本和这个没有可比性。 对于异步采样率转换,实现上存在两个异频异相的时钟域,问题出在第一个时钟域向第二个时钟域传输数据的时候,会引起亚稳态等严重的问题,这个对于要求高的音频(普通语音传输可以容忍数据错误,但HIFI不可容忍)这个是完全不可接受的。如果我用FPGA去做异步采样率转换,那问题就更复杂。 超采样和内插当然是不一样的,不过这里是个文字游戏,之前超采样我的理解仅限于CD机上标的多少X的超采样,搞了半天原来超采样就是行业里的过采样嘛,过采样的概念在A/D中用的比较多,在CD机上不过是个文字游戏。用在D/A上虽然没错,但是混淆视听,不是个专业名词。 CD机或者音响里的所谓超采样率的意思就是内插率,超采样同样不增加新的信息。可能你理解的内插就是线性插值或者sinx/x插值,但实际信号处理中,不是那么做的。内插是靠FIR滤波器实现的。内插不增加新的信息,而是为了把镜像频率推到更高的频率上,减小模拟低通滤波器的设计难度。2X和16X的计算误差没有直接关系,而有关系的是数据截断误差。sDAC数据处理精度是48bit。 采样率转换和没转换的效果,我只在别人的一块比较好的声卡上比较过(应该是非AC97的)进行转换可以点击一个按钮选择,在场的都认为没有进行转换的声音好些。你如果有条件的话也可以比较下。 [laurel_lei 编辑于 2009-09-06 13:48] |
[43 楼] imareal
[泡菜]
09-9-6 13:04
原文由 laurel_lei 发表 我说的80db是比较简单的测试,不很严格,总之给我的印象是数字部分的干扰很难避免。引起问题不是与取样相干的频率,而是不相干的。所以我觉得数字部分越简单越好。如果你有最后的结果,请公布一下,也让我有个新的概念。 16X的内插有多大意义?内插不能等于超采,因为没有新的信息,只是推算出来,只是平滑一点而已。如果为简化D/A后的滤波器考虑,2X就差不多了。16X引起的计算误差应该考虑,这么多数字电路一起动作,引起的电磁干扰得不偿失。只是我的疑问,没有仔细求证,提出商榷。 实际在数字电路中,异步意味着系统稳定性的下降,不错,但具体到你这个电路,我不同意这样说。用采样率转换后,全部系统只用一个频率,不需PLL,不需DDS, 又没有要和什么系统同步的数字输出,只是和输入不同步而已,应该是最稳定的。 玩声卡的都认为经过采样率转换的声音不如不转的,惭愧,我没有对比过,我只是看这类芯片的指标,也都是-117db(THD+N),想不出烧友怎样能感觉出来。 "再补充一下,DAC的D/A用的是PCM1794/1794,旁路了D/A内部的内插滤波器,用外部滤波器方式信噪比比内部滤波器略高,用FPGA做滤波器的最好玩的地方,在于可以随心所欲的调整滤波器的参数,不同参数下,声音是有点不同的。" --如果这么说,我就完全理解你搞这么复杂的设计的原因了,如果一开始就说,我就不会提出这么多疑问了。 [imareal 编辑于 2009-09-06 13:14] [2009-09-06 13:20 补充如下] 不过最好的设计,是最简单的设计,应该是每个设计师的座右铭。只是不适用于玩家。玩家玩的是趣味,兴奋的是探索。 等你的结果。 |
[42 楼] laurel_lei
[老坛泡菜]
09-9-6 11:50
原文由 imareal 发表 再补充一下,DAC的D/A用的是PCM1794/1794,旁路了D/A内部的内插滤波器,用外部滤波器方式信噪比比内部滤波器略高,用FPGA做滤波器的最好玩的地方,在于可以随心所欲的调整滤波器的参数,不同参数下,声音是有点不同的。 |