pig2man
发表于 2009-2-19 16:12:22
http://gael-varoquaux.info/computers/real-time/index.html
CPU和操作系统的jitter问题总算有人讨论了,请大家看看。
yasker
发表于 2009-2-19 17:46:42
和同事讨论了下,interrupt和声音的质量(hifi意义上而言)应该是没有关系的。
interrupt是一个事件通知,就声音的播放过程而言,声卡的FIFO满了或者空了,触发interrupt都是可能的。但是在声音的播放过程中,cpu的职责只是给fifio填数据。出现的问题最可能是fifo空了,cpu由于调度或者work load的问题,没有及时填上,导致声音出现短暂中断;但这个并不是我们讨论的声音质量问题。到声卡的fifo之后,数据才会和时间轴binding,成为数字信号;在数据到达fifo之前,数据跟时间轴是没有关系的。
所以只要cpu好好的填上了fifo,剩下的问题都是声卡的问题了……
然后很明显的是,在virtualization环境下的系统,尤其是windows xp,声音出问题的几率很大(指的是断断续续),也是由于work load加重,导致windows一般情况下的调度没法按时填上fifo导致的。
明天再找写声卡driver的同事聊聊,确定一下这个问题。比如,写fifo的格式,是否可能导致什么误差之类。至少现在看来,声卡之前是bit perfect的。
pig2man
发表于 2009-2-19 17:50:03
CPU应该是无法满足填充FIFO的时间精度要求吧。因为FIFO的数据就直接流去DAC了,这一块是声卡的时钟管,而填充这个事情是CPU做。
数据误差那是几乎不可能的。。
[ 本帖最后由 pig2man 于 2009-2-19 17:51 编辑 ]
yasker
发表于 2009-2-19 17:53:22
原帖由 pig2man 于 2009-2-19 17:50 发表 http://bbs.headphoneclub.com/images/common/back.gif
CPU应该是无法满足填充FIFO的时间精度要求吧。因为FIFO的数据就直接流去DAC了。。
没听懂……
FIFO里是纯数据,声卡在读,CPU在写。我说的是声卡最外面一个跟CPU有关的FIFO(软声卡不算,那个要CPU的介入)。
pig2man
发表于 2009-2-19 17:59:06
FIFO读出是DAC控制读的,写入是CPU控制写的,两边速度不一样就出问题了呗?是不是这个意思?FIFO也不是仙丹,不能阻断数据流,也不能消灭Jitter呀
这个东西CD转盘/解码的配置里也是一样的,为啥CD好,因为PC的转盘度数据出来的速度可以非常精确的控制。
而且CD/转盘可以共用时钟,电脑不能共用声卡的时钟呀。
办法是让DAC和电脑共享内存,然后把硬盘上的数据全部缓冲到内存里面。
[ 本帖最后由 pig2man 于 2009-2-19 18:14 编辑 ]
yasker
发表于 2009-2-19 18:15:09
原帖由 pig2man 于 2009-2-19 17:59 发表 http://bbs.headphoneclub.com/images/common/back.gif
FIFO读出是DAC控制读的,写入是CPU控制写的,两边速度不一样就出问题了呗?是不是这个意思?
哦,好像有点误解……
我的意思是,声卡之前,只要不出现FIFO空了导致声卡没东西处理出现声音断掉,其他的应该是不会造成声音质量区别的。
FIFO是不是直接读给DAC,我不确定……明天找个spec看看。
但声卡应该是以恒定速率或者不考虑时间的读取(要不然就是自己故意劣化音质了……),所以应该是只有两个结果:读到了,或者没读到。
读到了,加上时间轴,给DAC;没读到,得,您就听跳音吧。
这里应该没有质量区别。(当然,这里也是理想情况下的想法,不知道会不会有声卡犯糊涂,觉得:啊,我没读到,那我输出慢点好了……)
jitter的问题应该是出把信号在送给DAC时,加上的那个时间轴。FIFO之后,DAC之前怎么操作的,我还在查到spec……或者等明天问同事……
不过,如果是AC97之类的软声卡,播放的质量应该是和CPU有很大关系的。
最好的情况是FIFO之后就不依赖CPU了,那问题就都是声卡的;麻烦的是,CPU给你送数据,然后还得负责解码和周边工作……那high work load下的质量问题是肯定的……
yasker
发表于 2009-2-19 18:24:16
原帖由 pig2man 于 2009-2-19 17:59 发表 http://bbs.headphoneclub.com/images/common/back.gif
FIFO读出是DAC控制读的,写入是CPU控制写的,两边速度不一样就出问题了呗?是不是这个意思?FIFO也不是仙丹,不能阻断数据流,也不能消灭Jitter呀
这个东西CD转盘/解码的配置里也是一样的,为啥CD好,因为PC的转盘 ...
我是认为,在FIFO之前,有数据流,但是数据流是如何填充的,是没有关系的。
AD录进去的jitter,已经成了数据的一部分了,我想能够去掉或者削减的可能性似乎太小。
只是我觉得,PC系统的jitter,是从声卡开始的——因为声卡的晶振是用来提供时间数据的开端。之前的数据,没有时间的概念——除非你填充FIFO不足……
pig2man
发表于 2009-2-19 18:34:55
jitter录不进任何东西,AD的jitter都转化为失真了。
FIFO有时间的概念啊。可以搜索一下real time fifo就知道了,它不是储存数据用的,它的用处是pipeline罢了:)
基本上就是第一位空了以后它就signal给writer来填写,writer跟不上的话就有问题——不是说CPU快不快,而是系统能不能稳定地在1/44.1k秒内响应。
问题呢就是我们用的CPU/操作系统做不到这个程度。
[ 本帖最后由 pig2man 于 2009-2-19 18:38 编辑 ]
pig2man
发表于 2009-2-19 18:41:18
原帖由 yasker 于 2009-2-19 18:15 发表 http://bbs.headphoneclub.com/images/common/back.gif
哦,好像有点误解……
我的意思是,声卡之前,只要不出现FIFO空了导致声卡没东西处理出现声音断掉,其他的应该是不会造成声音质量区别的。
FIFO是不是直接读给DAC,我不确定……明天找个spec看看。
但声卡应该 ...
我们说的是简化的状况啊,实际情况还要向PCI/PCIE总线要求数据、CPU再响应中断,再给这个设备写。。。完蛋了。
至于DAC,可以是很复杂的设计,本身可能有缓存或者怎么样的anti-jitter的机关,不过他之前一般都是用一个fifo,就声卡而言。
[ 本帖最后由 pig2man 于 2009-2-19 18:42 编辑 ]
nadesicozhao
发表于 2009-2-19 18:57:14
mvw实验对了结果
pig2man和我的理解已经很接近了
好多人人还停留在数字初级阶段。。。
yasker
发表于 2009-2-19 18:59:14
原帖由 pig2man 于 2009-2-19 18:34 发表 http://bbs.headphoneclub.com/images/common/back.gif
jitter录不进任何东西,AD的jitter都转化为失真了。
FIFO有时间的概念啊。可以搜索一下real time fifo就知道了,它不是储存数据用的,它的用处是pipeline罢了:)
基本上就是第一位空了以后它就signal给writer来 ...
我先查查典型的fifo大小再说。如果对cpu的要求非常频繁的话,肯定会有性能换质量的tradeoff...
nadesicozhao
发表于 2009-2-19 19:03:56
mvw实验下不同的光驱吧
如果有好光驱的话对比普通的 差别太大了
好比高档转盘PK DVD机。。。
yasker
发表于 2009-2-19 19:09:14
话又说回来,如果fifo太小的话,加大fifo,是否能够得到隔离的效果内?
想法和 http://www.cndiyclub.com/c_read.php?tid=12722 最后那个接近了。
mvw
发表于 2009-2-19 20:15:12
原帖由 nadesicozhao 于 2009-2-19 19:03 发表 http://bbs.headphoneclub.com/images/common/back.gif
mvw实验下不同的光驱吧
如果有好光驱的话对比普通的 差别太大了
好比高档转盘PK DVD机。。。
我这只有笔记本光驱 汗 有钱了我一定得弄个外置的试试看~~~~ 笔记本内部光驱因为体积的原因 做工太省料了 42p还凑合 是松下的 43是lg的 更单薄……
nadesicozhao
发表于 2009-2-19 21:06:47
原帖由 mvw 于 2009-2-19 20:15 发表 http://www.headphoneclub.com/bbs/images/common/back.gif
我这只有笔记本光驱 汗 有钱了我一定得弄个外置的试试看~~~~ 笔记本内部光驱因为体积的原因 做工太省料了 42p还凑合 是松下的 43是lg的 更单薄……
对比过垃圾光驱抓轨和俺隔离牛供电的PP外置
差别不是一点点大
PP搞好了抓轨未必输D50的