首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用matlab实现这些功能。

用matlab实现这些功能。
EN

Stack Overflow用户
提问于 2014-12-12 09:29:20
回答 3查看 84关注 0票数 1

我有一系列的心电图信号1250x1双,让我们称之为"a“。我需要实现四个功能,代表特征是用来表征信号。能量、四次方、非线性能量与曲线长度

我准备实施能源与第四动力

代码语言:javascript
复制
for i=1:1250
energy = sum(a.^2,i);

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

产生两个阵列(能量和power4th)

我怎么能产生另外两个数组?让我们称他们为NonLE和CL。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-12 10:39:19

使用矢量化而不是for循环来解决所需的所有4个公式

代码语言:javascript
复制
% 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));

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

票数 2
EN

Stack Overflow用户

发布于 2014-12-12 09:57:58

实际上,我认为您可以在不使用for循环的情况下实现公式。您可以使用矩阵乘法特性。试试下面的代码:

代码语言:javascript
复制
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) );
票数 1
EN

Stack Overflow用户

发布于 2014-12-12 09:43:25

对于其中的三个,您并不需要一个for循环:

代码语言:javascript
复制
energy = sum(a.^2);
power_4th = sum(a.^4);
curve_length = sum(diff(a));

对于最后一个问题,您可以这样做:

代码语言:javascript
复制
nonLE = 0;
for k = 3 : length(a)
    nonLE = nonLE + a(k - 1)^2 - a(k) * a(k - 2);
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27440531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档