我刚开始玩Matlab,我想获得移动窗口的熵值。
我有一个1432x1的时间系列,我想获得移动窗口长度= N的熵值,所以如果N = 40,我应该获得ts的第一个熵值(1:40),然后是ts( 2:41)等等到最新的ts点。
输出应为1392x1数组(N点比输入时间系列短)。
我对任何不同的熵方法感兴趣。
编辑我试过在Matlab中心找到这个例子,但它不起作用
function [vectorout]=entropy_moving(vectorin,eFave)
l_vectorin=length(vectorin);
l_half_interval=eFave;
ifor1=1;
for ifor1=1:l_vectorin
if ifor1>l_half_interval&&ifor1<(l_vectorin-l_half_interval)
vectorout(ifor1)=shannon_entro(vectorin(ifor1-l_half_interval:ifor1+l_half_interval));
elseif ifor1>=(l_vectorin-l_half_interval)
vectorout(ifor1)=shannon_entro(vectorin(ifor1:l_vectorin));
end
end
我使用过shannon_entro而不是wentropy。任何帮助真的很感激。
由于在Matlab中心没有得到答案,PS也发布在这里。更新:为了更好地解释我应该得到什么,我创建了5个不同的40点长度系列,并为每个系列计算了熵。
结果显示在这里
for循环应返回一个数组861x1,其前5个值必须为out1_40,out2_41,out3_42,依此类推。
我已经在这里上传
我用过的所有txt文件。感谢
答案 0 :(得分:0)
我看不出你发布的代码有什么问题是相当麻烦的。以下是使用wentropy
:
vectorout = zeros(numel(vectorin),1)
for e = 1:numel(vectorin)
vectorout(e) = wentropy(vectorin(e:min(e+eFave-1, end)), 'shannon');
end
只要您使用wentropy
或shannon_entro
是正确的,这就可以了(并且与您发布的代码完全相同)。如果您的代码不起作用,我会怀疑问题出在您的shannon-entro
函数