首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将32位浮点PCM转换为无符号8位后的噪声

将32位浮点PCM转换为无符号8位后的噪声
EN

Stack Overflow用户
提问于 2014-08-18 02:16:12
回答 2查看 1.1K关注 0票数 2

我试图将浮点PCM音频流转换为8位,并获得了可接受的结果,但它得到了一些噪音。这是应该发生的,还是我的功能不够充分?转换为带符号的16位要好得多。有没有可能得到没有噪声的8位流?

代码语言:javascript
复制
def float32_to_unsigned8(pcm_data_f32):
    pcm_u8 = b''
    for c in chunks(pcm_data_f32, 4):
        f32 = struct.unpack('f', c)[0]
        u8 = int(f32 * 127 + 128)
        if u8 > 255:
            u8 = 255
        if u8 < 0:
            u8 = 0
        pcm_u8 += struct.pack('B', u8)
    return pcm_u8
EN

回答 2

Stack Overflow用户

发布于 2014-08-18 09:23:30

噪音是预期的结果。8位信号的最大信噪比为48dB。在减少位数时,通常的做法是应用抖动,以消除一些更令人反感的伪像。抖动将量化误差随时间扩展为宽带噪声。

http://en.wikipedia.org/wiki/Dither

票数 2
EN

Stack Overflow用户

发布于 2014-08-18 03:51:36

正如Oli所说,如果您的目标是将每个样本的信息负载从32位降低到8位,则噪声是交易的一部分,因为您故意丢弃每个样本的信息。但是,如果这不是您的意图,并且您希望将您的32位浮点PCM向下转换为8位,以便保留每个样本的完整信息负载,您可以选择将每个32位浮点输出为四个独立的8位字节,而不是上述算法中的一个。这不会引入任何噪音,因为您将保持完整的信息负载。如果这是您的意图,请让我们知道,我们/我可以建议一个替代算法,该算法基本上是一系列带有掩码的位移位。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25352195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档