35

我开始使用我的 Android 智能手机进行录音。

我成功地将录音保存到 PCM 文件中。当我解析数据并打印出带符号的 16 位值时,我可以创建如下图。但是,我不了解沿 y 轴的幅度值。

  1. 幅度值的单位究竟是什么?这些值是 16 位有符号的,因此它们的范围必须在 -32K 到 +32K 之间。但是这些值代表什么?分贝?

  2. 如果我使用 8 位值,那么值的范围必须是 -128 到 +128。这将如何映射到 16 位值的音量/“响度”?你会只使用 16 比 1 的量化映射吗?

  3. 为什么会有负值?我认为完全沉默会导致值为 0。

如果有人可以将我指向一个包含有关记录内容的信息的网站,我将不胜感激。我找到了有关 PCM 文件格式的网页,但没有找到数据值。

在此处输入图像描述

4

5 回答 5

24

想想麦克风的表面。当它静默时,表面在零位置处是静止的。当你说话时,这会导致你嘴周围的空气振动。振动类似于弹簧,并且在两个方向上都有运动,如前后、上下或进出。空气中的振动也会导致麦克风表面振动,就像上下移动一样。当它向下移动时,可能会测量或采样一个正值。当它向上移动时,可能会被采样为负值。(或者可能相反。)当你停止说话时,表面会回到零位。

您从 PCM 录音数据中获得的数字取决于系统的增益。对于常见的 16 位样本,范围是从 -32768 到 32767,以获得最大可能的振动偏移,可以在不失真、削波或溢出的情况下记录。通常增益设置得低一点,这样最大值就不会在失真的边缘。

添加:

8 位 PCM 音频通常是无符号数据类型,范围为 0..255,值为 128 表示“静音”。因此,您必须添加/减去此偏差,并缩放约 256 以在 8 位和 16 位音频 PCM 波形之间进行转换。

于 2011-05-04T23:44:32.583 回答
7

原始数字是用于将模拟音频信号转换为数字信号的量化过程的产物。将音频信号视为 0 附近的振动更有意义,延伸至 +1 和 -1 以实现信号的最大偏移。除此之外,你会得到削波,这会扭曲谐波并且听起来很糟糕。

但是,计算机在分数方面并不能很好地工作,因此使用从 0 到 65536 的离散整数来映射该范围。在大多数这样的应用中,+32767 被认为是麦克风或扬声器振膜的最大正偏移。采样点和声压级之间没有相关性,除非您开始考虑录音(或回放)电路的特性

(顺便说一句,16 位音频非常标准且被广泛使用。它很好地平衡了信噪比和动态范围。8 位是嘈杂的,除非您进行一些时髦的非标准缩放。)

于 2011-05-05T00:32:14.070 回答
3

这里有很多很好的答案,但它们并没有以易于阅读的方式直接解决您的问题。

幅度值的单位究竟是什么?这些值是 16 位有符号的,因此它们的范围必须在 -32K 到 +32K 之间。但是这些值代表什么?分贝?

这些值没有单位。它们只是表示来自模数转换器的数字。A/D 转换器的数字是麦克风和前置放大器特性的函数。

如果我使用 8 位值,那么值的范围必须是 -128 到 +128。这将如何映射到 16 位值的音量/“响度”?你会只使用 16 比 1 的量化映射吗?

我不明白这个问题。如果您正在录制 8 位音频,则您的值将是 8 位。您是否将 8 位音频转换为 16 位?

为什么会有负值?我认为完全沉默会导致值为 0

麦克风上的隔膜在两个方向上振动,因此会产生正电压和负电压。值 0 表示静音,因为它表示隔膜没有移动。了解麦克风的工作原理

有关如何以数字方式表示声音的更多详细信息,请参见此处

于 2011-05-11T01:02:51.027 回答
3
Why are there negative values? I would think that complete silence

将导致值为 0

麦克风上的隔膜在两个方向上振动,因此会产生正电压和负电压。值 0 表示静音,因为它表示隔膜没有移动。了解麦克风的工作原理

小说明:正在记录隔膜的位置。当没有振动,没有变化时,寂静发生位。因此,您所看到的振动是推动空气并随着时间的推移产生气压变化的原因。空气不再被推到任何振动的顶部和底部峰值,因此峰值出现在静音发生时。信号中最响亮的部分是位置变化最快的时候,也就是峰值中间的某个地方。隔膜从一个峰值移动到另一个峰值的速度决定了隔膜产生的压力量。当顶部和底部峰值减少到零(或它们共享的某个其他数字)时,则根本没有振动,也没有声音。此外,随着隔膜变慢,峰值之间的时间间隔更大,产生或记录的声压也更少。

我推荐Yamaha Sound Reinforcement Handbook进行更深入的阅读。理解微积分的概念也有助于理解音频和振动。

于 2011-08-26T17:36:35.963 回答
3

16 位数字是来自麦克风的 A/D 转换器值(您知道这一点)。还要知道麦克风和 A/D 转换器之间的放大器具有自动增益控制 (AGC)。AGC 将主动改变麦克风信号的放大率,以防止过多的电压冲击 A/D 转换器(通常 < 2Volts dc)。此外,还有直流电压去耦,可将输入信号设置在 A/D 转换器范围的中间(例如 1Volt dc)。

因此,当麦克风没有声音时,AGC 放大器向 A/D 转换器发送扁平线 1.0 伏直流信号。当声波撞击麦克风时,它会产生相应的交流电压波。AGC 放大器接收交流电压波,以 1.0 Vdc 为中心,并将其发送到 A/D 转换器。A/D 采样(以每秒 44,000 次/秒的速度测量直流电压),并输出电压的 +/-16 位值。所以 -65,536 = 0.0 Vdc 和 +65,536 = 2.0 Vdc。+100 = 1.00001529 Vdc 和 -100 = 0.99998474 Vdc 到达 A/D 转换器。

+值高于 1.0 Vdc,-值低于 1.0 Vdc。

请注意,大多数音频系统使用对数公式以对数方式弯曲音频波,因此人耳可以更好地听到它。在数字音频系统(带有 ADC)中,数字信号处理将这条曲线放在信号上。DSP 芯片是一项大生意,TI 已将它们用于各种应用,而不仅仅是音频处理。DSP 可以将非常复杂的数学运算处理成会阻塞 iPhone 的 ARM7 处理器的实时数据流。假设您正在向由 256 个超声波传感器/接收器组成的阵列发送 2MHz 脉冲——您明白了。

于 2014-04-11T14:01:09.613 回答