在matlab中使用audioplayer时,double和int16之间有什么不同

时间:2013-03-18 10:27:24

标签: matlab audio-player

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

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 像往常一样包含语音和位噪声(不是特殊类型,可能是因为麦克风等问题)。

1 个答案:

答案 0 :(得分:1)

在API上找到答案。根据{{​​3}},当输入为double类型时,接受介于-1和1之间的值。当我第一次在double类型中使用它时,它不会在-1和1之间正确缩放值,只是尝试播放它们。而不仅仅使用A的原始值,在播放之前缩放修复了问题。

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

正确缩放矢量。它和

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