我有一个长度为12769的音频信号。我试图通过将它分解成1024个样本的小窗口来对其执行STFT。这给了我12个确切的窗口,而剩下481个点。由于我需要543(1024 - 481)更多的点来组成1024个样本,我使用下面的代码来填零。零填充MATLAB中的信号
f = [a zeros(1,542)];
其中a
是音频文件。 但是我收到一个错误,说
???错误使用==> horzcat
CAT参数维度不一致。
我该如何克服这个问题?
我有一个长度为12769的音频信号。我试图通过将它分解成1024个样本的小窗口来对其执行STFT。这给了我12个确切的窗口,而剩下481个点。由于我需要543(1024 - 481)更多的点来组成1024个样本,我使用下面的代码来填零。零填充MATLAB中的信号
f = [a zeros(1,542)];
其中a
是音频文件。 但是我收到一个错误,说
???错误使用==> horzcat
CAT参数维度不一致。
我该如何克服这个问题?
您的向量a
是列向量,不能与行向量zeros(1,542)
连接。改为使用zeros(542,1)
。 然而,这是很容易只使用
f = a;
f(1024*ceil(end/1024)) = 0;
MATLAB将零垫矢量高达元件1024,它是独立于阵列为列或行的。
您可以使用
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 ;
好的。最后一行是否意味着剩下的543分加上了零?因为你没有提到任何有关零的信息,所以想知道 – user2482542
对不起,我编辑了代码。现在它从第12770个样本中增加了543个零。因此,从12770到13312样品的样品是零点。 – user2693994
好的。谢谢你:) – user2482542
当我使用你所提到 F中的代码添加额外的543零个样品=一个; f(1024)= 0; a的长度仍然相同,即12769.不应该改为13312. – user2482542
应该是'f = a;''f(length(a)+542)= 0;'。更轻松?我不这么认为。更快?也许。难以阅读和理解?当然。 – horchler
@ user2482542我改正了这一点。现在它将零垫填充到1024的下一个倍数。 –