2015-04-16 38 views
-1

您好,我需要MATLAB的帮助。 我的波形文件播放与此代码:在MATLAB中增加/减少WAV文件的播放速度

x=wavread('D:\\Sample.wav'); 

现在我想增加/与reshape减少WAV文件的播放速度在MATLAB。例如,加倍速度。

让我来解释一下。 时,我们使用此代码:

x=wavread('D:\\\Sample.wav'); 

现在x是一个矩阵92086 * 1 ,现在我想设置为零,十字交叉的X像这样:

0 
value1 
0 
value2 
... 
... 

现在我该怎么办呢惠特重塑

之后,我需要将两个WAV文件合并成一个WAV文件。例如我有两个文件:

x=wavread('D:\\Sample1.wav'); 
    y=wavread('D:\\Sample2.wav'); 

并需要合并这些并播放它。

回答

2

我假定你的意思是使用resample而不是reshape函数。 reshape用于(好..)重塑一个矩阵,即改变行数和列数。函数resample可用于更改信号的采样率。您可以使用它来增加/减少WAV文件的播放速度。的resample的语法是:

y = resample(x,p,q); 

其中x是输入信号,p是所需的采样率和q是当前采样率。输出y然后是输入x,以原始速率的p/q倍重采样。

现在我们该如何加倍速度? - 如果我们设置了p=2q=1,我们得到的采样率是采样率的两倍,即我们有两倍的采样率。如果使用相同命令播放WAV,则信号需要两倍的时间才能播放,所以我们将播放速度除以2.

要加倍播放速度,我们必须做相反的操作并设置p=1q=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); 
+0

给我一点时间来看看 –

+0

不,这是重塑蚂蚁不要重新取样 –

+0

我编辑我的问题 –