2013-08-18 36 views
0

我有一个长度为12769的音频信号。我试图通过将它分解成1024个样本的小窗口来对其执行STFT。这给了我12个确切的窗口,而剩下481个点。由于我需要543(1024 - 481)更多的点来组成1024个样本,我使用下面的代码来填零。零填充MATLAB中的信号

f = [a zeros(1,542)]; 

其中a是音频文件。 但是我收到一个错误,说

???错误使用==> horzcat

CAT参数维度不一致。

我该如何克服这个问题?

回答

1

您的向量a是列向量,不能与行向量zeros(1,542)连接。改为使用zeros(542,1)。 然而,这是很容易只使用

f = a; 
f(1024*ceil(end/1024)) = 0; 

MATLAB将零垫矢量高达元件1024,它是独立于阵列为列或行的。

+0

当我使用你所提到 F中的代码添加额外的543零个样品=一个; f(1024)= 0; a的长度仍然相同,即12769.不应该改为13312. – user2482542

+0

应该是'f = a;''f(length(a)+542)​​= 0;'。更轻松?我不这么认为。更快?也许。难以阅读和理解?当然。 – horchler

+0

@ user2482542我改正了这一点。现在它将零垫填充到1024的下一个倍数。 –

-1

您可以使用

Total_Samples = length(a); 
for i=1 : Total_Samples-481 
    a_new[i] = a[i]; 

去除多余的481个样本或者您可以通过使用

Total_Samples = length(a); 
for i=Total_Samples+1 : Total_Samples+543 
    a[i] = 0 ; 
+0

好的。最后一行是否意味着剩下的543分加上了零?因为你没有提到任何有关零的信息,所以想知道 – user2482542

+0

对不起,我编辑了代码。现在它从第12770个样本中增加了543个零。因此,从12770到13312样品的样品是零点。 – user2693994

+0

好的。谢谢你:) – user2482542