[基础知识] 造一台软DAC

[复制链接] 查看: 188339|回复: 525

0

主题

0

好友

12

积分

注册会员 当前离线

Rank: 2

UID
176822
帖子
13
精华
0
经验
12 点
金钱
12 ¥
注册时间
2010-2-27
发表于 2010-11-6 23:39 | 显示全部楼层
如果是这样的话,音频CD数据是44.1K,16bit,2通道,即每秒的数据流量是44100频率×16比特×2通道=1411200bit/秒,一张碟子74分钟的数据量为74分钟×60秒×1411200bit/秒=6,265,728,000bit,考虑到绝大多数的普通晶振误差为30ppm,即每百万个脉冲有正反30个脉冲的误差,
则播放一张CD,最多有 6265,728,000/1000000*30=187,971个比特的误差,即23.496K字节的误差,也就是说,如果FIFO的容量为23.496K的两倍,则可保证在播放一张碟子的时候,不会给拉破或溢出。

那么,也就是说,如果能保证有64K的FIFO,则可完全将输入与输出时针隔离。那么使用4片32K的SRAM,即可完成该功能,流程为,开始播放后,先通过单片机控制,将SRAM的第1,第2片满载数据,然后FPGA开始向第1片SRAM读取数据,如果数据输入频率较高,当第一片SRAM中的数据被取完后,单片机已经将第3片SRAM写满,开始对第4片SRAM写入,则第4片SRAM可以看作是一个缓存的FIFO,容量为32K.如果输入频率较慢,当FPGA将第1片SRAM的数据取空后,单片机还没有将数据写满第3片SRAM,FPGA开始读取第2片SRAM的数据,我觉得,利用这种方式可能会比内建FIFO要更可靠,由于存取逻辑的简单,时序的抖动也会跟小。
    我把这设想提出来,是想跟大家讨论一下,这个方式是否有什么问题。技术是越讨论越明白,希望能得到大家的指点。要是可行的话,我也想抽点时间,弄块电路玩玩。

13

主题

1

好友

1406

积分

认证会员 当前离线

Rank: 4

UID
30337
帖子
1595
精华
0
经验
1406 点
金钱
1382 ¥
注册时间
2007-11-12

认证会员

发表于 2010-11-7 00:12 | 显示全部楼层
为何要4片呢?大容量的SRAM也不贵啊

32

主题

4

好友

1926

积分
     

侠之大者 当前离线

Rank: 6Rank: 6

UID
114497
帖子
1713
精华
0
经验
1926 点
金钱
1713 ¥
注册时间
2009-6-27
发表于 2010-11-7 11:42 | 显示全部楼层
你需要找个64K的FIFO。一般的SDRAM做这个还不行。可能需要一个双端口的SDRAM。

0

主题

0

好友

12

积分

注册会员 当前离线

Rank: 2

UID
176822
帖子
13
精华
0
经验
12 点
金钱
12 ¥
注册时间
2010-2-27
发表于 2010-11-7 15:04 | 显示全部楼层
64K的FIFO太贵了,查了一下64K的FIFO,IDT7208差不多200元一片。我用4片32K的SRAM就是想用FPGA做时序控制,把个SRAM的数据总线和地址隔离,一片SRAM在写的时候,可以读另一片SRAM的内容。搭出一个128K的FIFO,如果用62256的话,差不多20元就能搞定了,只是244有点多。不过刚查了一下,IDT的64K双口RAMIDT70V08也才70多。

现在困惑的是楼主为什么没有采用这种方案呢?这样,JITTER的误差将完全由板上的时针精度决定。可他仍然用锁相环与输入时针联动,是不是有什么其他的考虑。

另外,按照你的理论,电机的抖动不是造成JITTER的原因,可为什么刻录盘的不同会影响音质呢?理论上说,刻录盘上的数据只要不错,它们产生的抖动,都会随着转盘的数据读取,在伺服芯片解码这一级完全滤除。

24

主题

1

好友

211

积分

业余侠客 当前离线

Rank: 4

UID
251828
帖子
224
精华
0
经验
211 点
金钱
195 ¥
注册时间
2010-10-18
发表于 2010-11-7 21:30 | 显示全部楼层
占位学习,

32

主题

4

好友

1926

积分
     

侠之大者 当前离线

Rank: 6Rank: 6

UID
114497
帖子
1713
精华
0
经验
1926 点
金钱
1713 ¥
注册时间
2009-6-27
发表于 2010-11-7 23:06 | 显示全部楼层
呵呵,这个要问楼主了。
不过我猜是因为反应时间吧。
你按下暂停键,声音还要响近1秒时间啊。按下PLAY键,要近一秒后才有音乐出来。
这个时间你能忍受?
我有点接受不了。

至于用“锁相环与输入时针联动”看我在400楼的说明。

“刻录盘的不同会影响音质”。这个问题我还真的不知道。因为已经超过我的知识范围了。而且我也是一直只是听说。没有听过,没有好的系统可以比较。
如果有机会我真的想比较下。然后用仪器将SPDIF输出的数据比较下。看看数据是不是有差异。

不过我现在已经不关心CD系统了。还是在想办法搞硬盘播放器。
想办法做个好的DAC,来接我现在自己做的,在用的HDDPLAYER。
头像被屏蔽

34

主题

2

好友

3581

积分

禁止发言 当前离线

来自天堂的魔鬼

UID
7302
帖子
3515
精华
2
经验
3581 点
金钱
3467 ¥
注册时间
2006-1-18
发表于 2010-11-7 23:27 | 显示全部楼层
:
楼主之外我可能是第一个听过的人.

10

主题

0

好友

238

积分

业余侠客 当前离线

Rank: 4

UID
21804
帖子
1465
精华
0
经验
238 点
金钱
374 ¥
注册时间
2007-4-19
发表于 2010-11-8 00:15 | 显示全部楼层
软件的东西一窍不通!!!!!!!!!

96

主题

12

好友

3705

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
1077
帖子
3315
精华
6
经验
3705 点
金钱
2485 ¥
注册时间
2004-7-24

社区贡献

 楼主| 发表于 2010-11-10 20:52 | 显示全部楼层
407# laurel


想知道支持24BT 96K 输入及解码吗?
sion625 发表于 2010-11-2 22:20

当然支持啦

96

主题

12

好友

3705

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
1077
帖子
3315
精华
6
经验
3705 点
金钱
2485 ¥
注册时间
2004-7-24

社区贡献

 楼主| 发表于 2010-11-10 20:56 | 显示全部楼层
现在才发现此贴,来迟了!又见软硬件高人现身!!
一口气看完费了2个多小时。。。
不懂软件,瞎说点什么,希望楼主别介意!
基于某些音视频专用DSP做会不会简单些?比如PMD200好象也是基于早期MOTOLOLA的DSP56300 ...
Handak.Gong 发表于 2010-11-5 00:41

MOTO的那款已经是昨日黄花了,由于即使用DSP还是要FPGA辅助,因此就不如直接用FPGA,FPGA在此场合还有速度优势。

96

主题

12

好友

3705

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
1077
帖子
3315
精华
6
经验
3705 点
金钱
2485 ¥
注册时间
2004-7-24

社区贡献

 楼主| 发表于 2010-11-10 20:59 | 显示全部楼层
64K的FIFO太贵了,查了一下64K的FIFO,IDT7208差不多200元一片。我用4片32K的SRAM就是想用FPGA做时序控制,把个SRAM的数据总线和地址隔离,一片SRAM在写的时候,可以读另一片SRAM的内容。搭出一个128K的FIFO,如果用62 ...
szddd 发表于 2010-11-7 15:04

你说的这种叫乒乓操作,为何不用,原因很简单:1,异步系统;2,方案的合理性,一片FPGA就能搞定,为何外面还要另挂RAM

13

主题

1

好友

1406

积分

认证会员 当前离线

Rank: 4

UID
30337
帖子
1595
精华
0
经验
1406 点
金钱
1382 ¥
注册时间
2007-11-12

认证会员

发表于 2010-11-10 22:47 | 显示全部楼层
:
楼主之外我可能是第一个听过的人.
FUMAC 发表于 2010-11-7 23:27


既然听了,也不说说声音怎样呀???

0

主题

0

好友

12

积分

注册会员 当前离线

Rank: 2

UID
176822
帖子
13
精华
0
经验
12 点
金钱
12 ¥
注册时间
2010-2-27
发表于 2010-11-11 10:16 | 显示全部楼层
呵呵,楼主现身了,想问一下,不考虑系统合理性的问题,这个异步系统对音质有什么坏处吗?我觉得这样时针会更稳定些,可以跟外界的时针输入无关,但不知道还会有其他什么副作用,想找个人讨论下。充分考虑下这种方案的优缺点。就系统的响应延时问题,其实,如果缓存32K的FIFO,只需要0.3秒的延时。我觉得是可以接受的。

96

主题

12

好友

3705

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
1077
帖子
3315
精华
6
经验
3705 点
金钱
2485 ¥
注册时间
2004-7-24

社区贡献

 楼主| 发表于 2010-11-11 21:36 | 显示全部楼层
呵呵,楼主现身了,想问一下,不考虑系统合理性的问题,这个异步系统对音质有什么坏处吗?我觉得这样时针会更稳定些,可以跟外界的时针输入无关,但不知道还会有其他什么副作用,想找个人讨论下。充分考虑下这种方案 ...
szddd 发表于 2010-11-11 10:16

数据只有错误或者时钟误差抖动大才会影响音质。

32

主题

4

好友

1926

积分
     

侠之大者 当前离线

Rank: 6Rank: 6

UID
114497
帖子
1713
精华
0
经验
1926 点
金钱
1713 ¥
注册时间
2009-6-27
发表于 2010-11-12 11:15 | 显示全部楼层
刚才用我们公司的CD伺服电路实验了下。将主晶振由原来的8.4672M换成12Mhz。所有的频率都快了。包括44.1K、16.9344M、数据吐出率都按倍率增加。然后用IIS格式送到DAC(我们公司自己的,没有推向市场)中。可以正常做DA变化。只是原来1KHz的变成了1.417K。因为12/8.4672=1.417

这样一来在szddd 的基础上我有个想法。

主频率略微升高。这样保证输入数据量大于输出数据量。
可以先将1#2#RAM填满。在填满的时候控制CD转盘暂停(不是停止)。在1#RAM满了,开始向2#RAM写数据的时候按照标准速度去读1#RAM。1#空了的时候2#肯定已经写满。读2#的时候CD转盘向1#RAM灌数据,直到灌满。这个时候2#RAM肯定还么有读完。等到2#读完了开始读1#的时候,转盘向2#RAM写数据。

这个有点像以前的电子防陡DISKMAN。不过自己做的话设计的控制比较复杂。你要考虑数据衔接等问题。

0

主题

0

好友

-57

积分

纠纷待定组 当前离线

UID
117320
帖子
410
精华
0
经验
-57 点
金钱
143 ¥
注册时间
2009-7-10
发表于 2010-11-12 17:15 | 显示全部楼层
牛人真多啊

56

主题

3

好友

307

积分

业余侠客 当前离线

逍遥书生

Rank: 4

UID
100124
帖子
1752
精华
0
经验
307 点
金钱
582 ¥
注册时间
2009-4-28
发表于 2010-11-13 14:10 | 显示全部楼层
我是新手 好帖 收藏了

0

主题

0

好友

2

积分

注册会员 当前离线

Rank: 2

UID
241904
帖子
2
精华
0
经验
2 点
金钱
2 ¥
注册时间
2010-9-19
发表于 2010-11-21 18:13 | 显示全部楼层
占位学习

14

主题

0

好友

559

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
36640
帖子
740
精华
0
经验
559 点
金钱
548 ¥
注册时间
2008-3-4
发表于 2010-11-21 23:47 | 显示全部楼层
数据的可控,是声音的未来走向。。。。

62

主题

3

好友

356

积分
     

业余侠客 当前离线

Rank: 4

UID
247551
帖子
1447
精华
0
经验
356 点
金钱
300 ¥
注册时间
2010-10-7
发表于 2010-11-21 23:50 | 显示全部楼层
这个估计 得流行起来
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc.

返回顶部