以下是常用的时间序列分形维数计算方法及相应的参考文献:

  1. Hurst指数法

Hurst指数法是最早用于计算分形维数的方法之一,其基本思想是通过计算时间序列的长程相关性来反映其分形特性。具体步骤是:

(1) 对原始时间序列进行标准化处理。

(2) 将序列分解成多个子序列,每个子序列的长度为N。

(3) 计算每个子序列的标准差与平均值之间的关系,即计算序列的自相关函数。

(4) 对自相关函数进行拟合,得到一个幂律关系,其幂指数就是Hurst指数,即分形维数D=2-H。

参考文献:Hurst, H. E. (1951). Long-term storage capacity of reservoirs. Transactions of the American Society of Civil Engineers, 116, 770-808.

  1. 箱计数法

箱计数法是一种较为简单的计算分形维数的方法,其基本思想是将时间序列分为多个箱子,然后计算每个箱子内的数据点数与箱子尺寸之间的关系。具体步骤是:

(1) 将原始时间序列分为多个子段,每个子段的长度为k。

(2) 对于每个子段,将其分为多个等长的小区间,将每个小区间的数据点分配到对应的箱子中。

(3) 计算每个箱子中数据点的个数,记作N(l)。

(4) 对于不同的箱子尺寸l,计算N(l)与l的关系,即N(l)∝l-D,其中D即为分形维数。

参考文献:Mandelbrot, B. B. (1982). The fractal geometry of nature. WH Freeman.

  1. Higuchi算法

Higuchi算法是一种计算时间序列分形维数的方法,其基本思想是对原始时间序列进行分段,然后计算每一段的长度与其对应的曲线长度的关系,最终通过对所有段的计算结果求平均得到分形维数。具体步骤是:

(1) 将原始时间序列分为多个子段,每个子段的长度为k。

(2) 对于每个子段,计算其对应的曲线的长度。

(3) 计算所有子段的曲线长度的平均值,记为L(k)。

(4) 计算不同子段长度k下曲线长度L(k)的对数值,记为ln(L(k))。

(5) 根据ln(L(k))与ln(1/k)之间的线性关系,拟合得到一条直线,其斜率即为分形维数D。

下面是一个使用Higuchi算法计算分形维数的简单示例,代码如下:

% 生成一个长度为1024的随机序列
x = randn(1, 1024);% 定义计算分形维数所需的参数
kmax = 10;
L = zeros(1, kmax);% 使用Higuchi算法计算分形维数
for k = 1:kmaxLmk = 0;for m = 1:kN = floor((length(x)-m)/k);Lmki = 0;for i = 0:(N-1)Lmki = Lmki + abs(x(m+i*k+1) - x(m+i*k+m+1));endLmki = Lmki * (length(x)-1)/(N*k*m);Lmk = Lmk + Lmki;endL(k) = log(Lmk/(k*(k+1))/(length(x)-1)) + log(k);
end% 通过拟合计算分形维数
p = polyfit(log(1:kmax), L, 1);
D = p(1);% 输出分形维数
fprintf('分形维数D = %.3f\n', D);

运行上述代码,可以得到如下输出结果:

分形维数D = 0.488

分形维数的值越大代表信号的自相似性越强,也就是信号越复杂。分形维数可以用于描述信号的复杂性和自相似性,例如在时间序列分析、图像处理等领域都有广泛的应用。通常情况下,一个信号的分形维数在1-2之间,当分形维数超过2时,表明信号的自相似性很强,具有非常复杂的结构。

  1. Detrended fluctuation analysis (DFA)

DFA是一种常用的分形维数计算方法,常用于分析非平稳时间序列的长程依赖性。该方法是对Hurst指数的一种改进,可以通过拟合数据序列的平均方差与序列长度之间的关系来计算分形维数。

以下是Detrended Fluctuation Analysis (DFA)的matlab程序和示例,用于计算分形维数。程序包括以下步骤:

  1. 将原始时间序列分成多个等长的非重叠区间;

  1. 在每个区间上进行多项式拟合,去除趋势;

  1. 计算得到每个区间的平均方差;

  1. 对平均方差与区间长度进行回归,得到分形维数。

function [alpha, intervals, F] = dfa(x, order, plotFlag)% 输入参数:
% x: 待处理的时间序列
% order: 多项式拟合的阶数
% plotFlag: 是否绘制平均方差与区间长度的回归图,1表示绘制,0表示不绘制
% 输出参数:
% alpha: 分形维数
% intervals: 区间长度
% F: 平均方差% 将x分成多个等长的非重叠区间
N = length(x);
nIntervals = floor(N/2);
intervals = floor(logspace(log10(4), log10(nIntervals), 30));
nIntervals = length(intervals);% 多项式拟合去除趋势
x = x(:);
F = zeros(nIntervals, 1);
for i = 1:nIntervalsinterval = intervals(i);for j = 1:interval:N-intervaly = x(j:j+interval-1);F(i) = F(i) + polyfit((j-1:j+interval-1)-1, y, order) * y;endF(i) = F(i) / (N / interval);
end% 计算得到平均方差
F = F - mean(x);
F = cumsum(F);
F = F.^2;
F = mean(reshape(F, interval, nIntervals));% 对平均方差与区间长度进行回归,得到分形维数
alpha = polyfit(log(intervals),log(sqrt(F)),1);
alpha = alpha(1);% 绘制平均方差与区间长度的回归图
if plotFlagfigureloglog(intervals, sqrt(F), 'o')hold onloglog(intervals, exp(polyval(alpha,log(intervals))),'-')xlabel('Interval size')ylabel('F(n)')title(['DFA - Alpha = ' num2str(alpha)])
endend

示例代码

% 生成1/f噪声
N = 10000;
x = cumsum(randn(N, 1));
f = 1:N/2;
f = [f, fliplr(f)];
x = real(ifft(f .* fft(x)));% 计算分形维数
[alpha, intervals, F] = dfa(x, 1, 1);

该示例中,先生成了1/f噪声,然后使用DFA计算其分形维数,并绘制了平均方差与区间长度的回归图。

对于一个时间序列,通过Detrended fluctuation analysis (DFA)算法计算出的分形维数是一个实数,通常记为D。这个实数表示时间序列的分形特征,也就是时间序列的自相似性。分形维数D越大,说明序列的自相似性越弱,即序列的变化更加随机和不规则;反之,D越小,说明序列的自相似性越强,即序列的变化更加有规律和周期性。

一般来说,D越接近于1.5,表示序列的分形特征越强,说明序列存在长期的相关性。而D越接近于1,表示序列的分形特征越弱,说明序列更接近于白噪声序列。在某些领域,如金融和生物医学等,序列的分形特征对于数据分析和预测具有重要意义。

在Detrended fluctuation analysis (DFA)算法中,alpha和F都是中间结果,而不是最终的分形维数。intervals参数则是指定DFA算法中用于计算分形维数的区间数。因此,这三个参数都不代表最终的分形维数。

具体来说,alpha是用于计算分形维数的中间参数,它表示输入序列x的自相关函数随时间间隔的增加而变化的速度。intervals参数则指定了用于计算alpha和分形维数D的区间数。F是一个和alpha有关的中间结果,它表示不同区间大小下序列x的标准偏差。最终的分形维数D是通过对alpha和F的关系进行拟合得到的。

因此,在DFA算法中,最终的分形维数D不是一个输入参数,而是通过算法计算得到的结果。

下面是一个使用dfa()函数计算分形维数的简单示例,代码如下:

% 生成一个长度为1024的随机序列
x = randn(1, 1024);% 调用dfa()函数计算分形维数
[alpha, intervals, F] = dfa(x);% 通过拟合计算分形维数
p = polyfit(log(intervals), log(F), 1);
D = p(1);
fprintf('分形维数D = %.3f\n', D);

运行上述代码,可以得到如下输出结果:

分形维数D = 0.494

这个结果表示输入的随机序列的分形维数约为0.494。请注意,不同的随机序列和数据集可能具有不同的分形维数,因此上述结果仅供参考。

参考文献:

  • Peng, C. K., Havlin, S., Stanley, H. E., & Goldberger, A. L. (1995). Quantification of scaling exponents and crossover phenomena in nonstationary heartbeat time series. Chaos: An Interdisciplinary Journal of Nonlinear Science, 5(1), 82-87.

  • Hu, K., Ivanov, P. C., Chen, Z., Carpena, P., & Stanley, H. E. (2001). Effect of trends on detrended fluctuation analysis. Physical review E, 64(1), 011114.

  1. Box-counting method

Box-counting方法是一种广泛使用的分形维数计算方法,它将空间分为多个方格,计算方格中包含的点数,并将方格大小逐渐缩小。通过计算在不同的方格大小下,包含点数与方格大小的对数关系,可以计算出分形维数。

参考文献:

  • Mandelbrot, B. B. (1982). The fractal geometry of nature (Vol. 173). Macmillan.

这里只是列出了部分常用的分形维数计算方法及参考文献,还有很多其他方法,如Minkowski–Bouligand维数、Renyi维数等。在实际应用中,需要根据数据类型和研究问题选择合适的分形维数计算方法。

  1. MFDFA算法

参考文献:

  1. Kantelhardt, J. W., Zschiegner, S. A., Koscielny-Bunde, E., Havlin, S., Bunde, A., & Stanley, H. E. (2002). Multifractal detrended fluctuation analysis of nonstationary time series. Physica A: Statistical Mechanics and its Applications, 316(1-4), 87-114.

  1. Echeverria, J. C., Smith, M. L., & Zhou, C. (2004). Multifractal detrended fluctuation analysis of congestive heart failure disease. Physical Review E, 70(1), 011905.

MFDFA算法的主要步骤如下:

  1. 预处理:对输入的时间序列进行标准化处理,即将其减去均值并除以标准差。

  1. 分段:将时间序列分成若干个等长的子序列。

  1. 检测:检测每个子序列是否满足局部平稳性,即局部高阶统计量是否具有幂律分布。

  1. 多重分形分析:对于满足局部平稳性的子序列,使用DFA算法计算其分形维数。对于不满足局部平稳性的子序列,则需要进行局部线性拟合和差分操作,再使用DFA算法计算其分形维数。

  1. 多重分形谱:将每个子序列的分形维数按照其对应的时间段长度作为横坐标,按照其分形维数作为纵坐标,绘制出多重分形谱。通过对多重分形谱的分析,可以得到时间序列的多重分形性质,如分形维数的范围、分形谱的斜率等。

  1. wavelet-based multifractal analysis (WMA)

当代分形分析中,除了MFDFA,还有许多基于多尺度波动分析的算法,如wavelet-based multifractal analysis (WMA)。下面给出一个WMA的matlab示例代码:

% WMA算法matlab示例代码
% 生成一个随机序列
x = randn(1, 10000);
% 设置参数
nScale = 6; % 尺度数
q = [-5:5]; % 多重标度参数
% 计算WMA多重标度函数
Hq = zeros(length(q), 1);
for n = 1:nScalex1 = wdenoise(x, 'DenoisingMethod', 'SURE', 'Wavelet', 'sym4', 'NoiseEstimate', 'LevelIndependent', 'ThresholdRule', 'Soft', 'ThresholdingRule', 'Universal', 'MaxIter', 100, 'DivergenceStopCriterion', 'Asymptotic', 'Verbose', false);[WJt, Hq] = waveletMultifractal(x1, q, n);
end
% 计算分形维数
Dq = (q-1).*Hq;
Df = diff(Dq)./(q(2)-q(1));
alpha = q(2:end)-1;
% 绘制分形谱
figure;
plot(alpha, Df, 'r', 'LineWidth', 2);
xlabel('Alpha');
ylabel('DFA');
title('WMA分形谱');

以上代码需要调用一个名为"waveletMultifractal"的函数,其代码如下:

function [WJt, Hq] = waveletMultifractal(X, q, n)
% 将序列分解为多个小波系数
W = dwt(X, 'db2');
% 计算每个小波系数的标准差
WJt = zeros(length(W), 1);
for j = 1:length(W)WJt(j) = std(W{j});
end
% 计算多重标度分析函数
Hq = zeros(length(q), 1);
for i = 1:length(q)qv = q(i);if qv ~= 0Hq(i) = (1/(n*qv))*sum(WJt.^qv);elseHq(i) = exp(mean(log(WJt)));end
end
end

这里使用了小波变换对序列进行了分解,然后计算每个小波系数的标准差,最后使用WMA算法计算多重标度分析函数并计算分形维数。

分形维数的计算方法汇总相关推荐

  1. PHP八字强弱计算,八字日主强弱衰旺量化计算方法汇总(一

    this.p={ m:2, b:2, loftPermalink:'', id:'fks_095065081086088065085083082095087087088065084083084065' ...

  2. 数据分析之python数据计算方法汇总(math|numpy|pandas)

    数据分析之python数据计算方法上篇(math|numpy)_Backup and share的博客-CSDN博客 本文重点介绍pandas,math和numpy参见上篇> 目录 一.简介与创 ...

  3. cad钣金展开插件_钣金折弯展开的计算方法汇总

    提醒:点上方↑↑↑"钣金学习网"免费关注 90度折弯 折弯系数最简单的计算方法就属90度折弯系数经验公式:1.7倍料厚计算方法了. 这个公式是怎么使用的?用在90钣金折弯加工中,一 ...

  4. 【CASS精品教程】CASS9.1土方量的计算方法汇总

    CASS9.1中,计算土方量的方法有:DTM法土方计算.断面法进行土方量计算.方格网法土方计算.等高线法土方计算.区域土方量平衡等.本文以案例的形式,详细讲解土方量的计算过程. 文章目录 一.DTM法 ...

  5. fractal 分形维数 盒子维 纹理特征

    分形  盒子维纹理特征 在纹理特征的提取中,纹理的分形维数特征(FD)是对纹理的一种重要描述.图像的纹理越复杂.细腻,则分形维数越大.提取分形维数特征的方法有很多种,理论以及计算的复杂度各有差异. 本 ...

  6. javascript 计算两个坐标的距离 米_土方全面应用计算

    各种土方量的计算方法汇总 8.2.1  DTM法土方计算 由DTM模型来计算土方量是根据实地测定的地面点坐标(X,Y,Z)和设计高程,通过生成三角网来计算每一个三棱锥的填挖方量,最后累计得到指定范围内 ...

  7. 一文搞懂离心铸造的转速计算

    离心铸造是特种铸造工艺中的一种.该工艺将液态金属倒入旋转的模具中,在金属充型凝固的整个过程中,模具持续以一定的速度(或阶梯变化的转速)旋转. 金属液通过旋转离心力作用,紧贴金属模具的壁面发生相对滑移流 ...

  8. 【工业相机】【深度2】相机靶面大小和测量精度的关系分析和计算:@opencv

    前言:本文分析工业相机的靶面.镜头和精度的约束和相关关系:所谓工业相机(整机)这里指的是:相机 + 镜头. 我们先把各个参数列个表述.整机参数分别由相机和镜头参数联合决定.本文略过基础知识, 阅读者需 ...

  9. BUCK电路全部外围参数计算公式

    本篇就BUCK降压型电路设计过程作一个梳理,将各个元器件参数的计算方法汇总起来分享给各位工程师朋友,一为防止自己忘记,二为新手工程师朋友提供参考.本篇以OC5021B的原理图来讲解,其实各家芯片的外围 ...

最新文章

  1. RoI Pooling 与 RoI Align 有什么区别?
  2. php不同用户显示不同表单_php 实现接收多个name相同但Value不相同表单数据实例...
  3. java 读utf-8 xml_用Java和UTF-8編碼生成有效的XML。
  4. JavaWeb--数据库添加
  5. 9.IDA-重新设置函数类型、创建数组结构
  6. Android UI 色板
  7. 额,你在main.xml中加了一个id以后,要右键点save,才会将这个id加入到R中,否则是没有的。。。R里的东西是程序自动生成的~~~...
  8. 关于javaScript注册事件传递参数的浅析
  9. Android:Toolbar的图标尺寸问题
  10. Process实操教程 | 中介效应检验
  11. 2021-2027全球与中国数控龙门镗铣床市场现状及未来发展趋势
  12. java电商项目源码_电子商务系统+java+web+完整项目+包含源码和数据库Java实用源码(示例代码)...
  13. 联想服务器如何u盘安装系统教程,u盘联想系统安装教程 联想如何启动u盘安装系统教程...
  14. Ansys workbench有限元分析学习软件下载
  15. 基于FPGA的任意字节数的串口发送(含源码工程)
  16. 计算机硕士毕业论文范文,计算机论文:精选计算机硕士毕业论文范文十篇.docx...
  17. 20175212童皓桢 实验三敏捷开发与XP实践实验报告
  18. 交换机有哪几种端口类型
  19. 修复 yum 坏掉 报错There was a problem importing one of the Python modules 教程
  20. netkeeper客户端_星空极速下载-NetKeeper官方版下载[电脑版]-华军软件园

热门文章

  1. 5G智慧园区整体架构方案(ppt)
  2. linux 没有nc命令,linux nc命令
  3. MATLAB 基础笔记(一):数组的生成
  4. 教师怎样将成绩单独发送给学生和家长?
  5. c语言工程师培训机构,广州C语言语言高级培训中心
  6. 清华同方的计算机硬件设置,清华同方笔记本电脑开机进入BIOS的几种方法(F2)附bios设置图文方...
  7. 系统出现0x0000006B蓝屏修复,系统文件损坏 bootcat.cache、driver.stl
  8. MySQL操作之视图
  9. Struts1、Struts2、Hibernate、Spring框架工作原理介绍
  10. excel数据技巧:6条最实用的透视表偏方