2014-11-13 4 views
1

Я только начал играть с 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. Любая помощь действительно ценится.

PS размещен здесь также, так как не получил ответа в центральном центре Матлаба.

Обновление: Чтобы лучше объяснить, что я должен получить, я создал 5 различных 40-точечных серий и вычислил для каждой из них разогрев.

Результат показан здесь

enter image description here

для цикла должна возвращать массив 861x1, чьи первые 5 значений должны быть out1_40, out2_41, out3_42 и так далее.

Я uploded здесь

Full serie

1_40

2_41

3_42

4_43

5_44

Все файлы txt, которые я использовал. Спасибо

+1

Как вы вычисляете энтропию? – NKN

+0

Существуют различные способы расчета энтропии: одна из них - функция e = goropy (ts, 'shannon'), которая возвращает значение для ts, переданного как параметр, в противном случае существуют различные методы, доступные в центральном обмене Matlab. –

+0

@Albertoacepsut вы пробовали простой цикл 'for'? – Dan

ответ

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

Смежные вопросы