首页 > 解决方案 > 如何在 MATLAB 中做这个 Python 插值?

问题描述

我需要在 MATLAB 中转换这段 Python 代码,但我似乎无法弄清楚如何做到这一点。

蟒蛇循环

T = 1968,
F = 1025,
used_freq = 22050,
freqs = 1621 x 1 vector,
log_scale_spec = 1968 x 1025 matrix,
cent_spec was initialized with zeros = 1968 x 1621 matrix,
and the "linspace(0, used_freq, F)" operation gives a 1025 x 1 vector

插值似乎是三次方(k = 3)。

我只是不知道如何将所有这些构建为 MATLAB 中的 for 循环。到目前为止,我尝试过这样的事情:

matlab循环

f 代表操作“ linspace(0, used_freq, F)' ” 注意在Matlab中,它必须用 ' 转置。

我试图让它在 Matlab 中工作,我不确定如何做到这一点,可能在循环中缺少一些索引,或者可能需要转置一些向量/矩阵或这些的组合。

标签: pythonmatlabmatrixvectorinterpolation

解决方案


T = 1968,
F = 1025,
used_freq = 22050,

下面的行是错误的陈述。freqs的更高维度必须小于F。我可以补充一点,freqs必须包含索引,而不是频率。

freqs = 1621 x 1 vector - wrong
freqs = F< x 1 vector - right
log_scale_spec = T x F matrix,

您可以删除下面的行,因为 _cent_spec_ evals 在循环之外

cent_spec=zeros(T,F<)
f=linspace(0, used_freq, F);

for t=1:T
    Sp(:,t)=interp1(f,log_scale_spec(:,t),'cubic');
end
cent_spec=Sp(:,freqs);

推荐阅读