1

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

4

1 回答 1

1

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

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

正确缩放矢量。它和

a2 = audioplayer(int16(A),48000);
a2.play();
于 2013-03-18T15:35:15.060 回答