stealheartboy
2007-04-18, 21:19
我的毕业设计是求一维曲线(地震道记录数据)分形维数,我自各写了一个结果啥都算不出来呵呵。。。。我以前从没用过呢。。牛人们帮我改改错吧!!
以下是程序:
%求输入一维信号的计盒分形维数
%y是一维信号,1024个数据
%cellmax=128是每一个工作窗的数据个数
%D是y的计盒维数(一般情况下D>=1),D=lim(log(N(e))/log(k/e)),
cellmax=128;
L=length(y);%输入样点的个数
yyy=abs(y)*10000; %因为原始数据都是小数点后好几位的。。
M=L-cellmax+1; %总工作窗口的个数,每个窗口都计算各自的分形维数,最后将其组成一个数组,我要找的就是分形维数突变的那个点所在的窗口
for m=1:M
tseg=[m:cellmax+m-1];
y_f=yyy(tseg);
t=log2(cellmax)+1;%叠代次数
for e=1:t
Ne=0;%累积覆盖信号的格子的总数
cellsize=2^(e-1);%每次的格子大小
NumSeg(e)=cellmax/cellsize;%横轴划分成的段数
for j=1:NumSeg(e) %由横轴第一个段起通过计算纵轴跨越的格子数累积N(e)
begin=cellsize*(j-1)+1;%每一段的起始
tail=cellsize*j;
seg=[begin:tail];%段坐标
yy_max=max(y_f(seg));
yy_min=min(y_f(seg));
up=ceil(yy_max/cellsize);
down=floor(yy_min/cellsize);
Ns=up-down;% 本段曲线占有的格子数
Ne=Ne+Ns;%累加每一段覆盖曲线的格子数
end
N(e)=Ne;%记录每e下的N(e)
end
P=polyfit(log(NumSeg),log(N),1);%一次曲线拟合返回斜率和截距
D=P(1);
D(m)=D;
end
%结果就是除了开头结尾两个点有数据,其他点都是0。。。。如果想要我的y的数据请留个言我发你邮箱好吗谢谢!!
以下是程序:
%求输入一维信号的计盒分形维数
%y是一维信号,1024个数据
%cellmax=128是每一个工作窗的数据个数
%D是y的计盒维数(一般情况下D>=1),D=lim(log(N(e))/log(k/e)),
cellmax=128;
L=length(y);%输入样点的个数
yyy=abs(y)*10000; %因为原始数据都是小数点后好几位的。。
M=L-cellmax+1; %总工作窗口的个数,每个窗口都计算各自的分形维数,最后将其组成一个数组,我要找的就是分形维数突变的那个点所在的窗口
for m=1:M
tseg=[m:cellmax+m-1];
y_f=yyy(tseg);
t=log2(cellmax)+1;%叠代次数
for e=1:t
Ne=0;%累积覆盖信号的格子的总数
cellsize=2^(e-1);%每次的格子大小
NumSeg(e)=cellmax/cellsize;%横轴划分成的段数
for j=1:NumSeg(e) %由横轴第一个段起通过计算纵轴跨越的格子数累积N(e)
begin=cellsize*(j-1)+1;%每一段的起始
tail=cellsize*j;
seg=[begin:tail];%段坐标
yy_max=max(y_f(seg));
yy_min=min(y_f(seg));
up=ceil(yy_max/cellsize);
down=floor(yy_min/cellsize);
Ns=up-down;% 本段曲线占有的格子数
Ne=Ne+Ns;%累加每一段覆盖曲线的格子数
end
N(e)=Ne;%记录每e下的N(e)
end
P=polyfit(log(NumSeg),log(N),1);%一次曲线拟合返回斜率和截距
D=P(1);
D(m)=D;
end
%结果就是除了开头结尾两个点有数据,其他点都是0。。。。如果想要我的y的数据请留个言我发你邮箱好吗谢谢!!