[英]Matlab .wav normalization
我目前正在一個項目中,在該項目中,我使用聲音計記錄聲音,然后以.wav
格式導出結果文件。
之后,我使用audioread
函數將.wav
文件導入到MATLAB
。 我意識到數據在-1和1(默認選項)之間被標准化。 這意味着每個不同的文件都使用各自的極值歸一化了。 如果是這樣的話,如何從.wav
文件中獲取非規范化數據,以便可以比較兩個不同文件的頻譜幅度? 我只需要一個振幅隨時間變化的文件(以dB,伏特為單位)。
第一個問題的答案是“是” ,數據正在通過audioread
功能進行標准化。 使用audioread
功能時,應指定輸出數據類型。 數據類型有兩個選項:
您使用的默認選項是第一個為您提供標准化樣本的選項。 如您所見,如果dataType
是native
,則輸出可以是下表所示的幾種MATLAB
數據類型之一,具體取決於文件格式和輸入文件的BitsPerSample
值。
因此,您需要更改數據類型以獲得不同的結果。 您可以嘗試以下形式的函數用法:
[y,Fs] = audioread(filename,'native');
此外,您可以撥打audioinfo
確定BitsPerSample
文件的價值。
另一個更適合.wav
音頻格式的選項是再次使用wavread函數和指定的數據類型。 但是,將來它將從MATLAB
中刪除。
如果要比較兩個具有不同位深度的文件,則最好的做法是允許matlab對音頻進行規范化。
例如,0 dBFS正弦波的最大峰值為16位帶符號的32767和8位符號的127。 通過歸一化,它們都將轉換為+1.0(1.0 = 0 dBFS)。 如果不進行標准化,只需考慮兩個信號在時域中的樣子。 與16位相比,8位信號將很小。 實際上,它會降低8位或48dB!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.