【问题标题】:Digital microphone : I2S data output [closed]数字麦克风:I2S 数据输出 [关闭]
【发布时间】:2017-11-06 17:52:57
【问题描述】:

我一直在玩一些具有 I2S 接口的数字麦克风。我设法让它工作(带有小型 I2S mems 板的 Arduino 板)。至少,我认为我做到了。

在阅读 I2S 规范或麦克风数据表时,我似乎无法找到以下简单问题的答案; 1. 数字值代表什么? 2. 如何将数字值转换为 dbFS(然后是 dbSPL)?

SPH0645LM4H-B (Knowles) 麦克风似乎输出所有负值 (?)。我在某处读到你必须“减去中点”来消除大的直流偏移?! 另一方面,Invensense 的支持工程师向我解释说,ICS-43434 输出正值和负值,“代表相对于 +/- 满量程的信号幅度”。

我希望 I2S 成为标准;不就是这样吗……?

【问题讨论】:

  • 我投票决定将此问题作为离题结束,因为这是关于解释数据表(甚至没有提供),而不是从 SO 意义上进行编程。
  • 甚至不清楚这不是硬件问题。哦,还有:你有没有找到任何 ISO/IEEE/等。 I2S的标准? (提示:你不会,因为它不是标准。充其量是规范)
  • 这个问题是题外话,因为它不在适用于本网站的问题范围内,如What topics can I ask about here? 中定义的那样,另请参阅:What types of questions should I avoid asking? 您也许可以在 @ 上获得帮助987654323@,也许 Electrical Engineering。但是,请务必在发布之前阅读网站的主题页面

标签: microphone digital


【解决方案1】:

你必须保存数字化数据的每个样本,这个 24 位的字在转换为十进制时会给你一个电压。这个电压是你计算 RMS 值所需要的,然后再计算你的分贝声压级。

您使用哪个 arduino 板来使其工作?大多数 arduino 没有 I2S 通信,我认为 Arduiino Zero 和 MKR 是可用于任务的。如果您使用具有浮点、32 位处理器、DMA 等的 STM32 微控制器,您将获得更好的性能。

【讨论】:

  • 对于每个样本,ICS43434 以 4 字节 int32 数据类型返回一个 3 字节 int32(正或负)。那个额外的字节可以是任何东西,所以你必须忽略它。问题是您必须以这样一种方式忽略它,以免在使高字节合法化时弄乱两者的恭维值的意图。您必须查看 24 位中的最高位。您必须将该位的值复制到高字节中的所有位中。例如样本 = ((样本 & 0x800000) == 0)?样本&= 0x00FFFFFF:样本|= 0xFF000000;这是什么意思?它是声波形式中 +/-8,388,607 之间的一个数点。
  • I2S协议可以先MSBit或LSBit。在 MSBit 优先的情况下,32 位样本的最后 8 位要么为 0,要么为垃圾。在这两种情况下,您都应该能够右移样本值,并且 MSBit 值将由移位操作保持。在 LSBit 的情况下,您首先必须丢弃前 8 位,这就是您需要找出 data 的 MSBit 的值并确保设置或清除高位的地方正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多