分形维数 matlab
一维曲线分形维数的 matlab 程序
function D=FractalDim(y,cellma_)
%求输入一维信号的计盒分形维数 %y 是一维信号
?llma_:方格子的最大边长,可以取 2 的偶数次幂次(1,2,4,8...),取大于数据长
度的偶数 %D 是 y 的计盒维数(一般情况下 D>=1),D=lim(log(N(e))/log(k/e)),
if cellma_error(‘cellma_ must be larger than input signal!’) end
L=length(y);%输入样点的个数 y_min=min(y);
%移位操作,将 y_min 移到坐标 0 点 y_shift=y-y_min;
%重采样,使总点数等于 cellma_+1 __ord=[0:L-1]./(L-1);
___ord=[0:cellma_]./(cellma_);
y_interp=interp1(__ord,y_shift,___ord); %按比例缩放 y,使最大值为 2^c y
数累积 N(e) begin=cellsize_(j-1)+1;%每一段的起始 tail=cellsize_j+1;
seg=[begin:tail];%段坐标 yy_ma_=ma_(yy(seg)); yy_min=min(yy(seg));
up=ceil(yy_ma_/cellsize); down=floor(yy_min/cellsize);
Ns=up-down;% 本段曲线占有的格子数 Ne=Ne+Ns;%累加每一段覆盖曲线的格子
数
end
N(e)=Ne;%记录每 e 下的 N(e) end
%对 log(N(e))和 log(k/e)进行最小二乘的一次曲线拟合,斜率就是 D
r=-diff(log2(N));%去掉 r 超过 2 和小于 1 的野点数据 id=find(r=1);%保留的
数据点 Ne=N(id);
e=NumSeg(id);
P=polyfit(log2(e),log2(Ne),1);%一次曲线拟合返回斜率和截距 D=P(1);