本文章介绍如何在MATLAB环境下实现Lempel-Ziv算法来计算数据序列的信息熵,适用于数据压缩与信息安全研究。
随着对非线性方法研究的深入,人们发现虽然关联维度和最大李雅普诺夫指数在分析脑电数据方面有一定的帮助,但它们过于依赖于原始数据,并且对干扰和噪声非常敏感。为了获得可靠的结果需要大量的数据输入,这对于高度不稳定的脑电信号来说是一个很大的限制因素。因此科研人员迫切希望找到一种能够使用较少的数据量并且具有一定抗干扰能力的方法,在这种背景下LZ复杂度算法应运而生。
LZ复杂度是一种衡量时间序列中出现新模式速率的指标。该方法最早由Lempel和Ziv提出,故命名为Lempel-Ziv复杂度;直到1987年Kaspar 和Schuster才提出了其实现方式的具体计算机程序设计思路。
具体来说, 对于一个待求字符串S(S1,S2,…,Sn)以及另一个字符串Q(q1,q2,…,qn),SQ表示将这两个序列连接起来形成的新的字符串。令SQv是去掉最后一个字符后的结果。接下来判断Q是否为SQv的子串:如果它是的话,则说明Q中的元素可以由S复制而来;此时在待求序列中添加下一个字符到Q上继续进行比较操作。
若Q不是SQv的一个子串,表示当前的字符串组合形成了一个新的模式,这时将整个新形成的字符串(Q)连接至旧的数据集(S),完成一轮迭代后重新开始新一轮的操作直至处理完所有数据。每当新的模式被发现并加入S中时,计数器c增加一次;例如对于序列 S=(10101010), 通过上述过程可以得出 c(8)=3个新模式:分别是1, 0, 和 10.