2013-03-18 66 views
1

我有一個向量保存音頻數據,頻率爲48k。數據由整數組成,最大值約爲4k。矢量類型是< 1x768000雙>。當我建立我的球員,就像下面這個載體類型:在matlab中使用audioplayer時double和int16有什麼區別

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

得到的音頻是非常嘈雜,像SNR值小於1(這意味着我噪音的量比我想聽到的東西更高)。

然而,當我投中的數據的Int16和播放聲音就像如下:

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

得到的音頻是非常順利和SNR就像是7-8或東西(不測量或計算,噪音勉強可以檢測到,但存在)

所以這裏是我的問題:double和int16在matlab中使用audioplayer時有什麼不同?

PS:如果您願意,我可以提供A

PS2:一個包含語音和噪音位(不是特殊類型,它可能是因爲麥克風壞等),像往常一樣。

+0

可能是因爲A值大嗎?浮點數不能表示所有數字,數值越高,表示數字與下一個數字之間的步長越大。不知道,只是在黑暗中拍攝而已。 – 2013-03-18 10:52:51

回答

1

找到API的答案。根據API for audioplayer當輸入爲雙精度型時,接受-1和1之間的值。當我第一次在double類型中使用它時,它不會在-1和1之間正確縮放值,只是試圖播放它們。不是隻使用A的原始值,而是在播放之前進行縮放來修復問題。

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

正確縮放矢量。它不如

a2 = audioplayer(int16(A),48000); 
a2.play(); 
相關問題