[音源] 改善jitter的有效方法----I2S FIFO

[复制链接] 查看: 56413|回复: 132

8

主题

0

好友

203

积分

业余侠客 当前离线

Rank: 4

UID
94615
帖子
264
精华
0
经验
203 点
金钱
193 ¥
注册时间
2009-4-7
发表于 2010-10-26 16:27 | 显示全部楼层
Jitter制造出数字音频信号失真究竟对听感影响有多大,一直众说纷纭,恰好最近工作比较闲,有时间做下实验。
   在网上查阅了不少关于解决Jitter的资料,普遍使用二次锁相环、ASRC、FPGA做I2S FIFO等方法,前两种方法手头没有现成器件,但公司的FPGA/CPLD开发板不少,所以采用第三种方法。
   CD机Jitter的产生主要来源于CD数据读取机构,包括机械读取装置和读取装置的时钟源(PLL),机械读取装置被大家公认是Jitter的主要来源,读取装置的时钟源很多是经过外部时钟 PLL倍频后提供,PLL本身是一个动态调节过程,难免也会造成时钟抖动。
   实验器材用的普通光驱,拆除光驱内部33.8688M 晶体,使用TCXO输入CPLD,然后CPLD完成时钟分配,分别输出到光驱、FIFO输出时钟触发、DAC,然后在CPLD内部构建一个FIFO,由于转盘时钟与FIFO输出时钟同源,所以这个FIFO可以很小,也不会导致FIFO欠载或者过载,通过监测FIFO欠载和过载指示信号,也证明了上述理论推断。
   DAC使用的TDA1541,放音使用耳机+耳放,通过一IO控制CPLD将数据直通输出或者通过FIFO输出,都能听到声音的明显改善,主要在于声音层次感和解析力的提高,所以Jitter对音质的影响不容小视,有条件的朋友可以自己去做实验,只要转盘不是连数据都读错,应该都能获得很大提升。当然CPLD和DAC也会有自身的Jitter,但这已是很小的一部分,也是目前无法回避和解决的。

下面是系统简图:
cpldfifo.jpg

4

主题

0

好友

446

积分
     

业余侠客 当前离线

Rank: 4

UID
90324
帖子
1079
精华
0
经验
446 点
金钱
444 ¥
注册时间
2009-3-22
发表于 2010-10-26 16:50 | 显示全部楼层
有实验环境吗?

100

主题

1

好友

5541

积分

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
223435
帖子
10236
精华
0
经验
5541 点
金钱
5490 ¥
注册时间
2010-7-25
发表于 2010-10-26 16:55 | 显示全部楼层
对时钟抖动真的有效吗

8

主题

0

好友

203

积分

业余侠客 当前离线

Rank: 4

UID
94615
帖子
264
精华
0
经验
203 点
金钱
193 ¥
注册时间
2009-4-7
 楼主| 发表于 2010-10-26 17:15 | 显示全部楼层
有实验环境吗?
riverli 发表于 2010-10-26 16:50



我这没仪器测量时钟相位噪声,只能通过示波器观察时钟的边沿抖动,技术指标上只能定性的去判断。
但使用fifo前后声音差别还是能分辨出来。

32

主题

0

好友

525

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
4771
帖子
429
精华
0
经验
525 点
金钱
196 ¥
注册时间
2005-6-28
发表于 2010-10-26 17:59 | 显示全部楼层
关注,是一个不错的想法。请再多一些详细的介绍,以及你的试验电路、照片。谢谢!

56

主题

12

好友

6086

积分
     

青铜剑侠 当前离线

小熊猫

Rank: 8Rank: 8

UID
59487
帖子
7494
精华
0
经验
6086 点
金钱
5743 ¥
注册时间
2008-10-20
发表于 2010-10-26 19:49 | 显示全部楼层
围观各种解释。

我就问楼主一句, 谁告诉你2nd PLL 和ASYNC SRC是I2S FIFO的?还“普遍使用”!!
2nd PLL是为了保证时钟的长期稳定性,这个最接近将时钟统一的,也是专业机自带word clock input的原因。
ASRC是为了对数据重新采样,虽然他也带FIFO,但是他的输出数据是根据新时钟采样的,原有数据因抖动产生的误差依然被包含在新数据里。

CPLD带来的端口抖动,最小也有300ps ,FPGA 则更大。


将整系统抖动降至700fs-10ps之内,并不是很复杂的事情,关键是注意时钟的统一,楼主你思考方向是对的,但是使用的方式却错了。

8

主题

0

好友

203

积分

业余侠客 当前离线

Rank: 4

UID
94615
帖子
264
精华
0
经验
203 点
金钱
193 ¥
注册时间
2009-4-7
 楼主| 发表于 2010-10-26 20:37 | 显示全部楼层
围观各种解释。

我就问楼主一句, 谁告诉你2nd PLL 和ASYNC SRC是I2S FIFO的?还“普遍使用”!!
2nd PLL是为了保证时钟的长期稳定性,这个最接近将时钟统一的,也是专业机自带word clock input的原因。
ASRC是 ...
卡西利亚斯 发表于 2010-10-26 19:49



“我就问楼主一句, 谁告诉你2nd PLL 和ASYNC SRC是I2S FIFO的?还“普遍使用”!!”
2nd PLL 和ASYNC SRC和I2S FIFO是三种方式,在我的帖子里是并列关系,中间有顿号隔开,不是“2nd PLL 和ASYNC SRC是I2S FIFO的......”,看贴仔细点。

“CPLD带来的端口抖动,最小也有300ps ,FPGA 则更大。”这个你有可靠资料依据吗?

“将整系统抖动降至700fs-10ps之内,并不是很复杂的事情” 你有具备可操作性的系统方案吗?

56

主题

12

好友

6086

积分
     

青铜剑侠 当前离线

小熊猫

Rank: 8Rank: 8

UID
59487
帖子
7494
精华
0
经验
6086 点
金钱
5743 ¥
注册时间
2008-10-20
发表于 2010-10-26 21:25 | 显示全部楼层
“普遍使用二次锁相环、ASRC、FPGA做I2S FIFO等方法”

顿号(、)是中文中特有的标点,表示并列的词或词组之间的停顿。
“FPGA做I2S FIFO ”这个是词组么? 我认为"FPGA做I2S FIFO"和"FPGA做I2S FIFO"是不一样的。


“CPLD带来的端口抖动,最小也有300ps ,FPGA 则更大。”
只使用驱动器,不使用DLL,PLL的FPGA,每通过一个增加30-50ps,你不会只认为一个CPLD只用驱动器吧。
4.JPG


“将整系统抖动降至700fs-10ps之内,并不是很复杂的事情”
国内国外均有厂使用该方案,国内的某厂的或许差些,但是至少是<10ps的。

56

主题

12

好友

6086

积分
     

青铜剑侠 当前离线

小熊猫

Rank: 8Rank: 8

UID
59487
帖子
7494
精华
0
经验
6086 点
金钱
5743 ¥
注册时间
2008-10-20
发表于 2010-10-26 21:39 | 显示全部楼层
DIR9001就可以提供小于100ps的抖动。

现在的高端示波器都可以分析信号的,测不了相噪的话,不妨把你的I2S信号眼图和DIR9001的眼图贴出来看看。

56

主题

12

好友

6086

积分
     

青铜剑侠 当前离线

小熊猫

Rank: 8Rank: 8

UID
59487
帖子
7494
精华
0
经验
6086 点
金钱
5743 ¥
注册时间
2008-10-20
发表于 2010-10-26 22:14 | 显示全部楼层

CPLD我也在用,但是我的DA只有14bit , 相对16+ bit的要求低很多,既然满足要求我就不去弄了。

8

主题

0

好友

203

积分

业余侠客 当前离线

Rank: 4

UID
94615
帖子
264
精华
0
经验
203 点
金钱
193 ¥
注册时间
2009-4-7
 楼主| 发表于 2010-10-26 23:19 | 显示全部楼层
“普遍使用二次锁相环、ASRC、FPGA做I2S FIFO等方法”

顿号(、)是中文中特有的标点,表示并列的词或词组之间的停顿。
“FPGA做I2S FIFO ”这个是词组么? 我认为"FPGA做I2S FIFO"和"FPGA做的I2S FIFO"是不一样 ...
卡西利亚斯 发表于 2010-10-26 21:25


对于顿号的理解偏差没什么好说的,汉语个人都有不同的表达和理解方法。

从你帖的手册上看FPGA的抖动小于50PS,通常情况下CPLD会更低,信号通道包含多个逻辑单元的确会累积时钟抖动,但在I2S输出CPLD前,用同步时钟信号对I2S信号锁存然后再输出,完成消除前期累积的时钟抖动,这是数字逻辑电路设计的基础。

我没有DIR9001接收电路,何况DIR9001的时钟输出抖动还和SPDIF信源有关。

这个I2S FIFO我会继续完善下去,有时争论能促进交流,欢迎赐教。

56

主题

12

好友

6086

积分
     

青铜剑侠 当前离线

小熊猫

Rank: 8Rank: 8

UID
59487
帖子
7494
精华
0
经验
6086 点
金钱
5743 ¥
注册时间
2008-10-20
发表于 2010-10-26 23:23 | 显示全部楼层
从你帖的手册上看FPGA的抖动小于50PS,通常情况下CPLD会更低,信号通道包含多个逻辑单元的确会累积时钟抖动,但在I2S输出CPLD前,用同步时钟信号对I2S信号锁存然后再输出,完成消除前期累积的时钟抖动,这是数字逻辑电路设计的基础。


这就是问题,既然是数字逻辑电路设计的基础,为什么你不懂?

56

主题

12

好友

6086

积分
     

青铜剑侠 当前离线

小熊猫

Rank: 8Rank: 8

UID
59487
帖子
7494
精华
0
经验
6086 点
金钱
5743 ¥
注册时间
2008-10-20
发表于 2010-10-26 23:28 | 显示全部楼层
我觉得你很有技术,不妨就和你侃多几句。(原句 我觉得你有点技术,不妨就和你侃多几句。因故修改)

既然你和时钟可以让源和终端同步,那么用源CD机的DSP芯片FIFO即可,信号到了终端DAC机,只需要做一次锁存就可以了,也就是说只需要对齐1个bit就可以了。完全可以用一个4040和几个74完成,没有必要把FIFO和CPLD搬出来。

96

主题

12

好友

3704

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
1077
帖子
3314
精华
6
经验
3704 点
金钱
2484 ¥
注册时间
2004-7-24

社区贡献

发表于 2010-10-26 23:30 | 显示全部楼层
围观各种解释。

我就问楼主一句, 谁告诉你2nd PLL 和ASYNC SRC是I2S FIFO的?还“普遍使用”!!
2nd PLL是为了保证时钟的长期稳定性,这个最接近将时钟统一的,也是专业机自带word clock input的原因。
ASRC是 ...
卡西利亚斯 发表于 2010-10-26 19:49

所谓300PS的抖动纯属扯淡

13

主题

1

好友

1395

积分

认证会员 当前离线

Rank: 4

UID
30337
帖子
1584
精华
0
经验
1395 点
金钱
1371 ¥
注册时间
2007-11-12

认证会员

发表于 2010-10-26 23:32 | 显示全部楼层
不是很理解,这个FIFO能有多大的作用???
既然,你的整个系统只有一个时钟,那这个时钟就应该是干净的。
如果,LZ你觉得I2S的信号有抖动,那你用系统时钟信号对I2S信号锁存然后再输出,就可以完成消除前期累积的时钟抖动啦?
你的FIFO还可以做啥?

56

主题

12

好友

6086

积分
     

青铜剑侠 当前离线

小熊猫

Rank: 8Rank: 8

UID
59487
帖子
7494
精华
0
经验
6086 点
金钱
5743 ¥
注册时间
2008-10-20
发表于 2010-10-26 23:37 | 显示全部楼层
现在你一个CPLD既完成分频,又要完成串到并,并到串,触发时序这么多事情的处理,其实也就是为了尽量减少数据的周期抖动。事实上只有LRCK的周期抖动才是最关键的,但是因为他还是由SCK分频得来,所以MCK生成器的性能和分频器的性能决定LRCK的相位噪音,而BCK只是为了读取数据,所以他有很大让步可以做。
按照你的做法,通过FIFO同步输入输出,肯定不会出现FIFO欠载或者过载的情况,所以我才说用一个锁存就可以了,这才是基础。

96

主题

12

好友

3704

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
1077
帖子
3314
精华
6
经验
3704 点
金钱
2484 ¥
注册时间
2004-7-24

社区贡献

发表于 2010-10-26 23:37 | 显示全部楼层
DIR9001就可以提供小于100ps的抖动。

现在的高端示波器都可以分析信号的,测不了相噪的话,不妨把你的I2S信号眼图和DIR9001的眼图贴出来看看。
卡西利亚斯 发表于 2010-10-26 21:39

眼图不是用来测这种信号的

56

主题

12

好友

6086

积分
     

青铜剑侠 当前离线

小熊猫

Rank: 8Rank: 8

UID
59487
帖子
7494
精华
0
经验
6086 点
金钱
5743 ¥
注册时间
2008-10-20
发表于 2010-10-26 23:39 | 显示全部楼层
眼图不是用来测这种信号的
laurel 发表于 2010-10-26 23:37


他又测不了相噪,你还有什么其他的办法么?

56

主题

12

好友

6086

积分
     

青铜剑侠 当前离线

小熊猫

Rank: 8Rank: 8

UID
59487
帖子
7494
精华
0
经验
6086 点
金钱
5743 ¥
注册时间
2008-10-20
发表于 2010-10-26 23:42 | 显示全部楼层
如果我没记错,你的SDAC里,DPLL也是使用FIFO做鉴相器的,这个才是正确做法,对于同步的信号,我觉得完全没有必要动用FIFO的。

326

主题

3

好友

8192

积分
     

贵宾 当前离线

辉记DIY

Rank: 3Rank: 3

UID
6311
帖子
13401
精华
3
经验
8192 点
金钱
6427 ¥
注册时间
2005-11-12

社区贡献 论坛贵宾

发表于 2010-10-26 23:49 | 显示全部楼层
最近风比较大
所以jitter好象也比较大
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc.

返回顶部