• Регистрация
Alex325
Alex325 0.00
н/д

Циклы / программирование

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

Теги

      17.02.2020

      Ответы

      • kurguz
        kurguz+270.00
        17.02.2020 14:16

        Фишка MATLAB - в использовании матричных и векторных операций. Кроме более читаемого кода они дают значительное повышение производительности. Старайтесь использовать векторизацию, а не циклы.

        Этот код вычисляет синус 1001 значения в пределах от от 0 до 10:

        i = 0;
        for t = 0:0.01:10
            i = i + 1;
            y(i) = sin(t);
        end

        Это - векторизованная версия того же кода:

        t = 0:.01:10; 
        y = sin(t);

        Подробности в справке:

        https://docs.exponenta.ru/matlab/matlab_prog/vectorization.html

        https://docs.exponenta.ru/matlab/performance-and-memory.html

        • DmitryExp
          DmitryExp+224.94
          25.02.2020 13:04

          В Вашем примере, одни шаблоны цикла for, условия if заменяется на другие, соответсвующие синтаксису языка MatLab. Например,

          for i:= 0 to Np do begin ... end

          заменяем на

          for i = 0 : Np ... end

          Подробности см. в справке по циклам delphi и https://docs.exponenta.ru/matlab/ref/for.html