【问题标题】:what is the different between double and int16 while using audioplayer in matlab在matlab中使用audioplayer时double和int16有什么区别
【发布时间】:2013-03-18 10:27:24
【问题描述】:

我有一个向量保存音频数据,频率为 48k。数据由整数组成,最大值约为 4k。矢量类型是 。当我使用这种矢量类型构建播放器时,如下所示:

a1 = audioplayer(A,48000);
a1.play();

产生的音频噪音很大,比如 SNR 值小于 1(这意味着我的噪音量比我想听到的要高)。

但是,当我将数据转换为 int16 并播放声音时,如下所示:

a2 = audioplayer(int16(A),48000);
a2.play();

生成的音频非常流畅,SNR 为 7-8 左右(未测量或计算,几乎无法检测到噪音,但可以肯定。)

所以我的问题又来了:在 matlab 中使用 audioplayer 时,double 和 int16 有什么区别?

PS:如果你愿意,我可以提供 A

PS2:A像往常一样包含语音和一点噪音(不是特殊类型,可能是因为麦克风坏等)。

【问题讨论】:

  • 可能是因为 A 的值很大?浮点数不能代表所有的数字,值越大,一个可表示的数字与下一个数字的步长越大。不知道,只是在黑暗中拍摄。

标签: matlab audio-player


【解决方案1】:

在 API 上找到了答案。根据API for audioplayer,当输入为双精度类型时,接受 -1 和 1 之间的值。当我第一次以双精度类型使用它时,它没有在 -1 和 1 之间正确缩放值,只是尝试播放它们。不只是使用 A 的原始值,而是在播放前缩放解决了这个问题。

a3 = audioplayer(A/max(abs(A)),48000);
a3.play();

正确缩放矢量。它和它一样好

a2 = audioplayer(int16(A),48000);
a2.play();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 2012-12-20
    • 1970-01-01
    • 2018-09-12
    • 2016-03-11
    相关资源
    最近更新 更多