我有一个矢量保存音频数据,频率为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 像往常一样包含语音和位噪声(不是特殊类型,可能是因为麦克风等问题)。
答案 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();