【发布时间】:2019-02-10 15:28:23
【问题描述】:
我正在使用 MATLAB 工具从音频 WAV 文件中提取静音部分。从音频中提取静音部分后,我想将新音频保存为 WAV 文件。 对于这个过程,我使用“audiowrite”功能。但是,程序会通过以下消息向我发出警告:
警告:写入文件时数据被剪切。
我尝试使用单个文件格式(32 位)添加“BitsPerSample”值,但我没有通过这种方式从程序中获取消息。我保存的音频文件是 32 位的,但 WAV 文件应该是 16 位的。
我该如何解决这个问题?
audiowrite(filename,y,fs,'BitsPerSample',32);
注意:我也标准化了数据,问题也是一样的。
感谢您的帮助!
更新:
我想将音频样本归一化为均值 0 和标准差或方差 1。因此,我使用 z-score 归一化技术。
此外,y/max(abs(y)) 方法是介于 -1 和 1 之间的归一化数据。但是,均值和方差分别不等于 0 和 1。这些技术是用不同方式标准化的数据。
实际上,我的问题是,如何在不裁剪数据的情况下使用 z 分数归一化技术保存样本?
【问题讨论】:
-
请分享您用于 z 归一化的代码。可能您超过 1 或 -1,因此数据被截断。您是否尝试将
native添加到您的 audioread 命令中? -
我知道超出了 -1 和 1 之间的范围。z 归一化代码是 y1=(y -mean(y))/(std(y)) 或 zscore(y)。如果我在 z 归一化后再次对数据进行归一化,数据将转换为 orjinal。因此,不需要使用 z 归一化。不,我没有。但是,'native' 参数会将双精度转换为整数。
-
您收到消息的原因以及您的数据被剪裁的原因是它超过了 1 和/或 -1。如果您不想这样,请添加此行
y1 = y1/max(abs(y1))并且最大值不会超过 1 或 -1。 -
谢谢!它工作得很好。虽然 z 归一化在默认设置下是介于 -1 和 +1 之间的归一化值,但在此过程中不起作用。
标签: matlab audio signal-processing normalization wav