Реализуйте эти функции, используя Matlab

У меня есть массив сэмплов ЭКГ сигналов 1250х1 с двойным, давайте назовем его "а". Мне нужно реализовать 4 функции, которые представляют функции, используемые для характеристики сигналов. Энергия, 4-я степень, нелинейная энергия и длина кривой

введите описание изображения здесь

Мне удалось реализовать Энергию и 4-ую Силу

for i=1:1250
energy = sum(a.^2,i);

power4th =  sum(a.^4,i);
end

Которые производят 2 массива (энергии и мощности 4-й)

Как я могу произвести другие 2 массива? давайте называть их NonLE и CL.

3 ответа

Решение

Используйте векторизацию вместо for циклы, чтобы решить все 4 формулы, которые вам нужны

% generate some random numbers
a = rand(1000,1);

Energy = sum(a.^2);
Power4 = sum(a.^4);
NLEnergy = sum(-a(3:end).*a(1:end-2) + a(2:end).^2);
CurveLength = sum(a(2:end) - a(1:end-1));

. Оператор допускает поэлементные операции в векторе.

На самом деле я думаю, что вы можете реализовать свои формулы без использования for петля. Вы можете использовать матрицу умножения характеристики. Попробуйте код ниже:

len      = 1250;
a        = randi(10, len, 1); % // You didn' t give your vector so I generated random a.. 
Energy   = ones(1, len) * (a.^2);
power4th = ones(1, len) * (a.^4);
NonLE    = ones(1, len - 2) * ( -a(3:end) .* a(1:end-2) ) +  ones(1, len - 1) * ( a(2:end).^2 );
CL       = ones(1, len - 1) * ( a(2:end) - a(1:end-1) );

Вам не нужно for петля для 3 из них:

energy = sum(a.^2);
power_4th = sum(a.^4);
curve_length = sum(diff(a));

Для последнего вы можете сделать что-то вроде:

nonLE = 0;
for k = 3 : length(a)
    nonLE = nonLE + a(k - 1)^2 - a(k) * a(k - 2);
end
Другие вопросы по тегам