.wav文件的量化

时间:2014-09-04 03:43:46

标签: matlab

我正在尝试使用Matlab将16位.wav文件量化为较低的比特率。我已经使用 wavread()打开了文件,但我不确定如何从这里开始。我知道我需要以某种方式" round"每个样本值为(例如)一个7位数。以下是阅读文件的代码:

[file,rate,bits] = wavread('smb.wav');

文件是包含每个样本值的1列矩阵。我可以循环遍历该矩阵中的每个项目:

for i=1 : length(file)
   % not sure what to put here..
end

你能指出我正确的方向来量化数据吗?

1 个答案:

答案 0 :(得分:2)

如果您有int16数据,从-32768到+32767不等,可以像

一样简单
new_data = int8(old_data./2^8);

这甚至不需要for循环。

对于缩放的双打,它将是

new_data = int8(old_data.*2^7);

wavread文档表明您甚至可以以该格式检索数据,以便开始:

[file,rate,bits] = wavread('smb.wav','int8');

编辑:更改比特率:

在重新阅读问题之后,我意识到你还提到了较低的比特率,这意味着降低采样率,而不是数据的量化。如果是这种情况,您应该查看下采样,抽取和/或重新采样的文档。它们都内置在MATLAB函数中,可以改变比特率。

downsample(file,2)
例如,

将是比特率的一半。