您好我需要MATLAB的帮助。 我的wave文件使用以下代码:
x=wavread('D:\\Sample.wav');
现在我想用reshape
在MATLAB中增加/减少WAV文件的播放速度。例如,速度加倍。
让我来解释一下。 当我们使用这段代码时:
x=wavread('D:\\\Sample.wav');
现在x是Matrix 92086 * 1 现在我想为X的Decussate设置零像这样:
0
value1
0
value2
...
...
现在我该如何处理重塑?
之后,我需要将两个WAV文件合并为一个WAV文件。例如,我有两个文件:
x=wavread('D:\\Sample1.wav');
y=wavread('D:\\Sample2.wav');
需要合并这些并播放它。
答案 0 :(得分:2)
我认为您的意思是使用resample
而不是reshape
功能。 reshape
用于(好)重塑矩阵,即改变行数和列数。 resample
函数可用于更改信号的采样率。您可以使用它来增加/降低WAV文件的播放速度。 resample
的语法是:
y = resample(x,p,q);
其中x
是输入信号,p
是所需的采样率,q
是当前的采样率。然后输出y
为输入x
,重新采样为原始费率的p/q
倍。
现在我们怎样才能加快速度? - 如果我们设置p=2
和q=1
,我们会以采样率的两倍得到重采样信号,即我们有两倍的采样率。如果您使用相同的命令播放WAV,则信号需要两倍的播放时间,因此我们将播放速度除以2.
为了加快播放速度,我们必须反过来设置p=1
和q=2
:
x = wavread('D:\\Sample.wav');
y = resample(x,1,2);
-
根据编辑中的要求,当然可以添加零,例如在每隔一个位置改变采样率。请注意,这会产生高频噪声,通常通过FIR滤波消除。然而,程序非常简单:
x = x(:).'; % Make x a row vector
y = [x; zeros(1,numel(x))]; % add one zero between elements
y = y(:);
最后一行在这里发挥了作用:它采用y
的列并将它们堆叠在彼此之上。由于x
是一行,并且我们在其下方添加了一行零,因此生成的y
将包含x
的所有元素,其中值之间为零。
由于您特别想使用reshape
,我们可以使用重塑进行相同操作:
x = x(:).'; % Make x a row vector
y = [x; zeros(1,numel(x))]; % add one zero between elements
y = reshape(y,[],1);
-
要将两个WAV文件合并为一个,我们可以使用[...]
表示法或cat
函数简单地连接向量。
x = wavread('D:\\Sample1.wav');
y = wavread('D:\\Sample2.wav');
z = [x,y];
z = cat(2,x,y);