使用matlab实现这些功能

时间:2014-12-12 09:29:20

标签: matlab signal-processing bioinformatics biometrics

我有一系列ECG信号样本1250x1 double让我们称之为" a"。 我需要实现4个函数,这些函数表示用于表征信号的特征。能量,四次幂,非线性能量和曲线长度

enter image description here

我管理实施能源和第四力量

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

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

哪个产生2个阵列(能量和功率4)

我如何制作另外2个阵列?让我们称他们为NonLE和CL。

3 个答案:

答案 0 :(得分:2)

使用矢量化代替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));

.运算符允许在向量中逐个元素操作。

答案 1 :(得分: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) );

答案 2 :(得分:0)

对于其中3个,你真的不需要for循环:

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