簡體   English   中英

Matlab .wav規范化

[英]Matlab .wav normalization

我目前正在一個項目中,在該項目中,我使用聲音計記錄聲音,然后以.wav格式導出結果文件。

之后,我使用audioread函數將.wav文件導入到MATLAB 我意識到數據在-1和1(默認選項)之間被標准化。 這意味着每個不同的文件都使用各自的極值歸一化了。 如果是這樣的話,如何從.wav文件中獲取非規范化數據,以便可以比較兩個不同文件的頻譜幅度? 我只需要一個振幅隨時間變化的文件(以dB,伏特為單位)。

第一個問題的答案是 ,數據正在通過audioread功能進行標准化。 使用audioread功能時,應指定輸出數據類型。 數據類型有兩個選項:

  1. double :雙精度歸一化樣本( 默認 )。
  2. native :在文件中找到的本機數據類型的樣本。

您使用的默認選項是第一個為您提供標准化樣本的選項。 如您所見,如果dataTypenative ,則輸出可以是下表所示的幾種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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM