Matlab wav归一化

Matlab wav归一化,matlab,audio,import,wav,normalize,Matlab,Audio,Import,Wav,Normalize,我目前在一个项目中工作,我使用声音计记录声音,然后以.wav格式导出结果文件 之后,我使用audioread函数将.wav文件导入MATLAB。我意识到数据是在-1和1之间规范化的(默认选项)。这意味着每个不同的文件使用各自的极值进行规范化? 如果这是真的,我怎样才能从.wav文件中获得非标准化数据,这样我就可以在振幅方面比较两个不同文件的频谱? 我需要的正是一个振幅(dB、伏特等)随时间变化的文件。第一个问题的答案是是,数据正通过音频读取功能进行标准化。 使用audioread功能时,应指定输

我目前在一个项目中工作,我使用声音计记录声音,然后以
.wav
格式导出结果文件

之后,我使用
audioread
函数将
.wav
文件导入
MATLAB
。我意识到数据是在-1和1之间规范化的(默认选项)。这意味着每个不同的文件使用各自的极值进行规范化? 如果这是真的,我怎样才能从
.wav
文件中获得非标准化数据,这样我就可以在振幅方面比较两个不同文件的频谱?
我需要的正是一个振幅(dB、伏特等)随时间变化的文件。

第一个问题的答案是,数据正通过
音频读取功能进行标准化。
使用
audioread
功能时,应指定输出数据类型。数据类型有两个选项:

  • 双精度:双精度标准化样本(默认值
  • native:在文件中找到的本机数据类型中的示例
  • 您正在使用的默认选项是第一个提供标准化样本的选项。如您所见,如果
    数据类型
    本机
    ,则输出可以是下表所示的几种
    MATLAB
    数据类型之一,具体取决于输入文件的文件格式和
    BitsPerSample

    因此,您需要更改数据类型以获得不同的结果。您可以尝试以下形式的函数用法:

    [y,Fs] = audioread(filename,'native');
    
    此外,您还可以调用
    audioinfo
    来确定文件的
    BitsPerSample


    另一个更适合
    .wav
    音频格式的选项是使用指定数据类型的函数。但是,它将在将来从
    MATLAB
    中删除。

    如果您想比较两个具有不同位深度的文件,那么最好的做法是允许MATLAB对音频进行规范化


    例如,0 dBFS正弦波的最大峰值为32767(16位有符号),最大峰值为127(8位有符号)。通过标准化,它们都将转换为+1.0(1.0=0 dBFS)。如果没有标准化,只需考虑两个信号在时域中的样子。与16位相比,8位信号将非常小。事实上,这将是8位或48分贝下来

    谢谢你的回答!这不就是正常化的间隔吗??我的意思是,如果两个文件使用不同的参考值进行规范化,我无法将它们的振幅与[-11]或[-32767 32768]间隔进行比较。@pragal如果使用本机选项,则不会进行规范化。@NKN,这些文件是在WAV文件中规范化的还是在读取/导入过程中规范化的?好的,我想我明白了。谢谢但为了结束所有的疑问:我比较了两种不同的录音,但它们的分辨率相同(16位)。我可以用audioread将它们导入Matlab,尽管如此,它们的振幅是可比的?是的,振幅是可比的。两个文件的缩放方式完全相同。@jaket,是否有一种约定,无论在何处进行标准化,都可以进行相同的比较?例如,导入了两个不同的WAV文件?@Vass我不知道是否有约定,但我可以告诉你我一直以来的做法。我将文件中的样本加载到一个32位整数中,数据左对齐,然后转换为浮点。e、 g.
    int intSample=shortSample