搜索
bottom↓
回复: 20

如何从I2S音频数据提取频谱信息?

[复制链接]

出5入10汤圆

发表于 2022-8-10 14:45:59 | 显示全部楼层 |阅读模式
想做一个音频播放器,同时能显示频谱,不知道是否可以从I2S音频流中提取频谱数据?这样就不用AD采集,然后再进入fft运算;不知这样操作是否可行?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入37汤圆

发表于 2022-8-10 15:30:36 | 显示全部楼层
IIS的编解码过程一般都是硬件完成的,也就是你从音源设备设备把音频数据给IIS编码器,编码器编码后,通过IIS的数据线把打包的数据(好像没什么压缩,主要是用补码,但是帧率需要同步)解码成音频数据发给播放设备,然后直接DA出模拟信号,播放设备这边一般就是一个专用芯片,不会把中间的音频数据专门给你做计算用。

如果一定需要做的话,需要在播放设备这边做个单片机,用程序解析IIS协议,然后获取音频数据,直接把这个音频数据扔给FFT,分析出频谱,这个代价恐怕比你AD之后的代价还大。

https://blog.csdn.net/szm1234/article/details/117403840
这篇文章介绍了IIS的格式。

出0入442汤圆

发表于 2022-8-10 15:36:09 来自手机 | 显示全部楼层
下一页 发表于 2022-8-10 15:30
IIS的编解码过程一般都是硬件完成的,也就是你从音源设备设备把音频数据给IIS编码器,编码器编码后,通过II ...
(引用自2楼)


i2s还好了,直接出的就是pcm数据,直接fft/mfcc走起。pdm直出的才叫麻烦。

出0入37汤圆

发表于 2022-8-10 15:39:27 | 显示全部楼层
wye11083 发表于 2022-8-10 15:36
i2s还好了,直接出的就是pcm数据,直接fft/mfcc走起。pdm直出的才叫麻烦。
(引用自3楼)

就算简单,也需要有个单片机并联到IIS播放设备上去做解析,IIS播放芯片也不会给你一个数字接口。

出0入0汤圆

发表于 2022-8-10 16:26:20 | 显示全部楼层
wye11083 发表于 2022-8-10 15:36
i2s还好了,直接出的就是pcm数据,直接fft/mfcc走起。pdm直出的才叫麻烦。
(引用自3楼)

有幸在 ESP32 上试过接 PDM 的 MEMS Microphone, 那叫一个坑,说是硬件上支持 PDM, 但是个残废,分辨率只能到 16-bit
I2S 确实是获取音频波形数据比较友好的接口了

出5入10汤圆

 楼主| 发表于 2022-8-10 16:36:54 | 显示全部楼层
下一页 发表于 2022-8-10 15:39
就算简单,也需要有个单片机并联到IIS播放设备上去做解析,IIS播放芯片也不会给你一个数字接口。 ...
(引用自4楼)

平台是ESP32,I2S数据本身就是通过ESP32传输的,不需要去解析,可以直接获取I2S的音频流

出5入10汤圆

 楼主| 发表于 2022-8-10 16:38:22 | 显示全部楼层
wudicgi 发表于 2022-8-10 16:26
有幸在 ESP32 上试过接 PDM 的 MEMS Microphone, 那叫一个坑,说是硬件上支持 PDM, 但是个残废,分辨率只 ...
(引用自5楼)

您做过类似的吗?是直接从I2S获取1024个数据,然后送入FFT获取频谱吗?

出5入10汤圆

 楼主| 发表于 2022-8-10 16:55:42 | 显示全部楼层
wye11083 发表于 2022-8-10 15:36
i2s还好了,直接出的就是pcm数据,直接fft/mfcc走起。pdm直出的才叫麻烦。
(引用自3楼)

大佬,说下我的理解,您看看对不对哈;
歌曲信息:采样率44.1Khz,2通道,16位;
比如进行1024点 fft运算,连续从I2S音频获取1024*2(左右声道这里是否需要*2?)音频数据之后,送入FFT运算,得到的最小频谱就是44.1K/1024= 43Hz  最大频谱43*1024/2 = 22KHz,然后就可以根据需要展示频谱?

出0入0汤圆

发表于 2022-8-10 18:14:52 | 显示全部楼层
涵潇舒雅 发表于 2022-8-10 16:55
大佬,说下我的理解,您看看对不对哈;
歌曲信息:采样率44.1Khz,2通道,16位;
比如进行1024点 fft运算 ...
(引用自8楼)

需要频谱的话,如果音源是立体声的,一般你需要 I2S 获取到两个声道的数据后先给处理成单声道的吧

FFT 运算有一些参数需要考虑:
- FFT 点数多少
- FFT 的输入数据加什么窗
- FFT 的输入数据是否补 0 (补 0 可以提高频率分辨率,代价是 FFT 点数会加大)
- 每次运算滑动的点数是多少 (比如每次有 1024 点实际数据,可以每次向前滑动 256 个点,这样时间分辨率高一些)
- FFT 的结果怎么用 (比如是简单对复数取模,还是取模后再平方)

这些都会影响最终频谱的显示效果,看你需要了

出5入10汤圆

 楼主| 发表于 2022-8-10 18:42:11 | 显示全部楼层
wudicgi 发表于 2022-8-10 18:14
需要频谱的话,如果音源是立体声的,一般你需要 I2S 获取到两个声道的数据后先给处理成单声道的吧

FFT  ...
(引用自9楼)

比如512点的fft,实际需要读取512*2两个通道的PCM数据,然后将左右声道数据相加?进行FFT运算?

出0入0汤圆

发表于 2022-8-10 18:50:55 | 显示全部楼层
涵潇舒雅 发表于 2022-8-10 18:42
比如512点的fft,实际需要读取512*2两个通道的PCM数据,然后将左右声道数据相加?进行FFT运算? ...
(引用自10楼)

要是最简单的可以这么搞,注意数据类型,相加后别超出范围就行

出5入10汤圆

 楼主| 发表于 2022-8-10 18:54:46 | 显示全部楼层
wudicgi 发表于 2022-8-10 18:50
要是最简单的可以这么搞,注意数据类型,相加后别超出范围就行
(引用自11楼)

那看来是可行的,后面验证下看看,有问题再请教,感谢您的回复

出0入442汤圆

发表于 2022-8-10 21:48:30 来自手机 | 显示全部楼层
涵潇舒雅 发表于 2022-8-10 16:55
大佬,说下我的理解,您看看对不对哈;
歌曲信息:采样率44.1Khz,2通道,16位;
比如进行1024点 fft运算 ...

(引用自8楼)

可以看你的点数。如果只是像カラオケ一样只需要显示20根棍子,那你做40点fft就足够了。1024点计算量可不小。

出0入442汤圆

发表于 2022-8-10 21:52:49 来自手机 | 显示全部楼层
wudicgi 发表于 2022-8-10 16:26
有幸在 ESP32 上试过接 PDM 的 MEMS Microphone, 那叫一个坑,说是硬件上支持 PDM, 但是个残废,分辨率只 ...
(引用自5楼)

pdm精度本身就不算多高啊。16bit说实话在mems mic上足够了吧。这玩意本来就不是录音棚用的,也就能听个响,音质不用期待。之前用网上找的一段pdm解码代码评估过电容mic(国产音频adc输出的pdm),感觉效果一般,比窗口累加效果没好多少。真的,绝大多数音频adc输出有效位数也就只有16bit,而且有效位数大多也只保证到12bit左右。

出0入0汤圆

发表于 2022-8-10 23:23:18 | 显示全部楼层
wye11083 发表于 2022-8-10 21:52
pdm精度本身就不算多高啊。16bit说实话在mems mic上足够了吧。这玩意本来就不是录音棚用的,也就能听个响 ...
(引用自14楼)

我主要是为了 AGC, 如果用 I2S 的 MEMS Microphone, 最大音量时能有 20bit 那我就可以拿多出来的 4 个 bit 做个 AGC 了 (我的应用场景只要能适应较宽的响度范围就可以)

不过那个电路最后是用 ESP32 的 12-bit ADC + 前置硬件 AGC 电路了,这样 MEMS Microphone 的可选型号一下子就多了,I2S 的也比较贵

出0入0汤圆

发表于 2022-8-10 23:30:14 来自手机 | 显示全部楼层
前置硬件agc,自己用管子搭的么?

出0入0汤圆

发表于 2022-8-10 23:50:52 | 显示全部楼层
cay 发表于 2022-8-10 23:30
前置硬件agc,自己用管子搭的么?
(引用自16楼)

基于这个电路改来的
https://www.electroschematics.com/automatic-gain-control-agc/

JFET 需要挑选合适的,反正某商城上卖的 JFET 在我这电路里只有一款合适用

出5入10汤圆

 楼主| 发表于 2022-8-11 09:03:54 | 显示全部楼层
wye11083 发表于 2022-8-10 21:48
可以看你的点数。如果只是像カラオケ一样只需要显示20根棍子,那你做40点fft就足够了。1024点计算量可不 ...
(引用自13楼)

如果做40点的fft,44.1K采样率的话,最小频率岂不是1Khz?这样人声是不是几乎没了?

出0入442汤圆

发表于 2022-8-11 10:07:55 来自手机 | 显示全部楼层
涵潇舒雅 发表于 2022-8-11 09:03
如果做40点的fft,44.1K采样率的话,最小频率岂不是1Khz?这样人声是不是几乎没了? ...
(引用自18楼)

所以要看你的需求,最小分辨率,etc。要是需要对数显示,那么你就有可能得做多点计算然后累加。

出0入37汤圆

发表于 2022-8-11 10:24:11 | 显示全部楼层
涵潇舒雅 发表于 2022-8-10 16:55
大佬,说下我的理解,您看看对不对哈;
歌曲信息:采样率44.1Khz,2通道,16位;
比如进行1024点 fft运算 ...
(引用自8楼)

抢答一个啊,最高采样率44k,按照采样定理,频率分辨率最高22khz,
你做了1024个点的采样,因为折叠效应,有效是1024/2+1,一共513个频点,其中第一个是0hz也就是直流分量,最后一个是22khz,一共512个频率间隔,也就是频率分辨率是22k/512hz,第一个点0hz,第二个点22k/512hz,第三个点2*22k/512hz以此类推,第513个点是512*22k/512hz,正好是22k这个点。

出0入0汤圆

发表于 2022-8-11 11:06:35 | 显示全部楼层
wudicgi 发表于 2022-8-10 23:50
基于这个电路改来的
https://www.electroschematics.com/automatic-gain-control-agc/

(引用自17楼)

这个不错啊,改天做一块板子试试看效果如何。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-14 19:58

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表