как сделать эту Python-интерполяцию в MATLAB? - PullRequest
0 голосов
/ 01 ноября 2018

Мне нужно преобразовать этот кусок кода Python в MATLAB, но я не могу понять, как это сделать.

петлевая петля

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).

Я просто не знаю, как все это структурировать как цикл for в MATLAB. Я пробовал что-то подобное до сих пор:

цикл Matlab

f представляет операцию "linspace (0, used_freq, F) '" Обратите внимание, что в Matlab его нужно перенести с помощью '.

Я пытаюсь заставить его работать в Matlab, я не уверен, как это сделать, возможно, либо пропущено какое-то индексирование в цикле, либо, может быть, необходимо транспонировать некоторые векторы / матрицы или их комбинацию.

1 Ответ

0 голосов
/ 01 ноября 2018
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_ выходит за пределы цикла

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...