[基础知识] IIS音频怎么控制输出信号相位

[复制链接] 查看: 9151|回复: 32

228

主题

1

好友

2761

积分

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
803005
帖子
3312
精华
0
经验
2761 点
金钱
2388 ¥
注册时间
2015-10-29
发表于 2021-8-20 11:58 | 显示全部楼层
本帖最后由 592657820 于 2021-8-20 12:05 编辑

现在的新芯片都有mono模式可以设置,很方便,但是一些老芯片就不行了,只能在DA芯片之前用数字电路对iis做处理,像手头的怀念cd机,就是过fpga后,每声道各两个1702或1704做推挽输出,这样的效果要怎么做?将左声道数据复制一份,覆盖掉右声道数据,然后反相么?

1704是24bit芯片,两个1704各负责同一声道的正负半周,是否可以处理32bit的数据?

QQ截图20210820115249.png

127

主题

0

好友

1万

积分
     

版主 当前离线

脑放进行时

Rank: 7Rank: 7Rank: 7

UID
3986
帖子
18060
精华
2
经验
17391 点
金钱
15128 ¥
注册时间
2005-4-20

社区贡献 优秀设计 论坛版主

发表于 2021-8-20 12:03 来自手机端 | 显示全部楼层
可用CPLD做数据颠倒VHDL编程翻翻书也不难

47

主题

14

好友

5413

积分

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
816790
帖子
5285
精华
0
经验
5413 点
金钱
5249 ¥
注册时间
2016-7-8
发表于 2021-8-20 12:06 | 显示全部楼层
本帖最后由 konrad 于 2021-8-20 12:14 编辑

不用,直接一个非门接在数据信号上,出来的值只少1个LSB。我做的1865就是这么干的

看2楼
http://bbs.hifidiy.net/forum.php?mod=viewthread&tid=1336930

因为1865本身不带反向控制输出,好在其是双核,要实现全平衡输出只能改变输入数据。这里使用一个非门芯片直接对数据取反然后输入到另一个核,正确的取负值即取补码应该在取反后还要加一,但这对于串行的数据工作量非常大。直接使用非门(74HCT1G04)虽然简单粗暴,但却十分有效。

228

主题

1

好友

2761

积分

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
803005
帖子
3312
精华
0
经验
2761 点
金钱
2388 ¥
注册时间
2015-10-29
 楼主| 发表于 2021-8-20 12:07 | 显示全部楼层
xmlhifi 发表于 2021-8-20 12:03
可用CPLD做数据颠倒VHDL编程翻翻书也不难

是的,确实是打算用Verilog编程实现,只是不理解iis音频data数据里怎么控制相位,思路上卡了壳

47

主题

14

好友

5413

积分

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
816790
帖子
5285
精华
0
经验
5413 点
金钱
5249 ¥
注册时间
2016-7-8
发表于 2021-8-20 12:21 | 显示全部楼层
还有1704本身有反相,处理32bit不可能的,24到32差8位呢,你知道什么概念吗,256倍

228

主题

1

好友

2761

积分

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
803005
帖子
3312
精华
0
经验
2761 点
金钱
2388 ¥
注册时间
2015-10-29
 楼主| 发表于 2021-8-20 12:38 | 显示全部楼层
konrad 发表于 2021-8-20 12:21
还有1704本身有反相,处理32bit不可能的,24到32差8位呢,你知道什么概念吗,256倍

不能老是依赖芯片,遇到芯片不支持的还是得干瞪眼了。

理论上需要256个24bit并联才能达到32bit么?

228

主题

1

好友

2761

积分

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
803005
帖子
3312
精华
0
经验
2761 点
金钱
2388 ¥
注册时间
2015-10-29
 楼主| 发表于 2021-8-20 12:40 | 显示全部楼层
konrad 发表于 2021-8-20 12:06
不用,直接一个非门接在数据信号上,出来的值只少1个LSB。我做的1865就是这么干的

看2楼

确实简单,看来改变数字信号相位就能改变模拟输出的相位了,但是为什么要加1呢?纠错码么?

47

主题

14

好友

5413

积分

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
816790
帖子
5285
精华
0
经验
5413 点
金钱
5249 ¥
注册时间
2016-7-8
发表于 2021-8-20 12:57 | 显示全部楼层
本帖最后由 konrad 于 2021-8-20 12:58 编辑
592657820 发表于 2021-8-20 12:40
确实简单,看来改变数字信号相位就能改变模拟输出的相位了,但是为什么要加1呢?纠错码么?


NOT和NEG的差别就是:NOT 00000001 = 11111110,NEG 00000001 = 11111111。
一个把1变成-2,一个把1变成-1,-2加一才能变成-1
计算机里面所有的运算都是在做加法

3

主题

0

好友

265

积分
     

业余侠客 当前离线

Rank: 4

UID
248901
帖子
238
精华
0
经验
265 点
金钱
238 ¥
注册时间
2010-10-10
发表于 2021-8-20 17:54 | 显示全部楼层
本帖最后由 ljpwed 于 2021-8-20 18:09 编辑

楼上 的说的反相和相位是不是理解错了,DAC的反相只是把上下波形调换,这个就类似用运放 进行反向放大一样。但是是相位就是完全 不一样的东西,说声波相位实际 上就是说左右声道的相位,简单来说就是一个正弦波,输出 的时候 左右声道 的波形关系,正常来说一个标准正弦波文件(立体声),左右声道 是完全 重合的,也就是说一个采样 数据 内的左右数据 是可以说完全 一样的。左右相位如果相差太大,就会影响声音定位。  楼主想要把一个立体声的IIS变成 两个单声道IIS,只要把一个采样 内的左右数据分成两个采样 就可以了(一个声道 的数据复制变成 一个64bit),然后单独输出两个DATA,当然输出的时候 要控制两个DATA完全 同时(LRCK相位一致,数据也是和LRCK一致),如果你熟悉FPGA/CPLD这种东西相当 简单的

228

主题

1

好友

2761

积分

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
803005
帖子
3312
精华
0
经验
2761 点
金钱
2388 ¥
注册时间
2015-10-29
 楼主| 发表于 2021-8-20 19:48 | 显示全部楼层
konrad 发表于 2021-8-20 12:57
NOT和NEG的差别就是:NOT 00000001 = 11111110,NEG 00000001 = 11111111。
一个把1变成-2,一个把1变 ...

差不多明白了,MSB开始后面每一位就是一个二进制数字,其他地方也讲二进制正负数转换是取反+1,

但是你直接用非门没有+1岂不是要误码?
比如    +5:0101   
          -5:1010+1 = 1011

如果不加1,数据就变成1010,第一位为符号码,后面010才是真实数据,而010转为十进制是2,加上符号码就是-2,这样的话出来的波形不是就失真了么?

228

主题

1

好友

2761

积分

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
803005
帖子
3312
精华
0
经验
2761 点
金钱
2388 ¥
注册时间
2015-10-29
 楼主| 发表于 2021-8-20 20:05 | 显示全部楼层
本帖最后由 592657820 于 2021-8-20 20:14 编辑
ljpwed 发表于 2021-8-20 17:54
楼上 的说的反相和相位是不是理解错了,DAC的反相只是把上下波形调换,这个就类似用运放 进行反向放大一样 ...


大概意思是理解对了但是没有完全对,楼上说的是数字音频中将二进制数做正负转换,DAC输出时就能得到和原信号相位差正好180°的模拟信号,然后把这个反相信号放在另一个声道处,原本的老旧双声道DAC或者两个单声道DAC芯片就可以输出平衡信号了。

至于你说的左右声道时间差,串行传输的确有这个问题,网上也有人根据时差和声速,算出左右声道经空气传到到双耳大约会有9cm的距离差,不清楚这个距离差能带来多大的听感影响,也许真的会对高频的成像造成一些影响,但我还没有听过并行传输dac的声音,所以没办法下定论,如果有理论大神能做更深入的数学计算就好了。

要消除这个时间差也好办,做一级fifo缓冲并延时,然后同时输出给左右声道两个不同的DAC即可,有机会尝试一下

47

主题

14

好友

5413

积分

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
816790
帖子
5285
精华
0
经验
5413 点
金钱
5249 ¥
注册时间
2016-7-8
发表于 2021-8-20 20:08 | 显示全部楼层
本帖最后由 konrad 于 2021-8-20 20:10 编辑
592657820 发表于 2021-8-20 19:48
差不多明白了,MSB开始后面每一位就是一个二进制数字,其他地方也讲二进制正负数转换是取反+1,

但是 ...


比如20位,只偏移了1个LSB,按标准3V最大输出峰值偏移了百万分之一就是3uV。两个运放间的输入误差电压都比这个大。16位DAC的话稍微大点,偏了6万分之一,约50uV

3

主题

0

好友

265

积分
     

业余侠客 当前离线

Rank: 4

UID
248901
帖子
238
精华
0
经验
265 点
金钱
238 ¥
注册时间
2010-10-10
发表于 2021-8-20 20:14 | 显示全部楼层
592657820 发表于 2021-8-20 20:05
大概意思是理解对了但是没有完全对,楼上说的是数字音频中将二进制数做正负转换,DAC输出时就能得到和 ...

左右通过 反相,反转180度这种做法是完全 没必要 的。如果你只是想调整左右的相位,那就是通过 左右之间的输出延时是可达到。但是数字输出左右相位不一致那就是有问题的信号。我不觉得这样做有什么好处,还是只是单独为特定机器做的

3

主题

0

好友

265

积分
     

业余侠客 当前离线

Rank: 4

UID
248901
帖子
238
精华
0
经验
265 点
金钱
238 ¥
注册时间
2010-10-10
发表于 2021-8-20 20:16 | 显示全部楼层
konrad 发表于 2021-8-20 20:08
比如20位,只偏移了1个LSB,按标准3V最大输出峰值偏移了百万分之一就是3uV。两个运放间的输入误差电压 ...

补码,只是正负数字转换,这玩意 ,说真的对模拟输出 一点卵用都 没有。补码在硬件代码 层无非就是用来方便观察电平高低

3

主题

0

好友

265

积分
     

业余侠客 当前离线

Rank: 4

UID
248901
帖子
238
精华
0
经验
265 点
金钱
238 ¥
注册时间
2010-10-10
发表于 2021-8-20 20:18 | 显示全部楼层
592657820 发表于 2021-8-20 20:05
大概意思是理解对了但是没有完全对,楼上说的是数字音频中将二进制数做正负转换,DAC输出时就能得到和 ...


不用两个DAC也可以,就看你怎么处理数据。反正 你真是很熟悉FPGA/CPLD,都 很简单的

228

主题

1

好友

2761

积分

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
803005
帖子
3312
精华
0
经验
2761 点
金钱
2388 ¥
注册时间
2015-10-29
 楼主| 发表于 2021-8-20 20:19 | 显示全部楼层
本帖最后由 592657820 于 2021-8-20 20:23 编辑
ljpwed 发表于 2021-8-20 20:14
左右通过 反相,反转180度这种做法是完全 没必要 的。如果你只是想调整左右的相位,那就是通过 左右之间 ...


可以得到差分输出信号呀,你不可能不懂单端信号和差分信号的区别,以前的16bit老DAC芯片都没有差分输出,不像现在的现代DAC芯片

228

主题

1

好友

2761

积分

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
803005
帖子
3312
精华
0
经验
2761 点
金钱
2388 ¥
注册时间
2015-10-29
 楼主| 发表于 2021-8-20 20:22 | 显示全部楼层
ljpwed 发表于 2021-8-20 20:18
不用两个DAC也可以,就看你怎么处理数据。反正 你真是很熟悉FPGA/CPLD,都 很简单的

并不熟悉,目前只是初学者水平,还在学习中

3

主题

0

好友

265

积分
     

业余侠客 当前离线

Rank: 4

UID
248901
帖子
238
精华
0
经验
265 点
金钱
238 ¥
注册时间
2010-10-10
发表于 2021-8-20 20:22 | 显示全部楼层
592657820 发表于 2021-8-20 20:19
可以得到差分输出信号呀,你不可能不懂单端信号和差分信号的区别吧,以前的16bit老DAC芯片都没有差分输出 ...


差分单端用运放 转换就可以了,你这种用DAC进行这种操作,给我的感觉 就是脱裤放屁

47

主题

14

好友

5413

积分

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
816790
帖子
5285
精华
0
经验
5413 点
金钱
5249 ¥
注册时间
2016-7-8
发表于 2021-8-20 20:26 | 显示全部楼层
ljpwed 发表于 2021-8-20 20:16
补码,只是正负数字转换,这玩意 ,说真的对模拟输出 一点卵用都 没有。补码在硬件代码 层无非就是用来方 ...

楼主觉得很多老芯片没这个功能,不好怎么实现,不想太复杂只能近似

3

主题

0

好友

265

积分
     

业余侠客 当前离线

Rank: 4

UID
248901
帖子
238
精华
0
经验
265 点
金钱
238 ¥
注册时间
2010-10-10
发表于 2021-8-20 20:27 | 显示全部楼层
本帖最后由 ljpwed 于 2021-8-20 20:28 编辑
592657820 发表于 2021-8-20 20:19
可以得到差分输出信号呀,你不可能不懂单端信号和差分信号的区别,以前的16bit老DAC芯片都没有差分输出 ...


一个DAC如果没有差分输出,如果你用两个声道 输出 ,那如果左右声道 本身 就是参数 不一致的,最后的结果就是差分信号 并不是一个完整信号 ,而只是一个复合起来的信号 ,运放 就不一样了,这里我就不说了。当然了如果你对性能参数 要求 不是很严格 ,那确实 是没什么问题,按楼上 的大佬说的对数据 进行补码就可以。不能用延时的方法,不同的采样 要想反转180度,延时是不一样的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc.

返回顶部