Циклы / программирование
17.02.2020
Здравствуйте, уважаемые коллеги! Вопрос чисто программистский. Есть алгоритм обработки сигнала написанный на delphy. Хочу его использовать в Matlab, т.к. в нем удобнее производить вс. последующюю обработку. Помогите адаптировать циклы для matlab т.к. опыта программирования на нем очень мало.
Кусок кода delphy
for i:= 0 to Np do begin
Ts:= n*i/f;
for j: = trunc(Ts*fs)+1 to Nd to begin
Td:=j/fs;
t:=Td-Ts;
if t>n/f then break
// далее идет построение графика сигнала x(t)
inc (sum);
end
end
end
end
Ответы
Фишка MATLAB - в использовании матричных и векторных операций. Кроме более читаемого кода они дают значительное повышение производительности. Старайтесь использовать векторизацию, а не циклы.
Этот код вычисляет синус 1001 значения в пределах от от 0 до 10:
Это - векторизованная версия того же кода:
Подробности в справке:
https://docs.exponenta.ru/matlab/matlab_prog/vectorization.html
https://docs.exponenta.ru/matlab/performance-and-memory.html
В Вашем примере, одни шаблоны цикла for, условия if заменяется на другие, соответсвующие синтаксису языка MatLab. Например,
заменяем на
Подробности см. в справке по циклам delphi и https://docs.exponenta.ru/matlab/ref/for.html